返回笔记列表
N-09 | ADC 模数转换器:SAR 架构、采样流程、DMA 传输与常见错误排查
2026年7月26日
ADCSAR采样保持DMASTM3212位分辨率扫描模式外部触发错误排查
12-bit SAR ADC 从采样电容充电到逐次逼近的完整转换链路,涵盖扫描模式、外部触发、DMA 环形缓冲配置,以及常见错误现象(如始终读到 300mV)的排查技巧。
ADC 是嵌入式系统连接模拟世界和数字世界的桥梁。理解 SAR ADC 的采样保持、逐次逼近原理,掌握 DMA 高效传输方式,是设计高精度数据采集系统的基础。
一、ADC 基础参数
- 分辨率:12-bit,量程 0~4095
- LSB(最低有效位) = VREF / 4096
- 当 VREF = 3.3V 时,LSB ≈ 0.806mV
- 精度:±½ LSB(理想情况下)
- 转换时间:取决于采样时间 + 逐次逼近周期(12 个时钟周期)
二、SAR ADC 内部采样流程
外部电压 → 引脚 → MUX 多路选择器 → 采样电容
│
关断 NMOS 采样开关
│
保持采样电容上的电压
│
比较器 ← SAR 逻辑设置 DAC
│
Vin 与 DAC 输出比较
│
SAR 逻辑逐位确定结果
│
12-bit 数字量输出
关键步骤说明
- 采样阶段:NMOS 开关导通,外部电压向采样电容充电至 Vin
- 保持阶段:NMOS 关断,采样电容与外部电路隔离,保持电压
- 逐次逼近:从 MSB 到 LSB,SAR 逻辑通过二分搜索确定每一位
- 输出结果:12 个时钟周期后得到最终数字量
三、主要工作模式
| 模式 | 说明 | 适用场景 | |------|------|----------| | 单次转换 | 触发一次,转换一个通道 | 低功耗间歇采样 | | 连续转换 | 自动循环转换 | 实时监控 | | 扫描模式 | 自动切换多通道依次转换 | 多通道数据采集 | | 外部触发 | 由定时器/TRGO 信号触发 | 同步采样、等间隔采集 | | DMA 传输 | 转换结果自动写入内存 | 高速连续采集 |
四、所需条件配置
- 时钟源:ADC 内核时钟(通常来自系统时钟分频)
- GPIO 模式:模拟输入(Analog),禁用上下拉
- ADC 内核参数:分辨率、对齐方式(左/右对齐)、连续/单次模式
- 通道配置:通道号、采样时间、通道顺序(扫描模式下)
- DMA 配置:传输方向(外设→内存)、数据宽度、传输模式
五、DMA 采集两种方式
方式一:采集到指定地址
- DMA 将转换结果写入指定的内存数组
- 适合固定点数采集(如采集 1024 点做 FFT)
- 需配置传输完成中断(TC)处理数据
方式二:环形缓冲覆盖模式(Circular Mode)
- DMA 循环写入缓冲区,写满后自动回到起始地址覆盖旧数据
- 适合实时连续采集,配合"半传输中断"(HT)和"传输完成中断"(TC)实现"乒乓缓冲"
- CPU 可以一边处理前半缓冲区,DMA 同时写入后半缓冲区
缓冲区: [0][1][2][3][4][5][6][7]
↑ ↑
HT IRQ TC IRQ
(处理前4个) (处理后4个)
六、ADC 常见错误现象与排查
错误现象:ADC 始终读到 300mV 左右电压
即使输入接地或悬空,始终读数不为零而是约 300mV。
排查技巧
| 方法 | 操作 | 说明 | |------|------|------| | 直接打印硬件寄存器 | 读取 ADC 原始寄存器和状态位 | 最快的排查手段,可确认硬件状态 | | LED 硬件诊断 | 用 LED 指示 ADC 状态 | 脱离串口调试,验证程序是否在运行 | | 3.3V 注入测试 | 将通道接到已知 3.3V | 验证转换链路是否正常(若读数正确则 ADC 本身 OK) |
可能原因
- GPIO 未配置为模拟输入模式(仍为浮空输入)
- 采样时间过短,采样电容未充满
- 参考电压不稳定或未正确连接
- 通道配置错误(采样了内部温度传感器或 Vbat 等内部通道)
七、修改设计技巧
- 一次只改一个变量:修改配置后立即验证效果,避免多变量同时变化导致无法定位问题
- 关闭不必要的 C 配置 I/O:调试时关闭可能干扰 ADC 的数字 I/O(尤其是靠近 ADC 引脚的高速数字信号)
附:原始学习笔记手稿
