一、PWM 基础概念:从波形到实战
各位同学好,我是老周。今天咱们开始聊 PWM 输出模块的部署。说实话,PWM 这玩意儿在嵌入式里太常见了——调个灯、控个电机、甚至模拟音频输出,哪哪都有它。但很多新手上来就调库、写寄存器,反而把最基础的东西忽略了。
我个人习惯,学任何外设模块,先搞懂三个东西:它是什么、怎么量化、用在哪。这一章咱们就把 PWM 的底裤扒干净。
一句话总结:PWM 就是用数字方波模拟模拟量的一种手段。你想想看,单片机引脚只能输出 0 或 1,但通过快速切换高低电平,就能让负载“感觉”到中间值。
1.1 什么是 PWM?
PWM,全称 Pulse Width Modulation,脉宽调制。说白了,就是固定频率下,改变一个周期内高电平的宽度。
我刚开始做项目时,总觉得 PWM 很玄乎。直到有一次调试一个直流电机调速板,示波器一挂上去,看到那串方波,瞬间就明白了——高电平宽,电机转得快;高电平窄,电机转得慢。就这么简单。
一个典型的 PWM 波形包含三个核心参数:
- 频率(Frequency):每秒多少个周期,单位 Hz
- 周期(Period):一个完整波形的时间,单位秒,周期 = 1 / 频率
- 占空比(Duty Cycle):高电平时间占整个周期的百分比
我的小技巧:频率决定“响应速度”,占空比决定“输出强度”。调电机用低频(50Hz~1kHz),调 LED 用高频(1kHz 以上),否则你会看到灯在闪——人眼对 100Hz 以下的闪烁很敏感。
1.2 占空比、频率、周期——它们的关系
这三个参数是 PWM 的命根子。咱们用一张表说清楚:
| 参数 | 定义 | 单位 | 典型值(电机) | 典型值(LED) |
|---|---|---|---|---|
| 频率 | 每秒波形重复次数 | Hz | 50 ~ 500 Hz | 1k ~ 10k Hz |
| 周期 | 一个完整波形的时间 | 秒(s) | 20ms ~ 2ms | 1ms ~ 0.1ms |
| 占空比 | 高电平时间占比 | 百分比(%) | 0% ~ 100% | 0% ~ 100% |
举个例子:频率 1kHz,周期就是 1ms。如果占空比 50%,高电平持续 0.5ms,低电平 0.5ms。如果占空比 75%,高电平 0.75ms,低电平 0.25ms。
嗯,这里要注意——占空比 0% 就是一直低电平,100% 就是一直高电平。有些芯片的 PWM 模块不支持 0% 或 100%,你得看数据手册。
1.3 PWM 在电机控制中的应用
电机控制是我最早接触 PWM 的场景。我记得刚毕业那会儿,跟师傅调一个智能小车底盘,四个直流电机,用 L298N 驱动。师傅扔给我一句:“占空比给 70%,跑起来看看。”
我傻乎乎地写了个 70% 的占空比,电机嗡嗡响,但转速就是上不去。后来才发现——电机有死区电压,占空比太低时,电机根本转不动。
直流电机调速的核心逻辑:
- PWM 频率不能太高(否则电机电感会滤掉波形)
- 占空比决定平均电压,平均电压决定转速
- 需要配合 H 桥电路实现正反转
避坑指南:我曾经在一个项目中,把电机 PWM 频率设到了 20kHz。结果电机啸叫,驱动器发热严重。后来查资料才知道——频率超过人耳范围(20kHz)虽然听不到,但 MOSFET 开关损耗会剧增。电机 PWM 一般 100Hz ~ 1kHz 就够了。
1.4 PWM 在灯光调节中的应用
灯光调节是 PWM 的另一个经典场景。LED 调光,说白了就是快速开关灯,利用人眼的视觉暂留效应。
我做过一个智能台灯项目,用 PWM 调 LED 亮度。刚开始频率设 200Hz,结果用手机摄像头一拍,全是条纹闪烁。后来把频率提到 2kHz,肉眼和摄像头都看不出闪烁了。
LED 调光的几个要点:
- 频率 > 100Hz:避免肉眼可见闪烁
- 频率 > 1kHz:避免摄像头/运动检测设备捕捉到闪烁
- 占空比线性 vs 对数:人眼对亮度的感知是对数的,所以 50% 占空比看起来不是一半亮
我的经验:做 LED 调光时,建议用对数映射表。比如占空比 0%~100% 映射到人眼感知的 0~255 级亮度。否则你会觉得——前 50% 占空比亮度变化很大,后 50% 几乎没变化。
1.5 本章知识体系总览
下面这张图,把 PWM 的核心概念、参数关系和应用场景串起来了。你把它存脑子里,后面学寄存器配置、驱动编写会轻松很多。
1.6 小结
这一章咱们把 PWM 的底子打好了。你记住三句话:
- PWM 是数字世界的模拟手——用方波模拟连续量
- 频率和占空比是两把尺子——频率定节奏,占空比定强度
- 电机和灯光是两大战场——电机看平均电压,灯光看视觉暂留