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

STM32G474 HRTIM PWM 零 / 满占空比实现指南:突破 CMPx 限制的实操方案

19小时前
283
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32G474 的高精度定时器(HRTIM)虽对比较寄存器 CMPx(x=1-4)有取值限制(需大于 3 个 fHRTIM 时钟、小于定时器周期 PER-3 个 fHRTIM 时钟),但可通过硬件触发源配置或软件强制控制,实现零占空比(0%)和满占空比(100%)的 PWM 输出。核心思路是避开 CMPx 的中间值限制,利用触发事件优先级、特殊赋值或软件强制位,直接控制 PWM 输出电平

资料获取:高精度定时器PWM输出零或满占空比话题

1. 核心概述

1.1 问题背景

HRTIM 的 CMPx 寄存器因硬件设计,无法直接通过赋值 0 或 PER 实现零 / 满占空比,但 CMP1 和 CMP3 支持写 0,且可通过事件优先级、触发源组合或软件位强制输出状态,间接达成目标。

1.2 核心实现路径

  • 硬件方案:通过配置 SET/RESET 触发源(PER、CMPx 事件),利用事件优先级或特殊 CMPx 赋值(0 或 > PER)实现;
  • 软件方案:通过 HRTIM 的软件强制置位 / 复位位(SST/SRT),直接控制 PWM 输出高 / 低电平,无需依赖 CMPx 比较。

2. Up 计数模式:硬件触发实现

Up 计数模式下,寄存器更新由 PER 事件触发,需通过 SET/RESET 触发源的合理配置实现目标占空比。

2.1 零占空比(PWM 输出低电平)

方法 1:CMP1/CMP3=0 + 触发源配置

  • 配置要点:PWM 的 SET 触发源设为 PER 事件,RESET 触发源设为 CMP1 或 CMP3,赋值 CMP1/CMP3=0;
  • 原理:PER 事件触发 PWM 置位后,立即被 CMP1/CMP3=0 的比较事件复位,输出持续低电平;
  • 注意:CMP1/CMP3=0 的比较事件仅本定时器可用,无法传递到其他定时器。

方法 2:CMPx=CMPy + 优先级利用

  • 配置要点:SET 触发源设为低优先级 CMPx,RESET 触发源设为高优先级 CMPy,赋值 CMPx=CMPy;
  • 优先级规则:CMP4>CMP3>CMP2>CMP1>PER,需保证 RESET 触发源优先级高于 SET;
  • 示例:SET=CMP3(x=3),RESET=CMP4(y=4),CMP3=CMP4,PWM 被高优先级 RESET 事件持续拉低。

方法 3:CMPx>PER + 无 SET 事件

  • 配置要点:SET 触发源设为 CMPx,RESET 触发源设为任意有效事件,赋值 CMPx>PER;
  • 原理:CMPx>PER 时无 SET 事件发生,PWM 始终保持 RESET 后的低电平。

2.2 满占空比(PWM 输出高电平)

  • 配置要点:SET 触发源设为 CMP1 或 CMP3(赋值 0),RESET 触发源设为 CMPy(赋值 > PER);
  • 原理:CMP1/CMP3=0 触发 SET 事件置位 PWM,CMPy>PER 无 RESET 事件,PWM 持续高电平
  • 注意:需启用寄存器预加载功能,由 PER 事件触发寄存器更新。

3. Up-down 计数模式:硬件触发实现

Up-down 计数模式下,寄存器更新由计数器 = 0 事件触发,配置逻辑与 Up 模式类似,需注意更新触发点约束。

3.1 零占空比(PWM 输出低电平)

方法 1:CMP1/CMP3=0 + RESET 触发

  • 配置要点:PWM 的 RESET 触发源设为 CMP1 或 CMP3,赋值 CMP1/CMP3=0,寄存器更新触发点设为计数器 = 0;
  • 原理:计数器从 0 开始计数时,立即触发 RESET 事件,PWM 保持低电平。

方法 2:CMPx>PER + 无 SET 事件

  • 配置要点:PWM 的 SET 触发源设为 CMPx,赋值 CMPx>PER,寄存器更新触发点设为计数器 = 0;
  • 原理:无 SET 事件触发,PWM 始终保持初始低电平。

3.2 满占空比(PWM 输出高电平)

方法 1:CMP1/CMP3=0 + SET 触发

  • 配置要点:PWM 的 SET 触发源设为 CMP1 或 CMP3,赋值 CMP1/CMP3=0,寄存器更新触发点设为计数器 = 0;
  • 原理:计数器 = 0 时触发 SET 事件,PWM 置位后无 RESET 事件,持续高电平。

方法 2:CMPx>PER + 无 RESET 事件

  • 配置要点:PWM 的 RESET 触发源设为 CMPx,赋值 CMPx>PER,寄存器更新触发点设为计数器 = 0;
  • 原理:无 RESET 事件触发,PWM 保持 SET 后的高电平。

4. 软件强制控制:灵活切换占空比

无需依赖硬件比较事件,直接通过 HRTIM 的软件控制位强制 PWM 输出状态,适用于无严格时序要求的场景。

4.1 核心寄存器与位功能

  • 软件置位触发(SST):HRTIM_SETx1R(x=A-F)寄存器的 SST 位,置位后强制 PWM 输出高电平(主动态),硬件自动清零;
  • 软件复位触发(SRT):HRTIM_RSTx1R(x=A-F)寄存器的 SRT 位,置位后强制 PWM 输出低电平(非动态),硬件自动清零。

4.2 使用注意事项

  • 无预加载:SST/SRT 位置位后立即生效,无延迟;
  • 时序限制:若需 PWM 在特定时刻(如计数器 = 0)切换,不建议使用此方法,优先硬件触发。

5. 避坑关键要点

  1. 触发源优先级:硬件触发时,RESET 触发源优先级必须高于 SET 触发源(满占空比)或反之(零占空比),否则配置失效;
  2. CMPx 选择:仅 CMP1 和 CMP3 支持赋值 0,CMP2/CMP4 不可写 0,需注意触发源选择;
  3. 寄存器更新:Up 模式需设 PER 事件触发更新,Up-down 模式需设计数器 = 0 事件触发更新,否则配置不生效;
  4. 事件传递:CMP1/CMP3=0 的比较事件仅本定时器可用,跨定时器触发需避免使用此配置。

STM32G474 HRTIM 实现零 / 满占空比的核心是 “绕开 CMPx 中间值限制”:硬件方案利用特殊 CMPx 赋值(0 或 > PER)、触发源组合及事件优先级,软件方案直接强制输出状态,可根据时序要求灵活选择。实操中需重点关注触发源配置、寄存器更新触发点和事件优先级,确保配置符合 HRTIM 硬件逻辑。

相关推荐