配置目标:
两组互补pwm
频率:110KHz
死区:400ns
占空比:50%
初始移相角:33度
TimerA不移动,只移动TimerB
1 打开HRTIM
先使能Master Timer,然后使能几组需要输出的PWM。TA1/TA2就是互补信号,其他同理。Master用于同步TimerA/B/C/D/E/F.
2 配置系统时钟
本文使用内部时钟,可见G4系列比F3系列的hrtimr时钟频率更高
3 设置master timer
master、timerA、timerB频率设置成一致,方便计算。master的comp决定移相角,timerA不移动所以timerA的comp1按照常规的设置,timerB的comp设置成master的comp值与50%占空比值的和
4 设置互补pwm
代码:
HAL_HRTIM_WaveformCounterStart(&hhrtim1, HRTIM_TIMERID_MASTER | HRTIM_TIMERID_TIMER_A | HRTIM_TIMERID_TIMER_B);//不能分开写,不同时打开会导致相位差
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 | HRTIM_OUTPUT_TA2 | HRTIM_OUTPUT_TB1 | HRTIM_OUTPUT_TB2);
————————————————
版权声明:本文为CSDN博主「gongyuan073」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gongyuan073/article/details/120193311
使能输出。
设置相位:
uint32_t phase_num;
void phase_set(uint32_t period, float phase)
{
HRTIM_TimeBaseCfgTypeDef pTimeBaseCfg = {0};
HRTIM_TimerCfgTypeDef pTimerCfg = {0};
HRTIM_CompareCfgTypeDef pCompareCfg = {0};
HRTIM_TimerCtlTypeDef pTimerCtl = {0};
HRTIM_DeadTimeCfgTypeDef pDeadTimeCfg = {0};
HRTIM_OutputCfgTypeDef pOutputCfg = {0};
phase_num = (uint32_t)(phase * period / 360.0f);
//timerA不动 只更改timerB的移相角,先更改上升沿 master的comp1再更改下降沿timerB的comp1
pCompareCfg.CompareValue = phase_num;
HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1, &pCompareCfg);//对应cubemx中配置hrtim master的comp1
pCompareCfg.CompareValue = phase_num + (period / 2);
HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_1, &pCompareCfg);//对应cubemx中配置hrtim timerB的comp1
}
————————————————
版权声明:本文为CSDN博主「gongyuan073」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gongyuan073/article/details/120193311
全文参考了这位up主的视频教程,需要观看的请移步,本文仅作为本人记录使用。
STM32G474-HRTIM-四对互补移相_x264_哔哩哔哩_bilibili
视频中设置了4组PWM信号,本人应用于PSFB仅需两组互补PWM即可。