05 ADC
up的视频讲解先用二分比较理解模数转换,再看采样电容、转换时间,以及数据如何交给程序。
1 ADC 要解决什么问题
ADC 是模数转换器,把输入电压转换成数字结果。GPIO 输入回答“高还是低”,ADC 则帮助我们进一步回答“电压大约是多少”。
课程先分析一个时刻的电压如何转换,再把这个过程扩展到连续采集。12 位结果有 4096 种编码,范围为 0~4095。
2 逐次逼近:每次确定一位
从一半参考电压开始比较
把未知输入与参考电压的一半比较,就可以确定它位于上半区还是下半区;然后只在选中的范围内继续二分。

- 先试探最高位,对应半量程。
- 根据比较结果保留或清除这一位。
- 试探下一位,步长减半。
- 重复这个过程,直到确定全部位。
这里的“减半”指的是下一次试探的步长减半,不是每次把当前输出电压整体加倍或减半。

12 次逐位判定形成 12 位结果,这就是逐次逼近的基本思路。
3 电容阵列怎样完成采样与比较
本课用电容阵列 DAC、比较器与逐次逼近寄存器构成的模型解释 SAR ADC。它与上一课用来理解 DAC 的电阻网络不同。

采样:先把输入电压保存下来
采样阶段,输入信号通过开关给电容充电。电容保存的电荷与电压有关,可以用 Q = C × V 理解。

比较:切换参考连接,判断保留哪一位
采样结束后切换开关,利用电荷守恒分析节点电位。最高权重对应半量程,后续权重依次减半;比较器给出判断,逐次逼近逻辑据此保留或清除当前试探位。


把电路按“采样、比较、保存结果”三个阶段阅读,就不必同时记住所有开关状态。
4 把转换结果与时间算清楚
数字结果怎样对应电压
理想 12 位量化模型中,一个量化间隔约为参考电压范围的 1/4096。参考下限为 0 V 时,可用下面的关系理解每一位的权重:
一个量化间隔 ≈ Vref ÷ 4096
量化结果表达的是一个有限宽度的电压区间,不是无限精确的电压值。实验中的换算还需要结合实际参考电压和所采用的标定关系。
一次转换要多久

对于课程芯片,转换时间按下面的关系计算:
转换时间 = (采样周期数 + 12.5) ÷ ADC 时钟频率
采样时间决定电容有多久跟随输入。它过短时,输入阻抗和充电过程可能使结果尚未稳定;延长采样时间则会降低连续转换的速度。

这里的时钟指 ADC 工作时钟,需要从 RCC 的 ADC 分频路径获得,不能直接使用 CPU 的 72 MHz。实际设置应同时满足数据手册对 ADC 时钟和输入源阻抗的要求。
5 从通道到数据寄存器

输入通道先由多路选择器送入转换器。规则组按配置完成常规转换;注入组用于需要更高响应优先程度的转换任务,并有相应的结果寄存器。
结果产生后,可以由 CPU 读取,也可以在支持的通路中交给 DMA 搬运。模拟看门狗则根据设定的上下限检查结果,帮助发现超出范围的输入。
下一节实验沿着“采样值 → 电压 → 传感器物理量”的顺序,处理光照、温度与麦克风信号。