
一、ADC 的基本作用单片机的核心是数字电路只能处理“0”和“1”。但现实中的物理量——比如温度、压力、电池电压、声音、光照强度——大多是连续变化的模拟量。传感器通常把这些物理量转换成电压信号然后 ADC 再把电压转换成数字。举例一个温度传感器在 0°C 时输出 0.5V在 100°C 时输出 2.5V。单片机要“知道”温度就必须先测量这个电压。ADC 把电压测出来给出一个数字比如 1.5V 对应 1861假设 12 位 ADC参考电压 3.3V。然后程序再根据电压与温度的关系反推出温度值。所以 ADC 是连接模拟世界和数字世界的桥梁。二、关键参数深入理解1. 分辨率位数分辨率表示 ADC 能把输入电压范围分成多少份。常见的有 8 位、10 位、12 位、16 位、24 位等。8 位把量程分成 256 份每份约 0.39%量程的 1/256。10 位分成 1024 份每份约 0.098%。12 位分成 4096 份每份约 0.024%。16 位分成 65536 份每份约 0.0015%。“份”越小ADC 能分辨的电压变化就越细微。比如参考电压为 3.3V12 位 ADC 能分辨的最小电压变化大约是 0.8 毫伏而 10 位 ADC 只能分辨约 3.2 毫伏。注意分辨率高只是说刻度细不代表测得准。一把尺子刻度再细如果尺子本身弯曲变形读数照样不准。2. 参考电压参考电压决定 ADC 的测量范围满量程。输入电压不能超过参考电压否则输出会饱和通常是最大值。参考电压来源有三种芯片内部基准使用方便但精度一般受温度影响较大。例如常见的 1.2V、2.5V 内部基准。外部专用基准芯片精度高、温漂小适合要求高的场合。例如 TL431、REF3030 等。直接用单片机电源电压最省事但电源的噪声和波动会直接影响测量结果。参考电压的稳定性至关重要。如果参考电压漂移 1%测量结果也会跟着漂移约 1%。3. 采样率转换速率采样率表示 ADC 每秒钟能完成多少次转换单位是 SPS每秒采样次数或 Hz。测量温度、电池电压等慢变信号几百到几千 SPS 就够用。普通单片机 SAR ADC 通常能达到几十 kSPS 到几 MSPS。音频信号需要 44.1 kSPS 以上。高速示波器用的 ADC 可以达到几百 MSPS 甚至 GSPS。根据采样定理要完整还原一个信号采样率至少要大于信号最高频率的两倍。实际工程中往往取 5~10 倍甚至更高才能保证信号质量。4. 精度指标分辨率只是理论上的刻度数量实际精度还受多种因素影响DNL微分非线性相邻两个数字码对应的电压间隔与理想间隔的偏差。如果偏差超过 1 LSB可能出现某个码永远不会出现丢码。INL积分非线性整个转换曲线与理想直线的最大偏离反映整体线性好坏。失调误差输入为 0V 时输出不为 0 的偏差。可以校准消除。增益误差实际满量程与理想满量程之间的斜率偏差。也可以校准。有效位数ENOB由于噪声和非线性实际有效位数往往低于标称位数。例如标称 12 位实际可能只有 10.5 位有效。因此在要求高精度的场合不能只看位数还要看这些指标。三、SAR ADC 的工作原理用生活比喻单片机内部最常用的是逐次逼近型 ADC简称 SAR ADC。它像用天平称重。假设要称一个未知重量的物体手头有一组砝码重量分别是最大量程的一半、四分之一、八分之一……以此类推直到最小砝码。步骤先放最大的砝码对应最高位看看天平是否超重。如果物体比砝码重就保留这个砝码如果比砝码轻就拿掉这个砝码。接着放第二大的砝码对应下一位再比较。从大到小逐个尝试直到所有砝码都试完。保留下来的砝码总重量就是物体的重量。SAR ADC 的原理完全一样它内部有一个 DAC数模转换器可以把数字码转成对应的电压像“砝码”一样。比较器比较输入电压和这个 DAC 输出电压决定保留或丢弃每一位。从最高位到最低位一位一位逼近最终得到一个最接近输入电压的数字码。这种方法的优点是速度适中N 位 ADC 大约需要 N 个时钟周期完成一次转换。功耗低电路简单适合集成在单片机里。分辨率通常可以做到 8~16 位。缺点是对输入信号源的阻抗比较敏感如果信号源太“弱”采样时可能来不及给内部电容充电导致结果偏低。四、单片机内部 ADC 外设结构以常见的 STM32、AVR、MSP430、ESP32 等单片机为例内部 ADC 通常包含以下部分1. 模拟多路开关单片机往往只有一个 ADC 核心但有很多引脚可以测量。通过模拟多路选择器可以分时切换不同的输入通道。例如 STM32F103 的 ADC1 可以连接 16 个外部引脚。2. 采样保持电路在开始转换之前ADC 需要先“冻结”输入电压。内部有一个小电容采样阶段开关闭合电容充电到输入电压然后开关断开电容保持住这个电压转换过程中电压就不会变了。如果采样时间太短电容还没充到输入电压结果就会偏小。所以采样时间要根据信号源阻抗来设置。3. 逐次逼近转换器这是 ADC 的核心完成“称重”的过程。4. 转换结果寄存器转换完成后数字结果存放在一个寄存器里。通常寄存器是 16 位但有效数据取决于 ADC 位数。结果可以左对齐或右对齐方便程序读取。5. 触发控制ADC 转换可以由多种方式启动软件触发程序直接写一个启动位ADC 开始转换。定时器触发由定时器事件比如 PWM 输出触发可以实现固定间隔采样。这在电机控制、数字电源等场合非常重要因为需要精确的采样时刻。外部引脚触发用外部信号边沿触发比如在某个外部事件发生时立即采样。6. 中断和 DMA转换完成后可以产生中断通知 CPU 读取结果。如果采样率很高CPU 频繁中断会吃不消这时可以用 DMA直接存储器访问自动把结果搬到内存缓冲区CPU 只需要定期处理数据即可。7. 模拟看门狗这是一个非常实用的功能。可以设置一个上限和一个下限当 ADC 转换结果超出这个范围时自动产生中断。常用于电源电压监测、过流保护、温度报警等。8. 内部专用通道除了外部引脚很多单片机还把一些内部信号接到 ADC 上内部温度传感器可以测芯片温度。内部参考电压可以反推出电源电压因为参考电压已知。电池电压监测通道有些芯片有专门的电池检测引脚。DAC 输出回读可以监测 DAC 输出是否正确。五、常见工作模式1. 单次转换模式触发一次ADC 完成一次转换后就停下来等待下一次触发。适合不需要连续采样的场合比如按键检测、温度巡检、电池电压偶尔测量。2. 连续转换模式一次转换结束后自动开始下一次不停地测。适合需要实时监测的场合但 CPU 负担较重通常配合 DMA 使用。3. 扫描模式多个通道按顺序依次转换。比如同时监测温度、电压、电流三个通道。可以配合单次或连续模式使用结果可以按顺序存放。4. 注入模式部分单片机如 STM32支持注入通道。注入通道的优先级高于常规通道可以由外部事件触发打断正在进行的常规转换。常用于电机控制中的电流采样需要在特定时刻立即获取结果。5. 间断模式每次触发只转换一个或几个通道然后停止等待下一次触发。适合低功耗应用因为不需要连续工作。6. 过采样与硬件平均部分单片机如 STM32L4支持硬件过采样自动对多次采样求和或平均可以有效提高分辨率、降低噪声。比如过采样 256 次理论上有效位数可以增加 4 位。六、硬件设计要点1. 参考电压设计优先使用外部专用基准芯片保证精度和温漂。在参考引脚附近加去耦电容比如 100nF 陶瓷电容 10μF 钽电容。参考电压走线要远离大电流和高速数字信号避免干扰。如果使用内部基准注意查看数据手册中的精度和温漂指标确认是否满足要求。2. 输入信号调理分压当被测电压超过 ADC 量程时使用精密电阻分压。分压电阻的精度直接影响测量精度。滤波在 ADC 输入引脚加 RC 低通滤波器滤除高频噪声同时起到抗混叠作用。电阻一般选 100Ω~1kΩ电容选 10nF~100nF。缓冲如果传感器输出阻抗较高比如几十 kΩ 以上直接接 ADC 会导致采样电容充电不足测量偏低。此时需要加运放缓冲运放输出阻抗低驱动能力强。保护在输入引脚加钳位二极管或串联电阻防止过压损坏单片机。比如输入可能超过 VDD 时用二极管钳位到电源轨。3. 阻抗匹配SAR ADC 在采样瞬间会从信号源抽取电荷如果信号源阻抗太大采样电容在采样时间内充不满结果就会偏低。一般要求信号源阻抗小于几 kΩ具体看芯片手册。如果信号源阻抗较高可以增大采样时间如果芯片支持配置。在信号源和 ADC 之间加运放缓冲。在 ADC 输入引脚并联一个较大的电容比如 100nF提供瞬时电荷。4. PCB 布局模拟地和数字地分开走最后单点连接避免数字噪声耦合到模拟部分。ADC 输入走线尽量短远离时钟线、PWM 线等高速数字信号。参考电压走线加粗并在附近放置去耦电容。如果有条件给 ADC 输入加一个小的滤波电容到地尽量靠近芯片引脚。七、软件处理技巧1. 软件滤波平均滤波连续采样 N 次求平均值。可以降低随机噪声但响应稍慢。中值滤波采样 N 次排序后取中间值。对脉冲干扰比如电机火花特别有效。一阶低通滤波用本次采样值和上次滤波结果加权平均越新的数据权重越大。可以平滑数据同时保留一定响应速度。滑动平均滤波维护一个固定长度的队列新数据进来最老的数据出去计算队列平均值。效果类似平均滤波但实现更灵活。2. 过采样与抽取如果 ADC 本身不支持硬件过采样可以通过软件多次采样求和来实现。每增加 4 倍采样次数有效分辨率理论上增加 1 位。前提是信号中存在足够的噪声否则需要人为加入抖动。例如对同一信号采样 256 次并累加累加结果右移 4 位相当于除以 16就相当于把 12 位 ADC 提升到 16 位分辨率但实际精度受噪声限制不会真正达到 16 位。3. 校准零点校准把输入短接到地记录 ADC 输出值这个值就是失调。后续测量结果减去这个值。满量程校准输入一个已知的精确电压比如用基准芯片输出计算增益修正系数。后续测量结果乘以这个系数。两点校准同时做零点和满量程校准修正斜率和偏移。很多单片机支持硬件校准可以自动修正内部失调和增益。4. 结果换算ADC 输出的是码值需要换算成实际电压再根据传感器特性换算成物理量。换算时注意使用正确的参考电压和分辨率。如果参考电压不是精确值换算结果也会有误差。八、选型考虑因素选择单片机或独立 ADC 时需要综合考虑分辨率根据精度要求选择。一般 10 位能满足普通需求12 位是主流16 位以上用于高精度测量。采样率根据信号频率确定留足余量。比如测 50Hz 工频信号采样率至少 1kHz 以上。通道数需要同时采集几路信号如果通道多要考虑扫描模式和切换时间。参考电压内部基准精度是否够是否需要外部基准功耗电池供电的低功耗设备要关注 ADC 的工作电流和待机电流。DMA 支持大量数据连续采集时DMA 能大大减轻 CPU 负担。模拟看门狗需要电压监测和报警功能时很有用。差分输入某些传感器输出差分信号如桥式传感器差分输入可以抑制共模干扰。封装和价格根据产品定位选择。常见单片机 ADC 对比单片机ADC 分辨率最大采样率特点STM32F10312 位1 MSPS多通道、注入模式、DMA、模拟看门狗STM32L412 位5 MSPS硬件过采样、低功耗、高性能ESP3212 位2 MSPS多通道但线性度一般精度受电源影响大ATmega328P10 位15 kSPS简单易用适合 Arduino 入门MSP43012 位200 kSPS超低功耗适合电池供电独立 ADS111516 位860 SPSI2C 接口高精度内置 PGA九、实际应用案例1. 电池电压监测用两个电阻分压把电池电压降到 ADC 量程内。选择内部高精度参考电压如 1.2V不受电池电压变化影响。启用模拟看门狗当电压低于设定阈值时产生中断提醒用户充电。软件做平均滤波消除纹波和噪声。2. 温度采集使用 NTC 热敏电阻或模拟温度传感器如 LM35。通过分压电路将温度变化转换为电压变化。ADC 采样后根据传感器特性曲线查表或公式计算温度。采用过采样提高分辨率降低噪声。3. 电机电流采样在电机驱动回路串联一个小的采样电阻比如 0.05Ω。用运放放大采样电阻两端的电压因为压降很小。ADC 由定时器触发在 PWM 特定时刻采样比如在 PWM 高电平中间采样避开开关噪声。使用注入模式或 DMA 实时采集。软件做滑动平均或一阶滤波提取电流值。4. 音频采集麦克风信号经运放放大和滤波后送入 ADC。使用定时器触发采样率设置为 44.1 kHz 或更高。DMA 将数据搬运到缓冲区CPU 进行编码或传输。注意抗混叠滤波避免高频噪声折叠到音频频段。十、常见调试问题与解决方法1. 转换结果跳动大可能原因噪声大、参考电压不稳、采样时间不足。解决方法增加硬件 RC 滤波。软件平均滤波。检查参考电压去耦电容。增大采样时间。2. 转换结果始终为 0 或满量程可能原因输入引脚未正确连接、参考电压异常、通道配置错误、ADC 时钟未使能。解决方法检查 GPIO 复用配置和引脚连接。用万用表测量输入电压和参考电压。确认 ADC 时钟和使能位已打开。3. 多通道采样相互干扰可能原因通道切换后采样时间太短内部采样电容未充分充放电。解决方法增大采样时间。在通道切换后插入小延时。使用外部缓冲器降低源阻抗。4. 精度不够可能原因参考电压精度低、未校准、布线干扰、电源噪声。解决方法使用外部高精度基准芯片。进行两点校准。优化 PCB 布局分离模拟和数字地。加电源滤波使用 LDO 给模拟部分供电。十一、总结单片机 ADC 是嵌入式系统中最常用的模拟外设它将连续的模拟电压转换为离散的数字编码。绝大多数单片机集成的是 SAR 型 ADC原理类似天平称重逐位逼近。关键参数包括分辨率、参考电压、采样率和精度指标。外设结构包含多路开关、采样保持、逐次逼近转换器、结果寄存器、触发控制、DMA 和模拟看门狗等。工作模式支持单次、连续、扫描、注入、间断和过采样。硬件设计上要保证参考电压稳定、输入阻抗匹配、加滤波和保护。软件上可以用滤波、过采样和校准来提高精度。选型时要综合考虑分辨率、采样率、通道数、功耗等因素。只有软硬件协同设计才能充分发挥 ADC 的性能实现可靠、精确的模拟信号采集。