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