對光柵傳感器原始信號進行細分是采用各類光柵器件進行高精度位置測量、角度測量過程中不可或缺的一個環(huán)節(jié)。細分方法多種多樣,針對各種現(xiàn)有的電子學細分方案并結合實際應用,本文采用軟件程序判卦限,查表細分方法,實現(xiàn)了針對測角傳感器信號的2048次細分。
??? 關鍵詞:光柵傳感器, 測量, 細分
1 引言
目前,各類伺服驅動器及其應用中廣泛采用光柵裝置作為速度測量、位置測量的敏感元件。而且,廣泛采用兩路正交方波的形式,系統(tǒng)的實時性要求極高。因此,對于光柵編碼器的信號的細分等主要處理環(huán)節(jié),一方面集中考慮提高分辨率的問題,同時,需要考慮實時性的問題。
有很多采取純硬件進行細分的方法,如,電阻鏈細分,空間細分,鎖相倍頻,還有兩種方法的結合使用等。上述幾種方法在實際應用中被廣泛采用,特別是電阻鏈細分,在低倍頻的情況下是一種很好的方案。但是在高倍頻的情況下,不可避免地出現(xiàn)大量使用比較器的情況,以及比較器死區(qū)(滯后區(qū))問題,難以調節(jié)。空間細分的方法中,主要解決的問題是切割電平精準的問題,其中的三角波切割三角波的方案有很多優(yōu)點,可以改變使用過零比較造成的細分誤差。但是仍然存在大量使用比較器的問題,調節(jié)起來比較繁瑣。鎖相倍頻細分的方法,一方面,成本較前兩種高,另一方面,受環(huán)境溫度的影響比較大,實際的應用中很少采用。
高速數(shù)字處理器件DSP的應用可以極大地改善系統(tǒng)的實時性,DSP中集成了16路10位A/D轉換,同時有豐富的硬件資源,比較器、定時器,和兩個專門用于產(chǎn)生PWM波的事件管理器。DSP中豐富的指令集為做除法提供了條件。設DSP(2407a)的時鐘頻率是40MHZ,除法程序可以在35個指令周期內執(zhí)行完,兩路A/D轉換需要29個指令周期,查詢數(shù)據(jù)得細分值需要兩個指令周期。共69個指令周期,DSP中程序執(zhí)行是流水線執(zhí)行的,一個時鐘周期最多可以執(zhí)行4條指令。則需要不到1.6us就可以得到精確的光柵位移值。對于一般的應用場合,用DSP細分可以足夠保證控制器500KHz的頻帶,和定位的精確性。
本文從原理上考慮在DSP中完成細分的方案,使用取絕對值,八卦限理論,利用DSP器件(速度為25納秒)對信號進行邏輯運算和處理等一整套信號細分方案。
2 細分及框圖
通過軟件查詢的方式進行細分。從光電編碼器輸出的兩路角位移信號首先進行濾波整型,硬件辨向,提取整周期信號,得到粗位移;同時對兩路信號進行A/D轉換,通過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轉換電路,因而不用再設計A/D轉換電路。A/D轉換后得到y(tǒng)1=|2.5*sin(fai)|,y2=|-2.5*cos(fai)|。對其進行卦限計數(shù),
A/D轉換周期由軟件設定,而在硬件電路實現(xiàn)時,必須要考慮卦限信號,控制信號的高度同步,但在實際電路中是很難做到的。
如果將該數(shù)據(jù)與相位之間的對應關系用一張表來描述,就是我們所建立的細分表,放在DSP中的SRAM中,DSP中集成了2K×16的SRAM,足夠放置查詢表。兩者之間并不是一一對應關系。
(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=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交換
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中對應地址細分值保存在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 ;設編碼最小柵格為40秒,一個卦限為5秒。
SUB #XIFEN_ADR
B YY
YY2: LACC #XIFEN_ADR
YY: Ldp #0eah ;
LT t4cnt ;卦限值
MPY #05h ; 一個卦限相差5秒,
APAC 得到精確細分值
根據(jù)得到的細分值與整周期值相加就可以得到對應的光柵編碼信號。
當速度特別慢時,用軟件判卦限會出現(xiàn)重復計數(shù)。也就是一個細分周期里,電機轉動的位移小于20/1024秒,如下圖。卦限函數(shù)使得卦限增1,產(chǎn)生錯誤。我們要舍棄這個計數(shù)。
??? 為了解決這個問題,我們把軟件的判卦限程序改以下:用一個flaggx標志來表示卦限信號是否剛記過。剛剛記過,就舍棄掉。改正的程序流程如下圖。
3 軟件辨向?
要精確的控制電機,就必須精確判斷當電機轉動出現(xiàn)來回擺動時的方向。對硬件辨向只能做到在整周期計數(shù)時知道電機的轉動方向,當在一個整周期內方向改變時,硬件辨向就不能及時的傳遞方向信息。我們根據(jù)判方向的規(guī)則,在軟件中完成辨向,在1,2,7,8卦限,x2小于等于2.5v時為順時針轉動,大于2.5v為逆時針轉動;在3,4,5,6卦限,x2大于2.5v時為順時針轉動, 小于等于2.5v為逆時針轉動;程序流程:
direction=1,表示順時針,為0是逆時針;
若做到1024細分, 分八個卦限,每個卦限有256個細分值。在DSP中只需要256×16個單元存儲細分值即可。
細分碼如下:
在DSP中有
細分碼 |
地址碼 | |
卦限地址 |
A/D轉換得到的地址 | |
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 |
評論
查看更多