目录
一、初识DAC
1. 介绍
2. DAC主要特性
3. DAC的特性参数
二、相关寄存器
1. 控制寄存器(DAC_CR)
2. DAC通道1 的12位右对齐数据保持寄存器(DAC_DHR12R1)
3. 通道1数据输出寄存器(DAC_DOR1)
三、DAC结构
1. DAC框图
2. DAC数据格式
(1)单DAC通道
(2)双DAC通道
3. 触发源
4. DMA请求
5. DAC输出电压
四、DAC配置步骤
五、输出三角波理解
六、配置正弦波
一、初识DAC
1. 介绍
DAC(Digital-to-Analog Converter,指数字/模拟转换器)可以配置为8位或12位模式,也可以与DMA控制器配合使用。
ADC 与 DAC是模拟电路与数字电路之间的桥梁。
2. DAC主要特性
补:
(1)12位 模式下数据左对齐或者右对齐。
(2)双 DAC通道 同时或者分别转换。
(3)外部触发 转换。
(4)同步更新功能。
(5)噪声波形 生成。
(6)三角波形 生成。
3. DAC的特性参数
(1)分辨率:表示模拟电压的最小增量,常用二进制位数表示,如:8、12位等。
(2)建立时间:表示将一个数字量转换为稳定模拟信号所需的时间。
(3)精度:转换器实际特性曲线与理想特性曲线之间的最大偏差误差源:比例系统误差、失调误差、非线性误差。
原因:元件参数误差、基准电压不稳定、运算放大器零源等。
二、相关寄存器
1. 控制寄存器(DAC_CR)
位12( DMAEN1):DAC通道1 DMA使能。
位5:3( TSEL1[ 2:0 ] ):DAC通道1 触发选择。
位2( TEN1):DAC通道1 触发使能。( 由软件 设置和清除,用来使能/关闭DAC通道1的触发)
位1( BOFF1):关闭DAC通道1 输出缓存。( 可减少阻抗,使输出能力会强一些,但无法输出 0 )
位0( EN1):DAC通道1 使能。
2. DAC通道1 的12位右对齐数据保持寄存器(DAC_DHR12R1)
3. 通道1数据输出寄存器(DAC_DOR1)
三、DAC结构
1. DAC框图
2. DAC数据格式
不能直接对寄存器 DORx写入数据,任何输出到 DAC通道 x 的数据都必须写入 DHRx寄存器( 数据实际写入 DHR8Rx、DHR12Lx、DHR12Rx、 DHR8RD、DHR12LD、DHR12RD寄存器 )
(1)单DAC通道
① 8位模式:只能右对齐。用户须将数据写入寄存器 DHR8Rx位。
② 12位模式:
1)右对齐。用户须将数据写入寄存器DHR12Rx位。(常用)
2)左对齐。用户须将数据写入 寄存器DHR12Lx位。
(2)双DAC通道
① 8位模式:只能右对齐。用户须将数据写入寄存器 DHR8RD位。
② 12位模式:
1)右对齐。用户须将数据写入寄存器 DHR12RD位。
2)左对齐。用户须将数据写入寄存器 DHR12LD位。
3. 触发源
有三种触发转换的方式:自动触发、软件触发、外部事件触发
(1)禁止触发 ( 即自动触发 ):寄存器DAC_CR1的TENx位置0。经过1个APB1时钟周期,DHRx ⇨ DORx
(2)使能触发:寄存器DAC_CR1的 TENx 位 置1。
① 外部事件触发:TSELx[2:0] ≠ 111。经过3个APB1时钟周期,DHRx ⇨ DORx
② 软件触发:TSELx[2.0] = 111。 经过1个APB1时钟周期,DHRx ⇨ DORx
每次 DAC接口 侦测到来自 选中的定时器 TRGO 输出,或者 外部中断线 9 的上升沿,最近存放在 寄存器DHRx 中的数据会被传送到 寄存器DORx 中。如果选择 软件触发,一旦SWTRIG位 置1,转换即开始。在数据从 DHRx寄存器 传送到 DORx寄存器 后,SWTRIG位 由硬件自动清 0。
一旦数据从 DHRx寄存器 装入 DORx寄存器 ,在 经过时间 tSETTLING之后 ,输出即有效,这段时间的长短依 电源电压和模拟输出负载 的不同会有所变化。
4. DMA请求
任—DAC通道都具有DMA功能。2个DMA通道可分别用于2个DAC通道的DMA请求。
如果 DMAENx位 置1,一旦有外部触发(不是软件触发)发生,则产生一个DMA请求,然后DHRx寄存器 的数据被传送到 DORx寄存器。
在双DAC模式下,如果2个通道的 DMAENx位 都为1,则会产生 2个DMA请求。如果实际只需要 一个DMA传输,则应只选择其中一个 DMAENx位 置1。这样,程序可以在只使用一个DMA请求,一个 DMA通道的情况下,处理工作在 双DAC模式的2个DAC通道。
DAC的 DMA请求不会累计,因此如果 第 2个外部触发发生在响应第 1个外部触发 之前,则不能处理第 2个DMA请求,也不会报告错误。
5. DAC输出电压
(1)12位模式,DAC输出电压计算方法:
(2)8位模式,DAC输出电压计算方法:
四、DAC配置步骤
1. 初始化DAC:HAL_DAC_Init()
2. DAC MSP初始化:HAL_DAC_Msplnit() (配置NVIC、CLOCK、GPIO等)
3. 配置DAC相应通道的相关参数:HAL_DAC_ConfigChannel()
4. 启动D/A转换:HAL_DAC_Start()
5. 设置输出数字量:HAL_DAC_SetValue()
6. 读取通道输出数字量(可选):HAL_DAC_GetValue()
五、输出三角波理解
1. 设置一个DAC最大幅值。
2. 设置定时器溢出时间。
3. 每次定时器溢出,三角波计数器就会累加1。
4. 若该值小于设定的最大幅值,就会正常输出。
5. 当该值大于等于最大幅值时就会递减。
6. 减到0之后又开始累加。
7. 周而复始,形成了三角波。
六、配置正弦波
1.初始化DMA、将DMA和ADC句柄联系起来:HAL_DMA_Init()、__HAL_LINKDMA()( 函数连接DMA和外设)
2.初始化DAC:HAL_DAC_Init()
3.DAC MSP初始化:HAL_DAC_Msplnit() ( 配置NVIC、CLOCK、GPIO等)
4.配置DAC相应通道相关参数:HAL_DAC_ConfigChannel()
5.启动DMA传输:HAL_DMA_Start()
6.配置定时器溢出频率并启动:HAL_TIM_Base_Init()、 HAL_TIM_Base_Start()
7.配置定时器触发DAC转换:HAL_TIMEx_MasterConfigSynchronization()
8.停止/启动DAC转换、DMA传输:HAL_DAC_Stop_DMA()、HAL_DAC_Start_DMA()