一、从游标卡尺说起游标卡尺有主尺和副尺主尺的49mm分成副尺的50格这样每格就是49/500.98mm对于副尺来说除了刚开始0刻线和最后结束50刻线的两根刻线是和主尺的刻线对齐之外副尺的第1根刻线的尺寸是0.98mm主尺的第1根刻线的尺寸是1mm两者相差1/500.02mm如果移动副尺让副尺的第一根刻线和主尺的第一根刻线对齐这个时候副尺就移动了0.02mm如果继续移动让第2刻线对齐那就是移动了0.04mm第49根刻线对齐就是移动了0.98mm。二、光电编码器的三件套码盘、LED光源、光电池是光电编码器的三个核心元器件码盘固定在转轴上LED光源发出的光照射到码盘的光栅上透射或反射的光照射在光电池上转轴每转过码盘上一个光栅的角度光电池就产生一个周期的正弦波和余弦波电压信号如下图所示LED光源和光电池在码盘的两侧光线透过码盘照射在光电池上称为透射式光电编码器。LED光源和光电池在码盘的同侧光线照射在码盘上再反射回来照射在光电池上称为反射式光电编码器。三、游标码原理转轴每转过码盘的一个光栅光电池就输出一个完整周期的正弦波和余弦波。通常码盘最外一圈轨道的光栅数量是512个每转过一个光栅就是360/5120.703125度。一个完整周期的正弦波和余弦波可以定义为360度(2π可以通过Cordic算法下一篇文章再详细讲解此算法或是查表法得到当前位置。如果计算的最小单位是度一个光栅就可以分成360份理论上通过Cordic算法可以把一个光栅分成任意想要的份数可以理解为在一光栅内均匀刻上等宽度的细线。通过Cordic算法或是查表法得到当前光栅内的位置还需要知道当前是第几个光栅才能计算出转轴的角度。为了确定当前是第几个光栅码盘上设置了3个轨道每个轨道的光栅数量是不同的。通常游标码原理的码盘设置了3个轨道从外往内定义为M、N、S码道常见的一款码盘其最外面的码道是512个光栅定义为M码道里面一个码道是510个光栅定义为N码道。这些光栅分成左右两个半圆对齐各是256个M光栅对齐255个N光栅。在同一个时刻转轴同 个角度对M光栅和N光栅的输出sin/cos信号进行采样根据采样的sin/cos信号进行Cordic计算将M光栅细分成255份N光栅细分成256份想像成在M光栅里均匀刻上255根细刻线N光栅里均匀刻上256根细刻线。这样M码道和N码道每个半圆就都细分成了256*25565280道细刻线255*25665280这些细刻线都是对齐的由于M码道的光栅比较窄一些所以同一个位置M码道Cordic计算出来的角度要大一些N码道Cordic计算出来的角度要小一些M码道的角度比N码道的角度大多少呢我们来计算一下M码道360/2551.4117647度N码道360/2561.40625度如果当前位置在第0个光栅M码道和N码道的细刻度线是对齐的假设是细刻度线是3 M码道和N码道的角度差1.4117647*3-1.40625*33*(1.4117647-1.40625)0.016544度在第0个光栅内细刻度线的最大数字是255所以在第0个光栅内M码道和N码道的角度差可能是0~255*(1.4117647-1.40625)0~1.406250~255*360/255-360/2560~255*360*256-255/255*256 0~255*360*/255*256 (0~1)*360/256在第1个光栅内M码道和N码道的角度差可能是(1~2)*360/256, 第i个光栅内M码道和N码道的角度差可能是(i~i1)*360/256这样我们根据M码道和N码道的Cordic角度差就能知道当前所处M码道的光栅序号了。这样看起来似乎我们只需N和M码道就可以计算出来具体的角度了那为什么还要再增加一个S码道呢上面的说法是纯理论的实际上做起来很可能由于LED的光量不太稳定每道光栅的刻度不太均匀如果第i个光栅和第i-1以及i1个光栅计算出来的相位差都是相同的i呢那我们就分不清楚到底是不是第i-1个光栅还是i1个光栅了如果不做进一步的判断修正硬要按i-1或是i1光栅来计算计算出来的角度就会产生一个光栅的角度误差因此我们需要再增加一个S码道来做进一步的判断以修正此误差。256个M码道对齐255个N码道再对齐240个S码道所以对于M码道和S码道来说是16个M码道对齐15个S码道这里我们把每16个M码道称为1组一共是16组因此按照同样的角度差计算方法使用M码道和S码道的角度差我们可以区分出来当前光栅是16个M码道中的第j个光栅但是我们无法区分出来是第几组。但是结合M码道和N码道的角度差我们可以得出当前M码道是第i个光栅只是这个i偶尔有点误差如果i/16取整数就等于把M码道按照16个光栅一组来进行分组i/16取整数就能知道当前光栅是第几组M码道和S码道的角度差又能知道是这组中的第几个光栅那我们就能确切知道当前是第几个光栅了然后再对光栅内的位置进行Cordic计算我们就能得到当前位置的精确角度了。MNS三个码道形成2把游标卡尺利用游标码原理经过计算就能知道当前位置但是由于左右2个半圆是完全对等的因此还需要区分转轴当前的位置是左半圆还是右半圆需要使用另外的方法来判断是属于左半圆还是右半圆。一种方法是在码盘上增加MTA和MTB信号下图的中间两个码道理论上只要有一个MTA或是MTB信号就可以区分是左半圆还是右半圆了使用2个信号MTAMTB的原因一是需要修正误差二是进行多圈计数时需要区分是正转还是反转这个在第三讲多圈计数里面再来做详细说明。