《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > 用DSP實現(xiàn)增量式光電編碼器的細分
用DSP實現(xiàn)增量式光電編碼器的細分
摘要: 對光柵傳感器原始信號進行細分是采用各類光柵器件進行高精度位置測量、角度測量過程中不可或缺的一個環(huán)節(jié)。細分方法多種多樣,針對各種現(xiàn)有的電子學(xué)細分方案并結(jié)合實際應(yīng)用,本文采用軟件程序判卦限,查表細分方法,實現(xiàn)了針對測角傳感器信號的2048次細分。
Abstract:
Key words :

1 引言

目前,各類伺服驅(qū)動器及其應(yīng)用中廣泛采用光柵裝置作為速度測量、位置測量的敏感元件。而且,廣泛采用兩路正交方波的形式,系統(tǒng)的實時性要求極高。因此,對于光柵編碼器的信號的細分等主要處理環(huán)節(jié),一方面集中考慮提高分辨率的問題,同時,需要考慮實時性的問題。

有很多采取純硬件進行細分的方法,如,電阻鏈細分,空間細分,鎖相倍頻,還有兩種方法的結(jié)合使用等。上述幾種方法在實際應(yīng)用中被廣泛采用,特別是電阻鏈細分,在低倍頻的情況下是一種很好的方案。但是在高倍頻的情況下,不可避免地出現(xiàn)大量使用比較器的情況,以及比較器死區(qū)(滯后區(qū))問題,難以調(diào)節(jié)??臻g細分的方法中,主要解決的問題是切割電平精準的問題,其中的三角波切割三角波的方案有很多優(yōu)點,可以改變使用過零比較造成的細分誤差。但是仍然存在大量使用比較器的問題,調(diào)節(jié)起來比較繁瑣。鎖相倍頻細分的方法,一方面,成本較前兩種高,另一方面,受環(huán)境溫度的影響比較大,實際的應(yīng)用中很少采用。

高速數(shù)字處理器件DSP的應(yīng)用可以極大地改善系統(tǒng)的實時性,DSP中集成了16路10位A/D轉(zhuǎn)換,同時有豐富的硬件資源,比較器、定時器,和兩個專門用于產(chǎn)生PWM波的事件管理器。DSP中豐富的指令集為做除法提供了條件。設(shè)DSP(2407a)的時鐘頻率是40MHZ,除法程序可以在35個指令周期內(nèi)執(zhí)行完,兩路A/D轉(zhuǎn)換需要29個指令周期,查詢數(shù)據(jù)得細分值需要兩個指令周期。共69個指令周期,DSP中程序執(zhí)行是流水線執(zhí)行的,一個時鐘周期最多可以執(zhí)行4條指令。則需要不到1.6us就可以得到精確的光柵位移值。對于一般的應(yīng)用場合,用DSP細分可以足夠保證控制器500KHz的頻帶,和定位的精確性。

本文從原理上考慮在DSP中完成細分的方案,使用取絕對值,八卦限理論,利用DSP器件(速度為25納秒)對信號進行邏輯運算和處理等一整套信號細分方案。

2 細分及框圖

通過軟件查詢的方式進行細分。從光電編碼器輸出的兩路角位移信號首先進行濾波整型,硬件辨向,提取整周期信號,得到粗位移;同時對兩路信號進行A/D轉(zhuǎn)換,通過U函數(shù)得到計數(shù)脈沖,從而得到卦限值,通過V函數(shù)得到精位移的地址信號,查詢得到精位移。系統(tǒng)框圖如下:

    輸入的兩路信號分別是x1=2.5*sin(fai)+2.5(v),x2=-2.5*cos(fai)+2.5(v);在DSP中有專門的16路A/D轉(zhuǎn)換電路,因而不用再設(shè)計A/D轉(zhuǎn)換電路。A/D轉(zhuǎn)換后得到y(tǒng)1=|2.5*sin(fai)|,y2=|-2.5*cos(fai)|。對其進行卦限計數(shù),

A/D轉(zhuǎn)換周期由軟件設(shè)定,而在硬件電路實現(xiàn)時,必須要考慮卦限信號,控制信號的高度同步,但在實際電路中是很難做到的。

如果將該數(shù)據(jù)與相位之間的對應(yīng)關(guān)系用一張表來描述,就是我們所建立的細分表,放在DSP中的SRAM中,DSP中集成了2K×16的SRAM,足夠放置查詢表。兩者之間并不是一一對應(yīng)關(guān)系。

(FAI)(t)=arctanθt∝sinxt/cosxt;

軟件流程圖如下:

    軟件程序流程圖:

U函數(shù)取為U=y1*y2*(y2-y1);當U為零時,卦限信號就增加1

; ;;;;;;;;;;-------細分程序

XIFEN: LDP #0E1h;

CLRC SXM ; 抑制符號位擴展

LACC RESULT0,10

SACH X1 ; 存X1值

LACC RESULT1,10 ;

SACH X2; 存X2值

SETC SXM ;允許符號位擴展

LACL R1SIN;

SUB #JUNZHI ;(2.5V);

ABS

SACL Y1 ; 得到y(tǒng)1

LACL X2;

SUB #JUNZHI(2.5V);

ABS

SACL Y2 ; 得到y(tǒng)2

SUB Y1 ;

SACL Y ; 得到Y(jié)=y2-y1值,保存 ;用dsp中計數(shù)器T4記卦限

BCND ss,NEQ

Lacl y1

BCND ss,NEQ

Lacl y2

BCND ss,NEQ ;若U=0,卦限計數(shù)器計數(shù)

set t4clkin ; 為計數(shù)器提供脈沖

ss: LACL y

BCND DEVISION,GEQ ; 判斷卦限,y2>=y1 時,直接y1/y2;否則y2/y1,除數(shù)變被除數(shù)

JIAOHUAN: LACC y1 ; y1和y2交換

SACL TEMP_AD ;

LACL y2 ;

SACL y1 ;

LACC TEMP_AD ;

SACL y2 ; y2/y1 ; 毫秒為Q8格式

DEVISION LACC R1SIN ,6;;;;取分子并左移6位;

RPT #15 ; 后面的指令執(zhí)行15+1次。

SUBC R2COS ;16 CYCLE DIVIDED LOOP

; .ACC中的數(shù)據(jù)減去Demon 減10次,直到被減數(shù)小于0

SACL QUOT ; 得到商

SACH REMAIN ; 得到余數(shù)

LACC REMAIN; 取余數(shù)后再除

RPT #13 ; 后面的指令執(zhí)行14次。

SUBC DENOM;

AND QUOT;

; SACL QUOT ;;;保存商。得到十位地址信號。用此信號得到RAM中對應(yīng)地址細分值保存在DSP的sram中)

ADD #0800h ;SRAM 初始地址為#0800H(

SAL XIFEN_ADR ;

LACC #XIFEN_ADR

ADD #0800h ;SRAM 初始地址為#0800H

SAL XIFEN_ADR ;

LACL Y ;Y2>=Y1 ;

BCND yy2 ,GEQ

LACL #05h ;設(shè)編碼最小柵格為40秒,一個卦限為5秒。

SUB #XIFEN_ADR

B YY

YY2: LACC #XIFEN_ADR

YY: Ldp #0eah ;

LT t4cnt ;卦限值

MPY #05h ; 一個卦限相差5秒,

APAC 得到精確細分值

根據(jù)得到的細分值與整周期值相加就可以得到對應(yīng)的光柵編碼信號。

當速度特別慢時,用軟件判卦限會出現(xiàn)重復(fù)計數(shù)。也就是一個細分周期里,電機轉(zhuǎn)動的位移小于20/1024秒,如下圖。卦限函數(shù)使得卦限增1,產(chǎn)生錯誤。我們要舍棄這個計數(shù)。

    為了解決這個問題,我們把軟件的判卦限程序改以下:用一個flaggx標志來表示卦限信號是否剛記過。剛剛記過,就舍棄掉。改正的程序流程如下圖。

3 軟件辨向 

要精確的控制電機,就必須精確判斷當電機轉(zhuǎn)動出現(xiàn)來回擺動時的方向。對硬件辨向只能做到在整周期計數(shù)時知道電機的轉(zhuǎn)動方向,當在一個整周期內(nèi)方向改變時,硬件辨向就不能及時的傳遞方向信息。我們根據(jù)判方向的規(guī)則,在軟件中完成辨向,在1,2,7,8卦限,x2小于等于2.5v時為順時針轉(zhuǎn)動,大于2.5v為逆時針轉(zhuǎn)動;在3,4,5,6卦限,x2大于2.5v時為順時針轉(zhuǎn)動, 小于等于2.5v為逆時針轉(zhuǎn)動;程序流程:

 

direction=1,表示順時針,為0是逆時針;

若做到1024細分, 分八個卦限,每個卦限有256個細分值。在DSP中只需要256×16個單元存儲細分值即可。

細分碼如下:

在DSP中有

 

細分碼

地址碼

卦限地址

A/D轉(zhuǎn)換得到的地址

000,0000,0000

000 3

00,0000,0000~00,0000,0010

000,0000,0001

000 6

00,0000,0011~0000,0010~101

000,0000,0010

。 9

1001

000,0000,0011

。13

1101

000,0000,0100

。16

10000

000,0000,0101

19

1

000,0000,0110

22

 

000,0000,0111

25

 

000,0000,1001

28

 

000,0000,1010.....

31

 

000,0000,1011

35

 

000,0000,1100

38

 

000,0000,1101

41

 

000,0000,1110

44

 

000,0000,1111

47

 

000,0001,0000

50

 

000,0001,0001

53

 

000,0001,0010

57

 

 

60

 

 

63

 

 

66

 

 

69

 

000,0110,1111

366

 

000,0111,0000

370

 

000,0111,0001

373

 

000,0111,0010

377

 

000,0111,0011

381

 

000,0111,0100

384

 

000,0111,0101

388

 

000,0111,0110

391

 

000,0111,0111

395

 

000,0111,1000

399

 

000,0111,1001

402

 

000,0111,1010

406

 

000,0111,1011

410

 

000,0111,1100

413

 

000,0111,1101

417

 

000,0111,1110

420

 

000,0111,1111

424

 

000,1000,0000

 

 

......

 

 

000,1111,1000(248)

945

 

000,1111,1001

981

 

000,1111,1010

987

 

000,1111,1011

993

 

000,1111,1100

999

 

000,1111,1101

1005

 

000,1111,1110

1012

 

000,1111,1111

1018

00

001,0000,0000

1024

11,1111,1111~11,1111,1

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。