双沿可控 PWM(上升沿与下降沿独立调节)是数字能源、功率拓扑控制等场景的核心需求,STM32G4 系列高级定时器通过组合 PWM 模式(Combined PWM mode 2) 可高效实现该功能,相比非对称 PWM 模式更灵活,支持全计数周期内波形移动,还可作为 HRPWM 的补充满足复杂控制需求。
资料获取:如何使用高级定时器产生双沿可控PWM
1. 双沿可控 PWM 的核心应用与需求
在功率电子领域,双沿可控 PWM 能精准调节开关器件的导通 / 关断时刻,适配多种灵活控制算法,典型应用包括:
核心需求是上升沿(导通时刻)和下降沿(关断时刻)独立配置,且支持 0%~100% 全范围占空比调节,同时保证波形稳定性。
2. 高级定时器 PWM 模式对比:为何选择组合 PWM 模式
STM32G4 高级定时器提供多种 PWM 产生方式,不同模式的适配性差异显著:
| PWM 模式 | 核心特点 | 双沿可控支持 | 灵活性 | 适用场景 |
|---|---|---|---|---|
| 普通 PWM(Mode 1/2) | 单沿控制,仅 CCR 寄存器调节占空比 | 不支持 | 低 | 简单调速、普通开关控制 |
| 非对称 PWM 模式 | up-down 计数模式,双 CCR 分别控制升降沿 | 支持 | 中(仅固定计数模式) | 简单双沿控制场景 |
| 组合 PWM 模式(mode 2) | 两路 PWM “与” 运算输出,独立 CCR 控制双沿 | 支持 | 高(全计数模式兼容) | 复杂双沿可控、全占空比调节 |
组合 PWM 模式的核心优势:无需依赖 up-down 计数模式,支持任意计数模式下的双沿调节,波形可在整个计数周期内自由移动,适配更多控制算法。
3.组合 PWM 模式实现双沿可控的核心原理
以 TIM1 为例,采用Combined PWM mode 2(“与” 模式) ,将定时器通道分组控制,核心逻辑如下:
- 通道分组:CH1 与 CH2 为一组,CH3 与 CH4 为一组(每组独立输出双沿可控 PWM)
- 双沿控制:每组中,前通道(CH1/CH3)配置为 Combined PWM mode 2,其 CCR 寄存器(CCR1/CCR3)控制 PWM 上升沿;后通道(CH2/CH4)配置为 PWM mode 1,其 CCR 寄存器(CCR2/CCR4)控制 PWM 下降沿
- 输出逻辑:最终 PWM 输出 = 前通道参考信号(OC1Ref/OC3Ref)与后通道参考信号(OC2Ref/OC4Ref)的 “与” 运算结果
4. 实战实现步骤:CubeMX 配置 + 代码示例
4.1 硬件与工具准备
- 主控:STM32G474/STM32G4 系列支持高级定时器的 MCU
- 工具:STM32CubeMX(配置定时器)、Keil MDK/STM32CubeIDE(代码开发)
4.2 CubeMX 核心配置步骤
(1)定时器基础配置
- 时钟源:选择 “Internal Clock”(内部时钟)
- 计数模式:支持向上计数 / 向下计数 /up-down 计数(组合模式无强制限制)
- 预分频器(PSC):根据需求设置(如系统时钟 72MHz,PSC=71→计数频率 1MHz)
- 自动重载值(ARR):设置 PWM 周期(如 ARR=999→PWM 频率 1kHz)
(2)通道模式配置(关键)
| 通道 | 配置项 | 配置值 | 作用 |
|---|---|---|---|
| CH1 | Mode | PWM Generation CH1 + Combined PWM2 | 输出通道,控制上升沿 |
| CH2 | Mode | PWM Generation No Output + PWM mode 1 | 辅助通道,控制下降沿(不输出) |
| CH3 | Mode | PWM Generation CH3 + Combined PWM2 | 输出通道,控制上升沿 |
| CH4 | Mode | PWM Generation No Output + PWM mode 1 | 辅助通道,控制下降沿(不输出) |
| 所有通道 | Output Compare Preload | Enable | 使能比较值预加载,保证波形稳定 |
| 所有通道 | Fast Mode | Disable | 常规控制场景无需快速模式 |
| 所有通道 | CH Polarity | High | 高电平有效(可按需调整) |
| 所有通道 | CH Idle State | Reset | 空闲状态复位 |
(3)参数初始化
- CCR1/CCR3:初始上升沿时刻(如 CCR1=200→1kHz 下 200μs 时刻上升)
- CCR2/CCR4:初始下降沿时刻(如 CCR2=800→1kHz 下 800μs 时刻下降)
- 占空比:(CCR2 - CCR1)/ARR × 100%(示例中为 60%)
4.3 代码示例(HAL 库)
#include "tim.h"
// 定时器初始化(CubeMX生成,需补充双沿控制逻辑)
void MX_TIM1_Init(void) {
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
htim1.Instance = TIM1;
htim1.Init.Prescaler = 71; // 72MHz→1MHz计数频率
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 999; // PWM周期1kHz
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0;
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim1) != HAL_OK) {
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) {
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) {
Error_Handler();
}
// CH1配置(Combined PWM2)
sConfigOC.OCMode = TIM_OCMODE_COMBINED_PWM2;
sConfigOC.Pulse = 200; // 上升沿时刻
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
Error_Handler();
}
// CH2配置(PWM1,无输出)
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 800; // 下降沿时刻
if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) {
Error_Handler();
}
// CH3、CH4配置类似CH1、CH2,此处省略...
// 启动PWM输出
HAL_TIM_MasterConfigSynchronization(&htim1, &sMasterConfig);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
}
// 动态调节PWM双沿(示例:调节CH1的上升沿和下降沿)
void Adjust_PWM_Edge(uint16_t rise_edge, uint16_t fall_edge) {
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, rise_edge); // 调节上升沿
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, fall_edge); // 调节下降沿
}
5. 特殊场景处理:0%/100% 占空比实现
- 0% 占空比:设置
CCR1 > CCR2(如 CCR1=900,CCR2=100),两组参考信号 “与” 后无高电平输出 - 100% 占空比:设置
CCR1=0且CCR2=ARR(如 CCR1=0,CCR2=999),两组参考信号 “与” 后全周期高电平
STM32G4 高级定时器的组合 PWM mode 2 是实现双沿可控 PWM 的最优方案,通过 “通道分组 + 与运算” 机制,让上升沿和下降沿独立可控,灵活性远超非对称 PWM 模式。配合 CubeMX 的可视化配置和 HAL 库的简洁 API,可快速落地到数字电源、电机驱动等复杂功率控制场景,还能与 HRPWM 协同满足更高精度需求。
1671