DAC---小爱心
DAC简介
DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC 相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。
DAC 功能框图剖析
整个 DAC 模块围绕框图下方的“数字至模拟转换器 x”展开。
- 左边引脚:VDDA、VSSA 及 Vref+,其中 STM32 的 DAC 规定了它的参考电压:math:V_{ref +} 输入范围为 2.4~3.3V。
- “数字至模拟转换器 x”:为 DAC 的数据寄存器“DORx”的数字编码,经过它转换得的模拟信号由图中右侧的“DAC_OUTx”输出
- 数据寄存器“DORx”:又受“控制逻辑”支配,它可以控制数据寄存器加入一些伪噪声信号或配置产生三角波信号。
- 左上角为 DAC 的触发源:为外部中断源触发、定时器触发或软件控制触发。
参考电压
与 ADC 外设类似,DAC 也使用 VREF+ 引脚作为参考电压,在设计原理图的时候一般把 VSSA 接地,把 VREF+ 和 VDDA 接 3.3V,可得到 DAC 的输出电压范围为:0~3.3V。
如果想让输出的电压范围变宽,可以在外部加一个电压调理电路,把 0~3.3V 的 DAC 输出抬升到特定的范围即可。
数模转换及输出通道
框图中的“数字至模拟转换器 x”是核心部件,整个 DAC 外设都围绕它而展开。它以左边的 VREF+作为参考电源,以 DAC 的数据寄存器“DORx”的数字编码作为输入,经过它转换得的模拟信号由右侧的“DAC_OUTx”通道输出。
其中各个部件中的“x”是指设备的标号,在 STM32 中具有 2 个这样的 DAC 部件,每个 DAC 有 1 个对应的输出通道连接到特定的引脚,即:PA4-通道 1,PA5-通道 2,为避免干扰,使用 DAC 功能时,DAC 通道引脚需要被配置成模拟输入功能(AIN)。
DAC初始化结构体详解
1 | typedef struct { |
DAC输出❤实验
硬件设计
STM32 的 DAC 外设有固定的输出通道,分别为PA4 和 PA5,不过,指南者开发板已经在板载SPI-FLASH 芯片中使用了这两个引脚,所以用作 DAC 通道输出电压时会受到干扰,影响实验。
PA5 引脚连接到 FLASH 芯片的 CLK 引脚中,这可能会干扰 DAC 实验输出的电压信号,导致得不到正确的波形。最好是用于输出DAC的输出线是干净的,没有其他干扰的。
编程要点
- 计算获取爱心数据表;
- 根据爱心数据表的周期内点数和周期计算定时器触发间隔;
- 初始化 DAC 输出通道,初始化 DAC 工作模式;
- 配置触发 DAC 用的定时器;
- 配置 DMA 自动转运爱心数据表。
- 配置完成后,即可在 PA4、PA5 引脚中检测到信号输出。
代码分析
生成爱心数据表
而由于模拟信号连续而数字信号是离散的,所以使用 DAC 爱心时,只能按一定时间间隔输出曲线上的点,在该时间段内输出相同的电压值,若缩短时间间隔,提高单个周期内的输出点数,可以得到逼近连续爱心波的图形,见图DAC按点输出爱心波数据 ,若在外部电路加上适当的电容滤波,可得到更完美的图形。
1 | clear; %清空工作区变量 |
值得注意的是,只需要将范围跳到0~4096即可
DAC配置
1 | static void DAC_Config(void) |
定时器2配置
1 | static void DAC_TIM_Config(void) |
DMA配置
1 | static void DAC_DMA_Config(void) |
DAC初始化
1 | void User_DAC_Init(void) |
这里有两个数组,DAC_Sin是用于DMA输出的,CH_1就是用来存放我们要输出的波形的数组的
1 | uint32_t DAC_Sin[128]; |
最终输出成果
【图片】