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

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

3天内不再提示

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

冬至子 来源:茶话MCU 作者:Miler 2023-07-06 15:22 次阅读

有人想实现下面的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个定时器建立主从关系,各拿出一个通道来实现上述输出也很方便。

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

    关注

    32

    文章

    2253

    浏览量

    94343
  • 定时器
    +关注

    关注

    23

    文章

    3237

    浏览量

    114442
  • PWM波
    +关注

    关注

    0

    文章

    99

    浏览量

    16838
  • 定时器中断
    +关注

    关注

    0

    文章

    49

    浏览量

    11163
  • stm32cubemx
    +关注

    关注

    5

    文章

    280

    浏览量

    14747
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    求助:如何用51单片机定时器输出的两相同占空比pwm?

    何用51单片机定时器输出的两相同占空比pwm?
    发表于 07-11 17:25

    何用定时器实现延时

    何用定时器实现延时,A strong man will struggle with the storms of fate.(Thomas Addison)  强者能同命运的风暴抗争。(爱迪生)通用
    发表于 07-22 08:58

    simulink可调节的定时器

    simulink可调节的定时器实现定时器初步实现计时进阶版结论定时器由于在网上找到的
    发表于 08-17 09:12

    何用定时器实现PWM?

    何用定时器实现PWM?
    发表于 10-08 06:21

    如何去实现定时器输出一路PWM波形的设计呢

    PWM是什么?如何去实现定时器输出一路PWM波形的设计呢?有哪些步骤?
    发表于 11-15 06:04

    何用定时器的四通道独立地输出四PWM脉冲?

    何用定时器的四通道独立地输出四PWM脉冲?
    发表于 12-21 07:59

    通断电时间独立可调定时器

    通断电时间独立可调定时器:IC1,IC2和IC3组成长时间间断通电式定时电路。
    发表于 12-13 22:35 1136次阅读
    通断电时间独立<b class='flag-5'>可调</b><b class='flag-5'>定时器</b>

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

    这里使用STM32F302_Nucleo板来实现之。使用STM32常规定时器中的高级定时器TIM1来实现。当然,也并非定要TIM1,其它支
    的头像 发表于 11-20 14:54 3963次阅读
    <b class='flag-5'>定时器</b><b class='flag-5'>实现</b><b class='flag-5'>3</b><b class='flag-5'>路</b><b class='flag-5'>时差</b>和<b class='flag-5'>占空比</b><b class='flag-5'>可调</b>的<b class='flag-5'>波形</b>

    MSP430F5529通过定时器A产生两反相频率占空比可调PWM波

    了两定时器产生两反相的PWM波并通过捕获比较捕获其中
    发表于 11-19 20:36 3次下载
    MSP430F5529通过<b class='flag-5'>定时器</b>A产生两<b class='flag-5'>个</b>反相频率<b class='flag-5'>占空比</b><b class='flag-5'>可调</b>PWM波

    STM32单片机定时器输出不同频率PWM波

    (TIMx_CCRx)来设置占空比定时器只有自动重装载寄存
    发表于 11-23 18:21 18次下载
    STM32单片机<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>定时器</b>输出不同频率PWM波

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

    的比例。例如,占空比为50%表示高电平持续时间等于周期的半。在实现DSP芯片输出占空比固定
    的头像 发表于 12-26 17:28 2485次阅读

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

    等。使用555定时器IC的可调定时器电路项目也是555定时器IC的应用之。通过使用这个项目,人们可以
    的头像 发表于 02-25 15:16 1995次阅读
    使用555<b class='flag-5'>定时器</b>的<b class='flag-5'>可调</b>双<b class='flag-5'>定时器</b>电路

    如何实现软件定时器

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