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

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

3天内不再提示

定时器实现3路时差和占空比可调的波形

茶话MCU 来源:ST MCU 信息交流 2019-11-20 14:54 次阅读

有人想实现下面的PWM输出波形,三路频率相同,占空比同步可调,且三路输出波形时差固定为T/3。【下图中橙色斜线是计数器周期性计数变化曲线示意图】之前有过类似的话题交流,这里就整个实现过程再做下演示,并尽可能介绍详细点。

这里使用STM32F302_Nucleo板来实现之。使用STM32常规定时器中的高级定时器TIM1来实现。当然,也并非一定要TIM1,其它支持多通道比较输出且比较事件能触发DMA的都可以。

其中,第一路使用TIM1_CH1,使用PWM1输出模式,第二路使用TIM1_CH2,第三路使用TIM1_CH3,这两路都使用Match Toggle输出模式。

在TIM1更新中断里修改通道1的CCR值,为修改CH2/CH3的CCR值做准备,最终通过CH2/CH3各自的比较事件触发DMA,依靠DMA写入CC2和CCR3寄存器而完成修改。注意,此时CH2/CH3通道的CCR寄存器预装功能必须关闭。

一、基于STM32CubeMx的配置如下:

二、准备相关用户代码

主要准备上面几句,代码是我基于STM32Cube库而编写。

上面的第1/2句清除TIM1的更新中断标志,有些情况下没有这两句会给我们带来些麻烦或困惑。主要是防止一使能定时器更新中断或相关DMA请求就进入中断服务程序或触发DMA传输,更多细节在之前文章中有详细介绍过。这里就不重复了。

第3句、第4句、第6句功能差不多,开启相应通道的比较输出功能,其中开启了基于CH2/CH3的比较事件的DMA触发使能,并完成相关配置。

特别提醒第5句,这句是跟库代码有关联的。库代码目前在调用定时器的DMA配置时,目前来看应该说有个bug,调用某个通道的DMA配置函数后,需要将状态改为ready后才能有效调用后续其它通道的DMA配置函数。当然,我们如果不使用Cube库代码就不用这句了。

第7句只有TIM1/TIM8高级定时器才需要使用它,开启TIM1/TIM8的主输出功能。

另外,准备了跟DMA传输有关的两个内存数组。其中红色下划线的数据在实际运行过程中会被动态修改而调整占空比。

在TIM1更新中断里同步修改各个通道CCR的值,参考代码如下。其中,Count_Update和i为两个静态字节变量。这里每发生256次更新事件后分别对3个通道的CCR值做一次修改。【具体使用中你可以自行根据具体需求来设计,这里仅供演示参考。贴出原始代码主要是为了帮助理解整个思路。】

三、验证最后结果。

上面三幅图是3路PWM输出信号在不同时间点的截图,频率固定,相差固定,占空比在改变。当然,我们也可以通过选择合适的时间点来修改ARR值及通道2/通道3的初始相位值,以灵活调整输出波形的频率与相差。总之,STM32定时器的比较切换模式,再结合DMA的话,是个非常灵活好用的PWM输出的实现方式,值得研究学习下。

当然,如果使用3个定时器建立主从关系,各拿出一个通道来实现上述输出也很方便。有兴趣的话,也可以试试。

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

    关注

    114

    文章

    5191

    浏览量

    214160
  • STM32
    +关注

    关注

    2270

    文章

    10904

    浏览量

    356437
  • 定时器
    +关注

    关注

    23

    文章

    3251

    浏览量

    114946

原文标题:一个定时器实现3路时差和占空比可调的波形

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

收藏 人收藏

    评论

    相关推荐

    BUCK电路占空比对电流波形的影响

    BUCK电路的占空比对电流波形具有显著的影响。以下是对这一影响的分析: 一、占空比对电流波形的影响机制 在BUCK电路中,占空比决定了开关管
    的头像 发表于 12-12 17:08 486次阅读

    定时器的工作方式介绍

    定时器是计算机和嵌入式系统中常见的一种硬件模块,用于实现定时和计数功能。定时器的工作方式通常由一组寄存来控制,这些寄存
    的头像 发表于 07-12 10:29 1020次阅读

    定时器相关的寄存有哪些类型

    在微控制编程中,定时器是一种非常常见的功能模块,用于实现各种定时和计数功能。定时器的工作原理是通过内部的计数
    的头像 发表于 07-12 10:25 980次阅读

    三菱PLC编程实现读出时间定时器

    的功能,而定时器实现时间控制的关键组件。本文将详细介绍如何使用三菱PLC编程实现读出时间定时器。 1. 定时器的基本概念
    的头像 发表于 06-20 11:11 2513次阅读

    三菱plc如何显示定时器时间

    三菱PLC(Programmable Logic Controller,可编程逻辑控制)是一种广泛应用于工业自动化领域的设备。定时器是PLC中的一种基本功能,用于实现延时控制、计时控制等功能。在三
    的头像 发表于 06-20 11:10 1910次阅读

    CW32使用DMA单通道、定时器触发ADC实现了多路AD采集

    本测试样例基于CW32F030C8T6MCU,使用DMA单通道、定时器触发ADC实现了12AD采集。
    的头像 发表于 05-24 09:29 852次阅读
    CW32使用DMA单通道、<b class='flag-5'>定时器</b>触发ADC<b class='flag-5'>实现</b>了多路AD采集

    使用滴答定时器用I0口输出了120° 相位可调占空比的PWM,用这种方式的话有什么坏处呢?

    我使用滴答定时器 用I0口 输出了120° 相位 可调占空比的PWM,用这种方式的话有什么坏处呢,如果驱动带编码的无刷电机可不可以用这种方式呢?(用了驱动芯片)
    发表于 05-14 07:43

    STM8L052定时器1同时输出3PWM,想让其中的两PWM输出频率跟另外一个不同,可以实现吗?

    STM8L052的定时器1同时输出3PWM但是想让其中的两PWM输出频率跟另外一个不同,请问 可以实现吗? 具体的怎么操作
    发表于 05-13 09:06

    如何实现一个软件定时器

    在Linux,uC/OS,FreeRTOS等操作系统中,都带有软件定时器,原理大同小异。典型的实现方法是:通过一个硬件定时器产生固定的时钟节拍,每次硬件定时器中断到,就对一个全局的时间
    的头像 发表于 04-29 11:00 683次阅读

    如何用STM32定时器实现一个周期输出PWM2的波形

    请教各位如何用STM32定时器实现一个周期输出PWM2的波形呢(低-高-低-高-低)?万分感谢您的解答!
    发表于 04-03 06:39

    ​PLC定时器介绍

    定时器是PLC中重要的编程元件,是累计时间增量的内部器件。大部分自动控制领域都需要定时器进行延时控制,灵活地使用定时器可以编制出复杂的控制程序。
    发表于 03-22 12:36 2458次阅读
    ​PLC<b class='flag-5'>定时器</b>介绍

    使用555定时器可调定时器电路

    定时器 IC 555 是最通用和最常用的 IC 之一,因为它的应用范围更广,如 PWM放大器、延迟定时器、开关电路、占空比选择、时钟脉冲发生
    的头像 发表于 02-25 15:16 2279次阅读
    使用555<b class='flag-5'>定时器</b>的<b class='flag-5'>可调</b>双<b class='flag-5'>定时器</b>电路

    定时器原理能控制马达吗为什么

    定时器原理可以用于控制马达。马达是一种将电能转换为机械能的设备,通常由电动机和传动装置组成。定时器是一种电子设备,用来生成和计时精确而稳定的时间信号。通过将定时器与马达控制电路相连,可以实现
    的头像 发表于 01-23 15:21 682次阅读

    555定时器的基本功能 555定时器的工作原理及其应用

    定时器有三种基本工作模式,分别是单稳态、自由运放和双稳态。它可以在多种电子电路中实现功能的实现。下面将详细介绍它们的功能特点。 单稳态模式:在单稳态模式下,555定时器可以
    的头像 发表于 01-18 11:12 1.5w次阅读

    AT32 定时器配置中pr和div的作用

    AT32定时器是51系列单片机中的一种定时器,可以实现多种定时功能。在AT32定时器中,pr和div是两个相关的参数,用于配置
    的头像 发表于 01-08 10:12 1339次阅读