2. PWM硬件原理:定时器与PWM的关系、PWM输出通道、PWM频率与分辨率的关系
讲PWM,绕不开定时器。很多新手上来就调PWM参数,调了半天波形不对,其实就是没搞懂定时器是怎么“变”出PWM的。这一节我把这三块掰开揉碎了讲清楚。
2.1 定时器与PWM的关系
说白了,PWM就是定时器的一个“副业”。定时器本来是用来计时的,但工程师们发现,只要在计数过程中加几个比较器,就能输出方波。
我习惯把定时器想象成一个“电子秒表”:
- 它从0开始往上数(或者往下数)
- 数到某个值,触发一次动作
- 数到最大值,自动归零重来
PWM就是利用这个“数到某值就翻转电平”的机制。你看下面这张图就明白了:
核心逻辑就一句话:CNT数到CCR就翻转,数到ARR就归零。ARR决定周期,CCR决定高电平宽度。
我的习惯:调试PWM时,先看ARR值对不对,再看CCR值。ARR错了,整个周期都歪了,CCR调得再准也没用。
2.2 PWM输出通道
一个定时器通常有多个通道。比如STM32的TIM2,有4个通道,每个通道都能独立输出PWM。
你想想看,这意味着什么?一个定时器就能同时控制4路电机或者4个LED,而且它们共用同一个时钟基准,相位天然同步。
我整理了一下常见的通道配置:
| 定时器 | 通道数 | 输出引脚 | 复用功能 |
|---|---|---|---|
| TIM2 | 4 | PA0-PA3 / PA15, PB3, PB10, PB11 | 通用定时器,16位 |
| TIM3 | 4 | PA6, PA7, PB0, PB1 / PC6-PC9 | 通用定时器,16位 |
| TIM1 | 4 | PA8-PA11 / PE9, PE11, PE13, PE14 | 高级定时器,支持互补输出 |
| TIM8 | 4 | PC6-PC9 / PE5, PE7, PE9, PE11 | 高级定时器,支持刹车功能 |
每个通道的工作原理是一样的,但输出引脚不同。选通道其实就是选引脚——你得看PCB上那个引脚连到了哪里。
我曾经踩过的坑:有一次我选了TIM2_CH1,但没注意这个引脚被板上的一个上拉电阻拉高了。结果PWM输出一直高电平,查了半天才发现是硬件冲突。所以选通道前,一定先看原理图,确认引脚没有被其他外设占用。
2.3 PWM频率与分辨率的关系
这是最容易被忽略的地方。频率和分辨率,就像鱼和熊掌——你很难兼得。
先看公式:
PWM频率 = 定时器时钟 / (ARR + 1) / (预分频系数 + 1)
分辨率 = 1 / (ARR + 1) × 100%
ARR越大,分辨率越高,但频率越低。反过来,想要高频,ARR就得小,分辨率就跟着降。
举个例子你就明白了:
| 场景 | 时钟频率 | 预分频 | ARR | PWM频率 | 分辨率 |
|---|---|---|---|---|---|
| LED调光 | 72 MHz | 71 | 999 | 1 kHz | 0.1% (1000级) |
| 电机控制 | 72 MHz | 0 | 719 | 100 kHz | 0.14% (720级) |
| 音频输出 | 72 MHz | 0 | 35 | 2 MHz | 2.78% (36级) |
看到没?LED调光需要细腻的亮度变化,所以分辨率要高,频率1kHz就够了。电机控制需要高频来降低噪音,分辨率可以牺牲一点。音频输出需要2MHz以上的载波,分辨率就只能降到36级——这时候波形会明显有阶梯感。
我的经验法则:
- LED调光:频率 > 100Hz,分辨率 > 256级(8位)
- 直流电机:频率 10kHz-50kHz,分辨率 > 100级
- 舵机控制:频率 50Hz,分辨率 > 1000级
- 音频DAC:频率 > 1MHz,分辨率看需求
嗯,这里要注意一点:分辨率不是越高越好。16位分辨率(65536级)看起来很美好,但ARR=65535,如果时钟72MHz不分频,PWM频率只有1098Hz。很多应用根本用不了这么低的频率。
我建议:先确定应用需要的PWM频率,再反推ARR最大值,最后看分辨率能不能接受。如果分辨率不够,要么提高时钟频率,要么换更高主频的芯片。
最后总结一下这三者的关系:
- 定时器是PWM的“心脏”,提供计数和比较机制
- 输出通道是PWM的“手脚”,决定信号从哪个引脚出去
- 频率与分辨率是PWM的“性能指标”,受ARR和时钟共同约束