嵌入式基础 -- ADC(模数转换器,Analog to Digital Converter)

以下是关于 ADC(模数转换器,Analog to Digital Converter)系统级详细培训内容,结合嵌入式硬件系统设计与调试经验,按模块知识点系统展开。


一、ADC 基础原理

1. ADC 的作用:

连续的模拟电压信号 (如传感器输出)转换为离散的数字信号供 MCU/NPU/SoC 使用。

2. 常见 ADC 参数定义:

参数 说明
分辨率(Resolution) 每次转换的位数,如 8-bit、12-bit、16-bit 等,决定了电压的最小分辨率(精度)
输入范围(Input Range) 支持的模拟电压范围,如 0~3.3V,或 -1V~1V(差分)
精度(Accuracy) 包括 INL(积分非线性)、DNL(微分非线性)、增益误差、偏置误差等
采样率(Sample Rate) 单位时间内的采样次数(如 1Msps 表示百万次/秒)
输入类型 单端输入 vs 差分输入
接口方式 并口、串口(SPI/I2C)、内置 MCU ADC

二、ADC 架构类型

1. 逐次逼近型(SAR ADC,Successive Approximation)

  • 优点:中高速、功耗低、结构简单、广泛应用于 MCU 内置 ADC;
  • 典型应用:电池电压采集、温湿度传感器、电机电流检测等;
  • 分辨率:8~16bit;
  • 采样率:几十 kHz 到数 Msps。

2. Σ-Δ ADC(Sigma-Delta ADC)

  • 优点:高分辨率、抗噪能力强;
  • 缺点:延迟高、响应慢;
  • 典型应用:音频、精密测量仪表;
  • 分辨率:16~24bit;
  • 采样率:低至几十 kHz,适合慢变信号。

3. Flash ADC

  • 优点:极高速(上 GHz),适合视频信号;
  • 缺点:功耗大、成本高;
  • 典型应用:高速通信、雷达系统;
  • 分辨率:6~8bit;
  • 采样率:>1Gsps。

三、嵌入式系统中 ADC 的应用

1. 常见应用场景

  • 电压、电流检测(电源状态监控、电池电量检测)
  • 温度传感器(NTC、PT100)
  • 光/距离/气体传感器输出
  • 按键输入电平电压判定(如电阻分压)
  • 电机驱动中的霍尔电压、电流闭环控制

2. 常见接入方式

内部 ADC(MCU/SoC 集成)
  • 使用 GPIO 配置为模拟输入;
  • 配置 ADC 通道、分辨率、触发方式;
  • 优点:成本低、资源集成;
  • 注意事项:引脚旁路电容滤波、隔离噪声源。
外部 ADC(SPI/I2C 接口)
  • 适合高精度、多通道、隔离应用;
  • 需配合电平转换、电源隔离;
  • 可选型号如:ADS1115(I2C 16bit)、ADS8681(SPI、16bit 500ksps)

四、硬件设计注意事项

1. 模拟信号链完整设计

推荐做法
输入保护 TVS + RC 滤波电路,抑制瞬态浪涌与高频干扰
滤波电容 在 ADC 输入前加低通滤波,如 RC 结构(R=1k, C=0.1uF)
参考电压 优选外部基准源(如 ADR431),确保稳定性
电源隔离 模拟部分推荐使用 LDO 供电,避免开关电源噪声耦合
接地策略 AGND 与 DGND 分开,最后单点接地(Star Ground)

2. 多路 ADC 通道设计

  • 使用模拟多路复用器(如 CD4051)扩展;
  • 或外置多通道 ADC 芯片,如 MCP3008(SPI 接口);
  • 避免输入切换过快,确保电压稳定后再采样。

五、软件配置与调试关键点(以 STM32 为例)

1. 初始化配置

c 复制代码
// 以 STM32 HAL 为例
ADC_ChannelConfTypeDef sConfig = {0};
HAL_ADC_Start(&hadc1); // 启动 ADC
HAL_ADC_PollForConversion(&hadc1, 10);
uint16_t value = HAL_ADC_GetValue(&hadc1);  // 获取 ADC 数值

2. 定时采样 + DMA 模式

适合高速 ADC 通道连续采样,降低 CPU 负担:

c 复制代码
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_buffer, BUFFER_SIZE);

3. 软件滤波算法建议

  • 中值滤波:适合有脉冲干扰的信号;
  • 滑动平均滤波:平滑慢变信号;
  • IIR 滤波器:实现一阶低通;
  • 多点采样取最大值:适合检测电压峰值。

六、常见问题与调试技巧

问题 可能原因 建议
ADC 值抖动严重 模拟输入有干扰、电源不稳 加滤波电容、电源隔离、走线远离数字部分
采样结果不准 输入阻抗太高/采样时间太短 增大采样周期或前级加缓冲器(如运放)
转换错误 VREF 不稳或配置错误 确保参考电压一致,芯片参数匹配
通道错误 多路复用器切换不当 检查通道配置,切换延时足够

七、典型 ADC 芯片推荐

型号 通道数 接口 分辨率 特点
STM32 内部 ADC 1~24 内部 12~16bit 成本低,资源整合
ADS1115 4 I2C 16bit 高精度、可编程增益
MCP3008 8 SPI 10bit 成本低、树莓派常用
ADS8681 1 SPI 16bit ±10V 输入,工业级

八、扩展:工业系统中 ADC 的增强方案

  • 隔离 ADC 设计:通过隔离放大器(如 ISO124)或隔离 ADC(如 ADuM7701);
  • 多通道同步采样:用于电机控制、三相电流同步采样;
  • 过采样 + 滤波算法提升精度:配合低速 MCU 实现高精度方案;
  • 差分 ADC 配合 instrumentation amplifier(如 INA333)做微弱信号放大后采样;
  • 电源监控芯片集成 ADC 功能,如 PMIC 自带监控接口。
相关推荐
Lay_鑫辰7 小时前
西门子诊断-状态和错误位(“轴”工艺对象 V1...3)
服务器·网络·单片机·嵌入式硬件·自动化
无垠的广袤9 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
雲烟11 小时前
嵌入式设备EMC安规检测参考
网络·单片机·嵌入式硬件
泽虞11 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
田甲12 小时前
【STM32】 数码管驱动
stm32·单片机·嵌入式硬件
up向上up12 小时前
基于51单片机垃圾箱自动分类加料机快递物流分拣器系统设计
单片机·嵌入式硬件·51单片机
单片机日志1 天前
【单片机毕业设计】【mcugc-mcu826】基于单片机的智能风扇系统设计
stm32·单片机·嵌入式硬件·毕业设计·智能家居·课程设计·电子信息
松涛和鸣1 天前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法
小曹要微笑1 天前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
XINVRY-FPGA1 天前
XCVP1802-2MSILSVC4072 AMD Xilinx Versal Premium Adaptive SoC FPGA
人工智能·嵌入式硬件·fpga开发·数据挖掘·云计算·硬件工程·fpga