数模转换器又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。最常见的数模转换器是将并行二进制的数字量转换为直流电压或直流电流,它常用作过程控制计算机系统的输出通道,与执行器相连,实现对生产过程的自动控制。数模转换器电路还用在利用反馈技术的模数转换器设计中。
1.DAC功能简介
STM32F10x系列单片机,数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。
DAC主要特征如下。
①2个DAC转换器:每个转换器对应1个输出通道。
②8位或者12位单调输出。
③12位模式下数据左对齐或者右对齐。
④同步更新功能。
⑤噪声波形生成。
⑥三角波形生成。
⑦双DAC通道同时或者分别转换。
⑧每个通道都有DMA功能。
⑨外部触发转换。
⑩输入参考电压VREF+。
单个DAC通道的框图如图4.27所示。
图4.27 DAC通道原理框图
DAC引脚分配如表4.11所示。
表4.11 DAC引脚分配如表
注意事项:一旦使能DACx通道,相应的GPIO引脚(PA4或者PA5)就会自动与DAC的模拟输出相连(DAC_OUTx)。为了避免寄生的干扰和额外的功耗,引脚PA4或者PA5在之前应当设置成模拟输入(AIN)。
2.DAC功能描述
(1)使能DAC通道
将DAC_CR寄存器的ENx位置“1”即可打开对DAC通道x的供电。经过一段启动时间tWAKEUP,DAC通道x即被使能。
注意:ENx位只会使能DAC通道x的模拟部分,即便该位被置“0”,DAC通道x的数字部分仍然工作。
(2)使能DAC输出缓存
DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭。
(3)DAC输出电压
数字输入经过DAC被线性地转换为模拟电压输出,其范围为0~VREF+。任一DAC通道引脚上的输出电压满足公式
DAC输出=VREF+×(DOR/4095)。
(4)DAC数据格式
根据选择的配置模式,数据按照下面所述写入指定的寄存器。
单DAC通道x,如图4.28所示,有3种情况。
(www.daowen.com)
图4.28 单DAC通道模式的数据对齐
8位数据右对齐:用户须将数据写入寄存器DAC_DHR8Rx[7:0]位(实际是存入寄存器DHRx[11:4]位)。
12位数据左对齐:用户须将数据写入寄存器DAC_DHR12Lx[15:4]位(实际是存入寄存器DHRx[11:0]位)。
12位数据右对齐:用户须将数据写入寄存器DAC_DHR12Rx[11:0]位(实际是存入寄存器DHRx[11:0]位)。
根据对DAC_DHRyyyx寄存器的操作,经过相应的移位后,写入的数据被转存到DHRx寄存器中(DHRx是内部的数据保存寄存器x)。随后,DHRx寄存器的内容或被自动地传送到DORx寄存器,或通过软件触发,或外部事件触发,被传送到DORx寄存器。
双DAC通道,与单DAC通道略有不同,如图4.29所示,也有3种情况。
图4.20 双DAC通道模式的数据对齐
注意:对于图4.28,深灰色为DAC通道1数据,浅灰色为将DAC通道2数据。
(5)DAC转换
不能直接对寄存器DAC_DORx写入数据,任何输出到DAC通道x的数据都必须写入DAC_DHRx寄存器(数据实际写入DAC_DHR8Rx、DAC_DHR12Lx、DAC_DHR12Rx、DAC_DHR8RD、DAC_DHR12LD、或者DAC_DHR12RD寄存器)。
如果没有选中硬件触发(寄存器DAC_CR1的TENx位置“0”),存入寄存器DAC_DHRx的数据会在一个APB1时钟周期后自动传至寄存器DAC_DORx。如果选中硬件触发(寄存器DAC_CR1的TENx位置“1”),数据传输在触发发生以后3个APB1时钟周期后完成。
一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。如图4.30所示。
图4.30 ADC转换
(6)选择DAC触发
如果TENx位被置1,DAC转换可以由某外部事件触发(定时器计数器、外部中断线)。配置控制位TSELx[2:0]可以选择8个触发事件之一触发DAC转换。如表4.12所示。
表4.12 选择DAC触发事件表
每次DAC接口侦测到来自选中的定时器TRGO输出,或者外部中断线9的上升沿,最近存放在寄存器DAC_DHRx中的数据会被传送到寄存器DAC_DORx中。在3个APB1时钟周期后,寄存器DAC_DORx更新为新值。
如果选择软件触发,一旦SWTRIG位置“1”,转换即开始。在数据从DAC_DHRx寄存器传送到DAC_DORx寄存器后,SWTRIG位由硬件自动清“0”。
(7)DMA请求
任一DAC通道都具有DMA功能。2个DMA通道可分别用于2个DAC通道的DMA请求。如果DMAENx位置“1”,一旦有外部触发(而不是软件触发)发生,则产生一个DMA请求,然后DAC_DHRx寄存器的数据被传送到DAC_DORx寄存器。
在双DAC模式下,如果2个通道的DMAENx位都为“1”,则会产生2个DMA请求。如果实际只需要一个DMA传输,则应只选择其中一个DMAENx位置“1”。这样,程序可以在只使用一个DMA请求、一个DMA通道的情况下,处理工作在双DAC模式的2个DAC通道。
DAC的DMA请求不会累计,因此如果第2个外部触发发生在响应第1个外部触发之前,则不能处理第2个DMA请求,也不会报告错误。
(8)噪声生成
利用LFSR可以产生幅度变化的伪噪声。
选择DAC噪声生成功能,LFSR的预装入值为0xAAA。按照特定算法,在每次触发事件后3个APB1时钟周期之后更新该寄存器的值。
设置DAC_CR的MAMPx[3:0]位可以屏蔽部分或者全部LFSR的数据,得到的LSFR的值与DAC_DHRx的数值相加,去掉溢出位之后即被写入DAC_DORx中。
如果LFSR的值为0x000,则会注入“1”(防锁定机制)。
(9)三角波生成
在DC或者缓慢变化的信号上可以加上一个小幅度的三角波(三角波的特点是电压逐渐增大突然降到零,正好适用于扫描电路,如CRT作显示器件的扫描电路)。选择DAC的三角波生成功能,通过设置三角波的幅度,内部的三角波计数器每次触发事件之后3个APB1时钟周期后累加1。
计数器的值与DAC DHRx中的数值相加并丢弃溢出位后写入DAC DORx中。当传入DAC DORX中的数值小于最大幅度时,三角波计数器逐步累加。一且达到设置的最大幅度,计数器就开始递减;达到0后再开始累加,周而复始。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。