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

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

3天内不再提示

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

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-12 10:37 次阅读

我想要TIM定时器输出的PWM波形:0.1%精度占空比, 频率范围:200Hz - 10KHz。请问能实现吗?

Ⅰ写在前面

如果有朋友下载了上一篇文章我提供的例程,在“bsp_timer.h”文件下,你就会发现有如下一段被我注释了的【说明性文字】。

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

这里句题外话:

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

Ⅱ解读那段文字

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

1.定时器的位数

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

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

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

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

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

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

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

#define PWM_TIM_SetComparex TIM_SetCompare1

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

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

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

pwm_period:是PWM周期值;

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

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

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

3.计算频率和占空比

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

波形频率(周期)案例:

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

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

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

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

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

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

我们需要10KHz,0.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位都还不能满足,那就······

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

    关注

    114

    文章

    4885

    浏览量

    209815
  • STM32
    +关注

    关注

    2239

    文章

    10665

    浏览量

    348518
  • 定时器
    +关注

    关注

    23

    文章

    3144

    浏览量

    112006
收藏 人收藏

    评论

    相关推荐

    STM32同一定时器PWM输出定时,会影响我的PWM输出吗?

    求助各位大佬 ,我用定时器2通道1输出PWM 定时器设置为TIM2_PERIODE (1000-1) TIM2_PRESCALER 36,现在还想开启2的中断用
    发表于 03-26 07:23

    STM32f4定时器TIM1输出PWM占空比快速变化时,串口2接收的数据频繁出错是为什么?

    STM32f4定时器TIM1输出PWM占空比快速变化时,导致串口2接收的数据频繁出错是为什么?
    发表于 03-15 06:27

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

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

    一个通道如何捕获PWM频率占空比

    一,前言正常情况是双通道捕获PWM波,这种方法简单且准确,但是它占用的资源太多了,因为它使用定时器的两个通道,且这两个通道映射在一个通道上,同时配置一路捕获为触发定时器复位,所以只能使用2个通道
    的头像 发表于 12-30 08:00 450次阅读
    一个通道如何捕获<b class='flag-5'>PWM</b>的<b class='flag-5'>频率</b>和<b class='flag-5'>占空比</b>?

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

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

    PWM定时器的脉宽测量精度

    您好!请问PWM定时器的脉宽测量精度是多少?
    发表于 11-02 22:51

    STM32F10X定时器PWM输入模式测量频率占空比精度问题如何处理?

    今天使用了STM32F10X定时器PWM输入模式,用来测量输入方波信号的频率占空比,发现精度不高,设置
    发表于 10-28 07:14

    精度定时器与高级控制定时器 PWM 封波后再恢复的区别

    精度定时器与高级控制定时器 PWM 封波后再恢复的区别
    的头像 发表于 10-17 16:52 314次阅读
    高<b class='flag-5'>精度</b><b class='flag-5'>定时器</b>与高级控制<b class='flag-5'>定时器</b> <b class='flag-5'>PWM</b> 封波后再恢复的区别

    使用MM32F0270 定时器DMA方式输出PWM

    使用MM32F0270 定时器DMA方式输出PWM
    的头像 发表于 10-17 14:47 515次阅读
    使用MM32F0270 <b class='flag-5'>定时器</b>DMA方式<b class='flag-5'>输出</b><b class='flag-5'>PWM</b>

    lpc1114同一个定时器最多可以产生几路pwm波?

    比如32位定时器b0的匹配输出最多可以同时几路pwm频率是相同的,就是占空比不同
    发表于 09-25 07:35

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

    是buzzer_on(int freq),它接收不同的频率参数,对定时器进行配置,输出50%占空比的不同频率
    发表于 08-16 06:13

    使用瑞萨e² studio FSP基于RA2E1定时器配置PWM输出

    使用瑞萨e² studio FSP基于RA2E1定时器配置PWM输出
    的头像 发表于 08-01 00:13 154次阅读
    使用瑞萨e² studio FSP基于RA2E1<b class='flag-5'>定时器</b>配置<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>

    STM32定时器(一)PWM输出

    STM32定时器分类众多,按照内核、外核标准分为两部分:核内定时器+核外定时器
    的头像 发表于 07-21 14:51 2641次阅读
    STM32<b class='flag-5'>定时器</b>(一)<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>

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

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

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

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