绝对式编码器原理
绝对型旋转光电编码器,因其每一个位置绝对唯一、抗干扰、无需掉电**,已经越来越广泛地应用于各种工业系统中的角度、长度测量和定位控制。
绝对编码器光码盘上有许多道刻线,每道刻线依次以2线、4线、8线、16线。。。。。。编排,这样,
在编码器的每一个位置,通过读取每道刻线的通、暗,获得一组从2的零次方到2的n-1次方的唯一的2进制编码(格雷码),这就称为n位绝对编码器。这样的编码器是由码盘的机械位置决定的,它不受停电、干扰的影响。绝对编码器由机械位置决定的每个位置的唯一性,它无需**,无需找参考点,而且不用一直计数,什么时候需要知道位置,什么时候就去读取它的位置。这样,编码器的抗干扰特性、数据的可靠性大大提高了。
由于绝对编码器在定位方面明显地优于增量式编码器,已经越来越多地应用于工控定位中。绝对型编码器因其高精度,输出位数较多,如仍用并行输出,其每一位输出信号必须确保连接很好,对于较复杂工况还要隔离,连接电缆芯数多,由此带来诸多不便和降低可靠性,因此,绝对编码器在多位数输出型,一般均选用串行输出或总线型输出,德国生产的绝对型编码器串行输出最常用的是SSI(同步串行输出)。
旋转单圈绝对式编码器,以转动中测量光码盘各道刻线,以获取唯一的编码,当转动超过360度时,编码又回到原点,这样就不符合绝对编码唯一的原则,这样的编码器只能用于旋转范围360度以内的测量,称为单圈绝对式编码器。
如果要测量旋转超过360度范围,就要用到多圈绝对式编码器。
编码器生产厂家运用钟表齿轮机械的原理,当中心码盘旋转时,通过齿轮传动另一组码盘(或多组齿轮,多组码盘),在单圈编码的基础上再增加圈数的编码,以扩大编码器的测量范围,这样的绝对编码器就称为多圈式绝对编码器,它同样是由机械位置确定编码,每个位置编码唯一不重复,而无需**。
多圈编码器另一个优点是由于测量范围大,实际使用往往富裕较多,这样在安装时不必要费劲找零点,将某一中间位置作为起始点就可以了,而大大简化了安装调试难度。
多圈式绝对编码器在长度定位方面的优势明显,已经越来越多地应用于工控定位中。
FPGA逻辑设计方案 目录 1. 设计要求 2. 方案 1. 设计要求 板子资源主要有: l 27M晶振; l FPGA ; l 电平耦合电路; l 电源部分; 27M晶振: 功能1:作为SPI接口参考时钟。 功能2:作为内部系统时钟。 功能3:倍频后作为ABZ的四倍频参考时钟。 编码器速率的计算: SPI口 16位绝对数据的最大变化率为21.84533P/us(按编码器输出数据看,最高转速为20000转/分,一转2^16分辨率,则20000*2^16/60/10^6=21.84533P/us)。 则时钟要求是1us*1000/21.84533P = 45.77637ns。 ABZ需要四倍频,所有时钟周期最小45.77637/4 = 12ns 如果需要这个时钟,可以用FPGA内部的PLL倍频得到。 FPGA: 可以根据需要调整芯片。也可以用CPLD。相关芯片信息咨询Xilinx、Altera以及lattice等厂商。 电平耦合电路:FPGA芯片的IO电平标准是LVTTL或者LVCMOS33或者25, FPGA IO电平是3.3V或者2.5V。如果要转换成其他电平,这里需要耦合电路。 电源部分:包括FPGA的IO电压、辅助电压以及核电压。
1. 方案 FPGA设计结构图: file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif 1:SPI RX模块 FPGA接收是SPI接口,做个SPI slave模块,用来采集来自MCU的SPI数据。 当状态机接收到一帧SPI数据,状态机完成脉冲作为一次数据的更新。将采集的16位SPI数据传输给下一模块做处理。 2:缓冲模块RX_BUF 对接收的数据进行缓冲处理。缓冲三个数据以及相应的周期值。根据这些值和时钟的情况,计算出ABZ所占的脉宽。将这些信息输出给信息处理模块。 3:信息处理模块infm_proc 脉宽计算式: 首先计算出两次SPI数据差的绝对值。 ABZ_COUNT= |data_pre - data_cur | 用ref_clk计算出,两次SPI更新的时间间隔,单位是ref_clk的周期。ref_count 那么脉宽W_ABZ= ref_count / ABZ_COUNT。 规定基点: 上次值数据Bit[15:14]是 2’b11 ,当前接收值是Bit[15:14]2’b00, 高位从11 变为 00.在这个范围内有“0”点。计数到0xffff时。输出Z相。 比如上次的值0xFFC0,当前接收的值是0x0087,在0xFFC0基础上,当输出到0XFFFF-0XFFC0个脉冲的时候,把Z相发出。 确定方向: 对数据进行比较,上一次数据计做data_pre,当前更新数据计做data_cur。 如果data_cur大于data_pre,则判断是顺时针。输出A比B前向90° 如果data_cur小于data_pre,则判断是逆时针。输出B比A前向90° 根据缓冲的数据,有得到的周期值,可以判断出AB相的宽度,这个宽度就是均匀分布的AB相的宽度。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.gif 4:ABZ编码器模块。 有PLL得到相应的时钟,根据ABZ编码器规则,生成ABZ编码器。 得到ABZ真值表.
|