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
    +关注

    关注

    116

    文章

    5892

    浏览量

    226535
  • STM32
    +关注

    关注

    2313

    文章

    11191

    浏览量

    374577
  • 定时器
    +关注

    关注

    23

    文章

    3372

    浏览量

    124481

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32F334x4/6/8微控制器:高性能与低功耗的完美结合

    STM32F334x4/6/8微控制器:高性能与低功耗的完美结合 在当今的电子设计领域,微控制器的性能和功能对于产品的成功至关重要。STMicroelectronics推出的STM32F334
    的头像 发表于 04-17 12:15 184次阅读

    请问设计达人们,如何利用单片机的PWM模块设计一个±5V的高驱动能力输出的方波电路?

    如图,我的需求是: 利用STM32F系列的PWM功能,可输出0~3.3V占空比可调节的正弦波。 然后可以借助三极管、MOS等模拟电路构建一个可输出
    发表于 03-05 15:45

    LAT1189+Timer 结合 DMA 2D 通道实现不同波形输出应用笔记

    TIM 来定时切换输出正弦波或固定电平。使用 TIM 输出 PWM 产生正弦波形时,需要结合 GPDMA 来实现。在 STM32U5 系列
    发表于 01-11 17:25 0次下载

    基于PWM的LED调光技术与呼吸灯实现方法!

    利用PWM技术控制LED亮度,不仅效率高、响应快,还能实现细腻的视觉过渡。系统介绍PWM的工作机制,结合具体硬件平台,展示如何编程实现LED
    的头像 发表于 12-15 13:03 653次阅读
    基于<b class='flag-5'>PWM</b>的LED调光技术与呼吸灯<b class='flag-5'>实现</b>方法!

    LuatOS中PWM实现LED亮度调节与呼吸灯的实战教程

    灯光效果。 PWM脉冲宽度调制 (Pulse Width Modulation,也称为脉宽调制)——是利用微处理器的数字输出对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等诸多领域。   日常开发中
    的头像 发表于 11-11 19:05 8612次阅读
    LuatOS中<b class='flag-5'>PWM</b><b class='flag-5'>实现</b>LED亮度调节与呼吸灯的实战教程

    stm32f103zet6芯片,根据官方配置的pwm一直没有输出,为什么?

    stm32f103zet6芯片,根据官方配置的pwm一直没有输出,求各位大佬指点一下
    发表于 10-10 07:07

    HRTIM可以通过TIM1触发一个50ns到100ns的短脉冲吗

    需求是想借助HRTIM的高精度定时器产生100ns的高质量脉冲,但是单纯用HRTIM频率做不到那么低,想用其他定时器比如TIM1级联触发,是否可以实现。我是新手小白,按照思路设置stm32
    发表于 09-01 16:53

    利用EasyGo DeskSim快速实现PWM波信号输出

    EasyGo DeskSim是一款配置型的实时仿真软件,它允许用户将 Simulink 算法程序快速部署到 EasyGo 实时仿真机上。实时仿真机支持选配不同的 FPGA 芯片和 IO 模块,能够处理高速信号,并通过 IO 模块输出真实的仿真结果,可满足用户在科研、教学或工业测试中的多样化需求。
    的头像 发表于 08-30 09:53 1032次阅读
    <b class='flag-5'>利用</b>EasyGo DeskSim快速<b class='flag-5'>实现</b><b class='flag-5'>PWM</b>波信号<b class='flag-5'>输出</b>

    如何将 GPIO PWM 和 GPIO Capture 驱动程序导入 Linux 内核,实现 PWM 输出并检测引脚的变化状态?

    如何将 GPIO PWM 和 GPIO Capture 驱动程序导入 Linux 内核,实现 PWM 输出并检测引脚的变化状态
    发表于 08-20 08:20

    请问怎么用HRTIM输出可变占空比的PWM?

    现在可以输出单路PWM,但可变占空比的PWM不知道怎么配置。请大佬帮助!
    发表于 07-25 08:16

    双向DC-DC双有源桥(DAB,Dual Active Bridge)参考设计

    本文介绍了基于小华HC32F334数字电源控制器的双向DC/DC双有源桥(DAB,Dual Active Bridge)参考设计,着重介绍了:- 通过HC32F334HRPWM的移相功能实现三重移相
    发表于 06-24 23:20 6次下载

    零知开源——STM32F4驱动MAX31865实现PT100高精度测温

    STM32F
    PCB56242069
    发布于 :2025年05月26日 18:25:17

    基于小华HC32F334数字电源控制器的双向DC/DC双有源桥参考设计

    本文介绍了基于小华HC32F334数字电源控制器的双向DC/DC双有源桥(DAB,Dual Active Bridge)参考设计。
    的头像 发表于 05-20 13:57 4919次阅读
    基于小华HC32<b class='flag-5'>F334</b>数字电源控制器的双向DC/DC双有源桥参考设计

    使用 dsPIC30F 实现 BLDC 电机的正弦电压驱动

    简介 在 BLDC 电机应用中,由于存在噪音和转矩脉动问题,使用三相正弦波电压代替六拍电压是一种理想的控制方法。本文档介绍的应用软件利用 dsPIC30F 数字信号控制器高效且可靠地实现了 BLDC
    发表于 05-14 15:56

    HRTIM变频控制输出的第一个周期频率异常的原因?

    在使用STM32G474CBT6的HRTIM_Mater、HRTIM_TIMER_B和HRTIM_TIMER_D输出同步互补的四路
    发表于 04-25 06:17