1. PWM基础概念:什么是PWM、占空比、频率、周期、分辨率

做硬件这么多年,PWM(脉冲宽度调制)是我打交道最多的信号之一。说白了,PWM就是用数字信号去模拟模拟量。你想想看,单片机引脚只能输出高电平或低电平,但通过快速切换,就能让负载感受到一个连续可调的平均电压。

我刚开始接触PWM时,总觉得这东西有点绕。后来调了一个电机驱动项目,才真正理解它的妙处。嗯,咱们一步步来拆解。

1.1 什么是PWM?

PWM的全称是Pulse Width Modulation,中文叫脉冲宽度调制。它的核心思想很简单:

  • 输出一个方波信号
  • 高电平的时间可以调节
  • 低电平的时间随之变化
  • 周期保持不变

举个例子,你有一个LED灯。如果一直给高电平,灯最亮。如果一直给低电平,灯灭掉。但如果以极快的速度来回切换,人眼就感觉不到闪烁,只会看到一个亮度介于两者之间的灯。这就是PWM的直观效果。

核心要点:PWM不是真的模拟信号,而是通过时间上的平均效果来模拟连续量。频率越高,模拟效果越平滑。

1.2 占空比(Duty Cycle)

占空比是PWM最重要的参数,没有之一。它的定义是:

占空比 = 高电平时间 / 整个周期时间 × 100%

比如一个周期是100微秒,高电平占了75微秒,那占空比就是75%。

我在项目中遇到过一件事:一个同事把占空比设成了100%,结果电机一直全速转,怎么调都不变。后来发现他以为100%占空比是最大,但实际100%就是一直高电平,PWM根本就没在调制了。嗯,这个坑我记了很久。

占空比 高电平时间 低电平时间 平均电压(5V系统)
0% 0 μs 100 μs 0 V
25% 25 μs 75 μs 1.25 V
50% 50 μs 50 μs 2.5 V
75% 75 μs 25 μs 3.75 V
100% 100 μs 0 μs 5 V

我的习惯:调试PWM时,我总先用50%占空比做基准。这样示波器上能看到对称的方波,一眼就能判断信号质量好不好。

1.3 频率与周期

频率和周期是倒数关系,这个大家都知道:

频率(Hz)= 1 / 周期(秒)

但实际选频率时,有很多讲究。我简单说说我的经验:

  • 电机控制:常用20kHz到50kHz。低于20kHz人耳能听到,会有烦人的啸叫声。我调过一个项目,用了15kHz,客户投诉说电机有噪音,后来改到25kHz就解决了。
  • LED调光:常用100Hz到1kHz。人眼对低频闪烁敏感,低于60Hz会明显看到闪烁。我建议至少用200Hz以上。
  • 开关电源:常用50kHz到500kHz。频率越高,电感电容可以越小,但开关损耗也越大。

注意:频率不是越高越好。频率太高,MCU的PWM模块可能跑不动,而且开关损耗会显著增加。我曾经在一个项目中把频率设到1MHz,结果MOS管烫得能煎鸡蛋。

1.4 分辨率(Resolution)

分辨率决定了你能把占空比调得多精细。它通常用位数来表示:

分辨率 = 2^n 个等级,其中n是位数

举个例子:

  • 8位分辨率:256个等级(0到255)
  • 10位分辨率:1024个等级(0到1023)
  • 16位分辨率:65536个等级(0到65535)

分辨率越高,调节越精细。但代价是什么?

我算给你看:如果PWM频率是20kHz,周期就是50微秒。用8位分辨率,每个等级的时间是50μs / 256 ≈ 0.195微秒。用16位分辨率,每个等级的时间是50μs / 65536 ≈ 0.76纳秒。你觉得MCU的定时器能精确到0.76纳秒吗?

嗯,这里要注意:分辨率越高,需要的时钟频率也越高。实际项目中,8位或10位分辨率已经够用。除非是做高精度电源或音频应用,否则别盲目追求高分辨率。

分辨率 等级数 适用场景
8位 256 LED调光、普通电机控制
10位 1024 精密电机控制、风扇调速
12位 4096 音频输出、高精度电源
16位 65536 仪表测量、伺服控制

避坑指南:我曾经在一个项目中用了16位分辨率,结果PWM频率只能跑到1kHz。后来改成10位分辨率,频率提升到20kHz,效果反而更好。记住:分辨率和频率是跷跷板,你得根据实际需求做取舍。

1.5 小结

好了,PWM的基础概念就这些。总结一下:

  • PWM:用数字信号模拟模拟量
  • 占空比:高电平时间占周期的比例,决定平均电压
  • 频率:每秒的周期数,影响噪声和响应速度
  • 周期:一个完整波形的时间,频率的倒数
  • 分辨率:占空比的调节精细度,位数越高越精细

下一章,我会用示波器实际抓几个PWM波形,带你看懂这些参数在屏幕上的真实样子。到时候你会发现,理论和实际之间,总有些小惊喜。