基于FPGA和PCI的高精度測(cè)速板卡的設(shè)計(jì)與實(shí)現(xiàn)
摘要:經(jīng)典的碼盤數(shù)字測(cè)速方法有M法、T法、M/T法,但都有一定的不足。為了克服原有方法的不足,設(shè)計(jì)并實(shí)現(xiàn)了一種在較大速度范圍都有良好精度和良好快速性的測(cè)速方法。電路采用FPGA實(shí)現(xiàn),測(cè)速得到的數(shù)據(jù)通過PCI總線從設(shè)備控制器實(shí)現(xiàn)與控制計(jì)算機(jī)通信。從而根據(jù)實(shí)際傳輸?shù)男枰?,?jiǎn)化了PCI從設(shè)備控制器,實(shí)現(xiàn)了PCI總線I/O普通讀與猝發(fā)讀數(shù)據(jù)的功能。
關(guān)鍵詞:測(cè)速;FPGA;PCI;M/T
O 引言
增量式碼盤是一種原理簡(jiǎn)單,抗干擾能力強(qiáng),可靠性高,適合于長(zhǎng)距離傳輸?shù)奈恢门c速度測(cè)量裝置,已成功應(yīng)用于大量的控制系統(tǒng)中,極大地提高了其位置控制精度。理論上,只要測(cè)得碼盤輸出信號(hào)的頻率,即可得到被測(cè)軸的轉(zhuǎn)速,并且可以得到比模擬方法更高的測(cè)量精度。本文以增量式碼盤為基礎(chǔ),設(shè)計(jì)實(shí)現(xiàn)一種在較寬速度范圍都有較高精度并且有良好反應(yīng)速度的速度、位置測(cè)量裝置。
利用增量式碼盤的反饋脈沖信號(hào)測(cè)量速度的典型方法有3種:M法、T法和M/T法。其中,M法是直接計(jì)取給定采樣周期內(nèi)的反饋脈沖數(shù)來測(cè)量速度的,低速時(shí)會(huì)因?yàn)槊}沖數(shù)少而影響測(cè)速精度;T法是通過測(cè)量?jī)蓚€(gè)相鄰反饋脈沖的間隔時(shí)間來測(cè)量速度的,高速時(shí)則因?yàn)槊}沖間隔短而導(dǎo)致精度不高;M/T法結(jié)合了前兩種方法的優(yōu)點(diǎn),在大致相等的采樣間隔內(nèi),計(jì)取Cm個(gè)反饋脈沖,并同時(shí)計(jì)取這Cm個(gè)反饋脈沖間隔內(nèi)插入的高頻時(shí)標(biāo)信號(hào)數(shù)Cf,經(jīng)計(jì)算得到速度測(cè)量值。M/T法雖然克服了前兩種方法的缺點(diǎn),但仍存在低速時(shí)采樣時(shí)機(jī)不確定,精度不高等問題,這給定周期采樣的數(shù)字伺服控制系統(tǒng)帶來很大的不便,所以又出現(xiàn)了變M/T法等方法,以進(jìn)一步改善M/T法的性能和實(shí)用性。
本文利用FPGA實(shí)現(xiàn)了一種改進(jìn)的M/T法,克服經(jīng)典M/T法的不足,其測(cè)速電路與控制器間的數(shù)據(jù)接口形式有PCI總線和雙端口RAM,便于在高性能控制系統(tǒng)中使用。
1 總體方案
根據(jù)控制系統(tǒng)的實(shí)際情況,所設(shè)計(jì)的測(cè)速板具有位置測(cè)量和速度測(cè)量功能,如圖1所示,由倍頻辨向模塊、改進(jìn)M/T法測(cè)速模塊、PCI從設(shè)備控制器三個(gè)部分組成。
1.1 倍頻辨向
增量式碼盤的典型輸出是兩個(gè)相位差為90°的方波信號(hào)A,B以及零位脈沖信號(hào)Z(見圖2)。
A,B之間的相位關(guān)系標(biāo)志被測(cè)軸的轉(zhuǎn)向,即當(dāng)正轉(zhuǎn)時(shí)A相超前B相90°,反轉(zhuǎn)時(shí)B相超前A相90°。對(duì)于每個(gè)確定的碼盤,其脈沖周期T對(duì)應(yīng)的碼盤角位移固定為θ,故其量化誤差為θ/2。如果能將A,B信號(hào)四倍頻,則計(jì)數(shù)脈沖的周期將減小到T/4,量化誤差下降為θ/8,從而使增量式碼盤的角位移測(cè)量精度提高4倍。從圖2可知,根據(jù)A,B兩方波信號(hào)之間相位關(guān)系的4次變化,即可產(chǎn)生四倍頻信號(hào)和辨向信號(hào),這樣就可以實(shí)現(xiàn)增量式碼盤測(cè)量精度的提高。
1.2 改進(jìn)的M/T測(cè)速算法
圖3展示了改進(jìn)M/T法的電路原理,這是實(shí)現(xiàn)高精度的硬件基礎(chǔ)。圖4為改進(jìn)M/T法的時(shí)序圖。
對(duì)圖3及其時(shí)序圖4的分析可以看出:本測(cè)速電路在每個(gè)反饋脈沖時(shí)鎖存高頻時(shí)鐘的計(jì)數(shù)值,兩個(gè)采樣周期間的高頻時(shí)標(biāo)增量值Ct實(shí)際表示為T2前一個(gè)反饋脈沖上升沿到T4前一個(gè)反饋脈沖上升沿的高頻時(shí)標(biāo)增量,而在采樣周期內(nèi)每個(gè)反饋脈沖到來都對(duì)反饋脈沖計(jì)數(shù)器計(jì)數(shù),兩個(gè)采樣脈沖采得反饋脈沖增量值Cm實(shí)際表示為T1~T3之間的反饋脈沖增量值,位置的反饋脈沖增量值則是在Cm的基礎(chǔ)上考慮方向得到的,那么結(jié)合32位浮點(diǎn)運(yùn)算,這種測(cè)速方法就解決了采樣時(shí)機(jī)不確定的缺點(diǎn)。
根據(jù)上述分析,通過差分處理就可得到當(dāng)前實(shí)際采樣間隔內(nèi)的反饋脈沖增量值Cm和高頻時(shí)標(biāo)增量值Ct:
這樣得到的速度是當(dāng)前實(shí)際采樣間隔內(nèi)的平均速度:
式中:KR為反饋信號(hào)脈沖當(dāng)量;fo為高頻時(shí)標(biāo)頻率。
在實(shí)際采樣點(diǎn)T2處,高頻時(shí)標(biāo)信號(hào)fo的邊沿不能總與反饋脈沖信號(hào)plus的邊沿保持一致,因而會(huì)產(chǎn)生±1個(gè)高頻時(shí)標(biāo)當(dāng)量的計(jì)數(shù)誤差,從而影響這種測(cè)速算法的測(cè)速精度。因此高精度數(shù)字測(cè)速算法的測(cè)速相對(duì)誤差為:
動(dòng)態(tài)位置算法不僅關(guān)注已經(jīng)發(fā)生的反饋脈沖數(shù)量,也關(guān)注反饋脈沖的發(fā)生時(shí)刻,其硬件基礎(chǔ)是依據(jù)圖3所示邏輯電路的。根據(jù)當(dāng)前有效采樣周期的定周期采樣點(diǎn)和實(shí)際采樣點(diǎn)之間的時(shí)間差:
并根據(jù)改進(jìn)的M/T法得到被測(cè)對(duì)象的平均速度vn,由vn和△Tn相乘就可以計(jì)算出時(shí)間差△T(n)中所包含的動(dòng)態(tài)位置信息,因此由當(dāng)前有效采樣周期內(nèi)的增量式高精度動(dòng)態(tài)位置信息可以得出位置量:
可根據(jù)這種方法完成測(cè)位置的功能。
2 各個(gè)模塊VHDL實(shí)現(xiàn)
根據(jù)圖1的總體設(shè)計(jì)方案,使用VHDL語言設(shè)計(jì)實(shí)現(xiàn)如下幾個(gè)模塊。
2.1 倍頻辨向模塊
為便于使用VHDL語言描述,對(duì)圖2的碼盤信號(hào)作如下分析:
(1)當(dāng)碼盤正轉(zhuǎn)時(shí),在一個(gè)周期T內(nèi),A,B兩相信號(hào)共有4次相對(duì)變化:00→1O→11→01。這樣,根據(jù)前一次和當(dāng)前的信號(hào),就可以判斷方向,并產(chǎn)生四倍頻脈沖。
(2)同理當(dāng)碼盤反轉(zhuǎn)時(shí),也根據(jù)A,B兩相信號(hào)的4次相對(duì)變化:00→01→11→10,可以判斷方向,并產(chǎn)生四倍頻脈沖信號(hào)。
(3)當(dāng)線路受到干擾或出現(xiàn)故障時(shí),則可能出現(xiàn)其他狀態(tài)轉(zhuǎn)換過程,此時(shí)不產(chǎn)生脈沖。
根據(jù)上述分析就可以設(shè)計(jì)出測(cè)速辨向模塊,當(dāng)判斷正轉(zhuǎn)時(shí),把方向輸出置‘1’,反向時(shí)置‘O’。
2.2 改進(jìn)M/T法測(cè)速模塊
如圖3所示可以看出,本部分的VHDL設(shè)計(jì)分成兩個(gè)模塊:計(jì)數(shù)器模塊與鎖存器模塊。
其中,計(jì)數(shù)器模塊分為兩種:高頻時(shí)標(biāo)計(jì)數(shù)器和反饋脈沖計(jì)數(shù)器。高頻時(shí)標(biāo)計(jì)數(shù)器在每個(gè)高頻時(shí)標(biāo)的上升沿都做+1計(jì)數(shù),在每個(gè)反饋脈沖的上升沿對(duì)計(jì)數(shù)值鎖存。反饋脈沖計(jì)數(shù)器,需要兩個(gè)輸出:反饋脈沖計(jì)數(shù)值Cm、位置反饋脈沖計(jì)數(shù)值。其中,Cm的增量值用于速度的計(jì)算,所以在每一個(gè)反饋脈沖到來時(shí),計(jì)數(shù)器都+1;的計(jì)數(shù)值用于位置的計(jì)算,所以它是在Cm的基礎(chǔ)上考慮了碼盤方向得到的計(jì)數(shù)值,在正轉(zhuǎn)時(shí)反饋脈沖計(jì)數(shù)器+1,反轉(zhuǎn)時(shí)-1,當(dāng)零位脈沖Z有效時(shí),對(duì)其置0。然后分別輸出Cm,,由此就可以得到反饋脈沖計(jì)數(shù)器模塊。
在每個(gè)采樣周期的上升沿還要鎖存Cm,Ct的增量值和與Ct的差值,由于都做了差分處理,所以這三個(gè)鎖存器使用雙字就能滿足設(shè)計(jì)要求,而鎖存器在零位信號(hào)Z后不進(jìn)行差分處理,若采用36 000刻增量式碼盤,并進(jìn)行10 000倍頻,位置范圍為±720°,那么需要的最大計(jì)數(shù)值為:
(36 000×10 000×720×2)/360=1 440 000 000
可見,雙字鎖存器也能滿足設(shè)計(jì)要求。
綜上所述,本設(shè)計(jì)設(shè)置了4個(gè)雙字信號(hào)鎖存器Cm,,Ct,,同時(shí)還需要對(duì)其控制輸出,所以在PCI從設(shè)備控制器中為I/O分配4個(gè)雙字的地址空間。然后根據(jù)PCI總線給出的地址信號(hào)PCI_AD[3:2]和數(shù)據(jù)輸出使能信號(hào)DATA_EN對(duì)這4個(gè)雙字寄存器尋址輸出。
2.3 PCI接口控制器
PCI的時(shí)序規(guī)則和PCI的總線協(xié)議由PCI接口控制器實(shí)現(xiàn),同時(shí)它還負(fù)責(zé)傳遞地址和數(shù)據(jù)輸出使能信號(hào)給測(cè)速模塊,實(shí)現(xiàn)I/O口的基本讀與猝發(fā)讀數(shù)據(jù)功能。
從設(shè)備控制器包括2個(gè)部分:奇偶校驗(yàn)?zāi)K和PCI從設(shè)備狀態(tài)機(jī)。
2.3.1 奇偶校驗(yàn)?zāi)K
PCI的奇偶校驗(yàn)提供了一種機(jī)制來決定一件作業(yè)。該作業(yè)判斷主設(shè)備是否成功地尋址相應(yīng)的從設(shè)備,且數(shù)據(jù)是否正確地在它們之間傳輸。通過該模塊完成數(shù)據(jù)傳輸過程中PCI_AD和PCI_CBE的偶校驗(yàn)。偶校驗(yàn)的輸出信號(hào)在地址和數(shù)據(jù)周期有效,其產(chǎn)生的規(guī)則是使偶校驗(yàn)輸出、PCI_ CBE、PCI_AD各位的‘1’的個(gè)數(shù)為偶數(shù)。那么采用把PCI_AD與PCI_CBE各位異或的方法,就可以實(shí)現(xiàn)偶校驗(yàn)的功能。
2.3.2 PCI從設(shè)備狀態(tài)機(jī)
PCI從設(shè)備控制器是PCI接口設(shè)計(jì)的核心模塊,按功能來說,它要產(chǎn)生奇偶校驗(yàn)和數(shù)據(jù)的使能信號(hào),并根據(jù)PCI_AD和PCI_CBE產(chǎn)生讀地址,完成主從設(shè)備的握手信號(hào),并且實(shí)現(xiàn)從設(shè)備狀態(tài)機(jī)在各個(gè)狀態(tài)之間的轉(zhuǎn)換。
由于本設(shè)計(jì)只需要完成I/0讀操作,本狀態(tài)機(jī)設(shè)計(jì)配置空間的功能放在了從設(shè)備控制器來完成,同時(shí)刪去了PCI操作中對(duì)存儲(chǔ)器空間、配置空間的操作,結(jié)合PCI總線的傳輸時(shí)序,如圖5給出了其基本結(jié)構(gòu)。
(1)空閑狀態(tài)為PCI從設(shè)備的初始狀態(tài),在沒有任何操作的時(shí)候,PCI從設(shè)備將始終保持這個(gè)狀態(tài);
(2)每次數(shù)據(jù)傳輸時(shí)首先傳出地址和命令字,根據(jù)地址和命令字確定是不是對(duì)本設(shè)備的訪問,并確定訪問的首地址;從設(shè)備則從命令字中識(shí)別該訪問是讀操作還是寫操作;
(3)讀訪問只有在信號(hào)IRDY,TRDY,DEVSEL都為低狀態(tài)時(shí)才能進(jìn)行;
(4)猝發(fā)傳輸需要通過地址遞增邏輯來實(shí)現(xiàn)地址的自動(dòng)遞加;其地址遞增的周期為數(shù)據(jù)周期和最后傳輸周期總和,在等待周期暫停遞增;
(5)主從設(shè)備中任一方?jīng)]有準(zhǔn)備好,操作中都需要能夠引起等待狀態(tài)插入的活動(dòng);
(6)讀操作還有一個(gè)中間準(zhǔn)備過程。
那么完成本狀態(tài)機(jī)需要6個(gè)狀態(tài):idle表示空閑狀態(tài);addr表示地址周期;turnad表示讀轉(zhuǎn)換周期;data表示數(shù)據(jù)傳輸周期;lasttra表示最后傳輸周期;wait表示等待周期;在各個(gè)狀態(tài)到來時(shí)還要對(duì)中間信號(hào)、輸出信號(hào)和本地信號(hào)執(zhí)行相應(yīng)的操作:
(1)idle,addr,turnad周期對(duì)PCI_TFRDYn和PCIDEVSELn置高電平;addr周期依據(jù)地址信號(hào)確定是否選中本機(jī),識(shí)別是否為讀操作;addr周期輸出PCI_AD[3:2]對(duì)寄存器進(jìn)行尋址,實(shí)現(xiàn)讀操作。
(2)data,lasttra周期對(duì)PCI_TRDYn和PCI_DEVSELn置低電平;data,lasttra周期置DATA_EN有效并輸出。
(3)addr,data,lasttra周期置奇偶校驗(yàn)有效。
(4)等待周期置PCI_TRDYn和PCI_DEVSELn低電平。
根據(jù)對(duì)PCI總線傳輸時(shí)序的分析,影響各個(gè)狀態(tài)相互轉(zhuǎn)化的因素是:幀同步信號(hào)PCI_FRAMEn、主設(shè)備準(zhǔn)備好信號(hào)PCI_IRDYn、讀識(shí)別信號(hào)READn。其中,READn用來標(biāo)識(shí)狀態(tài)addr產(chǎn)生的中間識(shí)別信號(hào)。
3 測(cè)試平臺(tái)與仿真測(cè)試
這種改進(jìn)M/T數(shù)字測(cè)速及位置檢測(cè)算法的硬件采用Xilinx公司的FPGA XC3S400。使用36 000刻的增量式碼盤,速度環(huán)采樣周期T設(shè)定為1 ms,高頻時(shí)標(biāo)信號(hào)的頻率為40 MHz,結(jié)合PC運(yùn)算的數(shù)字測(cè)速算法可以在速度O.001~150(°)/s的范圍內(nèi)獲得±2.5×10-5 s的測(cè)速精度。與此同時(shí),高精度動(dòng)態(tài)位置檢測(cè)算法可以使位置反饋的動(dòng)態(tài)測(cè)量分辨率提高到10-2~10-6個(gè)脈沖當(dāng)量。
對(duì)編寫好的VHDL程序采用ISE進(jìn)行綜合,并編寫測(cè)試平臺(tái),用ModelSim對(duì)其進(jìn)行仿真測(cè)試。圖6為PCI控制器的仿真圖,圖中state表示狀態(tài)機(jī)在內(nèi)部轉(zhuǎn)換的過程,狀態(tài)1表示空閑狀態(tài),狀態(tài)2表示地址周期,狀態(tài)4表示讀轉(zhuǎn)換周期,狀態(tài)8表示最后傳輸周期,狀態(tài)9表示猝發(fā)讀寫周期。
該I/O讀操作,將地址為1的寄存器讀出。這里設(shè)定I/O地址為0X200~0X20F這4個(gè)雙字空間,那么在地址周期中地址0X204的2~3位尋址于寄存器的第一個(gè)雙字,其后緊跟的是讀的轉(zhuǎn)換周期,猝發(fā)讀寫周期和最后一位讀寫周期??梢钥闯觯@兩個(gè)周期都對(duì)這個(gè)寄存器進(jìn)行了讀操作。
4 結(jié)語
本文介紹了使用FPGA設(shè)計(jì)和實(shí)現(xiàn)基于PCI總線傳輸?shù)母倪M(jìn)型M/T法測(cè)速電路,它克服了經(jīng)典測(cè)速方法的幾個(gè)缺點(diǎn),在較大速度范圍內(nèi)都具有良好的精度。同時(shí)使用FPGA設(shè)計(jì)和實(shí)現(xiàn)了PCI從設(shè)備控制器,使得測(cè)速電路的設(shè)計(jì)與PCI總線的設(shè)計(jì)成為一個(gè)整體,節(jié)省了板上器件,也使得整個(gè)設(shè)計(jì)信號(hào)在FPGA內(nèi)部流動(dòng),具有更加良好的抗干擾能力和穩(wěn)定性。