1. 项目概述:DAC输出正弦波实验
第一次尝试用DAC输出正弦波时,我盯着示波器上扭曲的波形百思不得其解——为什么代码里的完美数学公式变成了这样毛刺状的曲线?这个实验看似简单,却是理解数字模拟转换核心原理的绝佳切入点。通过DAC(数字模拟转换器)生成正弦波,我们实际上是在用离散的数字量"拼凑"出连续的模拟信号,这个过程涉及采样率、量化精度、重建滤波等多个关键环节。
对于嵌入式开发者而言,掌握DAC正弦波输出是必备技能。无论是音频设备开发、工业控制信号生成,还是电力电子领域的逆变器设计,都离不开这项基础技术。本实验将以STM32的DAC模块为例,带你从原理到实践完整走通正弦波生成的每个环节,包括波形数据准备、DAC配置、输出电路设计等关键步骤,并分享我在实际调试中积累的避坑经验。
2. 核心原理与技术解析
2.1 DAC基础工作原理
DAC(Digital-to-Analog Converter)的本质是将数字代码转换为对应的模拟电压。以12位DAC为例,当参考电压为3.3V时,每个数字量对应的电压增量为3.3V/4095≈0.8mV。输出正弦波时,我们需要预先计算好正弦函数各点的数字量值,然后按时序输出给DAC。
与ADC(模数转换器)相比,DAC是逆向过程。ADC将连续模拟信号离散化,而DAC则将离散数字信号重建为模拟信号。理解这个对称性对信号处理系统设计至关重要。
2.2 正弦波生成的数学基础
理想正弦波公式为:
code复制V(t) = A*sin(2πft + φ) + Voffset
其中:
- A:振幅(0-A)
- f:频率(Hz)
- φ:相位(弧度)
- Voffset:直流偏置
在数字域实现时,我们需要:
- 确定采样点数N(一个周期内的样本数)
- 计算各点对应的数字量值:
c复制sample[i] = (uint16_t)((A*sin(2π*i/N) + Voffset)/Vref * 4095) - 设置定时器触发DAC转换的速率f_update = f*N
2.3 关键参数设计考量
采样点数N的选择:
- N越大波形越光滑,但需要更高的处理速度
- 推荐N≥32,高要求场景建议N=64或128
- 必须满足Nyquist定理:f_
