一、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 的核心知识点串起来了。你可以把它当作本章的思维导图。

PWM 知识体系结构图 PWM 核心概念 基本参数 周期 T = 1 / 频率 f 占空比 D = Ton / T × 100% 平均电压 = Vh × D 应用场景 电机调速(1kHz ~ 20kHz) LED 调光(≥ 200Hz) 舵机控制(50Hz 标准) 实现方式 定时器硬件输出 软件模拟 PWM 专用 PWM 控制器 PWM 三要素:频率、占空比、脉冲宽度,三者相互关联 应用选择:电机用低频,LED 用高频,舵机用标准 50Hz

1.5 几个容易踩的坑

做 PWM 开发,有几个坑我几乎每次培训都会提。

  • 频率选错:电机用 50Hz 会抖,舵机用 1kHz 会烧。一定要看器件手册。
  • 占空比边界:有些驱动器不支持 0% 或 100% 的占空比,需要留余量。
  • 定时器配置:STM32 的定时器重载值要算对。ARR = 时钟频率 / 预分频 / PWM 频率 - 1。
  • 死区时间:驱动 H 桥时,上下管不能同时导通。要加死区时间。

我的建议:刚开始学 PWM,先用逻辑分析仪看波形。亲眼看到占空比的变化,比看代码直观多了。我当年就是这么过来的。

好了,PWM 的基础概念就聊到这儿。记住三个核心参数:频率、占空比、脉冲宽度。后面的章节,我们会深入具体的实现细节和实战案例。