打印

还是建议认真看下老Hot的**

[复制链接]
16894|82
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
czha1|  楼主 | 2009-5-15 08:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
消抖延时程序的浅解


         既然干扰是随机的,那即使你延时的时间有多长,都不能避免

     接受错误的干扰信号,我看很多介绍按键检测都是先判断一次然后过

    50MS延时再判断一次,对于大多控制系统来说,可能出错的机率

   比较小,但不可避免第一次输入的是真实信号,第二次可能是干扰

   信号。对于编码器等脉冲输入信号,一方面要考虑延时的时间对

    编码器采集数据速度的影响,一方面要考虑可能的输入的误信号,

    实际 编码器消除抖动信号不完全在延时时间的长短,取决与二次输入

   的都是真实的输入信号,编码器采集数据的速度也并不完全取决与

   程序,只要程序正确,使用速度快的单片机就可以测量编码器更多

   的脉冲,本来工作频率低的单片机每秒测量500个脉冲,高十倍

   就可以测量5000个。所以延时程序我现在先给寄存器赋值,延时后

  寄存器加或减再比较寄存器的值再检测,等寄存器赋值运算到设定的

   N次,判断结束,确认是正确的输入信号,如果N次中有一次结果

  错误,则重新检测。

  

相关帖子

沙发
5880527| | 2009-5-15 09:00 | 只看该作者

楼主这个名字好熟悉,好像是常州的

不要发这么幼稚的东西出来误导涉世之初的青少年啦

使用特权

评论回复
板凳
czha1|  楼主 | 2009-5-15 09:19 | 只看该作者

我知道你水平高得不得了

我知道你水平高得不得了,你说说

还没有看到你像模像样的大作,

给你说,我业余的!!!做的东西在机器上用的

很长时间了,没有大问题,最多焊接不良,按你看

我二进制也不懂,HA HA

使用特权

评论回复
地板
5880527| | 2009-5-15 10:27 | 只看该作者

呵呵,这里这么多人

真不晓得是怎么回事就记得你了,奇怪哈,而且你上来的次数还很少,看来我们是有缘,哈哈。水平不高就不要乱发帖子大谈什么经验,当个看客就是了,没事帮忙顶顶帖子

使用特权

评论回复
5
czha1|  楼主 | 2009-5-15 10:37 | 只看该作者

我下了你才发啊!

你发啊,我看着呢!找了半天没发现你大作啊,我下了你才发啊!

好象在你家似的.


再说了,你发的大作也不想看,也吃过猪肉也见过猪跑.

使用特权

评论回复
6
渤海三叠浪| | 2009-5-15 23:59 | 只看该作者

楼主的帖子 很好 坚决支持!!!!

楼主不要理睬那些道德垃圾的技术大牛!!!

使用特权

评论回复
7
bonafides| | 2009-5-16 09:51 | 只看该作者

同解!

延时的同时检测输入,
我早就这么干了。哈哈!

使用特权

评论回复
8
5880527| | 2009-5-16 11:24 | 只看该作者

这种玩意值得拿出来开个帖子探讨吗

你以为人家都会照着书本上那样来消抖吗,那都是骗学生的,或者说是为了教学的需要才那样写。说实在话,编码器我还真从来不消抖,只有红外光电之类的才会多次检测,键盘和传感器啥的就检两次就够了。对了,键盘我很少用,一般都用现成的触摸屏,象pro-face,海泰克,威纶

使用特权

评论回复
9
zq1987731| | 2009-5-16 12:04 | 只看该作者

同意8L

延时这种东西还拿来讨论简直是...
状态机里多插几个中间状态不就解决了?死等式的延时在实际应用中我认为应该是坚决禁止的!

使用特权

评论回复
10
czha1|  楼主 | 2009-5-16 13:06 | 只看该作者

都是骗学生?


看来写书的目的是骗学生。

使用特权

评论回复
11
5880527| | 2009-5-16 13:19 | 只看该作者

你以为呢

那样写很大部分原因是书本不可能针对所有的情况具体分析,为了方便才统一那样写来说明消抖的原理和重要。自己动手写过几次程序后就不会照着书本那样来消抖了,对象不同自然会采用不同的消抖方式,你以为人家都一辈子就照着书本那样来写程序啊。书店里的书本至少半数是你抄我我抄他,是不是骗学生自己去判断

使用特权

评论回复
12
刘前辈| | 2009-5-16 13:37 | 只看该作者

请教LZ一个问题。

 “既然干扰是随机的,那即使你延时的时间有多长,都不能避免接受错误的干扰信号,”
*******************************************************************

按照LZ的意思,即使没有按键/开关接通的平常状态下,按键/开关的相应输入脚上也可能检测到虚假随机干扰信号?

这是争论的焦点。

也是LZ的讲述与书上概念(我所理解的)不同的地方。

使用特权

评论回复
13
czha1|  楼主 | 2009-5-16 14:03 | 只看该作者

为什么没有人说出来

为什么没有人说出来呢?

我说又不让我说,我也知道很多教材和资料都有这样和那样的缺陷。
仔细分析后就可以发现和改正,就是很多老手也避免不了按老一套做。
我也是即兴说说的。
一个小问题有可能解决大问题。

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
零度888 + 1 很给力!
雪落有声 + 1 我现在还是一个学生,我很赞同ch的看法。首.
14
yewuyi| | 2009-5-16 14:22 | 只看该作者

任何信号都应该防止抖动

编码器也不能例外,如果编码器转速不快,可以用定时查询的方式,在编码器输出状态图中利用状态迁移来做抖动处理。

如果编码器转速很快,就要用中断了,发生中断后软件再读几次信号做抖动处理。

使用特权

评论回复
15
yewuyi| | 2009-5-16 14:24 | 只看该作者

以上是对增量式编码器而言的

如果是绝对位置式编码器就更容易多了。

另外很多增量式编码器有一个ZERO也要好好利用。

使用特权

评论回复
16
soso| | 2009-5-16 14:49 | 只看该作者

书上的方法确实是误人子弟

       延时20mS以上原地等待是一种变相的自杀行为,除非你的程序任务少,CPU闲得像China的公务员。根据RTOS思想,宁愿让CPU没事一边呆着等候事件触发也不能怠工延时。

使用特权

评论回复
17
5880527| | 2009-5-16 15:05 | 只看该作者

输入的光耦就能把很多毛刺给去掉了

一个频率几十K的编码器脉冲进来不搞快点中断都还没退出下一个脉冲都又进来了,还有很多更紧急的事情要处理,我是没办法消抖了

使用特权

评论回复
18
yewuyi| | 2009-5-16 15:51 | 只看该作者

几十K频率还是可以对付一下的,再高就应该用全硬件的方式

MCU跑不动

使用特权

评论回复
19
刘前辈| | 2009-5-16 18:09 | 只看该作者

17楼好像说到了问题的实质。

LZ好像还是没讲清处理抖动的实质,为什么有些情况下可以不消抖?——“零耗时”?

17楼:“一个频率几十K的编码器脉冲进来......”

我想请教:一个频率几十K的编码脉冲是有效信号还是抖动信号?

如果第一个编码脉冲引起的中断事件中不消抖处理,直接触发事件驱动程序,那么当“中断都还没退出下一个脉冲都又进来了,”的情况发生的时候,还要不要再次重复处理事件?

这“下一个脉冲”,是第一个编码脉冲的“抖动”重复,还是第二个必须处理的“真实事件”?

最快的“机械”触点抖动是6ms以上,所以6ms之内只需要处理一次开关事件,不需要高速处理CPU。
书上说的各个“机械”触点抖动参数是不一样的,厂家会提供相应参数指标,从10ms-200ms不等。20ms仅对应键盘/按钮?电力闸刀参数多少ms?

还有,如果一个按钮开关具有2个状态,上面标明“ON/OFF”。第一次按下(点触),启动设备;第二次点触,停止设备。
这第二次按下算是抖动还是“事件”?

LZ说的“随机干扰信号”,好像是说,无论开关是否闭合,任何时候都可能出现在开关输入端口?

这也就是说,TTL/CMOS固定1/0电平信号上随时可能叠加“随机干扰虚假信号”?

这确实是新提法。

使用特权

评论回复
20
zq1987731| | 2009-5-16 19:40 | 只看该作者

LZ提到的

    “既然干扰是随机的,那即使你延时的时间有多长,都不能避免接受错误的干扰信号”
    明显对“干扰”认识不足...数字电路的抗干扰能力根本没那么脆弱,在【无开关动作】时“随机”改变TTL/CMOS固定1/0电平信号,能量小到忽略不计的干扰信号更是绝无可能!

使用特权

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

本版积分规则

25

主题

103

帖子

1

粉丝