历史上的今天
返回首页

历史上的今天

今天是:2024年09月05日(星期四)

正在发生

2019年09月05日 | STM32基础知识2-分享PWM输入模式捕捉4路PWM波形的周期和占空比

2019-09-05 来源:eefocus

前几天分享过一个帖子,因为网速原因没有上传源码,看到有人回复我说实验不成功,那么好吧!这是我的错误,这次就将源码和我的心得体会分享出来,供大家下载测试和成长。我其实也是菜鸟一个,如果讲解的地方有啥不对,或是程序设计的不好,欢迎大家提出意见,让我们一起来学习进步。


PWM输入是输入捕获的一个特殊应用,输入捕获就是当连接到定时器的引脚上产生电平变化时对应的捕获装置会立即将当前计数值复制到另一个寄存器中。你可以开启捕获中断然后在中断处理函数中读出保存的计数值。


与输入捕获不同的是PWM输入模式会将同一个输入信号(TI1或TI2)连接到两个捕获装置(IC1和IC2)。这两个捕获装置一个捕获上升沿一个捕获下降沿。TI1FP1、TI2FP2它们中的一个被选择为触发输入且从模式控制器被配置为复位模式。


PWM输入捕获原理和时序图:



 

1)   当第一次上升沿到达时IC1捕获TIMx_CCR1的值为当前计数值4,IC2不会捕获TIMx_CCR2保持不变,计数器复位从0开始计数。


2) 第一个下降沿到达时IC2捕获TIMx_CCR2的值为2表示脉冲宽度。当上升再次到达时TIMx_CCR1的值就表示脉冲周期了(注意:第一次上升沿捕获的是个随机值)。


2) 原理也讲过了,那么下面就是实战了


一、操作步骤:

①将我的源码从论坛里面下载下来

②用杜邦线将PB7和PC6连接起来

③将编译完成的hex文件下载到开发板

④打开串口调试助手波特率选9600

⑤按下开发板的复位键,OK那么你就能看到串口的打印信息。

⑥用杜邦线依次将PB7和PC7、PB7和PC8、PB7和PC9连接起来,看串口打印不同占空比和相同周期的信息。


二、主程序讲解:

①TIM3_PWM_Init(1000-1,72-1);   //1KHz的周期

这个计算相信大部分人应该没有问题原子哥也做过详细的讲解那么我在重复一遍

CPU主频是72MHZ 这里将72MHZ主频72分频,那么就为1MHZ,所以计数器每加1那么就是代表增加1US,我这里设置的是999,因为0-999正好是1000us,所以我设置的周期是1000us 也就是1KHZ

②TIM_SetCompare1(TIM3,200);

这个函数式设置PWM通道的占空比,因为周期是1000us所以我这里设置的是20%的占空比,这个计算我就算教小白吧  占空比 = 200/1000 我这里设置的是通道1也就是PC6的占空比。下面三个我就不讲了。

③TIM4_PWMINPUT_INIT(0xffff,72-1);

这个函数是PWM输入模式初始化,这个我设置的最大计数是0xffff,因为是16位的计数器当然最大也只能这么大了,后面的参数是设置捕捉频率的,我这里还设置为1MHz,这样为了好看实验现象。

④While(1){}

主程序那三个打印语句我就不讲了,这个都不会,那么你就该补补了。


三、四路PWM程序讲解:

①void TIM3_PWM_Init(u16 arr,u16 psc)

这个函数我不讲很多因为原子哥已经将的很清楚了,我就将几个注意的地方和大家说一下,

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); 这个函数式定时器的全映射,将

TIM3定时器的引脚映射到了PC6 C7 C8 C9上了。

四、PWM输入捕捉程序讲解:

①void TIM4_PWMINPUT_INIT(u16 arr,u16 psc)

这个函数我在源码里面已经注释的很清楚了,有几个点需要大家注意

②TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);    

这个是选择有效的输入端 ,我这里TIM_TS_TI2FP2选择的PB7,注意:只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号。 

③TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);  

这个是配置为PWM输入主从复位模式,就是每次输入端有效电平变化的时候定时器计数器就会硬件上置0


中断函数讲解

至于TIM4的中断函数很简单我就不多讲什么了,主要就是将捕捉到的周期和占空比记录下来。

 

注意:我提醒大家一下,我现在这个捕捉的周期的范围是1-65535us,如果你要捕捉的周期超出这个怎么办,我给大家一点建议①将捕获精度降低,也就是讲捕获频率降下来②这个就是用原子哥那种溢出计数的方法,但是这个有意思的是主从复位模式,每次复位也会产生更新中断,那么如果不加设置的话,可能这种方法是行不通的。但是我已经解决了,看手册介绍,解决的。哈哈,大家有兴趣的话,可以去试着解决,自己做的饭才是最香的。实在是想用第二种方法,但是又解决不了的,就可以回复,但是我想着还是自己解决的好。

说了这么多,有的人可能会提出疑问?那你给我们讲这些理论,你自己到底实现了没有?俗话说的好,有图有真相,没图说啥?那么好的上真相,不过是有误差的,但是我认为这个误差在接受范围内。



PB7和PC6连接的串口输出情况:实际周期1KHz占空比20% 

PB7和PC7连接的串口输出情况:实际周期1KHz占空比40% 
PB7和PC8连接的串口输出情况:实际周期1KHz占空比60% 


推荐阅读

史海拾趣

Connor-Winfield公司的发展小趣事

在电子行业中,技术的创新和产品的品质是企业生存和发展的关键。Connor-Winfield深知这一点,因此在发展过程中始终注重技术创新和品质提升。公司投入大量资源进行研发,不断推出具有创新性和高性能的产品。同时,公司还建立了严格的质量管理体系,确保每一件产品都符合最高的品质标准。这些努力使得Connor-Winfield的产品在市场上赢得了良好的口碑。

Eastron Corp公司的发展小趣事

在电子产品同质化日益严重的今天,Eastron Corp深知品质对于品牌的重要性。公司严格把控产品质量,从原材料采购到生产过程,再到成品检验,每一个环节都经过严格把关。此外,Eastron还建立了完善的售后服务体系,为客户提供全方位的服务支持。正是凭借出色的品质和服务,Eastron赢得了客户的信赖和口碑。

Analog Power公司的发展小趣事

Analog Power公司成立于XXXX年,创立初期主要专注于电源管理解决方案的研发。面对当时竞争激烈的市场环境,公司创始人凭借对电源管理技术的深刻理解和坚定信念,带领团队克服了种种困难,逐步在市场中找到了自己的定位。他们深入研究客户需求,不断优化产品设计,逐渐赢得了客户的信任和认可。

Chengdu Sino Microelectronics Technology Co Ltd公司的发展小趣事

2000年3月,成都华微科技诞生。当时,集成电路设计行业刚刚起步,市场竞争激烈。然而,公司凭借对中国电子信息产业集团的坚定信任,以及对中国集成电路设计市场的深刻洞察,毅然决然地踏上了这条充满挑战的道路。初创期的华微科技,虽然规模较小,但团队成员都怀揣着对技术的热情和对未来的憧憬,为公司的长远发展奠定了坚实的基础。

DLG Hanbit公司的发展小趣事

随着环保意识的提高,DLG Hanbit公司开始注重环保和可持续发展。公司引进了一系列环保设备和技术,减少了生产过程中的污染物排放。同时,公司还积极推广绿色电子产品,帮助客户实现节能减排。这种环保理念不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

Bel Fuse公司的发展小趣事

Bel Fuse公司的创立可以追溯到XXXX年,当时它由几位富有远见的工程师在新泽西州创立。起初,公司专注于保险丝的研发和生产,致力于提供高质量的电气保护产品。凭借卓越的技术和可靠的产品质量,Bel Fuse逐渐在市场上获得了认可,并开始扩展其产品线。

问答坊 | AI 解惑

电磁兼容的设计方法介绍(一)

一﹑前言     关于电磁兼容的要求﹐目前世界上大多的先进国家﹐都已经有管制的法规并有相关的符合要求的单位﹐若产品无法符合要求规定﹐往往无法销售到该地区的市场﹐因此多数的电子产品﹐在销售前都必须经过电磁兼容的测试﹐ ...…

查看全部问答>

整体成本与复杂度

在电子产品从开发、运行到售后服务和维护这个完整的生命周期之中,设备软件已经成为电子产品制造商获得产品差别化竞争优势的关键因素,降低设备软件的成本与复杂度是其中最大的挑战。为了应对这个挑战,电子设备制造商需要进行一场现代化的变革,改 ...…

查看全部问答>

四川省大学生电子设计竞赛西南科技大学赛区竞赛题目-电子广告牌

本帖最后由 paulhyde 于 2014-9-15 09:27 编辑 电子竞赛题目-电子广告牌 一、电子竞赛题目任务: 设计并制作一台简易电子广告牌,16*32点阵显示,示意图如下: 二、电子竞赛题目要求: 1、基本要求: 1) 能通过按键翻页显示数字和字母。 ...…

查看全部问答>

推荐一个理论与实践结合的好网站

推荐一个不错的网站:矿石收音机论坛 http://www.crystalradio.cn/bbs/论坛里有许多板块,有许多引人入胜的好文章 [ 本帖最后由 quanzx 于 2009-7-18 15:47 编辑 ]…

查看全部问答>

和大家一起分享CS5532的经典程序

和大家一起分享CS5532的经典程序…

查看全部问答>

新人报道

菜鸟刚刚接触单片机 正在学习C51编程 有一点C++的基础 想问下各位大大 网上有C51的编程实例么 还有 是不是proteus 和keil51两个软件就够了 以后有什么问题还麻烦各位大大了…

查看全部问答>

WINCE5.0下用KITL调试网卡驱动,MmmapIOspace函数问题

PHYSICAL_ADDRESS phyAddr;        phyAddr.QuadPart=pAdapter->m_ulIOBaseAddress;        pHardware->m_ulVIoAddr=(ULONG)MmMapIoSpace(phyAddr,256,FALSE);        RETAILMSG(T ...…

查看全部问答>

无线网卡的图标无法去掉

基于USB的无线网卡,插上无线网卡是桌面的右下角会出现无线网卡的图标,这是正常的. 由于我的USB无线网卡支持selective suspend,也就是说,如果无线网卡在一定的时间 内(10s)如果没有和AP或者其他网卡连接上,则无线网卡进入睡眠的状态.睡眠的状态和 ...…

查看全部问答>

CPU上带有硬件视频解码,我如何应用(使用)这个硬解码功能来播视频文件?

CPU上带有硬件视频解码,我如何应用(使用)这个硬解码功能来播视频文件?(请给一个思路) …

查看全部问答>

有关wince下的用CreateFile获取串口句柄

1.通过查看WINCE的句柄,得到com1与com2的信息如下: [[HKEY_LOCALMACHINE/drivers/BuildIn/Serial] (Default): (value not set) Dll:         com165550.Dll Tsp:                ...…

查看全部问答>