1. STM32 ADC 基础概念与核心原理
ADC(模数转换器)是嵌入式系统中至关重要的外设模块,它实现了模拟世界与数字世界的桥梁作用。作为一名嵌入式开发者,深入理解ADC的工作原理和STM32的实现方式,是开发高精度数据采集系统的必备技能。
1.1 模拟信号与数字信号的本质区别
在嵌入式系统中,我们处理的信号主要分为两大类:
-
模拟信号:在时间和幅度上都是连续变化的物理量。比如:
- 温度传感器输出的电压信号(随温度变化而连续变化)
- 光敏电阻的阻值变化导致的电压变化
- 麦克风采集的音频信号
-
数字信号:在时间和幅度上都是离散的,只有高电平和低电平两种状态。比如:
- GPIO口的输出电平
- UART通信的波形
- I2C总线的数据信号
关键差异:
- 连续性:模拟信号是连续的,数字信号是离散的
- 抗干扰性:数字信号抗干扰能力强,模拟信号易受干扰
- 处理方式:MCU只能直接处理数字信号
实际开发经验:在设计传感器接口时,要特别注意模拟信号线的走线,尽量远离数字信号线和高频信号线,避免干扰。
1.2 ADC的核心参数解析
1.2.1 分辨率(Resolution)
分辨率是ADC最重要的参数之一,它决定了ADC能够区分的最小电压变化。STM32F103系列的ADC是12位的,这意味着:
- 可以将参考电压范围划分为2^12=4096个等级
- 每个等级对应的电压值称为LSB(Least Significant Bit)
- 计算公式:LSB = Vref / 4096
例如,当Vref=3.3V时:
LSB = 3.3V / 4096 ≈ 0.8057mV
实际应用技巧:
- 对于需要高精度的应用,可以考虑使用外部基准源代替内部VDDA
- 在PCB设计时,要为基准电压引脚添加足够的滤波电容
1.2.2 采样率(Sampling Rate)
采样率决定了ADC每秒钟能完成多少次转换。STM32F103的ADC最大采样率取决于:
- ADC时钟频率(最大14MHz)
- 采样时间设置
- 转换时间(固定12.5个ADC时钟周期)
计算公式:
总转换时间 = (采样时间 + 12.5) / ADC时钟频率
最大采样率 = 1 / 总转换时间
典型配置示例:
- ADC时钟:12MHz
- 采样时间:28.5周期
- 总转换时间 = (28.5 + 12.5) / 12MHz ≈ 3.42μs
- 最大采样率 ≈ 292kHz
1.2.3 参考电压(Vref)
参考电压是ADC转换的基准,决定了ADC的输入范围。STM32F103的参考电压选择:
- 64脚及以上封装:有独立的Vref+和Vref-引脚
- 64脚以下封装:使用VDDA作为参考电压
设计建议:
- 确保VDDA电压稳定(推荐使用LDO供电)
- 在VDDA引脚附近放置0.1μF和1μF的滤波电容
- 对于高精度应用,考虑使用外部基准源(如REF3033)
1.3 STM32 ADC的转换原理
STM32的ADC采用逐次逼近型(SAR)架构,其工作原理可以类比为"天平称重":
- 初始化:内部DAC输出中间值(对于12位ADC,初始为0x800)
- 比较:将DAC输出与输入电压比较
- 调整:根据比较结果调整DAC输出(二分法)
- 重复:经过12次比较后得到最终结果
关键特点:
- 转换速度快(微秒级)
- 功耗相对较
