前言
STM32G474 中包含了针对数字电源应用的高精度定时器(HRTIMER),客户在应用该定时器产生 PWM 时,发现 PWM 的输出出现了“丢波”现象,本文对该问题进行分析并给出解决方案。
问题描述
客户使用高精度定时器产生 PWM, 其 PWM 产生的配置如下,Master Timer 的 period event与 compare 1 event 分别作为 Timer A 与 Timer B 的复位源,Timer A 与 Timer B 产生的 180 度移相的 PWM 输出,EEV4 作为外部事件来触发 PWM reset, 并且使用 blanking 功能过滤发生在PWM set 点附近的 EEV4 事件,Timer compare 3 event 用来限制 PWM 的最大占空比,当 PWM周期内没有 EEV4 发生或是发生的时间点晚于 compare 3 事件时,Timer compare 3 event 将触发PWM reset。
原因分析
对 PWM 丢失的波形进行分析,当该情况发生时,EEV4 发生的时间点已经晚于 CMP3 事件,正常波形的占空比也与设定的最大允许占空比一致。丢波情形节点:在 EEV4 事件发生的时间点靠近 TA1 或 TB1 波形的 set 点处才会出现。
解决方法
基于以上的分析与实验,我们需要避免 set 事件与 blanking 区间的起点在同一个点,所以只要将 set 事件放到 blanking 区间的内部就可以了,最简单的方式就是 TA1 与 TB1 的 set 事件不再使用 Master timer period/ compare 1 event,而采用 Timer compare 4 event(该比较器在客户原本配置中没有被使用),compare 4 的值遵循“3 clock”原则,在客户的实际配置中大于 0x32 即可,其他配置保持不变。
小结
对客户的“丢波”问题进行了详细的分析并给出了解决方案,客户在使用该方案后,没有再出现“丢波”现象。在使用外部事件与消隐功能时需要注意:
- 多个事件同时出现的处理过程中,是以事件的实际生效点为准,而非发生点;
- 消隐功能在 blanking 区间的起始点无效,且消隐对象为实际生效点在区间内的事件。