3、MCU定时器配置:高级定时器与通用定时器区别、PWM模式选择、自动重装载值计算

定时器配置,说白了就是给PWM信号搭骨架。骨架搭歪了,后面调得再好也白搭。我见过不少工程师,算法写得漂亮,结果定时器时钟分频算错,PWM频率直接偏了十万八千里。嗯,咱们今天就把这事彻底理清楚。

3.1 高级定时器 vs 通用定时器:别选错家伙

很多新手上来就问:“我用哪个定时器好?”其实你得先搞清楚,你要干什么活。

对比项 通用定时器(TIMx) 高级定时器(TIM1/TIM8等)
PWM通道数 通常4个(CH1~CH4) 最多6个(含互补通道)
互补输出 不支持 支持,带死区插入
刹车功能 无 有,紧急停止用
重复计数 无 有,更新事件可延迟
典型场景 普通电机、LED调光 伺服、BLDC、FOC

我个人习惯是:做三相无刷电机驱动,直接上高级定时器。为什么?因为互补PWM和死区插入是硬件自动完成的,你只需要配好寄存器,CPU几乎不用干预。通用定时器虽然也能输出PWM,但你要自己做互补、做死区,那代码量就上去了,而且容易出bug。

注意: 高级定时器的刹车输入(BKIN)一定要接。我曾经有个项目,电机堵转时电流飙升,幸亏刹车引脚接了过流信号,硬件直接封锁PWM,保住了MOS管。如果你用高级定时器却不接刹车,那跟用通用定时器没区别。

3.2 PWM模式选择:边沿对齐 vs 中心对齐

定时器配置里,PWM模式就两种主流选择:边沿对齐模式和中心对齐模式。你想想看,它们到底差在哪?

  • 边沿对齐模式(Mode 1 / Mode 2):计数器从0数到ARR,然后跳回0。PWM波形只在一边变化。适合普通调速,频率固定,占空比更新快。
  • 中心对齐模式(Mode 1 / Mode 2 / Mode 3):计数器从0数到ARR,再数回0。PWM波形两边对称。适合FOC、LLC等需要对称波形的场合。

我做过一个项目,用边沿对齐模式跑FOC,结果电流采样总是有噪声。后来换成中心对齐模式,采样点正好在计数器顶点,噪声瞬间消失。说白了,中心对齐模式天然给你留了采样窗口,这是硬件设计上的优势。

经验之谈: 如果你做的是普通直流电机调速,边沿对齐模式完全够用,而且占空比更新延迟更小。但如果你做的是矢量控制或者谐振变换器,请务必选择中心对齐模式。

3.3 自动重装载值(ARR)计算:别让频率跑偏

ARR的计算,其实就一个公式:

PWM频率 = 定时器时钟 / (PSC + 1) / (ARR + 1)

其中PSC是预分频器,ARR是自动重装载值。举个例子:

定时器时钟 = 72 MHz
目标频率 = 20 kHz
PSC = 0(不分频)

ARR = 72,000,000 / 20,000 - 1 = 3599

嗯,这里要注意:ARR的值直接影响PWM分辨率。ARR越大,占空比调节的步数越多,控制越精细。但ARR太大,频率就低了。这是个取舍问题。

核心原则: 在满足频率要求的前提下,尽量让ARR大一些。比如电机PWM常用16kHz~20kHz,ARR可以设在2000~4000之间,这样占空比分辨率能达到0.025%左右,足够了。

我曾经踩过一个坑:为了追求高频率,把ARR设成了99,结果PWM分辨率只有100步,电机低速时抖得厉害。后来把频率降到20kHz,ARR提到3999,低速性能立马改善。所以别一味追求高频,分辨率才是王道。

3.4 知识体系总览

下面这张图,把定时器配置的核心逻辑串起来了。你可以把它当作配置时的检查清单。

定时器配置知识体系 定时器配置 定时器类型选择 通用定时器 高级定时器 PWM模式选择 边沿对齐 中心对齐 ARR/PSC计算 频率 = 时钟 / (PSC+1) / (ARR+1) 配置检查清单 1. 先确定电机类型 → 选择定时器类型(通用/高级) 2. 根据控制算法 → 选择PWM模式(边沿/中心对齐) 3. 根据频率和分辨率要求 → 计算PSC和ARR 4. 验证:实际频率误差 < 1%,分辨率满足控制需求

3.5 实际配置步骤(以STM32为例)

光说不练假把式。咱们走一遍实际配置流程:

  1. 使能定时器时钟:RCC->APB1ENR 或 APB2ENR 对应位置1。
  2. 配置GPIO为复用功能:把定时器通道对应的引脚设为AF模式。
  3. 设置PSC和ARR:按目标频率计算并写入寄存器。
  4. 选择PWM模式:CCMRx寄存器中OCxM位设为110(PWM模式1)或111(PWM模式2)。
  5. 使能输出:CCER寄存器中CCxE置1。
  6. 使能定时器:CR1寄存器中CEN置1。
小技巧: 配置完成后,先别急着跑电机。用示波器看PWM波形,确认频率和占空比正确。我每次都是这么干的,省得烧管子。