STM32G474 中包含了针对数字电源应用的高精度定时器(HRTIMER),客户在应用该定时器产生 PWM 时,发现 PWM 的输出出现了“丢波”现象,本文对该问题进行分析并给出解决方案。
2. 问题描述
Master Timer: Interleaved Mode:Half mode Timer A : Up-Down Mode : Up-counting Timer counter reset trigger source : Master timer period event PWM set source : Master timer period event PWM reset source : Timer compare 3 event + EEV4 Timer B : Up-Down Mode : Up-counting Timer counter reset trigger source : Master timer compare 1 event PWM set source : Master timer compare 1 event PWM reset source : Timer compare 3 event + EEV4 EEV4 : Source:EE source 2 – COMP1 Sensitivity:Falling edge Fast Mode:re-sync mode Filtering : Blanking from counter reset/roll-over to compare 1 Latch : Ignored if happens during a blank 使用以上的配置,正常情况下产生的 PWM 如下所示,C1/C2 分别为 TA1 与 TB1,C3 为EEV4,下降沿触发事件,使 PWM reset。 但是当外部事件发生的点接近于 PWM 周期值时,就会出现 “丢波”,如下图所示。 展开其中的部分波形观察如下
3. 原因分析 对 PWM 丢失的波形进行分析,当该情况发生时,EEV4 发生的时间点已经晚于 CMP3 事件,正常波形的占空比也与设定的最大允许占空比一致。丢波情形节点:在 EEV4 事件发生的时间点靠近 TA1 或 TB1 波形的 set 点处才会出现。 为什么会出现“丢波”?从波形上分析,唯一可能的原因就是 C1/C2 的 set 事件被“忽略”了 ,导致整个周期一直处于低电平状态。在高精度定时器中,若多个事件同时发生的时候就会出现事件被“忽略”的情况,且 reset 事件具备最高优先级(除了多个事件都来源于同一定时器的CMP、PER 事件),导致 set 事件被“忽略”,可阅读 RM 的 26.3.7 Set / reset events priorities and narrow pulses management 了解更多详细的规则。 从客户实际的配置中可确认在“丢波”情况出现时,EEV4 不会跨周期,且实际的波形也验证了该点,C3 的下降沿先于 C1/C2 的上升沿出现的,那么一般就会理解 EEV4 导致的 reset 事件不会与 PWM 的 set 事件 Master timer period/ compare 1 event 同时出现,且客户的配置中对EEV4 添加了消隐功能, blanking 区间为 counter reset/roll-over to compare 1,即使 EEV4 与Master timer period/ compare 1 event 同时出现,也应该被过滤掉,set 事件不应该被忽略。总结如下: • EEV4 不会与 Master timer period/ compare 1 event 同时出现; • 即使同时出现,EEV4 也应该被消隐过滤掉。但是 EEV4 作为外部事件作用于高精度定时器(复位 counter 或是 set/reset PWM 输出),其从事件发生到生效是存在一定的内部延时(26.3.8 External events global conditioning),如下图所示。在 re-sync 模式下,这个延时一般会在 60ns 左右。 左右滑动查看变化 在高精度定时器中对多个事件同时出现的处理都是以事件的实际生效点为准,所以当 EEV4的下降沿发生点靠近 PWM set 事件的情况下,经过内部延时后,就可能会与 set 事件同时出现了。 关于消隐功能的 blanking 区间,比如本文中的 counter reset/roll-over to compare 1,一般的理解是从起点到终点全部过滤,但是实际情况是在设定的起点处 blanking 不会生效(经 division确认),即 blanking 区间不是闭区间。另外需要注意的是消隐功能作用的也是事件的实际生效点,而非发生点。 对以上的分析总结如下: •多个事件同时出现的处理过程中,以事件的实际生效点为准,而非发生点; • 消隐功能在 blanking 区间的起始点无效,且消隐对象为实际生效点在区间内的事件。 客户的配置中,blanking 区间的起始点与 PWM 的 set 点为同一个点,若是 reset 事件 EEV4通过内部延时后刚好也落在这个点上,那么消隐不生效,reset 相对 set 优先级高,结果就是 set事件被忽略,PWM 输出继续保持低电平,也是我们观察到的 PWM“丢波”。基于上述分析,对客户描述现象进行复现,很容易捕捉到“丢波”现象,本文中提供的“丢波”时的波形就是基于以上的分析与实验获取的。