用增量式光電編碼器有可能由于外界的干擾產(chǎn)生計數(shù)錯誤,并且在停電或故障停車后無
法找到事故前執(zhí)行部件的正確位置。采用絕對式光電編碼器可以避免上述缺點。絕對式光電
編碼器的基本原理及組成部件與增量式光電編碼器基本相同,也是由光源、碼盤、檢測光柵、
光電檢測器件和轉(zhuǎn)換電路組成。與增量式光電編碼器不同的是,絕對式光電編碼器用不同的
數(shù)碼來分別指示每個不同的增量位置,它是一種直接輸出數(shù)字量的傳感器。在它的圓形碼盤
上沿徑向有若干同心碼道,每條上由透光和不透光的扇形區(qū)相間組成,相鄰碼道的扇區(qū)數(shù)目
是雙倍關(guān)系,碼盤上的碼道數(shù)就是它的二進制數(shù)碼的位數(shù),在碼盤的一側(cè)是光源,另一側(cè)對
應(yīng)每一碼道有一光敏元件;當碼盤處于不同位置時,各光敏元件根據(jù)受光照與否轉(zhuǎn)換出相應(yīng)
的電平信號,形成二進制數(shù)。這種編碼器的特點是不要計數(shù)器,在轉(zhuǎn)軸的任意位置都可讀出
一個固定的與位置相對應(yīng)的數(shù)字碼。顯然,碼道越多,分辨率就越高,對于一個具有 N 位
二進制分辨率的編碼器,其碼盤必須有N 條碼道。絕對式光電編碼器原理如圖1-8 所示。
絕對式光電編碼器是利用自然二進制、循環(huán)二進制(格雷碼)、二-十進制等方式進行光
電轉(zhuǎn)換的。絕對式光電編碼器與增量式光電編碼器不同之處在于圓盤上透光、不透光的線條
圖形,絕對光電編碼器可有若干編碼,根據(jù)讀出碼盤上的編碼,檢測絕對位置。它的特點是:
可以直接讀出角度坐標的絕對值;沒有累積誤差;電源切除后位置信息不會丟失;編碼器的
精度取決于位數(shù);最高運轉(zhuǎn)速度比增量式光電編碼器高。
圖1-8 絕對式光電編碼器原理
1.3.2 碼制與碼盤
絕對式光電編碼器的碼盤按照其所用的碼制可以分為:二進制碼、循環(huán)碼(格雷碼)、
十進制碼、六十進制碼(度、分、秒進制)碼盤等。四位二元碼盤(二進制、格雷碼)如圖
1-9 所示。圖中黑、白色分別表示透光、不透光區(qū)域。
圖 1-9 四位二元碼盤
圖 1-9(a)是一個四位二進制碼盤,它的最里圈碼道為第一碼道,半圈透光半圈不透光,
對應(yīng)于最高位C1,最外圈為第n 碼道,共分成2n 個亮暗間隔,對應(yīng)于最低位Cn,n 位二元
碼盤最小分辨率為:
二進制馬盤的缺點是:每個碼道的黑白分界線總有一半與相鄰內(nèi)圈碼道的黑白分界線是
對齊的,這樣就會因黑白分界線刻畫不精確造成粗誤差。采用其他的有權(quán)編碼時也存在類似
的問題。圖1-10 是一個四位二進制碼盤展開圖,圖中aa 為最高位碼道黑白分界線的理想位
置,它與其他三位碼道的黑白分界線正好對齊,當碼盤轉(zhuǎn)動,光束掃過這一區(qū)域時,輸出數(shù)
碼從0111 變?yōu)?000 不會出現(xiàn)錯誤。如果C1 道黑白分界線刻偏到a’a’,當碼盤轉(zhuǎn)動時,輸
出數(shù)碼就會從0111 變?yōu)?111 再變到1000,中途出現(xiàn)了錯誤數(shù)碼1111。反之C1 道黑白分界
線刻偏到a’’a’’,當碼盤轉(zhuǎn)動時,輸出數(shù)碼就會從0111 變?yōu)?000 再變到1000,中途出現(xiàn)了
錯誤數(shù)碼0000。為了消除這種粗誤差,可以采用循環(huán)碼盤(格雷碼盤)。
圖 1-9(b)是一個四位循環(huán)碼盤,它與二進制碼盤相同的是,碼道數(shù)也等于數(shù)碼位數(shù),
因此最小分辨率也是式(1-2)求得,最內(nèi)圈也是半圈透光半圈不透光,對應(yīng)R1 位,最外圈
是第n 碼道對于Rn 位。與二進制碼盤不同的是:第二碼道也是一半透光一半不透光,第i
碼道分為2i-1個黑白間隔,第i 碼道的黑白分界線與第i-1 碼道的黑白分界線錯開360° / 2i。
循環(huán)碼盤轉(zhuǎn)到相鄰區(qū)域時,編碼中只有一位發(fā)生變化。只要適當限制各碼道的制作誤差和安
裝誤差,就不會產(chǎn)生粗誤差。由于這一原理,使得循環(huán)碼盤獲得廣泛的應(yīng)用。
1.3.3 二進制碼與循環(huán)碼的轉(zhuǎn)換
絕對式光電編碼器是利用自然二進制或循環(huán)二進制(格雷碼)方式進行光電轉(zhuǎn)換的,編
碼的設(shè)計一般是采用自然二進制碼、循環(huán)二進制碼、二進制補碼等。特點是不要計數(shù)器,在
轉(zhuǎn)軸的任意位置都可讀出一個固定的與位置相對應(yīng)的數(shù)字碼;抗干擾能力強,沒用累積誤差;
電源切斷后位置信息不會丟失,但分辨率是由二進制的位數(shù)決定的,根據(jù)不同的精度要求,
可以選擇不同的分辨率即位數(shù)。目前有10 位、11 位、12 位、13 位、14 位或更高位等多種。
其中采用循環(huán)二進制編碼的絕對式編碼器,其輸出信號是一種數(shù)字排序,不是權(quán)重碼,
每一位沒有確定的大小,不能直接進行比較大小和算術(shù)運算,也不能直接轉(zhuǎn)換成其他信號,
要經(jīng)過一次碼變換,變成自然二進制碼,再由上位機讀取以實現(xiàn)相應(yīng)的控制。而在碼制變換
中有不同的處理方式,本文著重介紹二進制格雷碼與自然二進制碼的互換。
(1)格雷碼(又叫循環(huán)二進制碼或反射二進制碼)介紹
在數(shù)字系統(tǒng)中只能識別 0 和1,各種數(shù)據(jù)要轉(zhuǎn)換為二進制代碼才能進行處理,格雷碼是
一種無權(quán)碼,采用絕對編碼方式,典型格雷碼是一種具有反射特性和循環(huán)特性的單步自補碼,
它的循環(huán)、單步特性消除了隨機取數(shù)時出現(xiàn)重大誤差的可能,它的反射、自補特性使得求反
非常方便。格雷碼屬于可靠性編碼,是一種錯誤最小化的編碼方式,因為,自然二進制碼可
以直接由數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號,但某些情況,例如從十進制的3 轉(zhuǎn)換成4 時二進制
碼的每一位都要變,使數(shù)字電路產(chǎn)生很大的尖峰電流脈沖。而格雷碼則沒有這一缺點,它是
一種數(shù)字排序系統(tǒng),其中的所有相鄰整數(shù)在它們的數(shù)字表示中只有一個數(shù)字不同。它在任意
兩個相鄰的數(shù)之間轉(zhuǎn)換時,只有一個數(shù)位發(fā)生變化。它大大地減少了由一個狀態(tài)到下一個狀
態(tài)時邏輯的混淆。另外由于最大數(shù)與最小數(shù)之間也僅一個數(shù)不同,故通常又叫葛萊反射碼或
循環(huán)碼。表1-1 為幾種自然二進制碼與格雷碼的對照表:
表 1-1 幾種自然二進制碼與格雷碼的對照表
從表 1-1 種可以得出,十進制數(shù)N 與n 位二進制碼滿足以下關(guān)系:
可見,二進制碼由于是有權(quán)碼,滿足(1-4)的關(guān)系,而格雷碼是無權(quán)碼,不滿足(1-4)
的關(guān)系。它與所對應(yīng)的角度不存在類似(1-3)的關(guān)系,因此必須找出循環(huán)碼和二進制碼之
間的對應(yīng)關(guān)系和相互轉(zhuǎn)換規(guī)則。
(2)二進制碼轉(zhuǎn)換成制格雷碼
二進制碼轉(zhuǎn)換成制格雷碼,其法則是保留二進制碼的最高位作為格雷碼的最高位,而次
高位格雷碼為二進制碼的高位與次高位相異或,而格雷碼其余各位與次高位的求法相類似。
圖1-11 所示為二進制碼轉(zhuǎn)換成格雷碼。
圖 1-11 自然二進制碼轉(zhuǎn)換成二進制格雷碼
圖 1-12 為將二進制碼轉(zhuǎn)換為格雷碼的電路圖,其中圖(a)為并行轉(zhuǎn)換電路,圖(b)
為串行轉(zhuǎn)換電路。當采用串行電路時,工作之前先將D 觸發(fā)器D1 置0,Q=0,在Ci 端送入
C1,異或門D2 輸出R1=C1○+ 0=C1,隨后加CP 脈沖,使Q=C1;在Ci 端加入C2,D 輸出R2=C2○+
C1,以后重復(fù)上述過程,可以依次獲得R1,R2,……,Rn。
(3)格雷碼轉(zhuǎn)換為二進制碼
格雷碼轉(zhuǎn)換成二進制碼,則是保留格雷碼的最高位作為二進制碼的最高位,而次高位二
進制碼為高位二進制碼與次高位格雷碼相異或,而二進制碼的其余各位與次高位二進制碼的
求法相類似。圖1-13 為將格雷碼轉(zhuǎn)換為二進制碼的電路,其中圖(a)為并行轉(zhuǎn)換電路,圖
(b)為串行轉(zhuǎn)換電路。當采用串行電路時,工作之前先將JK 觸發(fā)器D 置0,Q=0,將R1
同時加到J、K 端,再加入CP 脈沖后,Q=C1= R1。以后若Q 端為Ci-1 在J、K 端加入Ri。
根據(jù)JK觸發(fā)器的特性,若J、K為“1”則加入CP脈沖后, i 1 Q C ? = ;若J、K 為“0”則
加入CP 脈沖后保持Q=Ci-1。這一邏輯關(guān)系可以寫成:
圖 1-13 格雷碼轉(zhuǎn)換為二進制碼的電路
格雷碼是無權(quán)碼,采用格雷碼盤獲得的格雷碼R1,R2,……,Rn 必須按圖1-11 轉(zhuǎn)換為
對應(yīng)的二進制碼C1,C2,……,Cn 后,才能代入(1-3)式確定與之對應(yīng)的角度。
(4)格雷碼與二進制碼互換的軟件實現(xiàn)方法
(a)二進制碼轉(zhuǎn)換成格雷碼的軟件實現(xiàn)法
根據(jù)自然二進制轉(zhuǎn)換成格雷碼的法則,可以得到以下的代碼:
static unsigned int DecimaltoGray(unsigned int x)
{
return x^(x>>1);
}
//以上代碼實現(xiàn)了unsigned int 型數(shù)據(jù)到格雷碼的轉(zhuǎn)換,最高可轉(zhuǎn)換32 位自然二進
制碼,超出32 位將溢出。
static int DecimaltoGray( int x)
{
return x^(x>>1);
}
//以上代碼實現(xiàn)了 int 型數(shù)據(jù)到格雷碼的轉(zhuǎn)換,最高可轉(zhuǎn)換31 位自然二進制碼,超
出 31 位將溢出。
上述代碼即可用于 VC 控制程序中,也可以用于單片機控制程序中。在單片機程序設(shè)計
時,若采用匯編語言編程,可以按相同的原理設(shè)計程序;若采用C 語言編程,則可以直接
利用上述代碼,但建議用unsigned int 函數(shù)。
(b)軟件實現(xiàn)法(參見示例工程中的 Gray to Binary )
根據(jù)二進制格雷碼轉(zhuǎn)換成自然二進制碼的法則,可以得到以下的三種代碼方式:
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;
}
//以上代碼實現(xiàn)了unsigned int 型數(shù)據(jù)到自然二進制碼的轉(zhuǎn)換,最高可轉(zhuǎn)換32 位格雷碼,
超出32 位將溢出。將數(shù)據(jù)類型改為int 型即可實現(xiàn)31 位格雷碼轉(zhuǎn)換。
上述代碼即可用于 VC 控制程序中,也可以用于單片機控制程序中。在單片機程序設(shè)計
時,若采用匯編語言編程,可以按相同的原理設(shè)計程序;若采用C 語言編程,則可以直接
利用上述代碼,但建議用unsigned int 函數(shù)。
更詳細請查看: http://bbs.elecfans.com/dispbbs_54_113406.html