共计 1303 个字符,预计需要花费 4 分钟才能阅读完成。
在物联网设备开发中,ADC(模数转换器)就像系统的 ” 感官神经 ”,负责将现实世界的模拟信号转换为数字信号。但很多开发者都遇到过这样的困扰:明明使用 12 位 ADC,实际有效位数却只有 10 位;传感器数据总是莫名其妙跳变;低电平信号采样时出现阶梯状波动。这些问题的根源,往往在于对 ADC 量化原理理解不足或硬件设计存在缺陷。
一、两种主流 ADC 的原理对比
- SAR ADC 工作原理
- 采用二进制搜索算法,通过 DAC 逐次逼近输入电压
- 转换时间固定,适合中高速场景(STM32F4 系列典型值 1Msps)
-
量化噪声均匀分布在 Nyquist 带宽内
-
Σ-Δ ADC 核心优势
- 通过过采样和噪声整形将噪声推向高频段
- 典型信噪比 (SNR) 公式:$SNR = 6.02N + 1.76 + 10log_{10}(OSR)$
-
实测数据显示:ADS1256(24 位 Σ -Δ)在 10SPS 时 ENOB 可达 21 位
-
精度实测对比(室温 25℃)
| ADC 类型 | 标称位数 | ENOB(100Hz 输入)| INL(±LSB) |
|—————|———|——————|———–|
| STM32F103 SAR | 12-bit | 10.3-bit | 1.5 |
| ADS1115 Σ-Δ | 16-bit | 15.1-bit | 0.5 |
二、STM32 实战配置
以下是使用 CubeMX 配置 ADC 过采样的关键代码(基于 STM32H743):
// 启用硬件过采样(16x)hadc1.Instance = ADC1;
hadc1.Init.OversamplingMode = ENABLE;
hadc1.Init.Oversampling.Ratio = 16;
hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
// 校准流程(必须执行)HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);

示波器捕捉的实际量化效果:(左)无过采样(右)16 倍过采样
三、硬件设计避坑指南
- PCB 布局黄金法则
- 模拟地 (AGND) 与数字地 (DGND) 单点连接
- ADC 电源引脚添加 10μF+0.1μF MLCC 组合
-
敏感信号走线远离时钟线和 PWM 信号
-
纹波消除方案
[Vin]--[10Ω]--[LC 滤波]--[ADC] ▲ ▲ 100μF 0.1μF -
动态校准策略
- 上电时测量内部基准电压
- 周期性读取 VREFINT 通道(STM32 特有)
- 温度每变化 5℃重新校准一次
四、开放性问题探讨
在 NB-IoT 等低功耗场景中,当系统需要 1 分钟唤醒一次采集数据时,你会选择:
A) 使用 SAR ADC 快速采样后立即休眠
B) 采用 Σ -Δ ADC 低速高精度模式
C) 动态调整采样率(如信号变化快时提高采样率)
欢迎在评论区分享你在实际项目中遇到的 ADC 优化案例,特别是那些 ” 教科书上没写 ” 的实战经验。比如如何用 12 位 ADC 实现 14 位有效精度的技巧,或者处理高频干扰的特殊滤波方案。
