瑞萨RA系列FSP库开发实战指南之DAC简介和结构框图
第26章
DAC——输出正弦波
26.1
DAC简介
DAC为数字/模拟转换模块,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
RA6M5和RA4M2具有片上DAC外设,总共有两路DAC输出通道,每路的分辨率可配置为12位,这两个通道之间互不影响,每个通道都可以使用ELC功能可外部触发或者进行与ADC单元1的同步转换。RA2L1仅有一路DAC输出通道,分辨率也为12位。
DAC模块特性
RA6M5和RA4M2的DAC外设模块是完全一样的,没有什么区别;
而RA2L1的DAC外设模块有些许不同。
它们的DAC模块特性如下表所示:
表1:RA6M5/RA4M2/RA2L1的DAC特性

点击可查看大图
DAC的相关引脚或信号及其功能用途如下表所示:
表2:DAC相关引脚或信号及其功能
点击可查看大图
26.2
DAC的结构框图
RA6M5与RA4M2的DAC模块是一样的,而RA2L1的DAC模块结构比RA6M5和RA4M2的更加简单。因此,下面我们就来讲解它们的DAC模块框图。

点击可查看大图
RA2L1的DAC模块框图如下图所示:
点击可查看大图
以上框图中的“12-bit D/A”是核心部件,几乎所有的结构都是围绕着这个12bit的D/A转换器进行工作的。
26.2.1
DAC模块相关引脚
见图中标注①处。
26.2.1.1
电源相关引脚
RA6M5和RA4M2的DAC模块的电源引脚分为模块供电引脚和DA转换参考电源引脚;而RA2L1的DAC模块的电源引脚其实没有区分,模块供电引脚和DA转换参考电源引脚是共用相同的引脚。如下表所示。
表3:电源相关引脚

注
RA6M5和RA4M2的DAC模块VREFH/VREFL引脚其实也是ADC Unit 1的参考电源引脚。因此,RA6M5和RA4M2的DAC模块与ADC Unit 1是共用电源的。而这会造成一些问题,比如当D/A转换器启动时,DAC模块会产生浪涌电流,产生的浪涌电流会对ADC Unit 1的操作造成干扰。对此也有解决办法,也就是让D/A和A/D转换器进行同步转换。
可通过以下方法减少DAC和ADC模块之间的干扰:
• 同步D/A转换控制,使D/A转换数据的更新时间由ADC12(uint1)输入信号同步
• 通过合理的控制DAC12的启动信号来减少干扰对D/A转换精度的影响
26.2.1.2
模拟转换输出引脚
DA0和DA1,这是DAC输出通道0和输出通道1的信号,它们可以连接到实际的物理IO引脚进行DA转换后信号的输出。
下面的表格展示了RA6M5/RA4M2/RA2L1的DA输出通道与实际IO引脚可以进行的连接:
表4:DA输出通道与实际IO引脚的连接

点击可查看大图
26.2.2
12位DA转换器和输出放大器
见图中标注②处。
DA转换器为12位的分辨率。
RA6M5和RA4M2的DAC输出可以选择使用输出放大器,也可以旁路输出放大器、不使用。而RA2L1不支持输出放大器控制功能。
26.2.3
同步电路
见图中标注③处。
同步电路:同步电路由D/A A/D转换器同步使能输入信号进行控制。
同步功能是指将DA12与ADC12(Unit 1)进行同步,这样可以抑制两者之间由于共用模拟电源而带来的相互干扰。
26.2.4
总线、寄存器及控制电路
见图中标注④处。
CPU通过总线访问DAC模块的寄存器,通过相应的寄存器配置来操作控制电路,最终控制12位的DA转换器。
DAC数据寄存器:RA6M5和RA4M2的DAC模块因为有两个DA输出通道,因此有两个DAC数据寄存器(DADR0和DADR1);而RA2L1的DAC模块只有一个DA输出通道,也只有一个DAC数据寄存器(DADR0)。
DAC数据寄存器:DADRn (n=0, 1)
DADRn寄存器是16位读/写寄存器,它存储用于D/A转换的数据。当开启模拟输出时DADRn中的值被转换并输出到模拟输出引脚上。之后每当我们改变DADRn中的数值时,就可以改变输出的模拟电压。
写入的12-bit数据可以进行右对齐或左对齐设置。右对齐时16位数据寄存器的低12位有效;左对齐时16位数据寄存器的高12位有效。因而虽然DADRn数据寄存器有16位数据,但是只用到了前12位(左对齐)或后12位(右对齐),其余的位没有用到。
26.2.5
触发源
见图中标注⑤处。
我们可以设置软件来触发DAC、或者通过使用ELC 进行触发、甚至我们还可以使用外部中断进行触发。最终我们的目的是为了使得DACR.DAOEn(n=0,1)位被置1,我们可以编写相应的寄存器控制代码以至于我们可以使用不同的方式进行触发。
当设置DACR中的DAOEn位(n = 0,1)为1时,启用DAC12并输出转换结果。当设置DACR中的DAOEn 位(n = 0,1)为0时,关闭DAC输出转换。
下面是使用软件触发方式来使能DAC的代码:
左右滑动查看完整内容
/**
*@brief软件使能并输出电压
*@param输入DAC 模块
*@retval无
*/
voidtrigger_dac(dac_ctrl_t * p_api_ctrl)
{
dac_instance_ctrl_t * p_ctrl = (dac_instance_ctrl_t *) p_api_ctrl;
p_ctrl->p_reg->DACR_b.DAOE0= 1U;//使能DAC 通道一使其输出相应电压
//p_ctrl->p_reg->DACR_b.DAOE1 = 1U; //使能DAC 通道二使其输出相应电压
}
DA0和DA1通道的转换除了可以通过软件触发以外,还可以由输入事件信号触发启动。可供用户设置的触发源如下图所示:

点击可查看大图
