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 的周期、占空比和波形关系画清楚了:
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 本章知识结构总览
下面这张图,把咱们这一章的核心知识点串起来了:
好了,这一章的内容就到这里。PWM 的概念其实不难,但它是后面所有驱动开发的基础。你想想看,无论是配置定时器寄存器,还是调试 I2C 时钟树,最终都要回到这两个参数:周期和占空比。搞懂了它们,后面的事情就顺了。