本文记录HRTIM高精度定时器使用,不做原理性解释。
一、需求波形
目的:四路互补PWM带死区,定时器时钟100MHz,PWM为200KHz,第二路相对于第一路后开先关,第三路相对于第一路滞后90°,第四路同第二路。不考虑倍频等情况,不做精度要求,仅做实验现象。
二、实现逻辑
HRTIM使用同步功能,且使用为master,四路PWM电平置位以4个master compare值为准,复位以各子定时器的compare值为准。
三、 CUBEMX配置
1、SYS配置
2、RCC配置
3、时钟配置
4、HRTIM配置
5、synhro 同步配置
6、Master Timer配置
7、子定时器配置
其它子定时器同理。
注:这里的output配置特别重要,结合上面描述的逻辑理解,只需配置output1,output2只需配置polarity和output1一样即可。
8、project配置
9、生成代码后在main函数内while函数外添加如下代码才可生成PWM:
HAL_HRTIM_WaveformCounterStart(&hhrtim1, HRTIM_TIMERID_MASTER | HRTIM_TIMERID_TIMER_E | HRTIM_TIMERID_TIMER_A | HRTIM_TIMERID_TIMER_F | HRTIM_TIMERID_TIMER_B);
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TE1 );
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TE2 );
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 );
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA2 );
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TF1 );
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TF2 );
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TB1 );
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TB2 );
四、试验现象
由于示波器为4通道,这里只展示第一路、第二路现象(暂用200khz频率图片)
1、整体现象
2、第二路相对于第一路后开
3、第二路相对于第一路先关
4、第三路滞后第一路90°
五、总结
1、在使用HRTIM时,对主定时器控制子定时器的关键是同步设置,刚开始把主定时器设置为slave模式,导致无法控制后开先关的功能,
2、由于需要对接的硬件有1路上管采用TF2,下管采用TF1,和其它三路不同(其它三路上官均对应Tx1,下管均对应Tx2,所以比较值到来是极性都设置为高),因此将TF1极性设置为低,互补死区出现如下情况:(暂未解决)
折腾一天才完成,如有大佬可以讲解,感激不尽,欢迎各位交流。