STM32 通过 Up-Down(中心对齐)计数模式 + 定时器互联触发,可实现 6 路相位差 60° 的交错 PWM 输出,核心优势是降低电流纹波、优化系统散热与电磁兼容性,适用于多相交错 DC/DC 变换器等电力电子场景。关键实现逻辑:以 TIM1 为核心触发源,搭配辅助定时器 TIM15 延迟启动部分通道,通过预设 CNT 初值调整相位,全程基于硬件同步,无需软件干预。
在
新能源、
电机控制等领域,多相交错 PWM 控制是提升系统性能的关键技术:
- 6 路交错 PWM 相位依次错开 60°,可大幅抵消电流纹波,减少滤波元件体积;
- 开关损耗分散到多个通道,降低单通道热应力,提升系统功率密度;
- 适用于交错 Boost 拓扑、多相电机驱动等对纹波和效率要求高的场景。
- 选用芯片:STM32H745(支持 Up-Down 计数的 TIM1/TIM2/TIM3/TIM4/TIM5/TIM8);
- 计数模式:Up-Down(中心对齐),保证 PWM 波形对称,ARR=6000,单个周期对应 12000 个计数单位;
- 关键约束:Up-Down 模式下,定时器仅能从 “增计数” 启动,无法直接以减计数启动,需通过延迟启动解决部分通道的错相需求。
6 路 PWM 需依次相差 60°,对应定时器计数单位的步长推导:
- 360° 对应 12000 个计数单位(Up-Down 周期:0→6000→0);
- 60° 对应计数步长 = 12000÷6=2000;
- 6 路通道 CNT 初值配置(基于 TIM1 启动基准):
- TIM1(0°):CNT=6000;
- TIM4(60°):CNT=4000;
- TIM5(120°):CNT=2000;
- TIM8(180°):CNT=0;
- TIM3(240°):CNT=4000(延迟半个周期启动);
- TIM2(300°):CNT=2000(延迟半个周期启动)。
通过 STM32 定时器内部互联信号(ITR)实现硬件同步,避免软件延迟,触发链路设计如下:
- 主触发源:TIM1 的 TRGO 信号(计数使能触发);
- 直接触发通道:TIM1→TIM4/TIM5/TIM8/TIM15(ITR0 接口);
- 延迟触发通道:TIM15 定时半个周期(6000 计数单位)后,通过 TRGO→TIM3(ITR2 接口);TIM3 再通过 TRGO→TIM2(ITR2 接口);
- 核心目的:让 TIM3/TIM2 延迟半个周期启动,解决 Up-Down 模式仅能增计数启动的约束,确保 6 路相位差准确。
- 工具版本:CubeMX V6.12、STM32Cube_FW_H7_V1.11.2、Keil V5.38;
- 核心参数:PWM 占空比 16.7%(便于观察错相),ARR=6000,计数时钟按实际需求配置。
- 模式:PWM Generation CH1,Counter Mode=Up-Down;
- 参数:Prescaler 按需设置,Counter Period(ARR)=6000,Repetition Counter=0;
- 触发输出:TRGO Event Selection=Counter Enable(CNT EN),用于触发其他定时器;
- 通道:CH1 设为 PWM 输出模式,使能 Output Compare Preload。
- 模式:与 TIM1 一致(Up-Down+PWM CH1);
- 从模式:Slave Mode=Trigger Mode,Trigger Source=ITR0(TIM1 触发);
- 其他参数:与 TIM1 保持一致,仅 CNT 初值按相位要求预设(TIM4=4000、TIM5=2000、TIM8=0)。
- 模式:Output Compare CH1,Counter Mode=Up;
- 参数:ARR=6000(定时半个周期),Trigger Source=ITR0(TIM1 触发);
- 触发输出:TRGO Event Selection=Output Compare 1(OC1),用于触发 TIM3。
- TIM3:Slave Mode=Trigger Mode,Trigger Source=ITR2(TIM15 触发),CNT 初值 = 4000(240° 相位);
- TIM2:Slave Mode=Trigger Mode,Trigger Source=ITR2(TIM3 触发),CNT 初值 = 2000(300° 相位);
- 其他参数:与 TIM1 一致,确保 PWM 波形对称。
CubeMX 默认按定时器编号初始化,需手动调整顺序(先主定时器,后从定时器):
// 初始化顺序:主触发源→直接触发通道→辅助定时器→延迟触发通道
MX_TIM1_Init(); // 主触发源(0°)
MX_TIM4_Init(); // 60°相位
MX_TIM5_Init(); // 120°相位
MX_TIM8_Init(); // 180°相位
MX_TIM15_Init(); // 辅助延迟定时器
MX_TIM3_Init(); // 240°相位(TIM15触发)
MX_TIM2_Init(); // 300°相位(TIM3触发)
// 预设CNT初值(关键:调整相位)
TIM1->CNT = 6000;
TIM4->CNT = 4000;
TIM5->CNT = 2000;
TIM8->CNT = 0;
TIM15->CNT = 0;
TIM3->CNT = 4000;
TIM2->CNT = 2000;
// 启动顺序:先辅助定时器OC输出,后PWM通道
HAL_TIM_OC_Start(&htim15, TIM_CHANNEL_1); // 启动TIM15延迟触发
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); // 启动主通道
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
4. 验证结果:6 路 PWM 错相达标
实测输出波形满足设计要求:
- 相位差:TIM1→TIM4→TIM5→TIM8→TIM3→TIM2 依次相差 60°;
- 波形质量:PWM 为中心对齐对称波形,无相位偏移、无毛刺;
- 纹波效果:6 路交错叠加后,电流纹波幅度较单路降低 80% 以上。
5. 关键注意事项
- 定时器互联约束:需参考芯片手册(如 RM0399)确认 ITR 接口映射,仅特定定时器支持互联(如 TIM1 的 ITR0 可触发 TIM4/TIM5/TIM8);
- 计数方向限制:Up-Down 模式仅能从 “增计数” 启动,延迟启动是实现全通道错相的唯一方案;
- 初值一致性:所有定时器的 ARR 必须一致(示例为 6000),否则相位差会偏离 60°;
- 占空比设置:建议所有通道占空比保持一致,确保交错效果最优。
6 路交错 PWM 的核心是 “硬件同步 + 相位预设”:以 TIM1 为核心触发源,通过 TIM15 解决计数方向约束,借助 CNT 初值精准控制相位差,全程无软件干预,稳定性与实时性突出。该方案适用于 STM32H7/G4 等支持多定时器互联的系列,仅需调整定时器型号和初值,即可适配不同路数、不同相位差的交错需求。