1、二进制格雷码与自然二进制码的互换在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的。目前,检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经 A/D 转换成数字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用;其二是采用光电轴角编码器进行精确位置控制。光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式进行光电转换的,编码的设计一般是采用自然二进制码、循环二进制码、二进制补码等。特
2、点是不要计数器,在转轴的任意位置都可读出一个固定的与位置相对应的数字码;抗干扰能力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率是由二进制的位数决定的,根据不同的精度要求,可以选择不同的分辨率即位数。目前有 10 位、 11 位、12 位、13 位、14 位或更高位等多种。其中采用循环二进制编码的绝对式编码器,其输出信号是一种数字排序, 不是权重码,每一位没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成其他信号,要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在码制变换中有不同的处理方式,本文着重介绍二进制格雷码与自然二进制码的互换。 一、格雷码(
3、又叫循环二进制码或反射二进制码)介绍 在数字系统中只能识别 0 和 1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/ 模转换器转换成模拟信号,但某些情况,例如从十进制的 3 转换成 4 时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不
4、同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表:十进制数 自然二进制数 格雷码 十进制数 自然二进制数 格雷码0 0000 0000 8 1000 11001 0001 0001 9 1001 11012 0010 0011 10 1010 11113 0011 0010 11 1011 11104 0100 0110 12 1100 10105 0101 0111 13 1101 10116 0110 0101 14 11
5、10 10017 0111 0100 15 1111 1000二、二进制格雷码与自然二进制码的互换1、自然二进制码转换成二进制格雷码自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。2、二进制格雷码转换成自然二进制码 二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。三、二进制格雷码与自然二进制码互换的实现方法1、自然二进制码转
6、换成二进制格雷码 A)、软件实现法(参见示例工程中的 Binary to Gray)根据自然二进制转换成格雷码的法则,可以得到以下的代码: static unsigned int DecimaltoGray(unsigned int x)return x(x1);/以上代码实现了 unsigned int 型数据到格雷码的转换,最高可转换32 位自然二进制码,超出 32 位将溢出。 static int DecimaltoGray( int x)return x(x1);/以上代码实现了 int 型数据到格雷码的转换,最高可转换 31 位自然二进制码,超出 31 位将溢出。 上述代码即可用于
7、VC 控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用 C 语言编程,则可以直接利用上述代码,但建议用 unsigned int 函数。B)、硬件实现法根据自然二进制转换成格雷码的法则,可以得到以下电路图:上图所示电路图即可用异或集成电路 74ls136 实现,也可以利用可编程器件 PLD等编程实现。 2、二进制格雷码转换成自然二进制码A)、软件实现法(参见示例工程中的 Gray to Binary )根据二进制格雷码转换成自然二进制码的法则,可以得到以下的三种代码方式: static unsigned int GraytoDec
8、imal(unsigned int x) unsigned int y = x; while(x=1) y = x; return y; static unsigned int GraytoDecimal(unsigned int x) x=x16; x=x8; x=x4; x=X2; x=x1; return x; static unsigned int GraytoDecimal(unsigned int x) int i; for(i=0;(1(1i); return x; /以上代码实现了 unsigned int 型数据到自然二进制码的转换,最高可转换 32 位格雷码,超出 32 位将溢出。将数据类型改为 int 型即可实现 31 位格雷码转换。 上述代码即可用于 VC 控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用 C 语言编程,则可以直接利用上述代码,但建议用 unsigned int 函数。B)、硬件实现法根据二进制格雷码转换成自然二进制码的法则,可以得到以下电路图:上图所示电路图即可用异或集成电路 74ls136 实现,也可以利用可编程器件 PLD 等编程实现。