0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用STM32F334的HRTIM实现PWM输出的实现原理

茶话MCU 来源:ST MCU 信息交流 2020-06-15 09:35 次阅读

很多STM32系列的MCU内置高精度定时器,比方STM32F334、STM32G4、STM32H7等系列。利用高精度定时器实现PWM输出应该说是最基本的功能了。不过,在实际应用中,常有人觉得无法实现duty=0或duty=100%的PWM输出情形。这里以STM32F334的HRTIM为例,简单介绍下利用它实现PWM输出的实现原理。

STM32F334的HRTIM的功能框图如下,由一个MASTER定时器和ABCDE五个定时器单元组成。其中ABCDE五个定时器单元各可以产生2路输出信号,并支持互补输出。

先看看跟HRTIM有关的时钟。别的系列有支持向上、向下计数模式的。

在利用HRTIM中的定时器单元实现PWM输出时,基于不同的分频系数对应着不同的分辨率和最低频率。如下表所示:【截图来自STM32F334的参考手册】

显然,不同分频比对应不同的计数时钟fHRCK,根据计数时钟结合16位的计数宽度可求出最长计数时间,亦即最小的PWM输出频率。

但对于高精度定时器HRTIM,由于其自身特定机制的原因,在实现PWM功能时,设计比较值和计数周期值时需遵循下面两个原则:【注意是FHRTIM时钟单位,即未被倍频的时钟,这里就是那个144Mhz时钟】

1、 最小值必须不小于3个fHRTIM时钟单位;

2、最大值不得大于0xFFFE个fHRTIM时钟单位;

刚才上面说了,HRTIM里面的定时器单元所用的计数时钟是fHRTIM先经过倍频后再经过分频器而来的,那么结合上面的两个原则,不同分频比条件下可以设定的计数周期或比较值的范围就对应到如下表格:

上面表格就是定时器单元不同分频比时可以设置的计数周期值或用于比较的比较寄存器的值的范围。比方我们以上面TABLE82中的CKPSC=3时来看看。CKPSC=3,从上面Table81可以得知此时的计数时钟为源时钟倍频后的8分频,我们在设计PWM计数周期值或比较值时就要求在0x00c~~0xFFFB范围内配置。鉴于此,有人就得出没法实现PWM输出的0占空比或100%占空比,其实这是误解。

假设此时我们所需要的PWM周期值刚好0xff00.那么比较寄存器CMP的值就可以在0x000c~~0xff00任意设置并能实现有效、可靠比较,显然,CMP值不要小于0x000c这个起点值【实际上Table82中的Min值都是对应着3个fHRTIM源时钟单位,因不同分频比而呈现不同数据】,那这不是说PWM输出不能实现0占空比的情况吗?非也!

对于HRTIM的输出,通常是根据计数器的值与比较寄存器的值发生相等匹配事件时进行SET【置1】或RESET【清零】输出。【用过STM32常规定时器的人这里可能会感受到一些差异。】

比方如上图所示,在发生比较事件时做RESET输出,发生PER周期性事件时做SET输出。

显然,当我们不断增加CMP的值,占空比也会相应增大。当CMP的值增加到刚好等于PER的值时,则输出RESET。因为此时CMP比较事件、PER周期性事件在同一时间点发生,会涉及到事件竞争的仲裁问题。由于比较事件响应优先级高于周期性事件的,所以此时的输出按比较事件来定,这里输出RESET,此时也刚好对应着Duty=0的情形。两个事件总是同时发生,而PER事件竞争不过CMP事件,输出只好由CMP事件说了算。

按照这种配置,那又如何实现Duty=100%的输出呢?

很简单,当我们将CMP的值设置成任意被PER还大的值时,就始终输出SET信号了。因为此时CMP永远不会等于PER,即不会发生有效比较匹配事件,无有效比较事件则不会有RESET的输出,输出始终由PER事件掌控。

在基于HRTIM做PWM输出时,弄清了原理后就知道如何灵活编写代码了。上面只是大致做了PWM输出的原理介绍,更多细节还是得细看手册,比方上面提到的定时器事件及事件响应竞争时的仲裁。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4900

    浏览量

    209904
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348735
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112034

原文标题:STM32高精度定时器PWM输出话题

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F334上使用IAR开发环境和jlink的SWD接口调试,怎么设置才可以使用IAR的code coverage功能?

    如题,在STM32F334上使用IAR开发环境和jlink的SWD接口调试,这种情况下怎么设置才可以使用IAR的code coverage功能啊,谢谢各位!!!
    发表于 04-24 06:08

    STM32F334有数字双向AC-DC吗?

    我在官网看到了关于STM32F334数字AC-DC的东西,有数字双向AC-DC的东西吗,最好是DC输出电压电流可调的
    发表于 04-23 07:49

    stm32f334如何用串口烧录?

    的芯片是stm32f334f103R8T6,我看资料上说是可以用串口烧录的,我用mcuisp这个软件烧录,发现能读到芯片的信息,但是不能烧录hex文件,这是怎么回事呢?
    发表于 04-12 08:17

    HRTIMER在调整占空比的时候波形异常为什么?

    我用程序测试了stm32f334HRTIM功能,使用移相功能,为什么在我调整pwm占空比的时候,C项的波形会不正常呢
    发表于 04-09 07:20

    请问F334 Hrtim的PA12引脚的数字FAULT保护如何配置呢?

    请问F334 Hrtim的PA12引脚的数字FAULT保护如何配置呢
    发表于 04-07 08:38

    请问做电源用stm32f334好还是tms320f2806?性价比哪个高?

    做电源用stm32f334好还是tms320f2806?性价比哪个高?
    发表于 04-02 06:41

    STM32F334 HRTIM无法输出PWM是怎么回事?

    STM32F334 HRTIM 无法输出PWM
    发表于 03-22 06:57

    STM32F334如何才能配置不同的通道有独自的触发源?

    我现在想尝试用STM32F334来制作三相PFC,需要采集每一相的电感电流,采样时间都是在开关周期的中点进行采样,还要同时对每一相的电压进行采样,六路采样每个都是不同的触发源,我看STM32这种基于序列的触发做起来只能使用软件实现
    发表于 03-19 08:06

    STM32F334R8的HRTIM Timer Repetition interrupt中断周期异常的原因?

    STM32F334R8的HRTIM Timer Repetition interrupt中断周期异常?
    发表于 03-08 06:16

    请问STM32F334 ADC在差分输入下能识别负信号吗?

    STM32F334 ADC在差分输入下能识别负信号吗?
    发表于 10-23 06:27

    STM32 HRTIM Burst输出模式应用演示

    有人使用STM32G474芯片的片上高精度定时器HRTIM,他想使用其输出功能的Burst Mode。但不知如何使用,想找找参考例程。我这里就使用STM32G474芯片做下应用演示。
    的头像 发表于 10-13 09:07 2296次阅读
    <b class='flag-5'>STM32</b> <b class='flag-5'>HRTIM</b> Burst<b class='flag-5'>输出</b>模式应用演示

    使用STM32 HRTIM的Fault事件做输出保护

    有人想使用STM32 HRTIM的Fault事件做输出保护,借助CubeMx配置时有些人往往缺这少那的。这里就演示一下HRTIM的使用Fault保护的配置过程,以供参考。使用
    的头像 发表于 09-09 15:26 1470次阅读
    使用<b class='flag-5'>STM32</b> <b class='flag-5'>HRTIM</b>的Fault事件做<b class='flag-5'>输出</b>保护

    STM32F334 ADC输入时会产生一个脉冲台阶是什么原因导致的,怎么解决

    采用STM32F334的ADC0和ADC1做ADC,配置是完全用ADC CubeMx配置的,运放为了避免过压,在运放和ADC间串了一个1K的电阻,结果发现了另人诧异的事情,ADC转换过程多了一个台阶
    发表于 08-07 09:14

    STM32F334如何才能配置出基于SOC的触发?

    我现在想尝试用STM32F334来制作三相PFC,需要采集每一相的电感电流,采样时间都是在开关周期的中点进行采样,还要同时对每一相的电压进行采样,六路采样每个都是不同的触发源,我看STM32这种基于序列的触发做起来只能使用软件实现
    发表于 08-07 08:01

    为什么STM32F334 HRTIM定时器有最小比较值和重装载值?

    STM32F334为什么HRTIM定时器有最小比较值和重装载值?是因为GPIO反转速度不够的原因导致的吗
    发表于 08-04 12:07