【原创】使用D触发器制作正交编码器的鉴相电路
0赞
繁忙的六月这么快就过去了,今天在跟同事聊天还在感慨“时间都去哪儿了”,发现要想时间过的快就得让自己忙起来,马上过去的六月真是把我忙的昏天黑地的(当然,偶尔熬个夜看个世界杯还是有的,不过也是真的有点忙,呵呵),所以一直疏于管理和更新自己博客的这一亩三分地儿,趁着月底忙里抽个闲赶紧补几篇经验博客,扫扫灰,呵呵。
我们在做伺服电机控制的时候,一般会用到正交编码器做速度和位置的反馈控制,这里只提增量式正交编码器,其输出一共有三根线,如下图所示,即A相、B相和Index相,其中A相和B相为互差90度的方波或者正弦波脉冲(可以整形成方波),每转一圈会有若干个脉冲输出(输出脉冲的个数决定了编码器的分辨率,我们常称之为线数),用来测量速度和位置,而Index相则每转一圈只输出一个脉冲,用来做误差矫正(可以消除做位置反馈时的累积误差)。同时由于A相和B相的正交90度差,也就引出了相位超前和相位滞后的概念,而凭借这两相的相位差(含正负)则可以判断出编码器转子的方向,进而实现鉴相,方便伺服电机的方向控制。
上面简单的介绍了正交编码器的工作原理,那么实现鉴相的方法就简单了,实际上现在很多针对电机控制的MCU都自带了正交解码器的Timer,只需将A、B两相连接到MCU的专用解码管脚即可实现内部Timer对脉冲的加减计数,不过究其鉴相原理实际上都是通过D触发器来实现的,即一相接D触发器的D端,另一相接CLK端,通过这样的解码方式其OUT端的高低电平即决定了A、B两相的超前或滞后也即编码器的旋转方向。
既然MCU内部的鉴相电路也是D触发器来实现的,那么当我们在使用不带正交解码功能的MCU时,我们可以通过外部搭建专用的D触发器来实现鉴相功能,再通过查询外部IO的电平来判断方向。下图所示为使用市场上最常用的D触发器ASIC
74HC74(双D触发器),当然也可以根据成本考虑使用单D触发器(74HC74G1)来实现单个旋转编码器的鉴相(单电机控制,如果为了实现双电机控制则可以使用双路D触发器),其中Out1和Out2则与MCU的普通IO连接。
好久没写点东西了,手生疏了不少,难怪说“书精于勤而荒于嬉”,以后还是多勤快些,呵呵。
好了,就到这了,再聊,未完待续~