用定时器或者PWM产生波形,如何可以准确的控制波形的次数呢

[复制链接]
2446|18
 楼主| 喵喵小星人 发表于 2015-12-20 11:46 | 显示全部楼层 |阅读模式
比如,我想控制定时器产生20个波形,产生20个方波,如何可以做到精准控制呢
xiaolong12 发表于 2015-12-20 15:20 | 显示全部楼层
可以把产生的波形再进定时器或者PWM进行捕获,在捕获中断中计数,到达数量停止输出
gaoxiansheng 发表于 2015-12-20 22:56 | 显示全部楼层
PWM或者定时器都有溢出中断的,溢出一次,计数一次即可
叶覃 发表于 2015-12-21 19:11 | 显示全部楼层
gaoxiansheng 发表于 2015-12-20 22:56
PWM或者定时器都有溢出中断的,溢出一次,计数一次即可

以前就用的这个方法。有效果,不过好像不太准。
chrise23 发表于 2015-12-23 08:48 | 显示全部楼层
gaoxiansheng 发表于 2015-12-20 22:56
PWM或者定时器都有溢出中断的,溢出一次,计数一次即可

万一输出脉冲的世界大于溢出一次的时间,需要溢出计次才能到达时间怎么办?
gaoxiansheng 发表于 2015-12-23 08:57 | 显示全部楼层
叶覃 发表于 2015-12-21 19:11
以前就用的这个方法。有效果,不过好像不太准。

应该中断是很准确的呀,为什么会不准呢?
gaoxiansheng 发表于 2015-12-23 08:59 | 显示全部楼层
chrise23 发表于 2015-12-23 08:48
万一输出脉冲的世界大于溢出一次的时间,需要溢出计次才能到达时间怎么办? ...

那就需要在中断中记录溢出次数了。溢出次数*中断溢出时间
yysforever 发表于 2015-12-23 22:50 | 显示全部楼层
使用两个timer1,2,设为互为主从,形成了环形的闭环互控形式。Tim1产生PWM输出,同时tim1溢出作为Tim2的预分频输入。tim2设为单脉冲模式,当计数达到ARP的值就产生一次溢出并停止自身的计数。而tim2的自动停止反过来控制tim1的enable,这样就会连同tim1也关停了。
叶覃 发表于 2015-12-24 09:08 | 显示全部楼层
gaoxiansheng 发表于 2015-12-23 08:57
应该中断是很准确的呀,为什么会不准呢?

中断也有时间的,而且中断还可以被别的中断所打断。
huafei123 发表于 2015-12-24 09:11 | 显示全部楼层
一个用来输出,一个用来计数,确实是个好办法,用两个定时器就解决了,不错。
MTCN2013 发表于 2015-12-24 19:00 | 显示全部楼层
可以接上一个外部中断口,在中断中计数。
chrise23 发表于 2015-12-24 19:07 | 显示全部楼层
gaoxiansheng 发表于 2015-12-23 08:59
那就需要在中断中记录溢出次数了。溢出次数*中断溢出时间

我这么试了试,确实还是有效果的,不过还是需要完善。
Creas_Tall 发表于 2015-12-25 08:03 | 显示全部楼层
对PWM脉冲计数可能困难一些。因为计数器对脉冲宽度有一定要求,而PWM的脉冲占空比一般在0-100%之间可调,在占空比很低或者很高的时候计数都不准确。如果能够在PWM的脉宽中断服务程序里加上计数程序就准确了。
gaoxiansheng 发表于 2015-12-26 08:50 | 显示全部楼层
叶覃 发表于 2015-12-24 09:08
中断也有时间的,而且中断还可以被别的中断所打断。

请注意,这个被打断是不可避免的,但是不影响他的时效性,你可以把他设置为高优先级别
gaoxiansheng 发表于 2015-12-26 08:51 | 显示全部楼层
chrise23 发表于 2015-12-24 19:07
我这么试了试,确实还是有效果的,不过还是需要完善。

这个需要各方面都配合好,我以前就是这么干的。
单片机菜菜 发表于 2015-12-26 09:02 | 显示全部楼层
我觉得如果用编码器实现的话,计数是很准确的。编码器的脉冲是把一个圆周分成若干等分,一般是几百到几十万。每转过一个角度,就输出一个脉冲。把编码器输出接到计数器上,这样可以达到精准控制的结果。
dongbaohui 发表于 2015-12-26 17:35 | 显示全部楼层
同楼上所说的,外部加个计数器就好了。
叶覃 发表于 2016-1-18 22:55 | 显示全部楼层
gaoxiansheng 发表于 2015-12-26 08:50
请注意,这个被打断是不可避免的,但是不影响他的时效性,你可以把他设置为高优先级别 ...

不管如何,时间长了,肯定就不准了。
 楼主| 喵喵小星人 发表于 2017-4-25 09:14 | 显示全部楼层
gaoxiansheng 发表于 2015-12-20 22:56
PWM或者定时器都有溢出中断的,溢出一次,计数一次即可

这个办法不错,不过得用到全局变量了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

175

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部