扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

STM32G4 高级定时器双沿可控 PWM 开发指南:基于组合 PWM 模式的实现

2025/11/21
1671
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

双沿可控 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=0CCR2=ARR(如 CCR1=0,CCR2=999),两组参考信号 “与” 后全周期高电平

STM32G4 高级定时器的组合 PWM mode 2 是实现双沿可控 PWM 的最优方案,通过 “通道分组 + 与运算” 机制,让上升沿和下降沿独立可控,灵活性远超非对称 PWM 模式。配合 CubeMX 的可视化配置和 HAL 库的简洁 API,可快速落地到数字电源、电机驱动等复杂功率控制场景,还能与 HRPWM 协同满足更高精度需求。

相关推荐