历史上的今天
返回首页

历史上的今天

今天是:2025年01月23日(星期四)

正在发生

2021年01月23日 | 定时器输出的PWM频率范围及占空比精度

2021-01-23 来源:eefocus

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


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


推荐阅读

史海拾趣

Dean Technology公司的发展小趣事

Dean Technology公司起源于上世纪80年代,当时电子行业正经历着飞速的发展。创始人凭借其深厚的电子技术背景和敏锐的市场洞察力,决定进入高压二极管领域。他带领研发团队不断攻克技术难题,成功推出了一系列性能稳定、品质可靠的高压二极管产品,奠定了公司在行业中的技术领先地位。

Ememory Technology Inc公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,eMemory始终保持着对新技术和新市场的敏锐洞察力。公司不断推出新的硅智财产品和解决方案,以满足客户不断变化的需求。同时,eMemory还积极拓展国际市场,与全球多家知名芯片设计厂商建立了长期稳定的合作关系。这些努力使得eMemory在电子行业中保持着领先地位,并为其未来的发展奠定了坚实的基础。

Etco Inc公司的发展小趣事

随着市场竞争的加剧和客户需求的不断提高,Etco Inc公司意识到品质管理对于企业发展的重要性。为此,公司投入大量资源加强品质管理体系建设,引进先进的生产设备和检测仪器,确保产品质量的稳定性和可靠性。同时,Etco还加强了员工培训和技能提升,提高了员工的品质意识和操作技能。这些举措使Etco的产品质量得到了显著提升,赢得了客户的广泛赞誉。

DIALIGHT公司的发展小趣事

随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。

Datakey Electronics公司的发展小趣事

在电子产品行业,产品质量是企业生存和发展的基石。Datakey Electronics始终坚守品质至上的原则,从原材料采购到生产流程控制,再到产品检验和售后服务,每一个环节都严格把关。正是这种对品质的执着追求,使Datakey Electronics的产品在市场上树立了良好的口碑,赢得了客户的信赖。

Cotco公司的发展小趣事

面对电子行业日新月异的变化和不断涌现的新挑战,Cotco公司始终保持敏锐的市场触觉和应变能力。公司及时调整战略方向,加大在新兴领域如物联网、智能家居等的投入和研发力度。同时,Cotco也积极拓展国际市场,与全球多个国家和地区的合作伙伴建立合作关系,推动产品的全球化销售和服务。展望未来,Cotco将继续秉承创新、质量和服务的理念,致力于成为全球电子行业的佼佼者。

问答坊 | AI 解惑

有谁画过高频类的PCB板啊??

本帖最后由 paulhyde 于 2014-9-15 09:16 编辑 有谁画过高频类的PCB板并且性能稳定,我以前画的总是干扰太大,网上的一些抗干扰的方法说的又比较抽象,没有具体实物 请画过的帮忙传一份上来吧,小弟下回去研究研究。最好能有一些注释说明的 ...…

查看全部问答>

求助加速度计应用

最近再做单片机的课程设计,求各位大虾给点帮助,是基于MMA7455L加速度计芯片的。 1。编程使用IIC接口读取加速度值,并在数码管显示 2。倾斜加速度计电路板,根据左倾斜还是右倾斜,决定8个LED灯是左流水还是右流水 3。根据加速度计电路板的倾斜 ...…

查看全部问答>

月薪1万找蓝牙开发工程师【上海】

我们公司要招一名Linux下的蓝牙开发工程师。公司地址在上海中山公园附近。薪资待遇1万/月。 职位要求: 1、精通LINUX系统以及C/C++编程(必须)。 2、熟悉嵌入式系统、单片机的开发。 3、精通蓝牙协议、蓝牙应用开发(必须)。 4、至少三年以 ...…

查看全部问答>

Tab Control

利用EVC建立了一个基于Win32的应用程序,想在对话框中加入Tab Control控件,不知怎么加,请大家帮帮忙.谢谢!…

查看全部问答>

谁用过智能IC卡,用谁家的?一起讨论一下...

谁用过智能IC卡,用谁家的?一起讨论一下... 谁用过智能IC卡,我用过握奇的,当时用c语言写的,太难了... …

查看全部问答>

电路延时与电压,温度的关系

电源电压越高,电路延时越小,  而环境温度越高,电路延时越大  …

查看全部问答>

MSP430F149与CS8900A接口电路

    CS8900、CS8900A芯片是Cirrus Logic公司生产的一种局域网处理芯片,在嵌入式领域中使用非常常见。它的封装是100-pin TQFP,内部集成了在片RAM、10BASE-T收发滤波器,并且提供8位和16位两种接口,一般在单片机中,使用了CS8900的8位 ...…

查看全部问答>

今天收到了2.4寸触摸屏,但不知道怎么连,求助

今天收到了触摸屏,但是不知道怎么连线,还望高人指点啊。另外想问下直接接5V的供电会烧坏吗?…

查看全部问答>

TINA-TI 9

本帖最后由 dontium 于 2015-1-23 12:42 编辑 TINA-TI 9 能进行单片机仿真吗?? 大家都用什么单片仿真软件,除了proteus [ 本帖最后由 c654723069 于 2012-12-7 19:15 编辑 ] …

查看全部问答>

【玩转C2000 Launchpad】RAM调度模板

最近也在学习C2000,如果用库的话可以在controlSTIUE的例程的目录中,复制一个,然后在其工程中编制自己的程序。其好处是可以在FLASH中运行。     但我看坛子里的童鞋都用非库。所以我也看看非库但非库只能在RAM中运行。至于怎么在FLASH ...…

查看全部问答>