1. PWM 基础概念:从波形到实战

各位同学好,我是你们这门课的老周。今天咱们开篇聊聊 PWM——脉冲宽度调制。说实话,我做了十几年嵌入式,PWM 是我用得最多的外设之一,没有它,电机转不了、灯调不了光、甚至连蜂鸣器都唱不了歌。你想想看,一个方波信号,居然能控制这么多东西,是不是挺有意思?

1.1 什么是 PWM?

PWM,全称 Pulse Width Modulation,中文叫脉冲宽度调制。说白了,就是让一个数字信号在高低电平之间来回切换,通过控制高电平持续的时间(也就是脉冲宽度)来模拟一个模拟量。

我习惯这么理解:你有一个开关,只能开或关。但如果你开关的速度足够快,并且控制开的时间比例,就能让灯泡看起来不是全亮也不是全灭,而是中间某个亮度。这就是 PWM 的精髓——用数字信号模拟模拟效果。

核心要点:PWM 不是真正的模拟信号,而是一种数字信号的“欺骗”手段。人眼、电机、加热器这些惯性系统,对快速切换的方波响应是平滑的。

我在项目中遇到过不少新手,上来就问:“PWM 是不是就是调电压?”其实不是。PWM 的电压幅值是不变的(比如 3.3V 或 5V),变的是高电平占整个周期的时间比例。这个比例,就是我们接下来要说的占空比。

1.2 PWM 的周期与占空比

要理解 PWM,两个参数必须吃透:周期和占空比。

周期(Period)

周期就是 PWM 信号完成一次高低电平切换所需的总时间。单位通常是微秒(μs)或毫秒(ms)。周期的倒数就是频率,比如周期 1ms,频率就是 1kHz。

占空比(Duty Cycle)

占空比是高电平时间占整个周期的百分比。公式很简单:

占空比 = (高电平时间 / 周期) × 100%

举个例子:周期 1ms,高电平 0.25ms,占空比就是 25%。

占空比 高电平时间(周期=1ms) 等效效果(LED)
0% 0μs 全灭
25% 250μs 微亮
50% 500μs 半亮
75% 750μs 较亮
100% 1000μs 全亮

我的经验:调 LED 时,人眼对亮度的感知不是线性的。50% 占空比看起来并不是 50% 的亮度,而是更亮一些。所以做呼吸灯效果时,我一般会用指数曲线来映射占空比,而不是线性递增。

下面这张图,把 PWM 的周期、占空比和波形关系画清楚了:

PWM 波形与参数关系图 25% 占空比 50% 占空比 75% 占空比 一个周期 T 高电平时间 t_on

1.3 PWM 的应用场景

PWM 的应用范围非常广,我挑三个最常见的场景来讲,这些也是咱们课程后面会动手做的。

电机控制

直流电机调速,PWM 是主流方案。通过改变占空比,就能控制电机两端的等效电压,从而调节转速。

  • 占空比越大,等效电压越高,电机转得越快。
  • 频率选择:电机控制一般用 1kHz~20kHz。频率太低,电机会发出“嗡嗡”声;频率太高,MOS 管开关损耗变大。

我曾经踩过的坑:有一次做小车底盘驱动,PWM 频率设成了 50Hz,结果电机低速时一顿一顿的,还发出刺耳的噪声。后来把频率调到 10kHz,问题就解决了。记住,电机驱动频率别低于 1kHz,否则你会听到“交响乐”。

LED 调光

LED 调光用 PWM 是最常见的做法。人眼的视觉暂留效应,让快速闪烁的 LED 看起来是连续发光的。

  • 频率要求:至少 100Hz 以上,否则人眼能感觉到闪烁。
  • 常用频率:1kHz 左右,既省电又无闪烁感。
  • 占空比范围:0%~100%,但实际应用中 5%~95% 比较常用,两端留点余量。

我记得有一次帮客户做智能灯具,他们要求调光平滑无频闪。我一开始用了 200Hz,结果用手机摄像头一拍,全是条纹。后来把频率提到 2kHz,问题就没了。嗯,这里要注意:摄像头 CMOS 的采样频率和 PWM 频率可能会打架,产生摩尔纹。

音频输出

你可能想不到,PWM 还能用来发声。通过改变 PWM 的频率和占空比,驱动蜂鸣器或喇叭,就能产生不同音调的声音。

  • 无源蜂鸣器:需要 PWM 驱动,频率决定音调,占空比决定音量。
  • 简易 DAC:用 PWM 加低通滤波器,可以输出模拟音频信号。比如一些低成本的 MP3 播放器就是这么干的。

一个小技巧:用 PWM 做音频输出时,PWM 频率至少要设到音频采样率的 10 倍以上,否则滤波后的波形失真会很严重。比如 8kHz 采样率,PWM 频率最好 80kHz 以上。

1.4 本章知识结构总览

下面这张图,把咱们这一章的核心知识点串起来了:

第1章:PWM 基础概念知识结构 PWM 脉冲宽度调制 什么是 PWM 周期与占空比 应用场景 数字信号模拟模拟量 高电平时间比例 频率 = 1 / 周期 占空比 = t_on / T 电机/灯/音频 核心思想 用数字方波的高电平时间比例,控制负载的等效功率

好了,这一章的内容就到这里。PWM 的概念其实不难,但它是后面所有驱动开发的基础。你想想看,无论是配置定时器寄存器,还是调试 I2C 时钟树,最终都要回到这两个参数:周期和占空比。搞懂了它们,后面的事情就顺了。