1、PWM基础概念:什么是PWM、周期与占空比、应用场景
各位同学好,我是老周。今天咱们开始聊PWM输出模块。说实话,PWM这玩意儿在嵌入式领域太常见了,小到LED呼吸灯,大到伺服电机控制,到处都有它的影子。我当年刚入行时,第一个产品就是做智能台灯,那时候对PWM的理解还很浅,结果调光效果总是不自然。后来才明白,核心就两个参数——周期和占空比。
1.1 什么是PWM?
PWM,全称Pulse Width Modulation,中文叫脉冲宽度调制。说白了,就是用数字信号模拟出模拟效果。你想想看,单片机输出只有0和1,怎么控制电机转多快?怎么让LED亮度变化?答案就是——快速切换高低电平,通过调整高电平持续的时间比例,来等效地改变平均电压。
举个例子。一个5V的方波,如果高电平占了一半时间,低电平占了一半时间,那平均电压就是2.5V。如果高电平占了75%的时间,平均电压就是3.75V。这就是PWM的核心思想。
核心要点:PWM不是真正的模拟输出,而是通过快速开关数字信号,让负载“感觉”到连续变化的电压或功率。
1.2 周期与占空比
这两个参数是PWM的灵魂。我习惯把它们拆开理解:
- 周期(Period):一个完整的高低电平循环所用的时间。单位通常是微秒或毫秒。频率是周期的倒数,比如周期20ms,频率就是50Hz。
- 占空比(Duty Cycle):高电平时间占整个周期的百分比。0%就是一直低电平,100%就是一直高电平,50%就是一半一半。
举个例子,假设周期是10ms,高电平持续了3ms,那占空比就是30%。
| 占空比 | 高电平时间(周期10ms) | 等效平均电压(5V系统) | 典型效果 |
|---|---|---|---|
| 0% | 0ms | 0V | LED熄灭 / 电机停转 |
| 25% | 2.5ms | 1.25V | LED微亮 / 电机低速 |
| 50% | 5ms | 2.5V | LED半亮 / 电机半速 |
| 75% | 7.5ms | 3.75V | LED较亮 / 电机中高速 |
| 100% | 10ms | 5V | LED最亮 / 电机全速 |
我的经验:做LED调光时,人眼对亮度的感知不是线性的。50%占空比看起来并不是50%的亮度,而是更亮一些。所以实际项目中,我经常用指数曲线或查表法来映射占空比,才能得到平滑的调光效果。
1.3 PWM的应用场景
PWM的应用范围很广,我挑三个最常见的场景聊聊。
电机调速
直流电机调速,PWM是主流方案。通过改变占空比,就能控制电机两端的平均电压,从而调节转速。我记得有一次做四轴飞行器,电调就是靠PWM信号控制无刷电机的转速。频率一般选在1kHz到20kHz之间,太低会听到电机啸叫,太高会增加MOS管的开关损耗。
LED调光
LED调光是最直观的PWM应用。人眼的视觉暂留效应,让快速闪烁的LED看起来是常亮的。只要频率高于100Hz,人眼就感觉不到闪烁。我建议做照明产品时,频率至少选1kHz以上,避免摄像头拍摄时出现条纹。
舵机控制
舵机是个有意思的东西。它内部有个电位器反馈位置,PWM信号用来告诉它“转到哪个角度”。标准舵机的控制周期是20ms(50Hz),高电平时间在0.5ms到2.5ms之间,对应0°到180°。1.5ms对应中位90°。这个时序很严格,我当年用软件模拟PWM控制舵机时,因为定时器精度不够,舵机抖得厉害。后来换了硬件PWM模块,问题就解决了。
注意:不同舵机的PWM范围可能略有差异。有些舵机支持更宽的范围(0.4ms~2.6ms),有些则比较窄。使用前一定要看数据手册,否则可能烧坏舵机内部的驱动电路。
1.4 PWM知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当作一个思维导图来看。
1.5 避坑指南
最后,分享几个我踩过的坑:
- 频率选择要谨慎:电机控制时,频率太低会听到啸叫,频率太高MOS管发热严重。我一般从1kHz开始试,根据实际效果调整。
- 占空比不是万能的:有些负载对PWM不敏感,比如白炽灯,因为灯丝热惯性大,低频PWM也能平滑调光。但LED不行,频率低了会闪烁。
- 注意死区时间:做H桥电机驱动时,上下桥臂不能同时导通。硬件PWM模块一般支持插入死区时间,软件模拟时一定要自己加。
一个小技巧:调试PWM时,先用示波器看波形,确认周期和占空比是否正确。我见过太多人代码写对了,但定时器配置错了,结果输出完全不对。示波器是PWM调试的第一工具。