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

    文章

    4820

    浏览量

    209556
  • STM32
    +关注

    关注

    2232

    文章

    10650

    浏览量

    347874
  • 定时器
    +关注

    关注

    23

    文章

    3124

    浏览量

    111898

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    怎么实现dsp芯片输出占空比固定的pwm波形

    的比例。例如,占空比为50%表示高电平持续时间等于一个周期的一半。在实现DSP芯片输出占空比固定的PWM波形之前,我们需要先确定所需的占空比
    的头像 发表于 12-26 17:28 551次阅读

    定时器设计实现

    ,并返回ITimer类型的共享指针。其中ITimer类中定义了start和stop方法,用于启动或停止当前定时器。 TimerManager还有一个内部类TimerMessageQueue用于实现
    的头像 发表于 11-08 16:50 249次阅读

    STM32如何使用定时器实现微秒(us)级延时?

    STM32如何使用定时器实现微秒(us)级延时? 在STM32微控制器中,可以使用定时器实现微秒级延时。具体来说,可以使用定时器的计数器和自
    的头像 发表于 11-06 11:05 2422次阅读

    STM32H7芯片系列中定时器同步启动并输出PWM波形实现方法

    本文主要研究了STM32H7芯片系列中定时器同步启动并输出PWM波形实现方法。
    的头像 发表于 10-24 14:56 562次阅读
    STM32H7芯片系列中<b class='flag-5'>定时器</b>同步启动并输出PWM<b class='flag-5'>波形</b>的<b class='flag-5'>实现</b>方法

    定时器触发3ADC同时采样指定次数

    定时器触发3ADC同时采样指定次数控制3ADC相等时间间隔,采样N次。
    发表于 10-19 08:30

    使用定时器PWM输出功能的方法

    是buzzer_on(int freq),它接收不同的频率参数,对定时器进行配置,输出50%占空比的不同频率的PWM波,进而控制蜂鸣器发声。实现方法参考下方代码,其中要注意的是预分频系数、周期以及PWM输出的
    发表于 08-16 06:13

    555定时器电路原理图 基于555芯片的定时器电路设计

    这节要将的是关于555芯片组成的定时器电路,主要讲解6种,分别是延时定时器、长延时定时器、分段式定时器、抗干扰的定时器、可变间歇
    发表于 07-18 17:40 4569次阅读
    555<b class='flag-5'>定时器</b>电路原理图 基于555芯片的<b class='flag-5'>定时器</b>电路设计

    555定时器闪光灯设计方案 使用555定时器IC设计可调节单/双LED闪光灯电路

    555定时器设计教程分享给大家,555芯片控制LED闪烁电路,555定时器闪光灯电路;给大家分享的是PCB 项目--使用 555定时器 IC 的可调单/双 LED 闪光灯。(附加项目原
    发表于 07-14 09:14 2662次阅读
    555<b class='flag-5'>定时器</b>闪光灯设计方案 使用555<b class='flag-5'>定时器</b>IC设计<b class='flag-5'>可调</b>节单/双LED闪光灯电路

    一个定时器输出4路不同频率波形的应用示例

    一般来讲,一个STM32定时器输出基于同一频率的各路信号比较方便。但经常也会有人问使用STM32一个定时器是否可以实现多路不同频率的输出。
    的头像 发表于 07-06 15:57 1116次阅读
    一个<b class='flag-5'>定时器</b>输出4路不同频率<b class='flag-5'>波形</b>的应用示例

    如何用一个定时器实现3路时差占空比可调波形

    有人想实现下面的PWM输出波形,三路频率相同,占空比同步可调,且三路输出波形时差固定为T/3。
    的头像 发表于 07-06 15:22 1033次阅读
    如何用一个<b class='flag-5'>定时器</b><b class='flag-5'>实现</b>3路<b class='flag-5'>时差</b>和<b class='flag-5'>占空比</b><b class='flag-5'>可调</b>的<b class='flag-5'>波形</b>

    如何使用MAXQ微控制器上的定时器B生成PWM波形

    寄存器和带TBC比较寄存器的定时器B输出功能。图1至图4显示了每种特定配置下定时器B引脚TBB上的典型PWM波形。对于所有情况,用户都可以使用定义的公式确定PWM周期和占空比
    的头像 发表于 06-13 16:30 445次阅读
    如何使用MAXQ微控制器上的<b class='flag-5'>定时器</b>B生成PWM<b class='flag-5'>波形</b>

    什么是软件定时器?软件定时器实现原理

    软件定时器是用程序模拟出来的定时器,可以由一个硬件定时器模拟出成千上万个软件定时器,这样程序在需要使用较多定时器的时候就不会受限于硬件资源的
    的头像 发表于 05-23 17:05 1638次阅读

    基于定时器的PWM呼吸灯实例

    本文将介绍通过定时器的输出比较功能实现脉宽可调的输出波形来控制LED等,实现呼吸灯的效果。
    的头像 发表于 05-01 09:03 641次阅读
    基于<b class='flag-5'>定时器</b>的PWM呼吸灯实例

    一文读懂定时器实现技术

    程序里的定时器主要实现的功能是在未来的某个时间点执行相应的逻辑。在定时器模型中,一般有如下几个定义。
    的头像 发表于 04-21 14:36 564次阅读
    一文读懂<b class='flag-5'>定时器</b><b class='flag-5'>实现</b>技术