看我三十六变——增量式编码器

-回复 -浏览
楼主 2020-11-20 13:05:10
举报 只看此人 收藏本贴 楼主
看我三十六变——增量式编码器


在去年的校内电子设计竞赛中,控制类的题目是:控制电机带动一个横杆旋转一周,那么我们就需要知道每个时刻电机已经转动了多少角度,用到的传感器就是——增量式编码器。本篇推送会从增量式编码器是什么、它的原理以及如何使用来讲解。跟着小编一起来了解吧~




增量编码器是什么?


编码器是一种能将运动距离转换为电信号提供给单片机处理的一种传感器,而增量式编码器是其中的一种,它能将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。我们将编码器与电机连在一起,让电机转动时带动编码器一起转动,这样就可以通过记录脉冲的数量来测出电机已旋转的角度。



增量式编码器的原理 


part 1:基本计数原理

有一些玩过智能车竞赛的同学应该接触过光电码盘,而编码器的原理和光电码盘的原理是一样的,其内部有发光器件光电检测器件,中间由带光栅的码盘隔开,当码盘旋转时光线会连续重复地被挡住和通过光栅,光电传感器就会根据光线的有无来输出高低脉冲信号,这样来统计脉冲的个数就能知道通过了多少个光栅,也就知道了码盘旋转的角度。比如一个编码器是600线,表明这款编码器转一周会发出600个脉冲,那么收到一个脉冲就代表旋转360/600=0.6°,这样假如收到了2000个脉冲,说明编码器旋转了1200°。


part 2:旋转方向判断

单单这样只能记录距离,而无法判断旋转的方向,为了能够判断出旋转的方向,便在离光电检测器件相位差为90°的地方再增加一个光电检测器件,这样便能输出两个相位相差90°的波形。

我们将其称为A相和B相。

这样我们就可以得到AB相的时序图。

怎么样,发现不同了吗?顺时针的时候AB相是11-01-00-10的顺序循环,而逆时针时恰好相反,这样我们就可以通过AB相的时序来判断出旋转方向。




编码器如何使用(以51单片机为例)


将编码器的AB相信号线分别接到单片机的两个外部中断口上(不了解外部中断的同学可以看一下之前公众号里的技术教程)。并将触发方式设置为边缘触发,然后写中断函数。

这样就可以简单地通过A相来记录脉冲个数,那么怎么样实现正转加,反转减呢?大家可以根据正反转的时序规律先自己尝试一下。


    编码器的其他小知识


1、编码器滤波

这样简单地计数有时候会出现本应该计100个脉冲,但是实际却记录了150个,这是因为由于机械抖动等原因,导致输出波形存在抖动。所以我们要想办法消除抖动。

观察波形抖动出现的位置,发现抖动都是出现在另一相波形没有边缘的区域,所以程序的大致思路便是让每一相都无法连续触发两次,只有在另一相触发后才可以触发下一次。

A相中断函数

{

     如果A相标志位为1

{

计数加1

B相的标志位置1A相的标志位置0

}

}

B相中断函数

{

如果B相标志位为1

{

A相的标志位置1B相的标志位置0

}

}

这样AB相就不会连续执行多次同一相的程序,从而滤除抖动,具体的程序实现大家可以先自己尝试一下。




2、例程

(1)正反方向实现:

可以从时序图看出:当A相下降沿触发,及由1变为0时,如果时顺时针,那么B相为1,相反B0,所以可以根据这样设计程序:

注:BB为B相的外部中断口,及sbit BB = P3^3。

(2)滤波程序:



坚持不懈,方得始终,亲爱的电设爱好者们,请坚持电设的梦想,敬请期待下一次的推送,加油!



 文字编辑:李则蓝、505技术团队
 图片编辑:芶作昆、505技术团队
       排版:刘昕宇
责任编辑:杨天任

赶快来分享关注吖


                   

我要推荐
转发到