打印
[STM32F3]

STM32F334高分辨率定时器HRTIM1输出1对互补PWM波详细解析

[复制链接]
1935|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gwsan|  楼主 | 2021-9-4 11:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
芯片型号:STM32F334C8T6
工作频率:72MHz
Flash:64KB
RAM:16KB
内核:ARM Cortex-M4(比M3内核浮点运算能力强好几倍!)
  这块芯片看着很像F103C8T6,就连引脚都一模一样,你完全可以直接买F103C8T6的最小系统板,然后只要把原MCU拆下来更换成F334C8T6即可!!如下图:



  这块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波输出的详细步骤:





使用特权

评论回复
沙发
gwsan|  楼主 | 2021-9-4 11:40 | 只看该作者
死区的配置默认是以通道1为设置对象的,死区效果图:

如果更改死区时间:

放大波形查看测量死区:

图形化理解:


使用特权

评论回复
板凳
gwsan|  楼主 | 2021-9-4 11:43 | 只看该作者
到这一步已经配置完毕,可以生成代码,然后在主函数的死循环前加入开启输出的函数:
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1|HRTIM_OUTPUT_TA2); //通道打开
HAL_HRTIM_WaveformCounterStart(&hhrtim1, HRTIM_TIMERID_TIMER_A); //开启子定时器A
编译下载到板子上运行,示波器观测输出波形


如果想修改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


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

3433

帖子

1

粉丝