短文标题:PWM模拟电压:数字信号"平均"一下,就能变成模拟量

你有没有想过一个问题:GPIO只能输出0V或3.3V,怎样才能让它输出1.65V?答案是:PWM(脉冲宽度调制)。在足够短的时间内,让引脚50%时间输出3.3V、50%时间输出0V。外接的RC低通滤波器会把高频分量滤掉,负载(比如LED、电机)感受到的是平均电压------1.65V。占空比 = 高电平时间 / 周期。50%占空比 → 平均电压 = 50% × 3.3V = 1.65V。
**那个"平均"的物理原理,**PWM不是真的产生了1.65V,而是利用物理系统的惯性:
- 人眼的视觉暂留:LED快速闪烁,眼睛看到的平均亮度
- 电机的机械惯性:PWM驱动电机,转速由平均电压决定
- RC滤波器的积分作用:电阻电容将PWM波形平滑成直流电压
这就是"用时间换电压"------调整高低电平的时间比例,产生任意中间电压。

**那个"占空比"与"分辨率",**PWM的分辨率取决于定时器的位数。
- 8位定时器:256级占空比(ARR=255)
- 16位定时器:65536级占空比(ARR=65535)
公式:平均电压 = VCC × (CCR / ARR),ARR越大,电压调节越细腻。
**那个"频率"的选择,**PWM频率不能太低:LED会闪烁(人眼>100Hz),电机会抖动(机械响应延迟),音频会产生啸叫(人耳20Hz~20kHz)。频率也不能太高:MOS管开关损耗会增加(每开一次/关一次都要消耗能量),且负载可能呈感性,阻抗随频率变化。常用经验值:
- LED调光:200Hz~1kHz
- 电机调速:10kHz~20kHz(避开人耳最敏感的2kHz~5kHz)
- 数字电源:50kHz~100kHz以上
**那个"RC滤波"的平滑,**如果想得到真正的直流电压(如DAC输出),需要在PWM输出后加低通滤波器(电阻+电容)。截止频率f_c = 1/(2πRC),应远低于PWM频率。例如PWM=10kHz,RC截止频率取1kHz:R=1kΩ,C=1/(2π×1000×1000)≈0.16μF,取0.1μF即可。注意输出端加运放缓冲驱动,否则负载会改变RC滤波特性。
**那个"硬件PWM"的优势,**用定时器中断模拟PWM,CPU负载极高(每周期进中断)。
STM32的通用定时器自带硬件PWM:只需设置ARR和CCR,启动定时器,硬件自动翻转引脚,CPU占用率≈0。
这个故事的启示, 为什么PWM能模拟模拟电压?因为物理系统有"惯性"------人眼、电机、RC电路,都会对输入做"平均"。这就是数字世界通往模拟世界的桥梁。**没有昂贵的DAC,一个定时器就能输出模拟电压。写在最后,**下表快速总结PWM的应用:
(本文灵感源于于振南《新概念ARM32单片机》教程第6.6节"通用定时器 PWM 原理与数字模拟信号转换",感谢作者将PWM模拟电压的精髓讲得如此通透。)
如果您觉得这个故事对您有启发,欢迎点赞、转发,让更多工程师看到这个藏在"平均电压"背后的PWM智慧。
