STM32G474的HRTIM保姆级教程:手把手配置6路互补PWM驱动LLC谐振变换器
STM32G474的HRTIM保姆级教程:手把手配置6路互补PWM驱动LLC谐振变换器
在高效电源设计领域,LLC谐振变换器凭借其软开关特性和高转换效率,已成为工业级AC-DC和DC-DC电源的首选拓扑。而实现LLC电路精准控制的核心,在于如何生成多路高精度、严格同步且带可调死区的PWM信号。STM32G474系列单片机搭载的高分辨率定时器(HRTIM),其184ps的时间分辨率与灵活的联动机制,为这类需求提供了完美的硬件解决方案。
本文将深入剖析如何利用STM32G474的HRTIM模块,配置6路互补PWM输出驱动LLC谐振变换器的全桥电路。不同于通用定时器的基本PWM生成,我们会重点讲解:
- 主从定时器联动实现精确移相控制
- 死区时间与MOSFET开关特性的匹配计算
- ADC采样点与谐振电流过零点的同步策略
- 多路PWM相位关系的实时动态调整技巧
1. HRTIM硬件架构与LLC控制需求匹配
STM32G474的HRTIM模块包含1个主定时器和6个子定时器(TIMER A-F),每个定时器可独立生成两路互补PWM输出。其5.44GHz的内部时钟(170MHz主频×32倍频)带来的184ps分辨率,相比传统DSP的150MHz主频(如TMS320F28335)有质的飞跃。
对于LLC谐振变换器而言,HRTIM的关键优势体现在:
| 功能需求 | HRTIM解决方案 | 传统方案局限 |
|---|---|---|
| 多路精确相位控制 | 主定时器比较事件触发从定时器复位 | 需要复杂的外部同步电路 |
| 纳秒级死区调节 | 可编程死区生成器,步进0.735ns | 依赖外部延迟元件 |
| 谐振电流采样同步 | 比较器事件直接触发ADC | 需要额外FPGA实现触发逻辑 |
| 动态频率调整 | 双缓冲周期寄存器实现无抖动更新 | 更新时可能导致脉冲丢失 |
> 注意:HRTIM的TIMER A/B/C和TIMER D/E采用不同的保护机制配置,在初始化时需特别注意DelayedProtectionMode参数的差异。
2. 硬件电路设计与引脚分配
典型的LLC全桥电路需要4路PWM驱动原边MOSFET,2路PWM驱动同步整流管。我们使用HRTIM的6个子定时器实现:
// GPIO初始化代码片段 GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11; // PA8-PA11 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1; // TIMER A/B输出 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; // PB12-PB15 GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1; // TIMER C/D输出 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9; // PC6-PC9 GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1; // TIMER E/F输出 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);引脚分配策略建议:
- TIMER A/B:驱动全桥上半桥臂(HS1/HS2)
- TIMER C/D:驱动全桥下半桥臂(LS1/LS2)
- TIMER E:原边谐振电流采样同步信号
- TIMER F:副边同步整流驱动
3. 核心配置流程详解
3.1 时基与主从定时器联动
LLC控制需要严格同步的移相PWM,我们利用主定时器的比较事件触发从定时器复位:
// 主定时器比较值设置(移相控制关键) pCompareCfg.CompareValue = Phase_compreB; // TIMER B移相角度 HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1, &pCompareCfg); // TIMER B配置为比较器1事件复位 pTimerCfg.ResetTrigger = HRTIM_TIMRESETTRIGGER_MASTER_CMP1; HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, &pTimerCfg);移相角度计算公式:
Phase_degree = (CompareValue / Master_Period) × 360°3.2 死区时间精密计算
死区时间直接影响MOSFET的安全工作区,需根据器件参数精确计算:
// 死区时间转换为HRTIM计数周期(0.735ns/step) DeadTimePeriodUp = (uint16_t)(DeadTime_A_Up_ns / 0.735); pDeadTimeCfg.RisingValue = DeadTimePeriodUp; // 上升沿延迟 pDeadTimeCfg.FallingValue = DeadTimePeriodDown; // 下降沿延迟 HAL_HRTIM_DeadTimeConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, &pDeadTimeCfg);关键参数参考值:
- SiC MOSFET:50-100ns
- IGBT:200-500ns
- GaN器件:10-30ns
3.3 ADC同步采样配置
利用TIMER A的比较器3事件触发ADC采样谐振电流:
pADCTriggerCfg.UpdateSource = HRTIM_ADCTRIGGERUPDATE_TIMER_A; pADCTriggerCfg.Trigger = HRTIM_ADCTRIGGEREVENT13_TIMERA_CMP3; HAL_HRTIM_ADCTriggerConfig(&hhrtim1, HRTIM_ADCTRIGGER_1, &pADCTriggerCfg); // 设置比较器3为50%占空比位置 HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP3xR = HRTimeCompA>>1;4. 动态调节与故障保护
4.1 实时频率调整
通过修改主定时器周期值实现LLC工作频率调节:
// 无抖动更新周期寄存器(双缓冲机制) HRTIM1->sMasterRegs.MPER = New_HRTimer_Period; HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].PERxR = New_HRTimer_Period; // 动态调整占空比(突发模式适用) HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP1xR = New_HRTimeCompA;4.2 硬件保护机制配置
HRTIM提供丰富的故障检测功能,关键配置包括:
pTimerCfg.FaultEnable = HRTIM_TIMFAULTENABLE_RISING; // 上升沿触发保护 pTimerCfg.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE; // 故障锁定模式 HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, &pTimerCfg);典型保护策略:
- 过流信号触发硬件PWM关闭
- 故障解除后自动重启
- 累计故障次数超过阈值进入锁死模式
5. 调试技巧与性能优化
5.1 使用HRTIM的Burst Mode
对于需要快速动态响应的应用,可启用突发模式:
pTimeBaseCfg.Mode = HRTIM_MODE_BURST; pTimeBaseCfg.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK; HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg);5.2 时钟校准与抖动消除
启用HRTIM的数字锁相环(DLL)校准:
HAL_HRTIM_DLLCalibrationStart(&hhrtim1, HRTIM_CALIBRATIONRATE_3); while(HAL_HRTIM_PollForDLLCalibration(&hhrtim1, 10) != HAL_OK);实测数据显示,启用DLL后时间抖动可从±500ps降低到±50ps以内。
