ADC
ADC 的全称是 Analog-to-Digital Converter,中文叫 模数转换器。
简单来说,它是单片机的**“眼睛”或“耳朵”**。它的作用是:把现实世界中连续变化的模拟量(Analog),翻译成单片机能听懂的数字量(Digital)。
1. 为什么要用 ADC?
单片机(比如你的 STM32)是一个纯数字的芯片,它只认识 0 和 1(低电平和高电平)。
但是现实世界是复杂的:
- 温度不是只有“冷”和“热”,还有 25.5°C。
- 声音不是只有“响”和“静”,有各种波形。
- 光线不是只有“亮”和“暗”,有各种亮度。
- 电池电压会随着使用慢慢下降,而不是突然从 3.3V 变到 0V。
这些连续变化的信号就是模拟信号。单片机要想知道“现在的电压具体是多少伏”,就必须通过 ADC 这个“翻译官”把电压变成一个整数。
2. ADC 是怎么工作的?(核心三要素)
把 ADC 想象成一把尺子,用来量电压的高度。
(1) 分辨率 (Resolution) —— 尺子的刻度有多细?
这是 ADC 最重要的参数,通常用**“位 (Bit)”**来表示。STM32 的 ADC 通常是 12位 (12-bit)。
- 12位的意思是:它把 0V 到 3.3V 之间的电压,切成了 212=4096 份。
- ADC 读出来的结果是一个 0 ~ 4095 之间的整数。
- 0 代表 0V。
- 4095 代表 3.3V(最大电压)。
比喻:如果你用一把只有厘米刻度的尺子(低分辨率)量身高,你只能说是 170cm。如果你用一把有毫米刻度的尺子(高分辨率),你能读出 170.5cm。位数越高,读得越准。
(2) 参考电压 (Vref) —— 尺子的最大长度是多少?
这是 ADC 能测量的最大范围。在 STM32 系统中,通常参考电压就是电源电压 3.3V。
- 如果输入电压超过 3.3V,ADC 的读数就会“爆表”,一直卡在最大值 4095(甚至可能烧坏引脚)。
(3) 采样率 (Sampling Rate) —— 量得有多快?
电压可能在不停地变。ADC 不是一直盯着看,而是每隔一小段时间“拍一张照片”。
- 如果你一秒钟测 1000 次,你就更能捕捉到电压快速抖动的细节。
3. 最关键的公式(怎么换算?)
你在代码里读到的 ADC 值(比如 HAL_ADC_GetValue 返回的值)是一个 0~4095 的整数。你需要把它换算成实际的电压值。
公式:
U=40952048×3.3V≈1.65V
举个例子:
假设你用 STM32 测一个电池电压,读出来的 ADC 值是 2048。 说明现在的电压刚好是量程的一半。
4. 总结
- ADC 是什么? 一个把电压(模拟量)变成数字(整数)的硬件外设。
- STM32 的 ADC 特点: 它是 12 位的,所以读出来的数在 0 到 4095 之间。
- 作用: 用来读传感器数据(光敏电阻、热敏电阻、电位器旋钮、电池电量等)。
如果你在之前的输入捕获里是在“数时间”,那么在 ADC 里你就是在“数电压强度”。