我是使用STM32G474进行MPPT(Maximum Power Point Tracking)程序移植。RM0440文件第27章,有给出HRTIM的详细介绍。27章开头指出HRTIM可以产生12路高精度时序数字信号,主要用于电力驱动转换系统,例如开关电源、光电系统。在芯片应用过程中,我发现HRTIM相对于STM32高级定时器,基础定时器提供了一些非常方便的功能。repetition counter和死区时间高级定时器和HRTIM均有。但是ADC采样触发配置功能为HRTIM所独有,HRTIM独特的从定时器功能使其可以很方便的做到在PWM中点处进行采样。此外,HRTIM PWM最高可倍频至5.44G(32倍频)。
时钟配置
将HRTIM1时钟调整为170MHz
8倍频,时钟频率调整至1.36GHz。
对了,如果想要使用HSE作为HRTIM的时钟源,还需要开启RCC的HSE功能。
PWM配置
PWM由从定时器TimerB,TimerC输出。
按照上图操作,可以将TB1,TB2,TC1,TC2配置为PWM引脚,且PWM 频率为250KHz(170MHz*8/5440=250KHz)f=170MHz*主定时器倍频系数/周期。我没有尝试主从定时器频率不一样会怎么样,有兴趣的朋友可以试试。
此外,我所移植的程序PWM占空比设置比较特殊,从定时器TimerB,TimerC输出的PWM占空比由主定时器Compare Value决定。这是由从定时器的set source selection,Reset Source Selection功能决定的。以TimerB配置为例,主定时器计数值等于Compare Unit1数值时,PWM开始输出高电平,等于Compare Unit 2数值时,PWM开始输出低电平,故Timer2 TB1占空比为:Duty = (HRTIM_MCM2R-HRTIM_MCM2R)/(HRTIM_MPER)。
HRTIM_MPER代表HRTIM主定时器周期寄存器数值,内容与图形化界面设置的Period数值相同。HRTIM_MCMP1R代表HRTIM主定时器比较寄存器1数值,内容与Compare Unit 1数值相同。
当然你也可以配置为由从定时器自己的Compare Value数值决定,这样你就需要先设置从定时器的Compare Value数据。我因为只配置了TimerB的Compare Unit3 value,所以,配置占空比时只能选timer compare 3 event,配置该参数会改变HRTIM_CMP3xR寄存器数值。
因为我设置了死区时间功能,所以只用设置TB1,TC1通道的占空比,TB2,TC2通道的占空比也就固定下来了。
然后,在main.c文件中添加如下代码,即可输出2组互补PWM波形。
HAL_HRTIM_WaveformCounterStart(&hhrtim1,HRTIM_TIMERID_MASTER | HRTIM_TIMERID_TIMER_B | HRTIM_TIMERID_TIMER_C);
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TB1 | HRTIM_OUTPUT_TB2 | HRTIM_OUTPUT_TC1 | HRTIM_OUTPUT_TC2);