在精確定位控制系統中,為了提高控制精度,準確測量控制對象的位置是十分重要的。目前,檢測位置的辦法有兩種:其一是使用位置傳感器,測量到的位移量由變送器經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等編程實現。
-
傳感器
+關注
關注
2553文章
51390瀏覽量
756572 -
編碼器
+關注
關注
45文章
3667瀏覽量
135237 -
數字系統
+關注
關注
0文章
145瀏覽量
20907 -
位置傳感器
+關注
關注
3文章
271瀏覽量
27569 -
定位控制系統
+關注
關注
0文章
3瀏覽量
6723
發布評論請先 登錄
相關推薦
評論