【嵌入式面试】ADC 高频面试题
【嵌入式面试】ADC 高频面试题
ADC(模数转换器)是嵌入式开发中最常考的模拟外设之一,面试官通常围绕分辨率与转换公式、转换时间计算、规则组/注入组、扫描与连续模式、DMA 配合以及精度校准展开提问。本文整理了 STM32 ADC 的高频面试题与参考答案,覆盖从原理到实战的完整考点,帮助你在面试中快速定位薄弱点。
一、基础概念
1. STM32 ADC 的分辨率是多少?如何根据转换结果计算实际电压?
STM32 主流型号(F1/F4 等)内置 12 位逐次逼近型(SAR)ADC,转换结果为 0~4095 的数字量。实际电压计算公式为:V = ADC_Value × VREF / 4095(12 位时)。例如 VREF=3.3V、读数为 2048 时,对应电压约 1.65V。12 位分辨率在 3.3V 参考下最小可分辨电压约 0.8mV/LSB。
2. 参考电压(VREF)的作用是什么?参考电压不准会怎样?
VREF 决定 ADC 的满量程电压,转换结果 = 输入电压 / VREF × 4095,所以 VREF 的精度直接影响测量精度。VREF 波动会带来比例(增益)误差:参考偏低则读数偏大,反之偏小。高精度应用应使用精密基准源,并在 VREF 引脚做好滤波去耦。
3. 什么是逐次逼近型(SAR)ADC?简述工作原理。
SAR ADC 用二分查找的方式逼近输入电压:先让内部 DAC 输出 1/2 满量程,与采样保持的输入比较,比较结果决定最高位(MSB);再根据上一位结果输出 1/4 或 3/4 满量程比较次高位……重复 N 次得到 N 位结果。优点是速度较快、功耗低、成本低;缺点是转换过程必须保持输入不变,依赖采样保持电路,精度受比较器与 DAC 精度限制。
4. ADC 的采样保持电路是做什么的?
转换期间输入电压必须保持稳定,采样保持电路由采样开关 + 采样电容构成。采样阶段开关闭合,电容充电跟踪输入;保持阶段开关断开,电容上的电压在转换期间保持不变供比较器使用。若采样时间不足,电容充不满,转换结果会偏小,产生误差。
二、转换时间与转换模式
5. ADC 转换时间怎么计算?请举例说明。
总转换时间 = 采样时间 + 固定转换时间。12 位 ADC 固定转换需要 12.5 个 ADC 时钟周期,采样时间可编程(F1 可选 1.5/7.5/13.5/28.5/41.5/55.5/71.5/239.5 周期)。例如 F103 的 APB2=72MHz,ADC 预分频 6 得 12MHz 时钟,采样时间 1.5 周期,则总时间 = (1.5+12.5)/12MHz ≈ 1.17µs,对应约 857kSPS。注意 F1 的 ADC 时钟上限为 14MHz,不能超频使用。
6. 采样时间(Sampling Time)越长越好吗?
不是。采样时间越长,采样电容充电越充分、精度越高,但转换速度越低。高阻抗信号源必须加长采样时间,否则充电不足;高速采样场景则要尽量选短采样时间,并保证信号源阻抗足够低。本质是在精度与速度之间折中。
7. 什么是规则组和注入组?有什么区别?
规则组(Regular)是常规转换组,F1 最多 16 个通道,结果都存入唯一的规则数据寄存器 ADC_DR;注入组(Injected)最多 4 个通道,结果分别存入 JDRx 寄存器,且注入转换可打断正在进行的规则转换(优先级更高)。注入组适合"紧急插入"采样的场景,如电机控制中需要与 PWM 同步读取关键电流。
8. 什么是扫描模式(Scan Mode)?什么时候必须开启?
扫描模式开启后,ADC 按序列寄存器(SQR)排好的顺序依次转换所有使能通道;关闭时只转换序列中的第一个通道。多通道采集必须开启扫描模式,并配合 DMA 及时搬走结果,否则后面通道的结果会覆盖前面通道的数据。
9. 什么是连续转换模式(Continuous Mode)?和单次模式有什么区别?
连续模式下 ADC 转换完整个序列后自动开始下一轮;单次模式转换完一个序列即停止,等待下一次触发(软件或硬件)。轮询读取通常配合单次模式;DMA 不间断采样(如音频、电压监测)通常用连续 + 扫描 + DMA 循环的组合。
10. 多通道采集时为什么要配合 DMA?直接轮询有什么问题?
规则组只有一个数据寄存器 ADC_DR,多通道扫描时后转换的通道会覆盖之前的结果,轮询往往只能读到最后一个通道的值,且转换速度快时容易漏读。用 DMA 在每个通道转换完成后自动把 ADC_DR 搬到内存数组,数组元素顺序对应各通道,这是多通道采样的标准做法。
11. 什么是硬件触发?典型应用场景?
硬件触发指 ADC 由外部事件启动转换,触发源可选定时器事件、外部引脚等(EXTSEL 选择)。相比软件启动,硬件触发能精确控制采样时刻,保证每次采样与 PWM 同步、相位一致,是电机控制、电源监测等场景的刚需。
12. 如何用定时器触发 ADC 进行精确采样?
配置定时器输出触发事件(TRGO),ADC 选择该定时器事件作为外部触发源。定时器每次更新/比较事件到来时自动启动一次转换,采样间隔由定时器精确决定。典型应用:在 PWM 中点触发采样电流,避开开关噪声干扰。
三、ADC 与 DMA
13. ADC 配合 DMA 时用普通模式还是循环模式?为什么?
单次采集一轮用 DMA 普通模式(Normal),传输完设定长度即停止;持续不间断采样(如音频、连续监测)用 DMA 循环模式(Circular),DMA 自动回绕缓冲区继续搬运。循环模式配合半传输/传输完成中断,可让 CPU 分时处理前后半段数据,做到不丢数据、不占用 CPU 轮询。
14. 什么是过采样(Oversampling)?有什么好处?
过采样是用远高于信号带宽的采样率多次采样,通过累加/平均把量化噪声和随机噪声平均掉,从而提高有效分辨率(等效位数增加、SNR 提升)。STM32 部分型号(F3/F4/L4 等)内置硬件过采样器,可配置倍数与移位,比软件循环采样更省 CPU。代价是有效采样率降低。
四、误差、校准与精度
15. ADC 有哪些常见误差?
常见误差包括:失调误差(Offset)——输入为 0 时输出不为 0;增益误差(Gain)——实际转换斜率与理想斜率有偏差;微分非线性(DNL)和积分非线性(INL)。失调与增益误差可通过校准消除,DNL/INL 属于芯片固有特性;此外还有采样电容充电不足、参考电压不稳、地线噪声等外部因素。
16. 为什么要做 ADC 校准?STM32 如何校准?
由于制造工艺差异,每颗芯片的失调与增益误差不同,需要上电后校准才能保证精度。F1 通过置位 CAL 位自动校准(结果写入 ADC_DR);HAL 库使用 HAL_ADCEx_Calibration_Start()(F4 等)。校准一般在上电后、正式转换前执行一次即可。
17. 如何提高 ADC 采样精度?请给出至少 4 种方法。
① 使用稳定精确的参考电压并做好滤波去耦;② 根据信号源阻抗适当加长采样时间;③ 多次采样取平均或用软件滤波;④ 输入加 RC 低通滤波滤除高频噪声(注意阻抗匹配);⑤ 良好的 PCB 布局:模拟地与数字地单点连接、远离开关电源噪声;⑥ 使用 DMA 减少中断干扰;⑦ 做好校准;⑧ 有条件的启用硬件过采样。
18. 均值滤波为什么能提高精度?有什么代价?
均值滤波把多次转换结果求和取平均,随机噪声按 √N 倍降低(N 为采样次数),等效提高信噪比和分辨率。代价是有效采样率下降(N 次采样才出一个结果)、响应变慢;且对周期性干扰(如与采样同步的噪声)基本无效。
19. 信号源阻抗对 ADC 测量有什么影响?怎么解决?
ADC 采样瞬间要对内部采样电容充电,等效时间常数 τ = Rs × Cs,信号源内阻越大充电越慢,采样时间内充不满电会导致测量值偏低。解决办法:降低信号源阻抗(一般要求几 kΩ 以内)、加长采样时间,或加电压跟随器(运放缓冲)做阻抗隔离。

