打印

用单片机如何方便地算出一个矩形脉冲的占空比?

[复制链接]
3217|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有风|  楼主 | 2007-12-14 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在要检测两组矩形脉冲,
周期大概是16.7ms。
占空比随着条件的不同而改变。
现在要检测它们的占空比。
即要检测它们的高低电平持续时间。(误差要<0.5ms)
现在用的单片机只有下降沿触发中断,
只用笨拙的方法,查询上升沿,然后触发一个定时器,等下降沿的时候保存定时器的值。这样来检测高电平持续时间。

请问各位有什么好方法??


; Bi: high -> 450us,low -> 100us  16us*28 ~ 16us*34
; __ __ __ __ _    __ __ __ __ _    __ __ __ __ _
;              |  |             |  |             |
;              |__|             |__|             |___________

相关帖子

沙发
computer00| | 2007-12-14 10:24 | 只看该作者

定时器捕捉测脉宽,然后再用中断测周期。

使用特权

评论回复
板凳
zusen| | 2007-12-14 10:29 | 只看该作者

楼上正解

以前做学习红外线码也是用捕捉的功能,但你的MCU 定时器/计数器 要支持,呵呵

使用特权

评论回复
地板
ayb_ice| | 2007-12-14 10:30 | 只看该作者

直接用外部中断+定时器也可以

精度比用捕获方式稍差

使用特权

评论回复
5
木头东瓜| | 2007-12-14 10:38 | 只看该作者

就是做红外解码

方法很多了,呵呵

使用特权

评论回复
6
computer00| | 2007-12-14 10:40 | 只看该作者

楼主要求0.5ms,这个精度很容易满足。

就是查询的话,太浪费CPU时间。最好利用硬件完成。当然了,如果是软件没啥事干,那无所谓。

像AVR那样的MCU比较好,两个边沿都能触发中断。

或者你自己硬件设计个反向器,触发另一个中断。

使用特权

评论回复
7
keyanfeng| | 2007-12-14 10:44 | 只看该作者

正解,但如果同时要驱动蜂鸣器输出

现在只能用MCU的定时器 + 外部中断来做。
而且检测的同时要输出BEEP。
BEEP输出频率有限制。
如何做到两者互相不冲突啊?
MCU一条指令的周期大概是1us

; BEEP waveform output
; Bi: high -> 450us,low -> 100us
; __ __ __ __ _    __ __ __ __ _    __ __ __ __ _
;              |  |             |  |             |
;              |__|             |__|             |___________

使用特权

评论回复
8
keyanfeng| | 2007-12-14 10:55 | 只看该作者

现在的MCU没有定时器捕获功能

楼主要求0.5ms,这个精度很容易满足。 

就是查询的话,太浪费CPU时间。最好利用硬件完成。当然了,如果是软件没啥事干,那无所谓。 
 
关键是现在的MCU没有定时器捕获功能(有没有哪种MCU有两个通道的定时捕获功能的?),如果要做到精度高的话,定时器的中断间隔要做到很短才行,
而定时器中断间隔太短会大大增加系统的负荷。
比如,如果设定中断间隔为0.1ms,两次中断之间只能执行大概100多条指令。

使用特权

评论回复
9
ayb_ice| | 2007-12-14 11:36 | 只看该作者

FREESCALE大部分都有两个通道的捕获比较单元

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

1319

帖子

0

粉丝