喬 橋,范良志
QIAO Qiao,FAN Liang-zhi
(武漢紡織大學(xué) 機(jī)電學(xué)院,武漢 430074)
FPGA是新型的大規(guī)??删幊虜?shù)字集成電路器件。它充分利用計(jì)算機(jī)輔助設(shè)計(jì)技術(shù)進(jìn)行器件的開發(fā)與應(yīng)用。用戶借助于計(jì)算機(jī)不僅能自行設(shè)計(jì)專用集成電路芯片,還可在計(jì)算機(jī)上進(jìn)行功能仿真和實(shí)時(shí)仿真,及時(shí)發(fā)現(xiàn)問題,調(diào)整電路,改進(jìn)設(shè)計(jì)方案。這樣,設(shè)計(jì)者不必動(dòng)手搭接電路、調(diào)試驗(yàn)證,只須在計(jì)算機(jī)上操作很短的時(shí)間,即可設(shè)計(jì)出與實(shí)際系統(tǒng)相差無幾的理想電路。而且,F(xiàn)PGA器件采用標(biāo)準(zhǔn)化結(jié)構(gòu),體積小、集成度高、功耗低、速度快,可無限次反復(fù)編程,因此,成為科研產(chǎn)品開發(fā)及其小型化的首選器件,其應(yīng)用極為廣泛。
本文介紹了二次插補(bǔ)算法中的精插補(bǔ)器在FPGA中的實(shí)現(xiàn)方法,插補(bǔ)方法經(jīng)過多年的發(fā)展已形成了眾多的門類,一般依據(jù)數(shù)控系統(tǒng)控制方式的不同將插補(bǔ)方法分為兩大類:基準(zhǔn)脈沖插補(bǔ)和數(shù)據(jù)采樣插補(bǔ)?;鶞?zhǔn)脈沖插補(bǔ)是用于開環(huán)控制系統(tǒng)的插補(bǔ)方法,它用理論直線上采用各種方法離散化得出的驅(qū)動(dòng)信號(hào)直接驅(qū)動(dòng)傳動(dòng)裝置,沒有檢測(cè)實(shí)際加工軌跡誤差的反饋部件;數(shù)據(jù)采樣插補(bǔ)用于閉環(huán)數(shù)控系統(tǒng)中,在目前的檢測(cè)和運(yùn)算技術(shù)還不能較快的實(shí)現(xiàn)插補(bǔ)與檢測(cè)同步修正的情況下,通常采用時(shí)間分割的思想,將整個(gè)插補(bǔ)過程分為粗插補(bǔ)和精插補(bǔ)兩個(gè)階段[1]。粗插補(bǔ)器在給精插補(bǔ)器發(fā)送下一段插補(bǔ)數(shù)據(jù)之前若干個(gè)周期從實(shí)時(shí)位置反饋單元得到實(shí)時(shí)位置數(shù)據(jù),并依據(jù)此數(shù)據(jù)對(duì)下一段加工數(shù)據(jù)進(jìn)行校正,從而使實(shí)際加工軌跡在控制器的監(jiān)控下始終處于誤差允許范圍之內(nèi),這是一種二次插補(bǔ)方法。本文就是介紹了二次插補(bǔ)方法中精插補(bǔ)器的設(shè)計(jì)。最終將該精插補(bǔ)器運(yùn)用于基于DSP控制平臺(tái)的伺服控制系統(tǒng)中。
系統(tǒng)硬件框圖如圖1所示:
圖1 系統(tǒng)硬件框圖
該伺服系統(tǒng)中心控制電路采用TI公司的TMS32OF28335芯片。外設(shè)還包括6個(gè)捕獲單元,用以捕獲編碼信號(hào)和集成的3路正交編碼電路。另外本系統(tǒng)采用FPGA核心芯片EPE10K10LC-84來根據(jù)轉(zhuǎn)子位置信號(hào)通過邏輯關(guān)系輸出六路PWM 波[4]。
本設(shè)計(jì)中TMS32OF28335與EPE10K10LC-84 的接口電路如圖2中所示。其中的工作頻率為32.47MHz,為保證DSP和FPGA在工作時(shí)序上的一致性,F(xiàn)PGA的時(shí)鐘源由DSP的ECLOCK腳提供,F(xiàn)PGA同步工作在32.47MHz 。DSP地址線TSDCAS(行選通) ~TSDRAS(列選通)、數(shù)據(jù)線D0~D15分別于FPGA的地址線A0~A1和數(shù)據(jù)線相連, IS為DSP與FPGA復(fù)位信號(hào),WE為DSP的寫控制信號(hào),當(dāng)需要訪問 FPGA空間時(shí),引腳輸出低電平選通 FPGA。CAP1~CAP3為DSP的事件管理模塊的輸入端口,用于接收編碼器的位置反饋信號(hào)[2]。
圖2 DSP與FPGA接口圖
圖3 FPGA精插補(bǔ)器模塊框圖
對(duì)于FPGA精插補(bǔ)器模塊,其中的關(guān)鍵技術(shù)就是如何實(shí)現(xiàn)占空比為50%整數(shù)分頻和如何實(shí)現(xiàn)特定個(gè)數(shù)的脈沖發(fā)送。在本系統(tǒng)中整數(shù)分頻是由奇數(shù)和偶數(shù)兩種分頻器組成。而實(shí)現(xiàn)特定個(gè)數(shù)的脈沖發(fā)送時(shí),系統(tǒng)設(shè)計(jì)了計(jì)數(shù)模塊,首先通過數(shù)據(jù)總線、地址總線和控制總線,把24位的二進(jìn)制代表脈沖個(gè)數(shù)的數(shù)據(jù)分三次寫到計(jì)數(shù)模塊的三個(gè)8位的寄存器中,然后打開計(jì)數(shù)模塊的計(jì)數(shù)功能,讓其記錄從分頻器中發(fā)出的脈沖個(gè)數(shù),當(dāng)它記錄的脈沖個(gè)數(shù)和設(shè)定的脈沖個(gè)數(shù)相等時(shí),就發(fā)出信號(hào),停止分頻器繼續(xù)發(fā)送脈沖,從而達(dá)到實(shí)現(xiàn)特定個(gè)數(shù)脈沖的發(fā)送功能。FPGA精插補(bǔ)器整體模塊框圖如圖3所示。奇偶分頻選擇(J O X Z)和脈沖比較計(jì)數(shù)(MCBJJS),其內(nèi)部電路及各模塊之間的接線電路如圖4所示。
圖4 FPGA內(nèi)部電路圖
圖中各模塊功能及引腳說明如下[3]:
奇數(shù)分頻器(JSFP)實(shí)現(xiàn)的是以1-65536中的奇數(shù)為參數(shù)的分頻功能,該功能模塊有一個(gè)時(shí)鐘輸入信號(hào)“Clock”管腳,用于接受外部基準(zhǔn)時(shí)鐘信號(hào),最大可以接受32.47MHz的時(shí)鐘信號(hào),參數(shù)輸入通過“Date[15..0]”數(shù)據(jù)總線輸入,“Reset”管腳為復(fù)位管腳,每當(dāng)一次參數(shù)更新時(shí),都要使“Reset”管腳電平為“高”,才能使更新操作有效,但要注意的是:“Reset”管腳電平不能一直為“高”,復(fù)位以后要立刻變?yōu)椤暗汀?,否則輸出為“0”?!癳nable1”為選通使能腳,該信號(hào)由奇偶分頻選擇(JOXZ)寄存器提供。
偶數(shù)分頻器實(shí)現(xiàn)的是以2-65535中的偶數(shù)為參數(shù)的分頻功能其他引腳功能與奇數(shù)分頻器一致。
奇偶分頻選擇(JOXZ)的作用在于:當(dāng)輸入的參數(shù)是奇數(shù)時(shí),就打開奇數(shù)分頻器通道,讓系統(tǒng)輸出的脈沖來自于奇數(shù)分頻器,反之,如果
根據(jù)2.1所述,F(xiàn)PGA內(nèi)部寄存器由四部分組成:奇數(shù)分頻(JSFP)、偶數(shù)分頻(OSFP)、系統(tǒng)輸入的分頻參數(shù)是偶數(shù),就應(yīng)該選擇偶數(shù)分頻器,使系統(tǒng)輸出的脈沖來自于偶數(shù)分頻器。該功能模塊如圖4總圖中的JOXZ模塊。圖中用兩個(gè)輸出信號(hào)分別控制奇數(shù)分頻器和偶數(shù)分頻通道。當(dāng)“jfp” 管腳和“ofp”管腳的輸出電平組合為“10”時(shí),選擇的是奇數(shù)分頻器;當(dāng)為“01”時(shí),選擇的是偶數(shù)分頻器;當(dāng)無操作時(shí),電平組合為“00”,即兩個(gè)分頻器都被關(guān)閉。值得注意的是:這兩個(gè)管腳的輸出電平組合沒有為“11”的狀態(tài),即不可能同時(shí)打開兩個(gè)分頻器。而輸出狀態(tài)是由輸入的“A0”和“reset”兩個(gè)信號(hào)的狀態(tài)控制。當(dāng)“A0”和“reset”的狀態(tài)為“10”時(shí),即開奇數(shù)分頻器通道,當(dāng)為“00”時(shí),即開偶數(shù)分頻器,一旦“reset”的狀態(tài)變?yōu)椤?”時(shí),不管“A0”為什么狀態(tài),則都要關(guān)閉兩個(gè)脈沖輸出通道。
脈沖比較計(jì)數(shù)(MCBJJS)的功能主要是完成對(duì)輸入脈沖的計(jì)數(shù),當(dāng)輸入脈沖個(gè)數(shù)于設(shè)定的個(gè)數(shù)相等時(shí),輸出管腳“out”的電平由“1”變?yōu)椤?”,從而控制三態(tài)門的使能端口“en”,是其處于截止?fàn)顟B(tài),這樣就使得輸出沒有脈沖信號(hào)了,即使系統(tǒng)停止向電機(jī)驅(qū)動(dòng)器發(fā)脈沖。代表計(jì)數(shù)脈沖個(gè)數(shù)的參數(shù)輸入到內(nèi)部三個(gè)八位的寄存器里,然后通過“reset”復(fù)位信號(hào)使該模塊重新以新的參數(shù)計(jì)數(shù),“reset”復(fù)位信號(hào)有效時(shí)為“1”,復(fù)位后要使信號(hào)變?yōu)椤?”,否則該模塊將不能進(jìn)入計(jì)數(shù)狀態(tài),被計(jì)數(shù)的脈沖從“cp”管腳輸入。
系統(tǒng)的脈沖輸出信號(hào)通過三態(tài)門的“OUTMC”提供給外部伺服接口。
計(jì)數(shù)10個(gè)脈沖的仿真波形圖如圖5所示。
圖5 計(jì)數(shù)10個(gè)脈沖的仿真波形圖
在該伺服系統(tǒng)中增量式旋轉(zhuǎn)編碼器主要起到位置及速度反饋的作用。
增量式旋轉(zhuǎn)編碼器通過內(nèi)部?jī)蓚€(gè)光敏接受管轉(zhuǎn)化其角度碼盤的時(shí)序和相位關(guān)系,得到其角度碼盤角度位移量增加(正方向)或減少(負(fù)方向)。在接合數(shù)字電路特別是單片機(jī)后,增量式旋轉(zhuǎn)編碼器在角度測(cè)量和角速度測(cè)量較絕對(duì)式旋轉(zhuǎn)編碼器更具有廉價(jià)和簡(jiǎn)易的優(yōu)勢(shì)。
增量式旋轉(zhuǎn)編碼器工作原理如圖6所示:
圖6 旋轉(zhuǎn)編碼器工作原理圖
其中A、B兩點(diǎn)對(duì)應(yīng)兩個(gè)光敏接受管,A、B兩點(diǎn)間距為S2 ,角度碼盤的光柵間距分別為S0和S1[4]。
當(dāng)角度碼盤以某個(gè)速度勻速轉(zhuǎn)動(dòng)時(shí),那么可知輸出波形圖中的S0:S1:S2比值與實(shí)際圖的S0:S1:S2比值相同,同理角度碼盤以其他的速度勻速轉(zhuǎn)動(dòng)時(shí),輸出波形圖中的S0:S1:S2比值與實(shí)際圖的S0:S1:S2比值仍相同。如果角度碼盤做變速運(yùn)動(dòng),把它看成為多個(gè)運(yùn)動(dòng)周期(在下面定義)的組合,那么每個(gè)運(yùn)動(dòng)周期中輸出波形圖中的S0:S1:S2比值與實(shí)際圖的S0:S1:S2比值仍相同。通過輸出波形圖可知每個(gè)運(yùn)動(dòng)周期的時(shí)序,如表1所示。
表1 運(yùn)動(dòng)周期時(shí)序表
我們把當(dāng)前的A、B輸出值保存起來,與下一個(gè)A、B輸出值做比較,就可以輕易的得出角度碼盤的運(yùn)動(dòng)方向。如果光柵格S0等于S1時(shí),也就是S0和S1弧度夾角相同,且S2等于S0的1/2,那么可得到此次角度碼盤運(yùn)動(dòng)位移角度為S0弧度夾角的1/2,除以所消毫的時(shí)間,就得到此次角度碼盤運(yùn)動(dòng)位移角速度。S0等于S1時(shí),且S2等于S0的1/2時(shí),1/4個(gè)運(yùn)動(dòng)周期就可以得到運(yùn)動(dòng)方向位和位移角度,如果S0不等于S1,S2不等于S0的1/2,那么要1個(gè)運(yùn)動(dòng)周期才可以得到運(yùn)動(dòng)方向位和位移角度了。
由編碼器輸出的六路差分信號(hào),經(jīng)過差分信號(hào)處理芯片AM26LS32ACD及其處理電路,轉(zhuǎn)化為DSP芯片能夠接受的捕獲信號(hào),該差分信號(hào)處理電路如圖7所示[5]。
其中AI+、AI-、BI+、BI-、CI+CI-為編碼器六路輸入信號(hào),CAP1、CAP2、CAP3為提供給DSP的捕捉信號(hào)。
在該系統(tǒng)中,主CPU為DSP控制平臺(tái),主要完成數(shù)字信號(hào)的處理運(yùn)算,它把位置、方向和速度信號(hào)通過數(shù)據(jù)總線寫入FPGA(脈沖發(fā)送模塊)內(nèi)的相關(guān)寄存器,然后發(fā)送啟動(dòng)信號(hào),這樣脈沖發(fā)送模塊會(huì)自動(dòng)完成電動(dòng)機(jī)的定位和調(diào)速,達(dá)到精確的位置和速度控制。該系統(tǒng)用硬件描述語言(VHDL)編寫了精插補(bǔ)器中的各個(gè)功能模塊,并進(jìn)行了功能和時(shí)序仿真,然后把代碼通過專用下載線下載到電路板上的FPGA芯片中進(jìn)行調(diào)試。以下為奇偶分頻選擇器的VHDL語言實(shí)現(xiàn)。
圖7 編碼器差分信號(hào)處理電路
FPGA是一種非常有前途的新技術(shù),很適合于科研工作中的樣機(jī)及新產(chǎn)品的開發(fā)應(yīng)用。本文主要是研究二次插補(bǔ)算法中的精插補(bǔ)器在FPGA中的實(shí)現(xiàn)方法。綜合仿真和實(shí)際測(cè)試表明,設(shè)計(jì)的基于DSP系統(tǒng)的FPGA精插補(bǔ)器能比較靈活方便的控制伺服電機(jī)的速度和方向,達(dá)到了設(shè)計(jì)的要求。
[1] Roche,Stephan.Implement a stepper-motor driver in a CPLDE[J].EDN,2007(2):90.
[2] 劉昌華.數(shù)字邏輯EDA設(shè)計(jì)與實(shí)踐—— MAX+PLUS與Quartus[M].北京:國(guó)防工業(yè)出版社.2006.
[3] 王金明.數(shù)字系統(tǒng)設(shè)計(jì)與Verilog HDL[M].北京:電子工業(yè)出版社,2006.
[4] 曹東杰,韓峰,任云燕.單片機(jī)控制步進(jìn)電機(jī)按S形曲線升降頻設(shè)計(jì)[J].彈箭與制導(dǎo)學(xué)報(bào),2006,26.(2):157- 169.
[5] 孫佐.基于8XC196單片機(jī)的EPA和PTS實(shí)現(xiàn)伺服電機(jī)控制[J].控制與檢測(cè).2005.