
引言 在《高精度定时器如何输出零占空比与满占空比 PWM 波形》一文中,我们分享了在高精度定时器中 PWM 输出零占空比和满占空比的方法,但是在实际的应用中还会存在零占空比和满占空比连续切换的情况,在原有的 PWM 发波方式上,若是采样 up-down count 模式的话要实现这种连续切换会存在一些问题,本文将分析相关问题,并给出更加合适的方案来实现 PWM 零-满占空比的连续切换。 Up count 模式下零-满占空比 PWM 切换 在 STM32G474 的高精度定时器中,up count 模式下,零-满占空比的输出方式以及连续切换可以直接实现,具体参考下图以及说明。注意以下的示例中,比较寄存器和周期寄存器的赋值都需要满足芯片用户手册中对赋值的限制,具体参见 RM0440 中 Period and compare registers min and max values 的说明。 2.1. 边沿对齐模式 PWM 发波配置: PWM Set source :PER event PWM Reset source:CMPx event (x=1 or 3) PWM 发波动作: 占空比 0%: CMPx = 0
占空比 100%: CMPx > PER
其他占空比: CMPx = M
D→0%→100%→0%→…
D→100%→0%→100%→…
2.2. 非边沿对齐模式 PWM 发波配置: PWM Set source :CMPx event (x=1 or 3) PWM Reset source:CMPy event PWM 发波动作: 占空比 0%:CMPx > PER,CMPy = 0
占空比 100%:CMPx = 0,CMPy > PER
其他占空比:CMPy - CMPx = M
D→0%→100%→0%→…
D→100%→0%→100%→…
PWM 发波配置: PWM Set source :CMPx event (x=1 or 3) PWM 发波动作: 占空比 0%:CMPx > PER
占空比 100%:CMPx = 0
其他占空比: CMPx = M
D→0%→100%→?%→ 0%→…
D→100%→?%→0%→ 100%→…
如图中绿色框内所示,当占空比需要从 100%切换到 0%的时候,需要先输出一个其他占空比的 PWM 波形,然后才能切换到 0%输出,如果直接将 CMPx 的值从 CMPx = 0 修改到CMPx > PER,则后续将没有比较事件产生,PWM 将一直保持 100%占空比输出。这样就造成无法实现连续的切换,没法满足客户某些应用的需求。 3.2. 零-满占空比连续切换方案 针对以上的问题,可以在原有发波方式上再添加一个比较事件,并且利用比较事件之间的优先级来实现对 PWM 的行为控制,具体如下: PWM 发波配置: PWM Set source :CMP1 event PWM Reset source:CMP3 event PWM 发波动作: 占空比 0%:CMP1 = 0, CMP3 = 0
占空比 100%:CMP1 = 0, CMP3 > PER
其他占空比:CMP1 = M, CMP3 = 0
D→0%→100%→ 0%→…
D→100%→0%→ 100%→…
当 CMP1 = 0, CMP3 = 0 的情况下,由于 CMP3 事件的优先级比 CMP1 事件的优先级高,所以 CMP3 事件所对应的 Reset 动作生效,让 PWM 输出低电平。 3.3. 零-满占空比连续切换实测波形
50% →100% → 0% → 100% →0%.......→ 0% → 50%
50% → 0% → 100% →0%.......→ 0% →100% → 50%
原文链接:https://blog.csdn.net/2501_92678806/article/details/149707671 |
经验分享 | 利用TIMER测量信号周期及占空比的精度话题
经验分享 | Flash 全片自检过程中巧用 Linker 自定义变量
经验分享 | 一个 STM32U5 SBSFU SecureFault 问题定位与分析
经验分享 | STM32G474 勘误手册中 SRAM Write Error 详解
经验分享 | 定时器触发ADC时可能遇到的几种情形
实战经验 | 1小时在STM32MPU上运行YOLOv8——训练篇
经验分享 | STM32CubeMX 生成时钟获取函数的分析
经验分享 | STM32双定时器+ADC+DMA实战案例
经验分享 | STM32U5系列TIMER+DMA+DAC应用演示
经验分享 | 基于STM32片内信号的ADC应用演示