0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

二进制格雷码与自然二进制码的互换分析

454398 来源:博客园 作者: 半面人 2020-09-23 16:23 次阅读

在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的。目前,检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经A/D转换成数字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用;其二是采用光电轴角编码器进行精确位置控制。光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式进行光电转换的,编码的设计一般是采用自然二进制码、循环二进制码、二进制补码等。特点是不要计数器,在转轴的任意位置都可读出一个固定的与位置相对应的数字码;抗干扰能力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率是由二进制的位数决定的,根据不同的精度要求,可以选择不同的分辨率即位数。目前有10位、11位、12位、13位、14位或更高位等多种。

其中采用循环二进制编码的绝对式编码器,其输出信号是一种数字排序,不是权重码,每一位没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成其他信号,要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在码制变换中有不同的处理方式,本文着重介绍二进制格雷码与自然二进制码的互换。

一、格雷码(又叫循环二进制码或反射二进制码)介绍

在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表:

二、二进制格雷码与自然二进制码的互换

1、自然二进制码转换成二进制格雷码
自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。


2、二进制格雷码转换成自然二进制码
二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。

三、二进制格雷码与自然二进制码互换的实现方法

1、自然二进制码转换成二进制格雷码
A)、软件实现法(参见示例工程中的 Binary to Gray)
根据自然二进制转换成格雷码的法则,可以得到以下的代码:

static unsigned int DecimaltoGray(unsigned int x)

{

return x^(x>>1);

}

//以上代码实现了unsigned int型数据到格雷码的转换,最高可转换32位自然二进制码,超出32位将溢出。

static int DecimaltoGray( int x)

{

return x^(x>>1);

}

//以上代码实现了 int型数据到格雷码的转换,最高可转换31位自然二进制码,超出31位将溢出。

上述代码即可用于VC控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用C语言编程,则可以直接利用上述代码,但建议用unsigned int函数。
B)、硬件实现法
根据自然二进制转换成格雷码的法则,可以得到以下电路图:


上图所示电路图即可用异或集成电路74ls136实现,也可以利用可编程器件PLD等编程实现。

2、二进制格雷码转换成自然二进制码
A)、软件实现法(参见示例工程中的 Gray to Binary )
根据二进制格雷码转换成自然二进制码的法则,可以得到以下的三种代码方式:

· static unsigned int GraytoDecimal(unsigned int x)

· {

· unsigned int y = x;

· while(x>>=1)

· y ^= x;

· return y;

· }

· static unsigned int GraytoDecimal(unsigned int x)

· {

· x^=x>>16;

· x^=x>>8;

· x^=x>>4;

· x^=X>>2;

· x^=x^1;

· return x;

· }

· static unsigned int GraytoDecimal(unsigned int x)

· {

· int i;

· for(i=0;(1<

· {

· x^=x>>(1<

· }

· return x;

· }

//以上代码实现了unsigned int型数据到自然二进制码的转换,最高可转换32位格雷码,超出32位将溢出。将数据类型改为int型即可实现31位格雷码转换。
上述代码即可用于VC控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用C语言编程,则可以直接利用上述代码,但建议用unsigned int函数。
B)、硬件实现法
根据二进制格雷码转换成自然二进制码的法则,可以得到以下电路图:


上图所示电路图即可用异或集成电路74ls136实现,也可以利用可编程器件PLD等编程实现。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2522

    文章

    47984

    浏览量

    739698
  • 编码器
    +关注

    关注

    41

    文章

    3356

    浏览量

    131421
  • 数字系统
    +关注

    关注

    0

    文章

    123

    浏览量

    20724
  • 位置传感器
    +关注

    关注

    2

    文章

    224

    浏览量

    27062
  • 定位控制系统

    关注

    0

    文章

    3

    浏览量

    6661
收藏 人收藏

    评论

    相关推荐

    二进制码详解

    的权为21=2,b2位的权为22=4,b3位的权为23=8,例: 0111= 0×8 + 1×4 + 1×2 + 1×1=7  一般情况下,十进制二进制码之间的关系可表示为:(N)D= b3 W3 + b2 W2 + b1
    发表于 04-06 23:55

    二进制自然二进制码互换

    变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在制变换中有不同的处理方式,本文着重介绍二进制
    发表于 03-08 14:16

    简介及格二进制的转换程序

    *由上面的数据可看出.如果,按照序号01327645的方式遍历.其编 * 实值是按自然数顺序排列.反之,如果按此顺序遍历其
    发表于 04-22 09:00

    什么是BCD、8421、余三

    !!余三是在8421BCD的基础上,把每个数的代码加上0011(对应十进制数3)后得到的。
    发表于 11-03 17:36

    二进制与格转换

    二进制与格转换
    发表于 08-08 15:51

    二进制与格转换

    本帖最后由 eehome 于 2013-1-5 10:01 编辑 二进制与格转换
    发表于 08-14 09:42

    如何用VHDL实现16位二进制数转化为相应的BCD

    downto 0));End;Architecture one of B_BCD isBeginProcess(B)begin(16位的二进制码)转化为(相应的BCD);比如说1234这个十进制数,它
    发表于 04-10 09:46

    【小梅哥FPGA进阶教程】第二进制转BCD

    的设计中会经常遇到。转换原理对于一个8位二进制码,其在十进制编码方式下的值为:把上式写出套乘的形式:式中的每项乘2,相当于将寄存器中的二进制码左移1位,这就意味着利用移位寄存器可以完成二进制
    发表于 01-09 14:38

    【梦翼师兄今日推荐】BCD转二进制程序设计讲解

    问题:二进制码左移一位等于未左移的二进制码*2,例如有二进制码101001,转成十进制等于41,左移一位得到1010010,转成十进制等于8
    发表于 12-03 21:48

    如何理解二进制运算规则 二进制是如何运算的

    二进制运算规则二进制的运算算术运算二进制的加法:0+0=0,0+1=1 ,1+0=1, 1+1=10(向高位进位);二进制的减法:0-0=0,10-1=1(向高位借位) 1-0=1,1
    发表于 12-11 17:49

    在FPGA中实现一种二进制转BCD的电路设计

    字逻辑设计课程中,我们已经学过了BCD的相关知识,它用4位二进制数来表示1位十进制数中的09,是二进制编码的十进制代码,常见的BCD
    发表于 07-12 16:41

    请问bcd二进制有什么关系?

    这个bcd二进制有什么关系? bcd 表示0011001是19(十进制) 二进制表示0011001是25(十进制) 这个怎么确定是哪个?
    发表于 10-07 06:02

    二进制码

    二进制码   数字系统中的信息可分为两类,一类是数值,另一类是文字符号(包括控制符)。  代码:采用一定位数的二进制数码来表示文字符号
    发表于 04-06 23:55 4040次阅读
    <b class='flag-5'>二进制码</b>

    二进制码——葛来码变换器

    二进制码——葛来码变换器
    发表于 04-10 10:07 554次阅读
    <b class='flag-5'>二进制码</b>——葛来码变换器

    格雷码与二进制的转换

    格雷码,又叫循环二进制码或反射二进制码,格雷码是我们在工程中常会遇到的一种编码方式,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。格雷码的基本特点就是任意两个相邻的代码只有一位
    的头像 发表于 03-02 15:48 1.7w次阅读
    格雷码与<b class='flag-5'>二进制</b>的转换