您现在所在的是:

自控设计

回帖:6个,阅读:8287 [上一页] [1] [下一页]
1350
hsdc
文章数:211
年度积分:50
历史总积分:1350
注册时间:2004/2/21
发站内信
发表于:2005/6/8 22:27:00
#0楼
二进制格雷码与自然二进制码的互换



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

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

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


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

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



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



三、二进制格雷码与自然二进制码互换的实现方法
1、自然二进制码转换成二进制格雷码
 软件实现法
  根据自然二进制转换成格雷码的法则,可以得到以下的代码:


     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函数。



2、二进制格雷码转换成自然二进制码
软件实现法
  根据二进制格雷码转换成自然二进制码的法则,可以得到以下的三种代码方式:
      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<<i)<sizeof(x)*8;i++)
         {
            x^=x>>(1<<i);
         }
         return x;
      }          //以上代码实现了unsigned int型数据到自然二进制码的转换,最高可转换32位格雷码,超出32位将溢出。将数据类型改为int型即可实现31位格雷码转换。
  上述代码即可用于VC控制程序中,也可以用于单片机控制程序中。在单片机程序设计时,若采用汇编语言编程,可以按相同的原理设计程序;若采用C语言编程,则可以直接利用上述代码,但建议用unsigned int函数。


[此贴子已经被作者于2005-6-8 22:29:41编辑过]
29673
思南 管理员
文章数:14047
年度积分:62
历史总积分:29673
注册时间:2001/3/12
发站内信
发表于:2005/6/9 7:39:00
#1楼
推荐好帖,说的很明了。
图
如您对论坛有好的建议或创想,请加大版主微信号:gkong2015
大版主推荐【工控百家谈】微信公众号,业界大拿原创内容分享
926
sheng1985
文章数:7
年度积分:50
历史总积分:926
注册时间:2004/1/6
发站内信
发表于:2005/6/29 19:16:00
#2楼
good
854
zy99
文章数:10
年度积分:50
历史总积分:854
注册时间:2002/7/26
发站内信
发表于:2005/7/6 9:40:00
#3楼
好,谢谢
905
wjx-wjx
文章数:1
年度积分:50
历史总积分:905
注册时间:2005/7/26
发站内信
发表于:2005/7/26 18:44:00
#4楼
好啊,长知识
902
大兵仔
文章数:1
年度积分:50
历史总积分:902
注册时间:2005/9/12
发站内信
发表于:2005/9/12 12:41:00
#5楼
大虾谢谢
刚刚毕业 初来乍到 请位大吓多多指点 小弟感激不尽
906
m060114
文章数:3
年度积分:50
历史总积分:906
注册时间:2006/1/14
发站内信
发表于:2006/1/14 16:41:00
#6楼
谢谢!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

109.2007