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

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

3天内不再提示

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

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

一般来讲,一个STM32定时器输出基于同一频率的各路信号比较方便。但经常也会有人问使用STM32一个定时器是否可以实现多路不同频率的输出。从实现这个功能角度来讲,答案是肯定的,并可以满足相应的应用需求。

这里利用STM32G4的Nucleo开发板进行一个简单的实现示例,顺便交流和分享些思路,以拓宽STM32定时器的应用场景。示例中使用STM32定时器输出模式中的比较切换模式,即Toggle模式,结合定时器的比较事件及DMA传输来完成。

我使用STM32G431RB片内TIM1,通过它实现4路不同频率的PWM输出,分别是20KHz,50KHz,70KHz,80KHz,让TIM1运行在10Khz的循环计数状态。TIMER的计数时钟源为170Mhz,没有对时钟进行分频。

基于上述条件,TIM1的10KHz更新频率所对应的计数脉冲个数则为17000,那么,20KHz、50KHz、70KHz、80KHz所对应的计数脉冲个数分别是8500、3400、2428、2125,分别对应着TIM1四个通道CH1/CH2/CH3/CH4的PWM输出。【可参考下面表格】

图片

现在开始使用STM32CubeMx进行初始化配置。TIM1的时基配置如下:

图片

将TIM1的CH1/CH2/CH3/CH4的比较输出模式配置为匹配切换模式。这里关闭了CCR寄存器的预装功能。

图片

上图中绿色圆圈里的用于比较的初始数据,依据不同通道的占空比来拟定,不是很重要,只会影响到第一个脉冲的占空比。当然,也不能乱写。【为什么呢,请自行思考下】

再来看看有关DMA的配置,4个通道都开启了基于比较事件的DMA触发请求,并使用循环传输模式。

图片

基于CubeMx配置完成后,生成初始化工程代码。

下面进行用户代码的添加和整理。假设四个通道输出的占空比分别为70%,70%,40%,40%。为了实现4路不同输出频率及占空比的波形,需拟定一些用于比较切换的数据,借助各个通道的比较事件触发DMA,让DMA适时修改相应通道的比较寄存器的值,即修改CCRx的值。【这个地方的实现原理很难一两句完全写清楚,有兴趣的请先了解STM32定时器的比较切换模式,再结合DMA传输琢磨琢磨。下面表格是实现上面输出需要用到的一些数据。】

图片

结合上述表格的数据,定义一些宏参数和内存数组。内存数组用来存放各个通道不同时刻的比较值。【本想放源码文本上来的,因为可能有人需要验证测试。但这里实在不好排版,只能贴图了。抱歉!】

图片

图片

图片

图片

图片

上面的四个数组分别对应四个通道做比较切换输出时需用到的比较值。这些数据的拟定需好好琢磨下。我刚开始在代码里都是放的具体数据,但考虑到不太好理解各个数据的含义。我这里特意将它们改成宏替换,旨在以宏替换的形式顺便做个比较直观的注释,希望帮到有需要或感兴趣的工程师

接下来添加具体的功能实现代码。代码不多,很简单,都是基于HAL库的。看到函数名就大致知道什么意思了。下面的代码就是本示例中用到功能代码。它们的功能分别是使能相关定时器通道的比较输出事件;开启基于定时器比较事件的DMA传输并完成相关配置;使能各个定时器通道比较事件的DMA请求;使能TIM1的主输出功能并开启计数器的工作。

图片

编译调试整理后,运行程序查看结果.

图片

从上面示波器测得结果来看,输出波形满足前面提到的设计要求。频率、占空比跟我们设计要求的一致。【注:手机模式下可点击图片放大查看】

在上面代码的基础上,我保持4个通道输出的脉冲频率不变,对各自占空比做下调整,分别调整为30%,30%,60%,60%【在上面代码里只需调整那几个Dutyn值】,显然也能很好地实现各自的输出。波形图如下:

图片

在上面示例中,我将TIM1的10Khz更新频率做为配置CH1~CH4四个通道输出的一个参考或基准。既然一个定时器可以实现4路不同频率,那么多个定时器实现更多不同频率的PWM输出也就不难了。

关于使用1个定时器实现多路不同频率输出的示例就介绍到这里。本质上它是基于定时器比较输出功能的比较切换模式与DMA的灵活运用,抛砖引玉似地给大家提供些方法或思路。当我们将STM32各种定时器事件、定时器比较输出切换模式以及DMA传输灵活而巧妙加以运用时,往往可以实现很多客制化的东西。

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

    关注

    31

    文章

    5342

    浏览量

    120274
  • 定时器
    +关注

    关注

    23

    文章

    3247

    浏览量

    114746
  • PWM输出
    +关注

    关注

    1

    文章

    66

    浏览量

    5137
  • stm32cubemx
    +关注

    关注

    5

    文章

    283

    浏览量

    14794
  • HAL库
    +关注

    关注

    1

    文章

    121

    浏览量

    6224
收藏 人收藏

    评论

    相关推荐

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

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

    stm32定时器输出4pwm

    我用stm32 103fvet6 写了程序。用定时器3输出4pwm,分别对应PA6,PA7
    发表于 05-10 22:53

    stm32定时器14只能输出一路pwm波形吗?

    stm32定时器14只能输出一路pwm波形吗?
    发表于 03-26 14:11

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

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

    利用定时器B的比较功能输出PWM波形

    思路:利用定时器B的比较功能输出PWM波形定时器B定时器B的特点:1)异步16位
    发表于 11-29 06:52

    STM32F103是怎样使用TIM4定时器输出PWM的

    STM32F103使用TIM4定时器输出PWM通过定时器4实现两
    发表于 01-06 07:30

    定时器介绍

    同时用两定时器控制蜂鸣器发声, 定时器0控制频率定时器1控制同
    发表于 02-23 15:56 20次下载

    关于定时器输出的PWM频率范围及占空比精度

    定时器输出的PWM频率范围及占空比精度
    的头像 发表于 03-12 10:37 1.4w次阅读

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

    (TIMx_CCRx)来设置占空比。定时器只有自动重装载寄存(TIMx_ARR),但是
    发表于 11-23 18:21 18次下载
    STM32单片机<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>PWM波

    STM32-通用定时器-PWM输出

    1 通用定时器PWM概述1.1STM32定时器输出通道引脚这里以TIM3为例来讲解。STM32的通用定时器分为TIM2、TIM3、TIM4
    发表于 11-26 15:36 23次下载
    STM32-通用<b class='flag-5'>定时器</b>-PWM<b class='flag-5'>输出</b>

    STM8学习笔记---定时器输出7PWM波

    STM8S003F3P6单片机共有三定时器定时器1、定时器2、定时器4。其中
    发表于 11-26 16:06 9次下载
    STM8学习笔记---<b class='flag-5'>定时器</b><b class='flag-5'>输出</b>7<b class='flag-5'>路</b>PWM波

    通过TIM输出比较做一个定时器

    TIM是定时器模块的简称。TIM的核心是16位的自由定时器(TCNT)。有8完整的16位的捕捉/比较(IC/OC)通道。 模块运行时,
    发表于 11-26 20:21 11次下载
    通过TIM<b class='flag-5'>输出</b>比较做<b class='flag-5'>一个</b><b class='flag-5'>定时器</b>

    STM32F4定时器独立输出PWM脉冲

    本文以STM32F405单片机为例,介绍如何用定时器的四通道独立地输出PWM脉冲。主要
    发表于 11-30 10:06 28次下载
    STM32F<b class='flag-5'>4</b>单<b class='flag-5'>定时器</b>独立<b class='flag-5'>输出</b>四<b class='flag-5'>路</b>PWM脉冲

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

    MAXQ微控制有三种类型的定时器定时器0、定时器1和定时器2。定时器B是
    的头像 发表于 02-20 13:44 783次阅读
    如何使用MAXQ微控制<b class='flag-5'>器</b>上的<b class='flag-5'>定时器</b>B生成PWM<b class='flag-5'>波形</b>

    stm32定时器能同时控制两灯以不同频率闪烁吗?

    STM32的定时器功能强大,**STM32的定时器可以同时控制两灯以不同频率闪烁** 。
    的头像 发表于 12-13 10:43 2157次阅读