3、STM32高级定时器概述:TIM1/TIM8/TIM20等高级定时器特性、结构框图、与通用定时器的区别
在STM32的定时器家族中,高级控制定时器(Advanced-control Timer)始终占据着特殊地位。无论是电机FOC控制、数字电源的PWM整流,还是三相逆变器的驱动,高级定时器都是核心的时序引擎。与通用定时器(如TIM2/TIM3/TIM4)相比,高级定时器不仅拥有更宽的计数位宽和更灵活的时钟源,更关键的是它内置了互补PWM输出、死区插入、刹车保护(Break)以及硬件故障封锁等面向功率变换场景的专用逻辑。本章将围绕TIM1/TIM8/TIM20(部分系列)展开,从特性参数、内部结构到与通用定时器的差异,建立对高级定时器的系统性认知。
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翻转速率和驱动器延迟,有效死区被压缩。
实际操作步骤:
- 将DTG值从85增大到102(对应600ns),预留足够的裕量。
- 在TIM1刹车中断服务程序中增加故障计数,连续3次过流则锁定PWM输出并点亮故障灯。
- 将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中的具体应用。