3、STM32高级定时器概述:TIM1/TIM8/TIM20等高级定时器特性、结构框图、与通用定时器的区别

在STM32的定时器家族中,高级控制定时器(Advanced-control Timer)始终占据着特殊地位。无论是电机FOC控制、数字电源的PWM整流,还是三相逆变器的驱动,高级定时器都是核心的时序引擎。与通用定时器(如TIM2/TIM3/TIM4)相比,高级定时器不仅拥有更宽的计数位宽和更灵活的时钟源,更关键的是它内置了互补PWM输出、死区插入、刹车保护(Break)以及硬件故障封锁等面向功率变换场景的专用逻辑。本章将围绕TIM1/TIM8/TIM20(部分系列)展开,从特性参数、内部结构到与通用定时器的差异,建立对高级定时器的系统性认知。

STM32高级定时器(TIM1/TIM8/TIM20)核心结构框图 时钟源 CK_PSC (内部时钟/外部触发) 预分频 PSC 1~65536 时基单元 16位计数器 CNT (0~65535) 自动重载 ARR / 重复计数 RCR 向上/向下/中心对齐计数 捕获/比较通道 CH1~CH4 + 互补通道 CH1N~CH3N CCR1~CCR4 比较寄存器 PWM模式1/2、输出比较、输入捕获 CK_CNT CNT值 死区与刹车 DTG 死区发生器 (0~7.5μs) BRK 刹车输入 (电平/边沿) 自动输出保护 MOE=0 PWM信号 输出控制 CCER 输出使能/极性 MOE 主输出使能 GPIO 引脚 TIM1_CH1 / CH1N / CH2 / CH2N 触发与事件 TRGO 触发输出 ITRx 内部触发输入 TRGI 中断/DMA 更新/捕获/比较/刹车中断 关键特性标注: • 16位计数器,支持中心对齐模式(FOC电流采样常用) • 2~3个互补PWM输出对,死区时间可编程(DTG寄存器) • 刹车输入BRK支持硬件紧急关断,MOE位强制输出安全电平 • 支持编码器接口、霍尔传感器接口,适合电机控制闭环

3.1 高级定时器的核心特性与定位

高级定时器在STM32产品线中通常以TIM1、TIM8、TIM20命名(具体取决于芯片系列,例如STM32F103拥有TIM1和TIM8,STM32H743则包含TIM1、TIM8、TIM20)。它们被设计用于要求最高实时性和安全性的功率控制场景。与通用定时器相比,高级定时器最显著的特征是具备互补PWM输出(Complementary PWM Output)和可编程死区插入(Programmable Dead-time Insertion)。这两个功能直接服务于半桥/全桥驱动电路——当上下桥臂的功率管需要交替导通时,必须插入一段死区时间以防止直通短路。

从硬件资源角度看,高级定时器通常包含以下关键模块:

  • 16位时基单元:包含预分频器(PSC)、计数器(CNT)、自动重载寄存器(ARR)和重复计数寄存器(RCR)。RCR允许定时器每N次溢出才产生一次更新事件,这在FOC控制中用于精确控制PWM周期与ADC采样同步。
  • 4个独立的捕获/比较通道:每个通道均可配置为输入捕获或输出比较模式。其中CH1~CH3拥有互补输出(CH1N、CH2N、CH3N),CH4仅支持非互补输出。
  • 死区发生器:通过DTG寄存器(8位)配置死区时间,分辨率取决于时钟频率。例如在72MHz时钟下,死区步进为13.9ns,最大可设置约7.5μs。
  • 刹车功能(Break Function):支持1~2个刹车输入引脚(BRK、BRK2),可配置为电平触发或边沿触发。一旦触发刹车,所有PWM输出立即进入预设的安全状态(高阻、低电平或高电平),同时置位MOE(Main Output Enable)位为0。
  • 编码器接口与霍尔传感器接口:高级定时器可以直接连接增量式编码器的A/B/Z信号,或霍尔传感器的三相信号,实现电机转速和位置检测。

工程视角:在FOC控制中,高级定时器的价值不仅在于产生6路PWM(3对互补),更在于其硬件级的安全保护。当发生过流、过压或急停信号时,刹车输入可以在几百纳秒内封锁所有PWM输出,无需CPU干预。这是通用定时器无法实现的。

3.2 结构框图深度解析:从时基到输出

理解高级定时器的内部结构,是编写可靠驱动代码的前提。我们以TIM1为例,将其划分为四个主要功能域:时基域、捕获/比较域、输出控制域、触发/同步域。

时基域负责产生计数时钟和更新事件。预分频器PSC将内部时钟(如APB2定时器时钟,通常为72MHz或更高)分频后得到计数器时钟CK_CNT。计数器CNT在CK_CNT驱动下递增/递减/中心对齐计数。自动重载寄存器ARR决定计数周期,而重复计数寄存器RCR则控制每隔多少次溢出才产生一次更新事件(UEV)。在FOC应用中,通常将RCR设置为0,即每次溢出都产生更新事件,用于触发ADC采样。

捕获/比较域包含4个通道。每个通道都有一个16位的捕获/比较寄存器(CCR)。在输出模式下,计数器CNT与CCR的值不断比较,当CNT小于CCR时输出有效电平,反之输出无效电平,从而产生PWM波形。在输入捕获模式下,当外部信号发生跳变时,CNT的值被锁存到CCR中,用于测量脉宽或周期。

输出控制域是高级定时器的精髓所在。每个通道的输出信号首先经过死区发生器,产生一对互补信号(如CH1和CH1N)。死区时间由DTG寄存器控制。随后,这些信号经过输出使能电路(CCER寄存器)和主输出使能(MOE位)的“与”逻辑,最终输出到GPIO引脚。当刹车事件发生时,MOE位被硬件自动清零,所有输出立即变为预设的安全状态。

触发/同步域允许定时器之间级联或与外部信号同步。例如,TIM1的TRGO(触发输出)可以连接到TIM2的ITR0,实现级联计数。在FOC中,常用TIM1的更新事件触发ADC注入转换,确保电流采样与PWM中心对齐。

功能模块 寄存器/位 FOC应用中的典型配置
时基 PSC, ARR, RCR PSC=0, ARR=PWM周期-1, RCR=0
计数模式 CMS, DIR 中心对齐模式1(CMS=01),用于对称PWM
死区 DTG[7:0] 根据功率管开关时间设置,如500ns
刹车 BRK, MOE 使能BRK电平触发,MOE初始为1
输出极性 CCER, CCxP 高电平有效,互补通道极性相反

3.3 与通用定时器的关键区别

通用定时器(如TIM2、TIM3、TIM4、TIM5)在STM32中扮演着通用计时、输入捕获、输出比较和PWM生成的角色。它们与高级定时器的差异主要体现在以下维度:

  • 互补输出与死区:通用定时器没有互补输出引脚,也没有死区插入逻辑。如果需要驱动半桥电路,必须使用外部逻辑电路或软件模拟死区,这既增加BOM成本又降低可靠性。
  • 刹车保护:通用定时器不具备刹车输入引脚。一旦发生故障,只能通过中断服务程序(ISR)软件关闭PWM,响应时间通常在微秒级,而高级定时器的硬件刹车在纳秒级。
  • 重复计数寄存器(RCR):通用定时器没有RCR。在需要“每N个周期产生一次更新事件”的场景(如FOC的电流环频率低于PWM频率)中,通用定时器需要额外的软件计数器,增加了CPU负担。
  • 编码器/霍尔接口:虽然部分通用定时器(如TIM4)也支持编码器模式,但高级定时器的编码器接口支持更灵活的计数模式和滤波配置,更适合高精度电机控制。
  • 触发输出(TRGO):高级定时器的TRGO可以配置为更新事件、比较脉冲、OCxREF信号等,用于级联或触发ADC。通用定时器虽然也有TRGO,但可选的触发源较少。
对比维度 高级定时器(TIM1/TIM8/TIM20) 通用定时器(TIM2/TIM3/TIM4)
计数器位宽 16位(部分系列TIM20为32位) 16位或32位(TIM2/TIM5为32位)
互补PWM输出 支持(CH1~CH3带互补通道) 不支持
死区插入 硬件自动插入,DTG可编程 无硬件支持
刹车输入 1~2个(BRK/BRK2) 无
重复计数RCR 有 无
编码器接口 支持,带数字滤波 部分支持,功能较弱
DMA请求 每个通道独立DMA请求 每个通道独立DMA请求
典型应用 FOC、三相逆变、数字电源 通用计时、PWM输出、脉冲计数

3.4 实战场景:FOC控制中的高级定时器配置

以STM32G4系列驱动一个永磁同步电机(PMSM)为例,我们使用TIM1作为PWM生成器,TIM2作为编码器计数器。系统时钟为170MHz,PWM频率设定为20kHz,死区时间设定为500ns。

初始现象与目标:电机在低速运行时出现明显的电流噪声,且偶发过流报警。初步分析认为PWM死区时间不足,导致上下桥臂直通。

关键参数计算:

// 定时器时钟 = 170MHz
// PWM频率 = 20kHz → 周期 = 50μs
// 中心对齐模式:ARR = 170MHz / (2 * 20kHz) - 1 = 4250 - 1 = 4249
// 死区时间 = 500ns → DTG = 500ns * 170MHz = 85 → 0x55

TIM1->PSC = 0;
TIM1->ARR = 4249;
TIM1->RCR = 0;
TIM1->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // PWM模式1
TIM1->CCER = TIM_CCER_CC1E | TIM_CCER_CC1NE;       // 使能CH1和CH1N
TIM1->BDTR = TIM_BDTR_MOE | (85 << TIM_BDTR_DTG_Pos); // 使能主输出,设置死区

分析判断过程:通过示波器测量TIM1_CH1和TIM1_CH1N的波形,发现死区时间实际约为300ns,低于功率管数据手册要求的400ns最小死区。原因是DTG寄存器的量化步进为1/170MHz≈5.88ns,85×5.88≈500ns,但实际由于GPIO翻转速率和驱动器延迟,有效死区被压缩。

实际操作步骤:

  1. 将DTG值从85增大到102(对应600ns),预留足够的裕量。
  2. 在TIM1刹车中断服务程序中增加故障计数,连续3次过流则锁定PWM输出并点亮故障灯。
  3. 将TIM1的更新事件映射到ADC注入通道,确保电流采样点位于PWM中心。

结果对比:调整后,电机低速运行时的电流噪声明显降低,过流报警频率从每小时约5次降为0次。同时,由于死区时间增加,PWM输出略有失真,但通过FOC算法中的死区补偿策略进行了修正。

风险提示:死区时间并非越大越好。过大的死区会导致PWM输出电压损失,增加电流谐波,降低电机效率。在量产设计中,应结合功率管的开关特性(tr、tf、td(on)、td(off))和驱动芯片的传播延迟,通过实验确定最优死区值。

3.5 常见误区与设计复盘

在工程实践中,工程师使用高级定时器时常陷入以下误区:

  • 误区一:将高级定时器当作通用定时器使用。例如,仅用TIM1产生单路PWM,而忽略了其互补输出和刹车功能。这浪费了芯片资源,且增加了系统复杂度。
  • 误区二:忽视MOE位的作用。MOE位是主输出使能的总开关。在初始化时,必须先设置BDTR寄存器的MOE位为1,否则PWM引脚不会输出信号。很多初学者在此处卡住。
  • 误区三:刹车极性配置错误。BRK引脚可以配置为高电平有效或低电平有效。如果外部急停开关是常闭型(断开为故障),则应配置为低电平有效,并启用内部上拉。
  • 误区四:死区时间计算忽略时钟分频。DTG寄存器的步进与定时器时钟相关,而非系统主频。在APB2预分频不为1时,定时器时钟可能是系统时钟的2倍,需仔细核对。

经验总结:在FOC项目启动时,建议先编写一个“定时器自检”函数,在无电机的情况下验证PWM波形、死区时间和刹车功能。具体步骤为:①配置TIM1输出6路PWM;②用示波器测量CH1和CH1N的死区;③短接BRK引脚到地,观察所有PWM输出是否立即变为低电平;④测量从BRK触发到PWM关闭的延迟时间。这一流程应在连接功率板之前完成,避免损坏硬件。

回顾本章内容,高级定时器TIM1/TIM8/TIM20是STM32中面向功率控制的“重型武器”。它们通过硬件级的互补输出、死区插入和刹车保护,为FOC控制提供了安全、高效的PWM生成方案。理解其结构框图,掌握与通用定时器的差异,是后续学习FOC算法实现、电流采样同步和故障保护设计的基础。在下一阶段,我们将深入探讨高级定时器的PWM输出模式配置,包括中心对齐模式、边沿对齐模式以及它们在FOC中的具体应用。