APP下载

基于嵌入式的机械旋转编码开关信号检测软件设计

2020-06-21周首杰

河南科技 2020年11期
关键词:中断

周首杰

摘 要:嵌入式控制是指将单片机嵌入产品中,对产品起到控制作用。机械式旋转编码开关是通过人工操作旋转方向来控制某个量的增加或减小。虽然产生的信号只有两个,但是干扰信号的存在使信号准确检测变得相对困难。通常使用的检测方法有两种,一是通过中断方式进行外部信号的采集,二是通过查询方式进行信号的检测。本文对两种方法进行比较,进而采用较好的办法进行软件设计,有效滤除抖动带来的干扰信号影响。

关键词:嵌入式产品;机械旋转编码开关;信号检测;抗抖动;中断;查询

Abstract: Embedded control refers to embedding the single-chip microcomputer in the product and playing a controlling role on the product. The mechanical rotary coding switch controls the increase or decrease of a certain amount by manually operating the direction of rotation. Although only two signals are generated, the presence of interfering signals makes it relatively difficult to detect the signals accurately. There are two commonly used detection methods, one is to collect external signals by interruption, and the other is to detect signals by query. This paper compared the two methods, and then adopted a better method for software design, effectively filtering out the effects of interference signals caused by jitter.

Keywords: embedded products;mechanical rotary coding switch;signal detection;anti-jitter;interrupt; query

機械式旋转编码开关是通过旋转过程中产生的触点接通与断开来实现信号的检测,根据触点接通与断开的先后顺序来检测自身的旋转方向。接通与断开过程中存在触点抖动情况,使得单片机检测过程变得较为复杂[1-2]。本文提出两种软件检测方法,讨论其检测程序的编写。

1 编码开关原理

图1是一种机械式旋转编码开关外形图。其中,1、2脚是作为按键开关使用的,这里不作讨论。A、B、C三脚是作为旋转信号提供的,下面重点讨论这三个脚的使用。在硬件接线中,人们将C脚接地,将A、B脚分别接单片机检测脚,那么在旋动旋钮时会形成A脚与C脚的接通与断开、B脚与C脚的接通与断开。A脚与C脚的接通与断开形成动作1,B脚与C脚的接通与断开形成动作2,动作1和动作2是不同时发生的,有一个先后顺序,如图2所示。

图2为分别向两个方向旋转旋钮时产生的波形图。当往A端子方向旋转时,A端子与C端子的接通或断开动作领先于B端子。如果往B端子方向旋转时,B端子与C端子的接通与断开动作领先于A端子与C端子的动作。人们就可以根据动作的先后顺序来判断旋钮是左旋还是右旋。

2 编码开关的信号检测

通常,有两种方法可以检测编码开关的信号[3-4]。一种是采用中断方式来检测编码开关信号。另一种是采用查询方式来检测编码开关信号。下面对这两种检测方式进行一一讨论。

2.1 中断方式检测编码开关信号

以A脚为例说明,将A脚接于单片机的P3.2(INT0),B脚可任接于单片机的一个普通IO口。将A脚设置成外部中断0输入状态,并设置成下降沿触发中断。将B脚设置成悬空输入状态。如果A脚产生中断,就表示A脚产生了电平下降,在中断服务程序中再来检测B脚是高电平还是低电平。如果B脚也是低电平,说明B脚已经于A脚前下降,说明B脚动作在前,那旋转方向就是往B脚方向旋转。往B端方向旋转波形图如图2(b)所示,此时在[Δt5]时间内检测B脚电平就行。如果B脚仍然是高电平,说明B脚电平还没有产生跳变,A脚跳变在前,说明旋转方向是往A脚方向旋转。往A端方向旋转波形图如图2(a)所示,此时在[Δt2]时间内检测B脚电平就行。

2.2 查询方式检测编码开关信号

将A、B两脚都接于普通IO口,并且都设置成输入状态。在查询中先设一个条件。只有检查到两脚都为高电平时,才允许进行第二步查询,否则不允许进行第二步动作。接着,检查脚电平,如果A脚先变低,则旋钮往A端旋转,如果B脚先变低,则旋钮往B端旋转。

3 软件去抖动设计

机械旋钮开关在触点的接通与断开中存在很大的抖动现象。关断AC两脚或关断BC两脚时产生的信号抖动现象如图3所示。

所以,在检测时,软件必须有去抖动设计。在按键中去抖动,是指采用多次测量,取相同值来去抖动。这里也可以采用同样的方法来去抖动。例如,如果产生中断服务程序,就说明A脚已经产生了下降沿信号。在中断服务程序中,人们可以延长一段时间后检测A脚电平是否仍为低,如果A脚为低,那么确定A脚产生了电平下降。接着,再来检测B脚电平。如果A脚电平为高,说明刚才是一个干扰信号,就不能用此次中断所产生的检测。延时时间不能太长,也不能太短。延时时间太长可能会影响整个程序的运行。

如果采用查询方法来检测旋转方向,就可以利用程序循环本身的延时来解决问题。程序在循环中从头至尾运行一圈是需要一段时间的。一般为几十毫秒,那么就分两次来进行检测,即中间的延时是几十毫秒。这个延时是可以接受的,因为旋转开关的旋转速度不会太快。第一次检测的目的是看是否产生了旋转趋势,只有产生了旋转趋势后才能进行下一步。旋转趋势是指在被检测的两只脚A、B脚之间,产生了一只脚为高、另一只脚为低的变化。第二步检测两只脚是否真的都变低了,如果不是,证明第一步的变化是干扰信号。如果是两只脚电平都变低了,那么根据第一步的趋势,哪只脚电平先变低,就是往哪只脚方向旋转。这种方法看起来简单,但在实际使用中非常有效。

5 结语

经过上述分析,笔者更倾向于采用查询方式的检测方法。这样既不用占用宝贵的中断资源,也可以有效地提高抗干扰能力。

参考文献:

[1]周航慈.单片机应用程序设计技术[M].北京:北京航空航天出版社,2011.

[2]樊非.采用扫描方式设计的旋转编码开关控制程序[J].IT时代周刊,2014(300):258-262.

[3]岳巍,李杰,文方哲,等.带按键的旋转编码开关与C8051F020单片机的接口设计[J].机电产品开发与创新,2015(2):123-125.

[4]王平安.旋转编码开关在单片机中的应用[J].长江大学学报(自然科学版),2013(5):88-91.

猜你喜欢

中断
TMS320F28335外部中断分析与研究
雪后林鸟
跟踪导练(二)(5)
论保证债务诉讼时效的起算与中断
论保证债务诉讼时效的起算与中断
某弹载计算机软件中断时间引发的目标捕获异常问题分析
数控加工中断后的再续加工
浅谈嵌入式linux的中断处理技术
基于1pps的GPS/INS组合导航系统数据同步方法
嵌入式系统课程“中断、异常与事件”教学实践及启示