具有停顿点的旋转编码器的编码方法
旋转编码器,在旋转时可以产生相位相差九十度的两路数字脉冲信号,两路脉冲信号相位的先后关系,可以代表旋转方向,如图1 所示。(a)代表顺时针方向旋转时,A 路脉冲领先于B 路脉冲,A 路脉冲的上升沿对应B 路脉冲的低电平;(b)显示逆时针方向旋转时,B 路脉冲领先于A 路脉冲,A 路脉冲的上升沿对应B路脉冲的高电平。
本文引用地址:http://www.amcfsurvey.com/article/202203/431647.htm(a)顺时针方向旋转 | (b)逆时针方向旋转 |
图1 两路脉冲相位关系
通常将一个旋转编码器等同于两个按键,利用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)情况下,在一个脉冲周期中分别产生一个和两个有效的扫描计数。有些种类的数字化仪器或装置,会同时使用这四种旋转编码器中的两种或多种。具有停顿点的旋转编码器,一般用于参数档位的单步距增减;没有停顿点的旋转编码器,由于旋转阻力很小,旋转速度可以很快,一般用于需要连续快速调整的参数。
(a)无停顿点 | (b)每周期一个停顿点 |
(c)每周期两个停顿点 | (d)每周期四个停顿点 |
图2 停顿点位置
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 结论
根据旋转编码器两路脉冲信号状态在两个旋转方向上的不同变化顺序,以及停顿点位置,编制旋转编码器扫描解码查询表格,能够同时适用于具有不同机械停顿点设置的旋转编码器,具有逻辑灵活统一、编码简洁高效的特点。
(本文来源于《电子产品世界》杂志2022年2月期)
评论