編碼器精度軟體提高方式

2021-06-21 11:00:46 字數 3012 閱讀 5942

增量式旋轉編碼器(見圖1)是一種控制系統中常見的轉角測量裝置,常見的轉角測量裝置,常被安裝在各種旋轉軸末端,以測量軸轉角。它輸出如圖2所示的兩路相位差90°的脈衝(以下簡稱a路、b路)指示位置。旋轉編碼器每轉過一定角度,就輸出乙個脈衝。當旋轉編碼器順時鐘旋轉時,a路脈衝超前b路脈衝90°;當旋轉編碼器逆時針旋轉時,a路脈衝滯後b路脈衝90°。計算脈衝個數可以獲知轉角,根據相位差可以知道旋轉方向,從而計算出旋轉軸相對角度的變化。

旋轉編碼器內部一般由極細的光柵條紋與光電檢測裝置構成。通常將一圈內光柵條紋數目稱為「線」來表示解析度,例如「1000線」的編碼器,旋轉一圈能輸出1000個脈衝。受到光線衍射效應的影響,光柵條紋上限一般是每2500條左右。這限制了旋轉編碼器的解析度,很難超過2500線。

為了提高編碼器的解析度,普通採用電子4細分方法。兩路脈衝相差90°,乙個週期內兩路訊號共會出現兩次上公升沿與兩次下降沿,4個沿均勻分布在乙個週期內。取4個沿作為旋轉檢測判據,可以將解析度提高4倍。在2500線的旋轉編碼器上,能夠實現1/10000圈的角度檢測解析度。圖3是對編碼器輸出波形進行細分的原理,編碼器順時針旋轉,輸出兩個脈衝,再逆時針旋轉,輸出兩個脈衝。4細分後能檢測出編碼器順時針旋轉8步,再逆時針轉8步。

早期控制系統中,4細分常用硬體電路來實現。為了節省成本與電路板面積,本例要求在msp430微控制器上用軟體來實現旋轉編碼器4細分邏輯,並將轉角值儲存在全域性變數內。

這是典型的時序邏輯問題,可以很方便地用狀態機建模。先分析狀態。乙個脈衝週期內,脈衝a與脈衝b的電平總共有4種組合:「a=1  b=0」、「a=0  b=0」、「a=0  b=1」、「a=1  b=1」。將這4種組合分別稱為狀態1、2、3、4(見圖4)。編碼器旋轉時,依次在這4種狀態之間跳變。引發狀態轉移共有4種事件:a下降沿、a上公升沿、b下降沿、b上公升沿。根據時序圖,先用語言描述狀態變化規律:

在狀態1時,遇到a下降沿,變為狀態2,同時角度計數加1

在狀態2時,遇到b上公升沿,變為狀態3,同時角度計數加1

在狀態3時,遇到a上公升沿,變為狀態4,同時角度計數加1

在狀態4時,遇到b下降沿,變為狀態1,同時角度計數加1

在狀態4時,遇到a下降沿,變為狀態3,同時角度計數減1

在狀態3時,遇到b下降沿,變為狀態2,同時角度計數減1

在狀態2時,遇到a 上公升沿,變為狀態1,同時角度計數減1

在狀態1時,遇到b上公升沿,變為狀態4,同時角度計數減1

再根據語言描述,畫出狀態轉移圖(見圖4),可以發現當編碼器順時鐘旋轉時,狀態也按照順時針方向轉移,每次狀態轉移時讓角度變數增加。反之逆時針轉移時,讓轉角變數遞減。

msp430微控制器的i/o口能設定為上公升沿或下降沿中斷,用兩個i/o口(p1.4、p1.5)檢測a脈衝,用兩個i/o口(p1.6、p1.7)檢測b脈衝。如圖5所示。其中p1.4與p1.6設為下降沿中斷、p1.5與p1.7設為上公升沿中斷。首先初始化4個i/o口:

p1ies  |= bit4+bit5 ;             設為下降沿中斷

p1ies  &=~(bit4+bit5);           設為上公升沿中斷

p1ie |=bit4+bit5+bit6+bit7;       //允許p1.4567中斷

p1ifg = 0;                       //避免第一次誤動作

_eint();                         //總中斷允許

在4個中斷內進行狀態轉移處理與計數即可實現4細分程式。利用中斷觸發也同時保證了檢測的實時性:

int encodercnt= 0;                //旋轉角度計數值,全域性變數,供其他程式訪問

unsigned charencoderstatus = 1;   //旋轉時序狀態變數

pragma vector =port1_vector     //p1口中斷源

__interruptvoid p1_isr( void )       //宣告乙個中斷服務程式,名為p1_isr();

//a 下沿,1->2

if (encoderstatus == 4)   //a 下沿,4->3 }

if(p1ifg&bit5)       //-------------------a 上公升中斷(p1.5中斷入口)-------------//

//a 上沿,3->4

if (encoderstatus == 2)   //a 上沿,2->1 }

if(p1ifg&bit6)       //-------------------b 下降中斷(p1.6中斷入口)-------------//

//b 下沿,4->1

if (encoderstatus == 3)   //b 下沿,3->2 }

if(p1ifg&bit7)       //-------------------b 上公升中斷(p1.7中斷入口)-------------//

//b 上沿,2->3

if (encoderstatus == 1)   //b 上沿,1->4 }

p1ifg = 0;                                    //清楚p1口中斷標誌位

__low_power_mode_odd_on_exit();            //退出喚醒cpu(如果主程式需要喚醒) }

在每個中斷內,根據當前狀態處理狀態轉移,並改變encodercnt變數的值。在軟體的其他任何位置,只要訪問encodercnt變數即可獲知被測量轉軸的當前轉角。

連線編碼器 旋轉編碼器的接線方式

旋轉編碼器是一種光電式旋轉丈量裝置,它將被測的角位移直接改換成數碼訊號 高速脈衝訊號 因而可將旋轉編碼器的輸出脈衝訊號直接輸入給plc,運用plc的高速計數器對其脈衝訊號進行計數,歐姆龍觸控螢幕,以取得丈量成果。紛歧樣型別的旋轉編碼器,其輸出脈衝的相數也紛歧樣,有的旋轉編碼器輸出a b z三相脈衝,...

index編碼器 編碼器測量工具 主軸編碼器

德國vs sensorik編碼器為index車銑復合工具機標配編碼器 並可完全相容西門子 l b 海德漢等編碼器。dcmu 24p cnbo box 應用於工具機主軸編碼器訊號診斷 資料記錄及訊號校準的測量工具 僅使用一台膝上型電腦連線我們的編碼器測量工具裝置 dcmu box 就可以輕鬆對編碼器訊...

連線編碼器 編碼器原理及測量

編碼器及其應用概述 編碼器 encoder 是將訊號 如位元流 或資料進行編制 轉換為可用以通訊 傳輸和儲存的訊號形式的裝置。編碼器把角位移或直線位移轉換成電訊號,前者成為碼盤,後者稱碼尺。按照讀出方式編碼器可以分為接觸式和非接觸式兩種。接觸式採用電刷輸出,一電刷接觸導電區或絕緣區來表示 的狀態是 ...