APP下载

具有停顿点的旋转编码器的编码方法

2022-03-22戚瑞民

电子产品世界 2022年2期

戚瑞民

摘?要:在数字化仪器的人机交互操作面板中,旋转编码器广泛用于调整参数数值的大小。在旋转时,旋转编码器产生相位相差九十度的两路数字脉冲信号,用于判决旋转方向及计数;一个脉冲周期内具有不同的停顿点数时,对应产生的计数也不同。本文介绍一种通用的查表编码方法,对具有停顿点的旋转编码器的转动操作进行扫描编码。

关键词:旋转编码器;停顿点;编码表

旋转编码器,在旋转时可以产生相位相差九十度的两路数字脉冲信号,两路脉冲信号相位的先后关系,可以代表旋转方向,如图1所示。(a)代表顺时针方向旋转时,A路脉冲领先于B路脉冲,A路脉冲的上升沿对应B路脉冲的低电平;(b)显示逆时针方向旋转时,B路脉冲领先于A路脉冲,A路脉冲的上升沿对应B路脉冲的高电平。

通常将一个旋转编码器等同于两个按键,利用CPU(中央处理器)或FPGA(现场可编程逻辑门阵列)扫描按键状态的变化。在被扫描按键的一端施加低电平,从按键的另一端回读电平高低,电平变化了,代表按键状态发生了变化,使用者操作了按键;旋转编码器对应的两个按键的组合状态发生了变化,则表示操作了旋转编码器,新的组合状态与之前的组合状态共同指示了旋转方向。对旋转编码器的转动操作进行编码的关键就是旋转方向的判决。

旋转编码器每转一周,两路信号A、B包含固定数目的脉冲周期,下面论述中将其中一路数字脉冲信号的相邻两个上升沿之间的部分称为一个脉冲周期。在图1中,一个脉冲周期内,顺时针方向旋转时,对应两路脉冲信号A、B电平的组合编码依次为10→11→01→00→10,逆时针方向旋转时,对应两路脉冲信号电平的组合编码依次为11→10→00→01→11。当组合状态发生了10到11的变化,可知发生了顺时针方向的旋转,当组合状态发生了11到10的变化,可知发生了逆时针方向的旋转。两路脉冲信号配合,利用相互之间的相位关系,在一个脉冲周期内最多可以在00、01、10、11这4个状态位置产生扫描计数。

1 带停顿点的旋转编码器

有的旋转编码器,为增强操作的手感或可控性,在一个脉冲周期内等间隔设置1、2或4个机械停顿点。图2是顺时针方向旋转时,在一个脉冲周期中具有不同停顿点的四种情况示意,(a)表示无停顿点、(b)表示一个脉冲一个停顿点、(c)表示一个脉冲两个停顿点、(d)表示一个脉冲四个停顿点;虚竖线处为停顿点稳定位置。

在具体应用中,一般只在停顿点稳定位置处产生有效计数。在(a)、(d)两种情况下,在一个脉冲周期中产生四个扫描计数;(b)、(c)情况下,在一个脉冲周期中分别产生一个和两个有效的扫描计数。有些种类的数字化仪器或装置,会同时使用这四种旋转编码器中的两种或多种。具有停顿点的旋转编码器,一般用于参数档位的单步距增减;没有停顿点的旋转编码器,由于旋转阻力很小,旋转速度可以很快,一般用于需要连续快速调整的参数。

2 旋转编码器扫描编码的实现

旋转编码器旋转时两路脉冲信号的4种组合状态,刚好是所有4个两比特组合数00、01、10、11,所以可以设计一个矩阵式编码表格,根据前言中所述两个旋转方向下的状态转移规律,通过查表方式判决旋转方向:表格行地址为两路脉冲信号AB的当前状态码,表格列地址为两路脉冲信号的前一状态码;表格中的数据,‘0代表逆时针旋转,‘1代表顺时针旋转,其他任一数据如‘-1代表无操作,如表1所示。

针对上述旋转编码器一个脉冲周期中具有不同停顿点的四种情况,图2(a)、图2(d)两种情况在四个位置产生扫描计数,直接使用表1。对于图2(b)、图2(c),只在当前状态为停顿点位置时产生有效的扫描编码。对于图2(b),停顿点状态为“00”,所以仅保留表1中当前状态码为“00”的状态有效,得到表2;对于图2(c),停顿点状态为“00”、“11”,仅保留当前状态码为“00”和“11”的状态有效,得到表3。这相当于将表1中非停顿点处的旋转方向编码设置为代表无操作的码‘-1,从而将停顿点处理功能与旋转方向判决功能合并到同一个查询表中。

下面以具有4個旋转编码器的一个项目为例简要说明基于本文方法的旋转编码器扫描编码的具体程序实现。

4个旋转编码器,其中两个每脉冲周期具有两个停顿点,另两个无停顿点;根据前面论述,对应的编码表分别为表3和表1。据此可以编制查询表rotCode及编码器类型定义表typeID。旋转编码器的扫描程序主要流程为:①上电获取初始状态作为前一状态statHistAll(4个旋转编码器,共占用8位);②扫描旋转编码器状态变化;③延迟去抖,得到当前状态statCurrAll(4个旋转编码器,共占用8位);④查表判决旋转方向;⑤计算编码值;⑥将前一状态的值替换为当前状态的值。

关键数据结构及4个旋转编码器扫描编码的程序段如下。

当经过除抖动后确认状态发生了变化,即使在查表时发现是无效的旋转位置,也要将前一状态缓存中的状态值更新为当前状态值,以保证查表逻辑的有效性。

一次查表实现旋转方向解码及是否计数的指示,避免针对具有不同机械停顿点设置的旋转编码器编制繁杂的程序以判决旋转方向及是否进行计数。

3 结论

根据旋转编码器两路脉冲信号状态在两个旋转方向上的不同变化顺序,以及停顿点位置,编制旋转编码器扫描解码查询表格,能够同时适用于具有不同机械停顿点设置的旋转编码器,具有逻辑灵活统一、编码简洁高效的特点。