STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码

芯片型号:STM32F334C8T6
工作频率:72MHz
Flash:64KB
RAM:16KB
内核:ARM Cortex-M4(比M3内核浮点运算能力强好几倍!)
  这块芯片看着很像F103C8T6,就连引脚都一模一样,你完全可以直接买F103C8T6的最小系统板,然后只要把原MCU拆下来更换成F334C8T6即可!!如下图:

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第1张图片

  这块F334是专门针对开关电源和高频信号处理的而研发的,内部集成了一个比以前的高级定时器TIM1/TIM8还要高级的定时器,即高分辨率定时器HRTIM,因为功能更强大所以配置起来也很麻烦,对于第一次使用它的人来说简直看得眼花缭乱。
  HRTIM的时钟频率可以通过倍频最高可以达到4.608GHz,F334的普通高级定时器TIM1最高才72MHz!!!超高的时钟频率意味着在需要产生高频PWM波的时候也能保持超高的精度,这正是数控开关电源中所需要的。举个例子:要求产生1MHz的PWM波时,如果使用72MHz的TIM1来做,不分频,则ARR的值只能设为72,也就是说 0 - 72 对应占空比 0 - 100% 显然精度太差了。如果使用4.608GHz的HRTIM来做,则ARR的值要设为4608,即 0 - 4608 对应 0 - 100% 的占空比,可见精度大幅度提高了。

注意:HRTIM1里面有TimerA、TimerB、TimerC、TimerD一共4个子定时器,每个子定时器2个输出通道。还有一个TimerE无输出通道的。。。。。

子定时器的重装载寄存器ARR改名了,叫做PER;比较值寄存器CCR也改名了,叫做CMP。


接下来是STM32CubeMx中配置HRTIM产生一对互补PWM波输出的详细步骤:

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第2张图片

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第3张图片

 

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第4张图片

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第5张图片

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第6张图片

这里提一下,关于填数字的选项中默认是十六进制的,可以改成十进制显示!

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第7张图片STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第8张图片

 

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第9张图片

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第10张图片

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第11张图片

死区的配置默认是以通道1为设置对象的,死区效果图:

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第12张图片

如果更改死区时间:

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第13张图片

放大波形查看测量死区:

 

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第14张图片

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第15张图片

图形化理解:

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第16张图片

到这一步已经配置完毕,可以生成代码,然后在主函数的死循环前加入开启输出的函数:

HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1|HRTIM_OUTPUT_TA2); //通道打开
HAL_HRTIM_WaveformCounterStart(&hhrtim1, HRTIM_TIMERID_TIMER_A); //开启子定时器A

编译下载到板子上运行,示波器观测输出波形

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析(使用CubeMx配置)HAL库代码_第17张图片

如果想修改PWM的频率或者占空比可以:

hhrtim1.Instance->sTimerxRegs[0].PERxR = 50000;//通过修改重装载值PER,从而修改PWM的频率
hhrtim1.Instance->sTimerxRegs[0].CMP1xR = 11504;//通过修改比较值CMP,从而修改占空比

//sTimerxRegs[0]---->TimerA
//sTimerxRegs[1]---->TimerB
//sTimerxRegs[2]---->TimerC
//sTimerxRegs[3]---->TimerD
//sTimerxRegs[4]---->TimerE

 

你可能感兴趣的:(单片机)