硬件设计要点:参考电压、模拟通道与抗混叠滤波器
ADC 性能好不好,一半看布局布线。这话不是我说的,是吃过亏之后才懂的。当年我调试一块四层板,软件怎么折腾都只有 10 位有效精度,最后发现是参考电压引脚上有个 100nF 电容离得太远。嗯,从那以后,我画板子第一件事就是先伺候好 ADC 的电源和参考。
参考电压选择:精度从这里开始
STM32 的 ADC 参考电压有两种来源:内部 VREF 和外部 VREF+。别小看这个选择,它直接决定了你的测量天花板。
| 参考源 | 典型精度 | 温漂 | 适用场景 |
|---|---|---|---|
| 内部 VREF(VDDA) | ±2% ~ ±5% | 大 | 对精度要求不高的通用采样 |
| 外部 VREF+(专用引脚) | ±0.1% ~ ±0.5% | 小 | 精密测量、传感器采集 |
| 内部 VREFINT(校准用) | ±1% | 中等 | 仅用于校准补偿,不能直接做参考 |
我的经验法则:如果 ADC 分辨率用到 12 位,且要求有效位数(ENOB)≥ 10 位,必须上外部参考。别指望 VDDA 能扛住,电源纹波和负载变化会让你怀疑人生。
外部参考芯片怎么选?我个人习惯用 REF3030(3.0V)或 REF5050(5.0V),温漂 3~5 ppm/°C,够用又不贵。布局时注意:
- 参考输出到 VREF+ 引脚走线尽量短,线宽 ≥ 10 mil
- 在 VREF+ 引脚旁边放 10µF + 100nF 去耦电容
- 参考芯片的 GND 和 ADC 的 AGND 单点连接,别串到数字地回路里
注意:STM32 的 VREF+ 输入阻抗不是无穷大。采样率越高,瞬间抽取电流越大。如果参考源驱动能力不足,采样值会抖动。我曾经用普通三端稳压器当参考,结果 1MSPS 下跳动超过 5 个 LSB——换 REF 芯片后立刻降到 1 LSB 以内。
模拟输入通道布局:别让噪声搭便车
模拟信号最怕两件事:串扰和共模噪声。你想想看,一个 3.3V 系统里,1 LSB 对应 0.8 mV(12 位)。随便一个数字信号跳变,都能通过寄生电容耦合进来。
布局时我遵循三条铁律:
- 模拟区与数字区物理隔离。在 PCB 上划一条清晰的“楚河汉界”,模拟信号和数字信号不要交叉走线。
- 输入走线短而直。ADC 输入引脚到传感器输出引脚的距离尽量控制在 20 mm 以内。实在绕不开,用包地线保护。
- 每个模拟输入通道加 RC 滤波。这不光是为了抗混叠,也是为了防止外部静电或浪涌直接打坏 ADC 引脚。
小技巧:如果有多路模拟输入,把高频通道和低频通道分开布局。比如音频信号和温度传感器不要挨着走,否则温度通道的缓慢变化会被音频的开关噪声调制,出现奇怪的周期性偏差。
下面这张图是我常用的单通道模拟输入布局结构:
抗混叠滤波器设计:别让高频信号“伪装”成低频
混叠是什么?说白了就是采样率不够,高频信号折叠到低频段,变成假数据。你明明采的是 50 Hz 工频,结果因为混叠,波形上多了一个莫名其妙的 300 Hz 分量——查半天发现是开关电源的噪声。
根据奈奎斯特定理,采样率必须 ≥ 2 倍信号最高频率。但实际工程中,我一般留 3~5 倍余量。比如信号最高 1 kHz,采样率设 5 kHz 以上,然后在前端加一阶 RC 低通滤波。
核心公式:截止频率 fc = 1 / (2πRC)。选择 R 和 C 时注意:R 不能太大,否则会与 ADC 采样电容形成分压,导致增益误差。一般 R 取 100Ω ~ 10kΩ,C 取 1nF ~ 100nF。
不同场景的滤波器推荐参数:
| 应用场景 | 信号带宽 | 采样率 | 推荐 RC | 截止频率 |
|---|---|---|---|---|
| 温度传感器(NTC/PT100) | DC ~ 10 Hz | 100 Hz | 10kΩ + 1µF | 16 Hz |
| 音频信号 | 20 Hz ~ 20 kHz | 96 kHz | 1kΩ + 10nF | 16 kHz |
| 电机电流采样 | DC ~ 1 kHz | 10 kHz | 1kΩ + 100nF | 1.6 kHz |
| 高速数据采集 | DC ~ 100 kHz | 1 MHz | 100Ω + 1nF | 1.6 MHz |
避坑指南:我曾经在一个电机驱动项目里,为了省成本,把 RC 滤波的电阻从 1kΩ 换成了 10kΩ。结果 ADC 采样值偏小 5%,查了两天才发现——电阻太大,采样电容充电时间不够,每次转换都没充到最终值。换成 1kΩ 后问题消失。记住:RC 的时间常数必须远小于 ADC 采样时间。
最后说一句:抗混叠滤波器不是万能的。如果信号本身信噪比就很差,滤波只能改善,不能根治。先保证模拟前端干净,再谈滤波算法。硬件上的每一分投入,都会在软件调试时加倍回报。