返回笔记列表

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 数字量输出

关键步骤说明

  1. 采样阶段:NMOS 开关导通,外部电压向采样电容充电至 Vin
  2. 保持阶段:NMOS 关断,采样电容与外部电路隔离,保持电压
  3. 逐次逼近:从 MSB 到 LSB,SAR 逻辑通过二分搜索确定每一位
  4. 输出结果:12 个时钟周期后得到最终数字量

三、主要工作模式

| 模式 | 说明 | 适用场景 | |------|------|----------| | 单次转换 | 触发一次,转换一个通道 | 低功耗间歇采样 | | 连续转换 | 自动循环转换 | 实时监控 | | 扫描模式 | 自动切换多通道依次转换 | 多通道数据采集 | | 外部触发 | 由定时器/TRGO 信号触发 | 同步采样、等间隔采集 | | DMA 传输 | 转换结果自动写入内存 | 高速连续采集 |


四、所需条件配置

  1. 时钟源:ADC 内核时钟(通常来自系统时钟分频)
  2. GPIO 模式:模拟输入(Analog),禁用上下拉
  3. ADC 内核参数:分辨率、对齐方式(左/右对齐)、连续/单次模式
  4. 通道配置:通道号、采样时间、通道顺序(扫描模式下)
  5. 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 等内部通道)

七、修改设计技巧

  1. 一次只改一个变量:修改配置后立即验证效果,避免多变量同时变化导致无法定位问题
  2. 关闭不必要的 C 配置 I/O:调试时关闭可能干扰 ADC 的数字 I/O(尤其是靠近 ADC 引脚的高速数字信号)

附:原始学习笔记手稿

ADC采样流程与SAR架构学习笔记