请教LPC单片机,关于GPIO信号抖动影响程序逻辑的问题

2019-03-25 20:07发布

在main程序里面,我要判断一个引脚的输入信号状态。


  1.          if(!Read_pin(100) && pucDst[8]==0) //P1.15
  2.           pucDst[8]=1;
  3.          else if(Read_pin(100) && pucDst[8]==1) //P1.15   
  4.           pucDst[8]=2;
  5.          else if(!Read_pin(100) && pucDst[8]==2) //P1.15
  6.         {
  7.         pucDst[8]=3;

  8.     }

  9. pin口是一个导轨上的某个轴的限位开关,而且是机械方式的,感觉有点误触发。请教怎么解决
  10.     if(!Read_pin(100) && pucDst[8]==0) //P1.15
  11.           pucDst[8]=1;
  12. 刚开始电机正方向运动,当限位导通的时候,把pucDst[8]设置为1.


  13. 这个时候,电机反方向走,问题就来了,限位开关要逐步被释放。这个时候信号就有误触发的情况,还没完全释放开,就会出现导通与不导通切换的情况。
  14. 这样的话, pucDst[8]先等于2,紧接着就等于3了。这样我逻辑就不对了。


  15. 限位开关从被按下,到释放。应该是从1到2.不能等于3.但是在释放的过程中有误触发,所以就会从2,到3的变化。


  16. 请教程序怎么解决


复制代码
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
le062
2019-03-26 05:19
yunhai14 发表于 2017-4-22 16:10
你好版主,你说的意思是不是,开关特性不一定,软件滤波时间也不一样?但是这样程序固化了不灵活吧
电机反方向走,问题就来了,限位开关要逐步被释放。这个时候信号就有误触发的情况,还没完全释放开,就会出现导通与不导通切换的情况。

针对这个情况,你可以用示波器观察下这个阶段的开关特性,分析出 临界 三种状态的电平特性,利用程序上的多次采样计数器,将临界态过滤掉即可

一周热门 更多>