EDN China > 其它文章 > 测试与测量 > 系统测试 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

用软件做一个正交编码器的解码

Sid Levingston?? 美国俄勒冈Gentec-EO公司?? 2011年03月29日 ?? 收藏0

  很多应用都用正交编码器来确定机械行程的位移量与方向。它们随设计而变化,但都做了相同的工作:提供一组相差为90°的方波。图1给出了典型的输出信号。

  当Channel A领先Channel B时,编码器顺时针旋转。如果Channel B领先Channel A,则编码器逆时针旋转。通过旋转的脉冲计数和方向,就可以找到编码器的位置。虽然IC可以解码正交编码器,更简单和廉价的方法是让处理器做信号解码。如有必要,Channel A和Channel B的信号要通过一个施密特触发器,但很多编码器和处理器都内带了这个触发器。然后,信号被送给处理器上的两个I/O脚,它们支持边沿触发的中断。中断处理程序中的代码实现了一个标准的解码算法,但所有算法一般都遵循下列步骤:

  1.建立一个如表1所示的状态表。表中状态为State 3到State 0。

  2.初始化计数器。

  3.测量Channel A和Channel B的当前状态。找到表中的状态,将一个指针设定为该状态。

  4.中断使能。

  中断处理程序为下列步骤:

  1.读取Channel A和Channel B的状态。

  2.如果状态超前了指针,则计数器减一。

  3.如果状态落后于指针,则计数器加一。

  4.将指针设为新的状态。

  5.清除中断。

  这种方法要求有一个状态表,保留前面的状态,而处理程序确定每个中断是哪四个状态之一,然后根据两个可靠的条件作出决定。处理程序用一个四状况开关完成这个任务,每个状况有两个if条件。

  现在,考虑真实世界出现的情况。如果I/O脚在某个上升沿产生一个中断,则当中断发生时,该通道从低变为高。因此,没有读取产生中断管脚的状态的理由。其它通道没有发生中断,因为信号相位差90°。于是,为了确定当前状态,只需要读取未产生中断的管脚状态。未改变的低信号或高信号的状态表明了编码器旋转的方式。如果其为低,则中断管脚领先。如果为高,则中断管脚落后。可以利用这些事实,实现一个无状态表、不保存以前状态的高效中断处理器。

  代码清单1中的代码在一只连接到Encoder Products的15T的MSP430F处理器上通过了测试。编码器监控着一个线性级(linear stage)的位置。线性级长85 mm,能够以5 μm的分辨率跟踪。

  定义语句(红色语句)使代码更易读。initPort()函数(蓝色)设定了Channel A和B的上升沿中断。最后部分是中断处理程序(绿色)。注意它只有六行代码,相比之下,实现传统的通道解码方法需要20或30行程序。


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

正交编码器? 测试? 触发器?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈