良许Linux教程网 干货合集 定时器输出的PWM频率范围及占空比精度

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

我的目标是具有最高0.1%精度的PWM波形调制,需求覆盖的频率从200Hz延展至10KHz。这样的配置是否能够实现呢?

初始说明

在那些曾经参考过我的之前文章并下载了相关代码样本的朋友中,您或许记得在“bsp_timer.h”这个特定文件之中,存在着一部分我之前添加的、现在被注释掉的【解释性文本】。

image-20231230215035141
image-20231230215035141

这个工程是我从之前项目中提取出来(复制部分代码),从新整理的一个的工程。里面的这个被注释了的描述文字是之前整理的,今天重新对其说明一下。

这里句题外话

我一般都是注重让大家明白其原理,提供的工程代码以简单为原则。比如:没有添加系统,没有添加参数越界检查等额外的代码。不是让你直接拷贝过去就用,一般需要结合你实际工程,对其修改。

解读那段文字

想要认真掌握定时器输出PWM的朋友,可以品味一下那段文字。

1.定时器的位数

在STM32中,定时器分16位32位,这个好理解。简单的来说,就是16位定时器相关的寄存器包含计数器是16位的,计数的范围是0 ~ 0xFFFF。同理,32位计数范围为0 ~ 0xFFFF FFFF。

当然,上面提到的相关的寄存器,其实只有几个,计数器、自动重载寄存器、捕获/比较寄存器等,具体请参看手册中关于TIM寄存器章节。

截图中,频率的范围,其实说明了32位定时器的优势。但是,在STM32中,有些型号的MCU是没有32位的定时器的(具体请见选型手册,或数据手册)。

2.占空比,*周期(频率)*

PWM占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。

比如:拿1KHz波形来说,占空比为20%,即高电平0.2ms。

image-20231230215038508
image-20231230215038508

在STM32定时器中,占空比其实是对应【捕获/比较寄存器 】的值,你可看见我提供的代码:

#define PWM_TIM_SetComparex TIM_SetCompare1

image-20231230215041452
image-20231230215041452

捕获/比较寄存器有1,2,3,4,对应的其实是你输出的通道。

占空比的数值,需要结合PWM的频率,所以代码中是:

pwm_pulse = (pwm_period + 1)*Dutycycle / 100;

pwm_period:是PWM周期值;

/100代表:占空比的大小。

周期值:其实就是【**自动重载寄存器 (TIMx_ARR)**】是值;

看见我标记为红色的文字没有?这两个值决定了PWM的周期和占空比

image-20231230215044366
image-20231230215044366

3.计算频率和占空比

频率 = 1/周期; 1KHz的周期 = 0.001秒,即1ms.

波形频率(周期)案例:

假如计数时钟CK_CNT(看上图)一秒钟计数10M次:

  1. 我们需要1KHz波形,即1ms(波形1K)CNT计数个数为10K个,自动重载寄存器ARR设定值为10K。

  2. 我们需要10KHz波形,同理:自动重载寄存器设定值为100K。

占空比(1KHz波形)案例:

假如CK_CNT一秒钟计数1M次:

  1. 我们需要1KHz0.1占空比波形:同上分析,ARR的值为1K,则**捕获/比较寄存器 1 (TIMx_CCR1)**值为1。(为什么是1? 1KHz * 0.1% 就等于1)

  2. 我们需要10KHz0.1占空比波形:同理计算CCR1值:等于 1KHz * 0.1% 就等于0.1。显然

两案例的结论

1.100K > 65535,对于16位定时器来说,肯定不行啊。对于32位定时器就行。

2.CCR1的值不可能为0.1。

3.我们就需要改变计数时钟CK_CNT来达到要求,也就是分频。

4.自己设定边界值,通过修改TIMx_PSC、TIMx_ARR和TIMx_CCR三个寄存器参数,来满足自己要求。如果不能满足,那么选择32位定时器。如果32位都还不能满足,那就······

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部