【STM32】HAL库-DAC

数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。DAC可以配置为8位
或12位模式,也可以与DMA控制器配合使用。

DAC框图

在这里插入图片描述

DAC引脚

在这里插入图片描述
为了避免寄生的干扰和额外的功耗,引脚PA4或者PA5在之前应当设置成模拟输入(AIN)。

使能DAC

将DAC_CR寄存器的ENx位置’1’即可打开对DAC通道x的供电。经过一段启动时间tWAKEUP,
DAC通道x即被使能。
注意: ENx位只会使能DAC通道x的模拟部分,即便该位被置’0’,DAC通道x的数字部分仍然工作。
在这里插入图片描述

使能DAC输出缓存

DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个
DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭。
在这里插入图片描述

DAC数据格式

单DAC通道x,有3种情况:

  • 8位数据右对齐:用户须将数据写入寄存器DAC_DHR8Rx[7:0]位(实际是存入寄存器
    DHRx[11:4]位)
  • 12位数据左对齐:用户须将数据写入寄存器DAC_DHR12Lx[15:4]位(实际是存入寄存器
    DHRx[11:0]位)
  • 12位数据右对齐:用户须将数据写入寄存器DAC_DHR12Rx[11:0]位(实际是存入寄存器
    DHRx[11:0]位)

DHRx是内部的数据保存寄存器x
在这里插入图片描述

双DAC通道,有3种情况:

  • 8位数据右对齐:用户须将DAC通道1数据写入寄存器DAC_DHR8RD[7:0]位(实际是存入
    寄存器DHR1[11:4]位),将DAC通道2数据写入寄存器DAC_DHR8RD[15:8]位(实际是存入
    寄存器DHR2[11:4]位)
  • 12位数据左对齐:用户须将DAC通道1数据写入寄存器DAC_DHR12LD[15:4]位(实际是存
    入寄存器DHR1[11:0]位),将DAC通道2数据写入寄存器DAC_DHR12LD[31:20]位(实际是
    存入寄存器DHR2[11:0]位)
  • 12位数据右对齐:用户须将DAC通道1数据写入寄存器DAC_DHR12RD[11:0]位(实际是存
    入寄存器DHR1[11:0]位),将DAC通道2数据写入寄存器DAC_DHR12RD[27:16]位(实际是
    存入寄存器DHR2[11:0]位)

在这里插入图片描述

DAC转换

如果没有选中硬件触发(寄存器DAC_CR1的TENx位置’0’),存入寄存器DAC_DHRx的数据会在
一个APB1时钟周期后自动传至寄存器DAC_DORx。一个APB1时钟周期,DAC_DHRx的数据自动传输到DAC_DORx中。

如果选中硬件触发(寄存器DAC_CR1的TENx位置’1’),数据传输在触发发生以后3个APB1时钟周期后完成。触发发生后,3个APB1时钟周期(如果是软件触发,则为一个APB1时钟周期),DAC_DHRx的数据自动传输到DAC_DORx中,直到下一次触发发生才会更新DAC_DORx
在这里插入图片描述

一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有
效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。

不能直接对寄存器DAC_DORx写入数据

DAC触发选择

如果TENx位被置1,DAC转换可以由某外部事件触发(定时器计数器、外部中断线)或者软件触发
在这里插入图片描述
每次DAC接口侦测到来自选中的定时器TRGO输出,或者外部中断线9的上升沿,最近存放在寄
存器DAC_DHRx中的数据会被传送到寄存器DAC_DORx中。在3个APB1时钟周期后,寄存器
DAC_DORx更新为新值

如果选择软件触发,一旦SWTRIG位置’1’,转换即开始。在数据从DAC_DHRx寄存器传送到
DAC_DORx寄存器后,SWTRIG位由硬件自动清’0’,直到下一次软件触发,DAC_DORx才会被更新

DMA请求

任一DAC通道都具有DMA功能。2个DMA通道可分别用于2个DAC通道的DMA请求。
在这里插入图片描述
如果DMAENx位置’1’,一旦有外部触发(而不是软件触发)发生,则产生一个DMA请求,然后
DAC_DHRx寄存器的数据被传送到DAC_DORx寄存器。

DAC的DMA功能应该是将SRAM中的数据搬运到DAC_DHR中。

噪声生成

可以利用线性反馈移位寄存器(Linear Feedback Shift Register LFSR)产生幅度变化的伪噪声

设置WAVE[1:0]位为’01’选择DAC噪声生成功能。寄存器LFSR的预装入值为0xAAA。按照特定
算法,在每次触发事件后3个APB1时钟周期之后更新该寄存器的值。
为了产生噪声,必须使能DAC触发,即设DAC_CR寄存器的TENx位为’1’

设置DAC_CR寄存器的MAMPx[3:0]位可以屏蔽部分或者全部LFSR的数据,这样的得到的LSFR
值与DAC_DHRx的数值相加,去掉溢出位之后即被写入DAC_DORx寄存器。

将WAVEx[1:0]位置’0’可以复位LFSR波形的生成算法。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三角波生成

可以在DC或者缓慢变化的信号上加上一个小幅度的三角波。设置WAVEx[1:0]位为’10’选择DAC
的三角波生成功能。设置DAC_CR寄存器的MAMPx[3:0]位来选择三角波的幅度。
内部的三角波计数器每次触发事件之后3个APB1时钟周期后累加1。
计数器的值与DAC_DHRx寄存器的数值相加并丢弃溢出位后写入DAC_DORx寄存器。

在传入DAC_DORx寄存器的数值小于MAMP[3:0]位定义的最大幅度时,三角波计数器逐步累加。一旦达到设置的最大幅度,则计数器开始递减,达到0后再开始累加,周而复始。

将WAVEx[1:0]位置’0’可以复位三角波的生成

MAMP[3:0]位定义的三角波的最大幅度
DAC_DHRx定义三角波的最小幅度

在这里插入图片描述
为了产生三角波,必须使能DAC触发,即设DAC_CR寄存器的TENx位为’1’。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值