打印

关于行程开关和中断的问题

[复制链接]
2708|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flyicdsp|  楼主 | 2011-9-7 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
机械运动,当碰到行程开关后,外面24V电路导通,(光耦隔离了)对处理器相当于产生一个中断。进入中断程序后,进行程序的处理。但是有个问题就是碰到行程开关后,可能有抖动,表现为多次进入中断,程序就有问题了。用光开关是不是一个好的办法?如果不用光开关,这种抖动怎么处理?总不能在中断中delay吧。另,中断可以是多种形式。

相关帖子

沙发
maychang| | 2011-9-7 18:44 | 只看该作者
相对于电子器件,行程开关是动作非常缓慢的信号。既然缓慢,就不一定要用中断处理,时间上晚10ms或者20ms肯定没有问题。
这个问题,可以硬件解决,也可以软件解决。无论硬件还是软件,解决的方法与处理按键抖动的方法完全相同(本来也是完全相同的开关元件)。

使用特权

评论回复
板凳
HWM| | 2011-9-7 19:40 | 只看该作者
采用MCU控制的限位一般最好是光耦开关(或类似的非接触型),但需要机械行程开关作为保护(直接串入电机驱动回路,正常情况下不起作用)。

使用特权

评论回复
地板
gx_huang| | 2011-9-7 19:42 | 只看该作者
程序是灵活的,不要太死板。
只有在CPU平时休眠的时候,才需要外部中断。
正常情况下,可以在定时器中断里周期查询开关状态,如果连续几次都有效才处理。

使用特权

评论回复
5
chunyang| | 2011-9-7 19:49 | 只看该作者
防抖处理是有必要的,任何机械触点开关都需要,这里可用沿中断+延时查询的办法,同时设置一个状态字/位,进中断延时查询有效后置位状态字/位,然后关闭中断使能并退出中断。在主循环中查询状态字,根据状态字来调用相关的处理程序,调用后复位状态字/位,而中断使能则根据状态字/位的是否有效来设置,这种调度方法是最好的。

使用特权

评论回复
6
virtualtryon| | 2011-9-7 19:59 | 只看该作者
如果是用外部信号去触发中断,那就属于外部中断的问题.
中断程序要考虑中断的负载率,就是中断运行时间与中断运行周期的比率.
如果一个中断的周期是100us,而中断运行时间超过100us那中断的负载率就超过100%,主程序根本没办法跑了.
一般要求中断的CPU负载<30%,如果中断的周期是100us,则中断运行时间要小于30us,中断程序尽量简短.
外部中断的中断周期是不可控的,尽量少用不可控的外部中断,如果要用一定要加硬件的低通滤波.
比如行程开关的信号周期为1ms,可以定义信号的上升时间和下降时间,如果周期的20%时间的上升和下降时间是可以接受的,可以将外部的硬件低通滤波做到让100us的信号无法产生中断
那么中断程序时间要控制在30us以内,差不多也就50条指令.
因此外部中断千万慎用,如果要用,一定要加硬件滤波,而且要考量MCU的中断负载率是否能满足要求.
如果信号的周期比较长的话,可以用定时器中断去检测.一般8MHz的晶振,可以开100us左右的定时中断,当然这还取决于中断程序的大小,因此中断程序一定要讲究算法,编译以后对着汇编进行优化.
但是这样精度比较差,要衡量一下是否满求要求.

使用特权

评论回复
7
logo168| | 2011-9-7 19:59 | 只看该作者
学习啦

使用特权

评论回复
8
jasonell| | 2011-9-7 20:17 | 只看该作者
aha,这么多大牛回复,顺路站点光,学习了。谢谢。

使用特权

评论回复
9
xiaoaihua| | 2011-9-7 22:50 | 只看该作者
可否考虑在开关两端并一个104或者103P的电容?

使用特权

评论回复
10
jrcsh| | 2011-9-8 02:07 | 只看该作者
进中断~~~~~~~~关中断~~~完在在开回中断

使用特权

评论回复
11
tyw| | 2011-9-8 06:49 | 只看该作者
一般机械行程开关用中断方式时,需把电平信号微分后变成单个负脉冲再连到中断口,这样触点抖动问题也解决了,即使触点一直压着,也不会多次进入中断.微分电路用电阻电容即可,讲究一点,再加一级smt整形.

使用特权

评论回复
12
ssunyy| | 2011-9-8 11:09 | 只看该作者
学习了

使用特权

评论回复
13
lyn3210| | 2011-9-8 16:51 | 只看该作者
中断后延时100mS再读线状态。

使用特权

评论回复
14
virtualtryon| | 2011-9-8 19:00 | 只看该作者
如果用外部中断的话,只能用硬件去抖

使用特权

评论回复
15
flyicdsp|  楼主 | 2011-9-8 20:31 | 只看该作者
chunyang前辈,您的“进中断延时查询”是在中断中进行延时?

使用特权

评论回复
16
Sea-Wolf| | 2011-9-8 20:38 | 只看该作者
同学,使用一个定时器延时吗,好用多了。呵呵……具体的方法就是外部中断之后触发定时中断,并关闭触发中断,然后定时中断每隔一定的时间检测一下闭合情况,这种问题多想想就解决了。哈哈……

使用特权

评论回复
17
lyjian| | 2011-9-8 20:53 | 只看该作者
楼上,既然是这样,何必不不要外部中断,直接用定时中断定时扫描就得了。

使用特权

评论回复
18
老鱼探戈| | 2011-9-8 20:57 | 只看该作者
同学,使用一个定时器延时吗,好用多了。呵呵……具体的方法就是外部中断之后触发定时中断,并关闭触发中断,然后定时中断每隔一定的时间检测一下闭合情况,这种问题多想想就解决了。哈哈…… ...
Sea-Wolf 发表于 2011-9-8 20:38

一个开关? 严重的资源浪费
直接中断外就可以

使用特权

评论回复
19
lyjian| | 2011-9-8 20:58 | 只看该作者
10楼:
进中断~~~~~~~~关中断~~~完在在开回中断
**************************************
这和楼主目前的处理方法没任何区别,根本就解决不了抖动问题。
结果是:进中断~~~~~~~~关中断~~~完在在开回中断~~~返回主程序~~~~再进中断(如果有抖动的话)~~~~~

使用特权

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

本版积分规则

195

主题

618

帖子

3

粉丝