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

发布时间:2023-11-02  

一般来讲,一个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传输灵活而巧妙加以运用时,往往可以实现很多客制化的东西。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    脚未外接电压的条件下,555时基电路的逻辑功能表如下: 555定时器三种工作模式 在此模式下,555功能为单次触发。应用范围包括定时器,脉冲丢失检测,反弹跳开关,轻触开关,分频器,电容......
    自动转换开关(2023-09-07)
    的原理、设计和操作,在该电路中,一系列 LED 等直流负载可由电池或交流-直流电源驱动。 电路原理: 该电路基于 555 定时器的双稳态工作原理。在该模式下,定时器输出为高电平或低电平,取决......
    风扇的转速。 本例电路利用555定时器芯片,可实现对风扇的调速功能。     本例电路中,555芯片用作典型的多谐振荡器来使用,555相关应用电路请移步:15个有趣的555电路,没事可以自己做一做。发光二极管LED......
    定时器IC(555振荡器)诞生50周年。挑战赛要求社区成员使用555定时器进行创新或独特项目开发。555定时器具备多种功能,可用于开发各种电路设计。凡按......
    基于555定时器和单片机的RC测量系统设计;  在电子仪器、仪表的制造及使用行业,有大量的印刷电路板需要调试、测量与维修,需要对电阻电容的数值进行测试。   本文介绍了一种基于AT89C51单片......
    关断状态。因此,晶体管 Q2 处于导通状态,从而通过绿色 LED 指示灯将负载切换至导通状态。 断电后恢复供电时,555 定时器 IC 变为低电平,从而触发 555 定时器 IC。555 定时器集成电路......
    电路项目分享|基于555定时器的DC-DC转换电路,附带......
    图-      该ESR 计电路可分为两部分,555 定时器和输出级。   1. 555 振荡器:   555电路是一种传统的非稳态多谐振荡器,它发出频率为几百千赫兹的方波。在这个频率下,几乎......
    /VPD使主机复位后开始重新操作;如果RST/VPD在555定时结束时确实变低了,则555定时器在P1.0 低电平触发下输出高电平加在RST/VPD上作备用电源,直到VCC又恢复正常,然后再保持一段由R......
    利用随处可见的 555 定时器 取代 LED 驱动器的uP 控制;摘要本文详细介绍如何使用便宜的 555 定时器,在一些不需要 LED 驱动器全部功能的应用中,代替微处理器对专用 LED 驱动......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>