我想要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次:

  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位都还不能满足,那就······

推荐阅读:

1.关于STM32的计数和延时

2.STM32F4_TIM输出PWM波形(可调频率、占空比)

3.STM32F4_TIM输入波形捕获(脉冲频率)

最后

  1. 置顶,容易我;

  2. 点赞是一种习惯!

  3. 公众号二维码在下面,看你是否考虑关注下!

长按识别二维码 关注

赞赏是对作者的认可与支持!

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

  1. 普通定时器输出互补PWM带死区

    普通定时器输出互补PWM带死区 一般来说三相半桥电路需要互补PWM驱动,而且互补PWM需要带死区,死区的大小跟管子的性能参数有关.公司为了省成本,在云台上把电机驱动芯片替换成三相半桥.用6个MOS驱动 ...

  2. GD32F303固件库开发(13)----定时器TIM捕获PWM测量频率与占空比

    GD32F303固件库开发.13----定时器TIM捕获PWM测量频率与占空比 概述 视频教学 csdn课程 样品申请 生成例程 keil配置 使能串口 串口重定向 占空比与频率计算 GPIO初始化 ...

  3. 【WB32库开发】第9章 TIM1高级定时器——输出多路PWM

    PWM(Pulse Width Modulation)意为脉冲宽度调制,简称脉宽调制 .在工控行业,PWM信号可以用来调节电机转速.调节变频器以及BLDC电机驱动等:在LED照明行业,可以通过PWM来 ...

  4. stm32f4 用一个定时器输出多个不同频率占空比PWM波(含代码)

    之前有写过怎么使用定时器生成PWM波,以及怎么修改频率与占空比,具体大家可以看下面这篇 stm32f4 生成PWM波_居安士的博客-CSDN博客_stm32产生pwm波 STM32每一个定时器都有4路 ...

  5. STM32用一个定时器输出多路不同频率及占空比的PWM(输出比较模式)

    我们使用STM32输出PWM时会使用定时器的PWM输出模式来进行生成,但是这样子生成PWM是有局限的,它只能生成四路频率相同的PWM,当你设定了TIMx_PSC(预分频寄存器)和TIMx_ARR(自动 ...

  6. stm32定时器输出pwmIO口模拟pwm——呼吸灯

    文章目录 前言 一.pwm(脉冲宽度调制) 1.基本原理 2.PWM的优点 3.PWM波的控制方法 二.定时器的相关介绍 1.stm32定时器 2.通用定时器计数模式 3.定时器的基本工作原理 三.定 ...

  7. 定时器输出PWM控制电机(程序)

    电机控制程序的三方面要点: 一.定时器的输出通道设置 二.电机频率的设定 三.占空比输入函数的设计 对于电机来说,转速与转向是最重要的表现.这里的程序是针对四个直流无刷电机来编写的. 控制四个电机,是 ...

  8. STM32F4步进电机速度和位移与定时器输出PWM频率计算

    STM32主频 F1主频只有72M,F4芯片主频最高可以达到168M. F4定时器频率 因为系统初始化SystemInit函数里初始化APB1总线时钟为4分频即42M,APB2总线时钟为2分频即84M ...

  9. 第十八章 AT32F403A基于V2库 定时器输出移相pwm

    目录 概述 硬件 TMR互联同步 软件 初始化 初始化代码 测试 概述 本文主要是使用AT32F403A开发板,基于V2库使用tmr的同步功能来实现定时器输出移相pwm的功能. 串口工具使用的Atli ...

最新文章

  1. 深度剖析云计算背后采用的具体技术
  2. Golang 的字符编码与 regexp
  3. ubuntu 安装截图工具 Shutter,并设置快捷键 Ctrl+Alt+A
  4. APICloud方法
  5. js中的target与currentTarget的区别转
  6. 学计算机等级考试电脑版软件,计算机二级考试宝典电脑版
  7. 在 .NET 中加载椭圆曲线 (EC) 密钥
  8. sudo su su_Spring Security应用程序中的su和sudo
  9. 立面设计模式–设计观点
  10. suse required-start: mysql_suse linux 安装MySql步骤
  11. 机器学习解决问题思路 — 词嵌入矩阵E对于NLP问题的重要性
  12. 170308、oracle查看被锁的表和解锁
  13. 推荐15个在线多媒体(图片、音频、视频)编辑器,互联网营销
  14. Pycharm中Python包的下载与使用
  15. 移动硬盘变成RAW,如何将其转换为NTFS
  16. c#进行三角形周长面积计算公式_C#程序设计 输入三角形三边长,并计算的周长和面积...
  17. Day082 数据分析案例
  18. MetaFun 小传
  19. sql查询结果加上序号
  20. 【懒懒的Python学习笔记二】

热门文章

  1. 深度学习笔记-----YOLOV4框架结构大讲解
  2. Python XlsxWriter创建xlsx格式的Excel文件
  3. 关于RHCE考试一些事情
  4. 产品读书《六顶思考帽》
  5. 笔记-动物病理(4:适应与修复+缺氧)
  6. 怎样使用Outlook连接Hotmail
  7. 组合导航(六):惯性导航误差建模
  8. android 设置壁纸,在Android中使用WallpaperManager设置壁纸
  9. 前端面试题之浏览器系列
  10. 快递鸟基于java功能打印电子面单api接口