4、高级定时器PWM生成:互补PWM、死区插入、刹车功能、输出极性控制,以及如何配置PWM频率和占空比
STM32高级定时器(TIM1/TIM8)在电机控制、逆变电源、开关电源等场景中扮演着不可替代的角色。与通用定时器相比,高级定时器不仅具备基本的PWM输出能力,更集成了互补输出、死区插入、刹车保护、重复计数等专为功率驱动设计的硬件机制。本章将围绕高级定时器PWM生成的核心要素展开,重点剖析互补PWM与死区插入的硬件原理、刹车功能的保护逻辑、输出极性控制的灵活配置,以及PWM频率与占空比的计算方法,并结合实际工程案例说明配置流程与常见陷阱。
上图展示了高级定时器PWM生成的整体数据流:时基单元产生计数基准,比较/捕获通道根据CCR值产生电平翻转,死区发生器在互补通道间插入延迟,刹车保护电路实时监控故障信号,最终通过输出极性控制将波形送至引脚。理解这条链路是掌握高级定时器PWM配置的关键。
4.1 互补PWM与死区插入的核心原理
互补PWM是指同一通道输出一对逻辑电平相反、但中间存在短暂间隔的PWM信号,通常用于驱动半桥或全桥电路中的上下桥臂功率管。若上下桥臂同时导通,将造成电源直通短路,烧毁功率器件。死区插入正是为了解决这一问题:在上下桥臂切换时,先关断导通的管子,等待一段安全时间后再开通另一只管子,这段等待时间即为死区时间。
STM32高级定时器通过硬件自动生成互补信号,无需软件干预。当CCR值与CNT匹配时,主输出CHy翻转;互补输出CHyN则自动产生相反电平,并在翻转沿插入由DTG寄存器配置的死区延迟。死区时间可精确到定时器时钟周期的整数倍,典型范围从几百纳秒到几微秒,具体取决于功率管的开关特性。
死区插入的硬件实现基于延迟链:主输出信号经过可编程延迟单元后生成互补信号,延迟量由DTG寄存器控制。该设计确保在任何占空比条件下,互补信号之间始终存在最小间隔,即使占空比接近0%或100%也不会出现直通风险。
4.2 刹车功能与输出极性控制
刹车功能是高级定时器区别于通用定时器的重要特性,用于在系统故障时快速关断PWM输出,保护功率电路。刹车信号源包括外部BKIN引脚、内部比较器输出、时钟失效检测等。当刹车事件触发时,定时器自动将MOE(主输出使能)位清零,所有PWM输出立即进入安全状态(高阻或低电平,由配置决定)。
刹车功能支持自动恢复和锁存两种模式。自动恢复模式下,刹车信号消失后PWM自动重新输出;锁存模式下,需软件清除刹车标志并重新置位MOE才能恢复输出。电机驱动通常采用锁存模式,防止故障未排除时自动重启造成二次损坏。
输出极性控制通过CCER寄存器的CC1P/CC1NP位实现。当极性位为0时,输出高电平为有效电平;为1时,输出低电平为有效电平。这一功能允许设计者灵活匹配外部驱动电路的电平要求,例如某些栅极驱动器需要低电平有效输入,或需要将PWM信号反相后驱动PNP型功率管。
| 配置项 | 寄存器位 | 功能说明 | 典型应用 |
|---|---|---|---|
| 输出极性 | CCER.CC1P | 选择主输出有效电平 | 匹配栅极驱动器逻辑 |
| 互补极性 | CCER.CC1NP | 选择互补输出有效电平 | 调整互补信号相位 |
| 刹车极性 | BDTR.BKP | 选择刹车输入有效电平 | 适配故障信号电平 |
| 刹车模式 | BDTR.BKE | 使能/禁止刹车功能 | 故障保护开关 |
| MOE | BDTR.MOE | 主输出使能总开关 | 软件控制输出通断 |
4.3 PWM频率与占空比配置方法
PWM频率由定时器时钟、预分频器PSC和自动重装载值ARR共同决定。计算公式为:PWM频率 = 定时器时钟 / ((PSC+1) × (ARR+1))。占空比则由比较值CCR决定:占空比 = CCR / (ARR+1)。配置流程通常遵循以下步骤:
- 使能定时器时钟:通过RCC寄存器开启TIM1/TIM8的时钟源。
- 配置时基单元:设置PSC和ARR,确定PWM频率和计数周期。
- 配置输出比较模式:在CCMR寄存器中设置PWM模式1或模式2,并配置预装载使能。
- 设置比较值:写入CCR寄存器,确定初始占空比。
- 配置死区时间:在BDTR寄存器中设置DTG值。
- 配置输出极性和使能:在CCER中设置极性位,并使能主输出和互补输出。
- 使能主输出MOE:置位BDTR.MOE,允许PWM信号输出到引脚。
- 启动定时器:设置CR1.CEN位,开始计数。
// 以TIM1为例,72MHz时钟,输出20kHz PWM,初始占空比50%
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_BDTRInitTypeDef TIM_BDTRInitStruct;
// 1. 时基配置:PSC=0, ARR=3599 → 72MHz/3600 = 20kHz
TIM_InitStruct.TIM_Prescaler = 0;
TIM_InitStruct.TIM_Period = 3599;
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_InitStruct);
// 2. 输出比较配置:PWM模式1,占空比50% → CCR=1800
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_Pulse = 1800;
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OC1Init(TIM1, &TIM_OCInitStruct);
// 3. 死区配置:1μs @72MHz → DTG=72
TIM_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Enable;
TIM_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Enable;
TIM_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStruct.TIM_DeadTime = 72;
TIM_BDTRInitStruct.TIM_Break = TIM_Break_Enable;
TIM_BDTRInitStruct.TIM_BreakPolarity = TIM_BreakPolarity_High;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStruct);
// 4. 使能主输出并启动
TIM_Cmd(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM1, ENABLE);
实际工程中,PWM频率和占空比的调整需考虑分辨率与精度的平衡。ARR值越大,频率分辨率越高,但占空比步进也越细;反之亦然。例如需要1Hz精度的20kHz PWM,ARR需达到3600,占空比步进为1/3600≈0.028%,满足大多数电机控制需求。
4.4 实战案例:三相无刷电机FOC驱动中的PWM配置
以三相无刷电机FOC控制为例,高级定时器TIM1产生三对互补PWM(CH1/CH1N、CH2/CH2N、CH3/CH3N)驱动三相逆变桥。系统要求:PWM频率16kHz,死区时间2μs,刹车信号来自过流比较器,低电平有效。
初始参数:定时器时钟72MHz,目标频率16kHz,死区2μs。计算ARR = 72MHz/16kHz - 1 = 4499;DTG = 2μs × 72MHz = 144。由于DTG[7:5]=100时Tdtg=2×13.9ns,需查表选择合适档位,最终配置DTG=144对应死区约2μs。
配置过程:首先初始化时基单元,设置PSC=0,ARR=4499。然后配置三个通道为PWM模式1,初始占空比设为0(CCR=0),防止上电瞬间电机抖动。接着配置BDTR寄存器:死区144,刹车使能,刹车极性为低电平有效(BKP=1),刹车模式为锁存(BKE=1)。最后使能MOE并启动定时器。
运行中调整:FOC算法根据电流环输出实时更新CCR值,改变各相占空比。由于CCR预装载使能,更新在下一个PWM周期边界生效,避免波形畸变。当发生过流时,BKIN引脚拉低,硬件立即封锁所有输出,MOE清零,PWM引脚进入高阻态,保护功率管。
结果验证:用示波器测量CH1和CH1N波形,确认死区时间约2μs,互补信号无交叠。在过流测试中,BKIN拉低后PWM输出在1μs内关断,波形无毛刺。通过调整CCR值,占空比从0%平滑过渡到90%,电机转速线性变化,验证了配置的正确性。
复盘经验:死区时间并非越大越好,过大的死区会增加谐波损耗,降低电压利用率;过小则存在直通风险。建议根据功率管栅极电荷和驱动能力计算最小死区,并留出20%~30%裕量。此外,刹车信号应使用硬件比较器而非软件检测,确保响应时间在微秒级。
4.5 常见误区与总结
高级定时器PWM配置中,工程师常犯以下错误:
- 忘记使能MOE:即使配置了所有寄存器,MOE未置位时引脚仍无输出,这是最常见的"PWM不工作"原因。
- 死区时间单位混淆:DTG寄存器值不是直接的时间值,需根据定时器时钟和DTG编码规则换算,直接写入期望微秒数会导致死区异常。
- 刹车极性配置错误:刹车信号有效电平与外部电路不匹配,导致刹车功能误触发或失效。
- 互补输出未使能:仅使能主输出而忘记使能互补输出,导致半桥驱动缺相。
- 预装载未开启:CCR和ARR的预装载位未设置,更新时刻不确定,造成PWM波形抖动。
总结而言,高级定时器PWM生成的核心在于理解硬件自动化的互补与死区机制,正确配置刹车保护逻辑,并精确计算频率与占空比参数。掌握这些要点后,无论是电机驱动、逆变电源还是其他功率变换应用,都能游刃有余地完成PWM系统设计。建议在实际项目中,先使用最小系统验证PWM波形,再接入功率电路,以降低调试风险。