一:DAC模块知识分享:
DAC为数字/模拟转换模块,顾名思义,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。二:FSP库的配置:
这里配置的时候,需要结合FSP的图形化配置软件,对底层的驱动代码的开发,很方便
三:软件代码:
程序编写流程如下:
1:初始化IO口,P014 为DAC输出引脚
2:进入主程序编写输出不同电压的数据
3:为了方便调试,这里使用的系统延时的方式进行调节。
4:这里为了方便测试,编写正弦波的产生和不同电压输出函数程序:
3.1 DAC的初始化:
void DAC_init(void)
{
fsp_err_t err;
/* Pin configuration: Output enable DA0 as Analog. */
/* Initialize the DAC channel */
err = R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
err = R_DAC_Start(&g_dac0_ctrl);
assert(FSP_SUCCESS == err);
}3.2 生成不同电压波形:void DAC_generation(void)
{ static uint16_t value = 0 ; if(value<4096)
{
value++; if(value%512==0)//使得输出波形为阶梯状
{
err = R_DAC_Write(&g_dac0_ctrl, value);
assert(FSP_SUCCESS == err);
}
} else
value=0;
}3.3 生成正弦波形:
#define PI 3.1415926void DAC_genration_sin(void)
{ static double w = 0,dac_value = 0;
w += (PI / 30); if (w >= (2 * PI))
{
w = 0;
}
dac_value = (sin(w) + 1) / 2 * 4095;
R_DAC_Write(&g_dac0_ctrl, (uint16_t)dac_value);
R_DAC_Start(&g_dac0_ctrl);
}
我要赚赏金
