2、PWM硬件原理:定时器与PWM的关系、PWM输出通道、PWM的极性配置、PWM的死区时间
各位好,咱们今天聊聊PWM的硬件原理。说实话,很多工程师用PWM调个灯、控个电机,代码跑得挺溜,但一问到定时器和PWM到底怎么配合的,就有点含糊了。我个人觉得,搞懂这层关系,才算真正入了PWM的门。
2.1 定时器与PWM的关系
说白了,PWM就是定时器的一个“高级玩法”。没有定时器,PWM就是个空壳子。
定时器内部有一个计数器,它会不停地从0往上数,数到某个设定值再归零,循环往复。这个“数数”的过程,就产生了时间基准。PWM正是利用这个计数过程,在计数值与预设的阈值进行比较时,翻转输出电平,从而产生占空比可调的方波。
核心关系:定时器提供“时间轴”,PWM比较器决定“翻转点”。两者缺一不可。
我记得刚入行时,有个同事想用软件延时模拟PWM,结果CPU啥也干不了,电机还嗡嗡响。后来换成硬件定时器,世界清净了。你想想看,硬件做比较、翻转,CPU只管设个值,多省心。
常见的定时器模式有两种:
| 模式 | 计数方式 | PWM波形特点 | 典型应用 |
|---|---|---|---|
| 边沿对齐模式 | 从0计数到ARR,然后归零 | 上升沿对齐,对称性好 | 普通调光、直流电机 |
| 中心对齐模式 | 从0到ARR,再从ARR到0 | 波形中心对称,谐波少 | 电机控制、逆变器 |
嗯,这里要注意:中心对齐模式虽然波形漂亮,但PWM频率会减半。选型时要权衡。
2.2 PWM输出通道
一个定时器通常不止一个通道。比如STM32的TIM1,有4个通道,可以同时输出4路PWM。这些通道共享同一个定时器时钟和周期,但每个通道的占空比可以独立设置。
我在项目中遇到过这样一个场景:需要控制一个四相步进电机,每相需要一路PWM,而且相位要错开。用单定时器的4个通道,配合通道间的相位偏移配置,轻松搞定。要是用4个独立定时器,同步问题就够你喝一壶的。
通道的映射关系一般如下:
- CH1 → 对应GPIO引脚(如PA0)
- CH2 → 对应GPIO引脚(如PA1)
- CH3 → 对应GPIO引脚(如PA2)
- CH4 → 对应GPIO引脚(如PA3)
小技巧:配置通道前,务必检查GPIO的复用功能(AF)。我见过有人配了半天没波形,最后发现是GPIO模式没切到复用推挽输出。
2.3 PWM的极性配置
极性,说白了就是决定“高电平有效”还是“低电平有效”。
大多数MCU的PWM输出极性寄存器里,有一个极性位:
- 极性=0:高电平为有效电平(占空比越大,高电平时间越长)
- 极性=1:低电平为有效电平(占空比越大,低电平时间越长)
为什么要搞这么复杂?我举个例子:驱动一个N沟道MOSFET,栅极需要高电平导通;但如果你用的是P沟道MOSFET,栅极需要低电平导通。这时候,改一下极性配置,比改硬件电路方便多了。
警告:极性配置错误,轻则电机不转,重则烧毁驱动管。我曾经因为极性搞反,把一块MOSFET驱动板烧了,冒烟的那种。从那以后,我每次上电前都会用示波器看一眼波形极性对不对。
2.4 PWM的死区时间
死区时间,这是做电机控制和逆变器绕不开的话题。
先说说为什么需要死区。在H桥或半桥电路中,上下两个开关管不能同时导通,否则电源直接短路,瞬间大电流能把管子烧掉。但实际电路中,开关管从导通到关断需要时间,如果上管还没完全关断,下管就导通了,那就“直通”了。
死区时间就是在上管关断和下管导通之间,插入一段“都关断”的时间。这段时长通常只有几百纳秒到几微秒。
配置死区时间时,一般通过定时器的死区发生器寄存器设置。以STM32为例,TIM1和TIM8的BDTR寄存器里,DTG[7:0]位就是用来设死区的。
// 死区时间计算示例(STM32)
// 假设定时器时钟频率为72MHz,死区时间设为1μs
// 死区时间 = DTG值 / 定时器时钟频率
// DTG = 1μs * 72MHz = 72
TIM1->BDTR |= (72 << 0); // 设置死区时间为1μs
经验值参考:
- 低速MOSFET(如IRF540):死区建议 500ns ~ 1μs
- 高速MOSFET(如IRF3205):死区建议 200ns ~ 500ns
- IGBT模块:死区建议 1μs ~ 3μs
死区时间设得太短,有直通风险;设得太长,波形失真,电机效率下降。我个人的习惯是:先按器件手册的典型值设,然后用示波器看上下管驱动波形,确保两个波形之间有明显的“空隙”,再逐步减小死区,直到临界点再加20%的余量。
下面这张图,把定时器、通道、极性和死区的关系串起来了:
这张图把咱们刚才聊的内容都串起来了。定时器是心脏,通道是手臂,极性和死区是调节器。搞懂这些,PWM配置就成功了一大半。