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

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

3天内不再提示

利用STM32高精度定时器实现PWM输出的实现原理

茶话MCU 来源:ST MCU 信息交流 2020-05-14 09:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

很多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

    文章

    5847

    浏览量

    223817
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371159
  • 定时器
    +关注

    关注

    23

    文章

    3360

    浏览量

    121743

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32A030微控制定时器

    组成,并由一个可编程的预分频驱动。 ATIM 支持6 个独立的捕获/ 比较通道,可实现6 路独立PWM 输出或3 对互补PWM
    发表于 12-04 06:47

    CW32L010+定时器介绍

    :一组,专为低功耗应用而设计,能够在保持低功耗的同时实现定时功能。 高级控制PWM定时器:一组,支持PWM
    发表于 12-01 07:53

    CW32定时器及中断介绍

    )或者产生输出波形(输出比较和 PWM)。 高级定时器:高级定时器 (ATIM) 由一个 16 位的自动重载计数
    发表于 12-01 07:08

    PWM定时器、SysTick 区别及应用场景

    在单片机和嵌入式开发中,经常会遇到PWM(脉宽调制)、定时器、SysTick(系统滴答定时器)这几个词。很多初学者容易把它们混为一谈,以为都是“定时相关的东西”。其实,它们在本质和应用
    的头像 发表于 11-17 10:53 224次阅读
    <b class='flag-5'>PWM</b>、<b class='flag-5'>定时器</b>、SysTick 区别及应用场景

    【RA4M2-SENSOR】3、使用GPT定时器-PWM输出

    结合起来使用的话可以实现更加丰富的功能, 可以对输入信号进行计数,可以测量输入信号的脉冲宽度,可以输出单个脉冲、PWM 等波形,等等。 通过定时器生成
    发表于 09-01 15:20

    stm32H743定时器溢出的原因?怎么解决?

    利用定时器更新中断实现软件计时,定时时间是固定的按照{10ms, 20ms,650ms, 50ms,50ms}周期性进行的。由于下一次的计时时间是需要在
    发表于 06-23 08:26

    MCU定时器/计数

    架构与功能特性‌ 定时器类型与配置‌ 高级控制定时器‌:支持互补PWM输出与刹车功能,适用于电机驱动等高精度控制场景。通用
    的头像 发表于 04-27 13:54 592次阅读

    瑞萨RA8D1单片机输出PWM实现方法

    也有通过定时器中断控制IO高低电平输出实现的。
    的头像 发表于 04-11 17:07 3699次阅读
    瑞萨RA8D1单片机<b class='flag-5'>输出</b><b class='flag-5'>PWM</b><b class='flag-5'>实现</b>方法

    TPS3851 带集成看门狗定时器高精度电压监控数据手册

    TPS3851 将精密电压监控与可编程看门狗定时器相结合。TPS3851比较的欠压 (V ) 精度为 0.8% (–40°C 至 +125°C) ~ITN~ ) 阈值。该TPS38
    的头像 发表于 04-10 16:04 808次阅读
    TPS3851 带集成看门狗<b class='flag-5'>定时器</b>的<b class='flag-5'>高精度</b>电压监控<b class='flag-5'>器</b>数据手册

    TPS3852-Q1 汽车级高精度电压监控,带集成窗口看门狗定时器数据手册

    温度范围内实现 0.8% 的精度。 此外,TPS3852-Q1 具有精确的磁滞,使该器件非常适合与紧公差系统一起使用。监控 RESET delay 具有 15% 精度
    的头像 发表于 04-10 15:08 676次阅读
    TPS3852-Q1 汽车级<b class='flag-5'>高精度</b>电压监控<b class='flag-5'>器</b>,带集成窗口看门狗<b class='flag-5'>定时器</b>数据手册

    TPS3851-Q1 带集成看门狗定时器的汽车级高精度电压监控数据手册

    TPS3851-Q1 器件将精密电压监控与可编程看门狗定时器相结合。TPS3851-Q1 比较在欠压 (V 下) 的精度为 0.8% (–40°C 至 +125°C) ~ITN~
    的头像 发表于 04-10 14:45 709次阅读
    TPS3851-Q1 带集成看门狗<b class='flag-5'>定时器</b>的汽车级<b class='flag-5'>高精度</b>电压监控<b class='flag-5'>器</b>数据手册

    使用stm32f405做6步pwm输出时,定时器配置由强制输出转为pwm,com触发后会有延迟生效的现象,怎么解决?

    我在使用stm32f405做6步pwm输出时发现,定时器的配置由pwm改为强制输出后会在com触
    发表于 03-13 07:24

    如何使用定时器在任意IO输出PWM

    在CubeMx内的配置,计划在PA2口输出PWM控制风机,但是TIM2已经初始化做输入捕获用了,因此需要用到别的未使用的定时器在PA2口输出PWM
    发表于 03-13 06:04

    stm32同一个定时器不同的通道,可以不同时的输出pwm波形吗?

    请问,stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗?比如tim1的ch1输出,延时几毫秒后tim1的ch2
    发表于 03-07 08:20

    请问ADS1263能做到多高精度实现高精度应该注意什么?

    我想实现每通道10K以上采样率,测量范围为-500mV ~+500mV,请问ADS1263能做到多高精度实现高精度应该注意什么,比如电压基准源应该选用什么器件?应该选用什么电源器件
    发表于 01-01 06:28