一、PWM 基础概念
说到 PWM,很多刚入行的朋友觉得它就是个「方波」。其实没那么简单。我做了十几年嵌入式,PWM 几乎天天都在用。今天咱们就把这东西彻底聊透。
1.1 什么是 PWM
PWM,全称 Pulse Width Modulation,中文叫脉冲宽度调制。说白了,就是通过调节脉冲的宽度来控制平均电压。
你想想看,一个方波信号,高电平是 5V,低电平是 0V。如果高电平占的时间长,平均电压就高;高电平占的时间短,平均电压就低。这就是 PWM 的核心思想。
核心公式:平均电压 = 高电平电压 × 占空比
举个例子。5V 的方波,占空比 50%,平均电压就是 2.5V。占空比 80%,平均电压就是 4V。嗯,就是这么简单。
1.2 周期与占空比
这两个参数是 PWM 的灵魂。我见过不少新手在这上面栽跟头。
周期(Period):一个完整脉冲的时间长度。单位通常是微秒(μs)或毫秒(ms)。
频率(Frequency):周期的倒数。f = 1/T。比如周期 20ms,频率就是 50Hz。
占空比(Duty Cycle):高电平时间占整个周期的百分比。
| 参数 | 符号 | 单位 | 说明 |
|---|---|---|---|
| 周期 | T | s, ms, μs | 一个完整脉冲的时间 |
| 频率 | f | Hz | f = 1/T |
| 占空比 | D | % | 高电平时间 / 周期 × 100% |
| 脉冲宽度 | Ton | s, ms, μs | 高电平持续时间 |
我的习惯:做电机调速时,我一般先定频率,再调占空比。频率决定了控制的响应速度,占空比决定了输出功率。两者分开调,思路更清晰。
1.3 PWM 的应用场景
PWM 的应用太广了。我挑三个最常见的场景聊聊。
电机调速
直流电机调速,PWM 是主流方案。通过改变占空比,就能控制电机转速。
我曾经做过一个项目,用 STM32 驱动直流电机。一开始占空比调得太高,电机直接飞转,差点把测试台掀翻。后来我学乖了,每次上电先给 10% 的占空比,确认没问题再慢慢往上加。
电机调速的频率选择也有讲究。太低的话,电机会「咔咔」响;太高的话,MOS 管发热严重。我个人习惯用 1kHz 到 20kHz 之间。具体选多少,要看电机和驱动器的参数。
LED 调光
LED 调光,PWM 是最优雅的方式。人眼有视觉暂留效应,只要频率够高(通常 100Hz 以上),就看不到闪烁。
占空比 0% 时,LED 全灭。占空比 100% 时,LED 最亮。中间任意比例,都能实现平滑调光。
注意:LED 调光的频率不能太低。低于 50Hz 时,人眼能明显感觉到闪烁,长时间看会头晕。我建议至少用 200Hz 以上。
舵机控制
舵机控制是 PWM 的经典应用。标准舵机使用 50Hz 的频率,周期 20ms。脉冲宽度 1ms 对应 0°,1.5ms 对应 90°,2ms 对应 180°。
| 脉冲宽度 | 舵机角度 | 占空比(50Hz) |
|---|---|---|
| 1.0 ms | 0° | 5% |
| 1.5 ms | 90° | 7.5% |
| 2.0 ms | 180° | 10% |
我记得第一次调舵机时,忘了设置正确的频率,直接用默认的 1kHz。结果舵机嗡嗡响,就是不转。查了半天才发现是频率不对。从那以后,我每次初始化 PWM 都会先确认频率。
1.4 PWM 知识体系总览
下面这张图,把 PWM 的核心知识点串起来了。你可以把它当作本章的思维导图。
1.5 几个容易踩的坑
做 PWM 开发,有几个坑我几乎每次培训都会提。
- 频率选错:电机用 50Hz 会抖,舵机用 1kHz 会烧。一定要看器件手册。
- 占空比边界:有些驱动器不支持 0% 或 100% 的占空比,需要留余量。
- 定时器配置:STM32 的定时器重载值要算对。ARR = 时钟频率 / 预分频 / PWM 频率 - 1。
- 死区时间:驱动 H 桥时,上下管不能同时导通。要加死区时间。
我的建议:刚开始学 PWM,先用逻辑分析仪看波形。亲眼看到占空比的变化,比看代码直观多了。我当年就是这么过来的。
好了,PWM 的基础概念就聊到这儿。记住三个核心参数:频率、占空比、脉冲宽度。后面的章节,我们会深入具体的实现细节和实战案例。