(國(guó)防科技大學(xué) 智能科學(xué)學(xué)院,湖南 長(zhǎng)沙 410073)
隨著計(jì)算機(jī)技術(shù)、自動(dòng)控制技術(shù)和圖像處理技術(shù)的快速發(fā)展,通過云臺(tái)安裝視覺跟蹤裝置、對(duì)近地目標(biāo)進(jìn)行捕捉辨識(shí)的無(wú)人機(jī)系統(tǒng)應(yīng)運(yùn)而生,且廣泛地應(yīng)用在精確制導(dǎo)、公路巡航、反恐防暴和抗災(zāi)救援等場(chǎng)合[1]。其中,穩(wěn)定云臺(tái)系統(tǒng)作為搭載任務(wù)掛載的平臺(tái),是無(wú)人機(jī)的一個(gè)重要組成部分[2]。沈陽(yáng)航空航天大學(xué)的馮志剛,設(shè)計(jì)基于ARM的硬件平臺(tái),運(yùn)用神經(jīng)網(wǎng)絡(luò)云臺(tái)控制技術(shù),云臺(tái)的姿態(tài)角度誤差在±5°以內(nèi)[3];南京理工大學(xué)的王娜,在分析無(wú)人機(jī)云臺(tái)控制系統(tǒng)功能需求的基礎(chǔ)上,提出了一種以STM32F407VGT6為核心的雙處理器硬件設(shè)計(jì)方案,可以提高整體系統(tǒng)控制的實(shí)時(shí)性[4];來自北京航空精密機(jī)械研究所的聶社云等人 ,設(shè)計(jì)了一種基于DSP和FPGA的嵌入式運(yùn)動(dòng)控制平臺(tái),采用FPGA芯片Nios內(nèi)核為協(xié)處理器實(shí)現(xiàn)良好的人機(jī)交互控制,并成功應(yīng)用于一體化轉(zhuǎn)臺(tái)控制系統(tǒng)[5]。
在高精度云臺(tái)控制研究中,常常需要對(duì)被控對(duì)象進(jìn)行各種關(guān)鍵信息采集,如空間姿態(tài)、速度及加速度等。隨著芯片及傳感器資源的精度不斷提高,所需要處理的數(shù)據(jù)速度和容量都大幅提升,而傳統(tǒng)云臺(tái)的控制架構(gòu)大多以微處理器為核心,兼顧數(shù)據(jù)采集、控制算法以及信號(hào)輸出,不得不面對(duì)高頻率的中斷響應(yīng),由此造成額外需求的操作硬件資源的響應(yīng)時(shí)間會(huì)因?yàn)橹袛鄡?yōu)先級(jí)別而不斷累加,將會(huì)限制伺服算法的復(fù)雜度;其次,利用微處理器直接針對(duì)一組外設(shè)資源進(jìn)行程序設(shè)計(jì),無(wú)法多線程處理中斷響應(yīng),這樣將會(huì)影響數(shù)據(jù)來源的實(shí)時(shí)性,不利于編程結(jié)構(gòu)模塊化和功能拓展。本文設(shè)計(jì)了一種基于DSP+FPGA并行構(gòu)架的云臺(tái)控制電路,具有信號(hào)采集速度快、數(shù)據(jù)傳輸方便、功能可拓展等優(yōu)點(diǎn)。
控制系統(tǒng)的結(jié)構(gòu)框圖如圖1所示,數(shù)據(jù)采集由AD采集通道和絕對(duì)式編碼器采集通道組成,輸出通道由DA輸出電路構(gòu)成;FPGA作為系統(tǒng)外設(shè)管理核心,起到信號(hào)調(diào)度和數(shù)據(jù)緩存功能,通過對(duì)板上外設(shè)芯片的時(shí)序操作,實(shí)時(shí)讀取并存儲(chǔ)數(shù)據(jù)信息,并將數(shù)字信號(hào)向DA電路輸出;DSP作為控制系統(tǒng)算法核心,主要通過讀并行總線來實(shí)時(shí)獲取采樣數(shù)據(jù),預(yù)處理后經(jīng)內(nèi)部伺服算法獲得控制輸出量,通過數(shù)據(jù)總線寫向FPGA;擴(kuò)展通道中為額外功能拓展保留了適當(dāng)?shù)腎/O資源,方便FPGA對(duì)其他外設(shè)進(jìn)行管理。
圖1 云臺(tái)控制系統(tǒng)結(jié)構(gòu)框圖
目前多通道AD采集芯片的單通道最大吞吐率可達(dá)350 kS/s,全通道同步采集時(shí)最大吞吐率也可達(dá)100 kS/s,若采用DSP直接讀取AD轉(zhuǎn)換數(shù)據(jù),每秒需處理近1600 KB的數(shù)據(jù)量,采集動(dòng)作將反復(fù)打斷DSP當(dāng)前運(yùn)算進(jìn)程,極大地影響伺服算法的準(zhǔn)確實(shí)現(xiàn)。為了更好地發(fā)揮DSP在伺服控制領(lǐng)域中的高速浮點(diǎn)運(yùn)算能力,本文將FPGA作為DSP操作數(shù)據(jù)總線的中繼站,利用其豐富的接口資源和邏輯輸出能力來調(diào)度外設(shè),實(shí)時(shí)采集并以寄存器形式存儲(chǔ)AD轉(zhuǎn)換結(jié)果和絕對(duì)式編碼器輸出信號(hào),同時(shí)發(fā)送到寄存器中用于DA轉(zhuǎn)換的數(shù)字量。
圖2為云臺(tái)控制電路的采集/輸出接口連接圖,主要由FPGA、AD、DA及編碼器芯片組成。整體電路以24 V單電源供電,通過金升陽(yáng)寬壓電源向AD、DA模塊供電±15 V和±5 V,通過德州儀器DC-DC開關(guān)穩(wěn)壓器為DSP與FPGA產(chǎn)生3.3 V和1.2 V電源電壓。
圖2 采集/輸出電路連接圖
本方案中AD模塊采用AD7865芯片,具有4通道同步采樣功能,支持微處理器的高速并行接口連接,是一款低功耗的高速率高精度14位數(shù)模轉(zhuǎn)換器。AD模塊與FPGA之間的數(shù)據(jù)傳輸通過14位并行數(shù)據(jù)總線完成,其中低4位為雙向總線,用于配置階段采樣通道設(shè)置,高10位為單向總線,在轉(zhuǎn)換完成后與低4位組成完整的14位數(shù)據(jù)總線。AD模塊的模擬輸入前端設(shè)有調(diào)理電路,將輸入電壓適配到模擬輸入最大量程范圍,以求最大發(fā)揮轉(zhuǎn)換精度。
方案中的DA模塊選自ANALOG公司的DAC8412芯片,支持輸入通道雙緩沖模式和讀反饋功能,可以實(shí)現(xiàn)與FPGA的高速總線傳輸。通過12位并行數(shù)據(jù)總線從FPGA獲取數(shù)字量信息,以雙緩沖工作方式在同一時(shí)間更新4組輸出寄存器內(nèi)容,實(shí)現(xiàn)多路模擬量同步輸出。
絕對(duì)式編碼器型號(hào)為Netzer DS-37,這是一款輕量化、高精度、高分辨率的旋轉(zhuǎn)式編碼器,可應(yīng)用在高溫高濕及各類復(fù)雜電磁干擾環(huán)境下,支持?jǐn)?shù)字量和模擬量多種接口,本文設(shè)計(jì)采用SSI接口實(shí)現(xiàn)FPGA對(duì)編碼器數(shù)據(jù)的讀取。編碼器輸出信號(hào)符合RS422電氣規(guī)范,擁有較強(qiáng)的共模干擾抑制能力,通過數(shù)字隔離器實(shí)現(xiàn)與FPGA管腳信號(hào)的隔絕與傳遞,并完成差分信號(hào)向單端信號(hào)轉(zhuǎn)換。
圖3為云臺(tái)控制系統(tǒng)的數(shù)據(jù)通信連接圖,主要包含一組單向地址總線和一組雙向數(shù)據(jù)總線和相關(guān)控制信號(hào)。核心算法控制采用TI公司DSP芯片TMS320F28335實(shí)現(xiàn)。該款芯片在保留原有DSP強(qiáng)大控制能力和信號(hào)處理能力等優(yōu)點(diǎn)的基礎(chǔ)上,增加了浮點(diǎn)運(yùn)算內(nèi)核,能夠執(zhí)行復(fù)雜浮點(diǎn)運(yùn)算,同時(shí)節(jié)省了代碼執(zhí)行周期和存儲(chǔ)空間,具有精度高、成本低、功耗小、外設(shè)集成度高、數(shù)據(jù)和程序存儲(chǔ)量大等顯著特點(diǎn)。DSP與FPGA之間通過XINTF接口實(shí)現(xiàn)并行通信[6],設(shè)計(jì)通過XINTF將FPGA的地址空間映射到DSP地址空間,從而使得DSP端可以方便地對(duì)FPGA進(jìn)行數(shù)據(jù)讀寫。
圖3 XINTF通信接口連接圖
整體設(shè)計(jì)的邏輯控制采用Altera公司生產(chǎn)的Cyclone-IV系列FPGA芯片EP4CE10E22C8實(shí)現(xiàn)。該芯片擁有10320位邏輯單元,2路通用鎖相環(huán),存儲(chǔ)容量高達(dá)424 Kb??紤]本文所設(shè)計(jì)模塊,所消耗的邏輯單元數(shù)為1497(消耗比例15%),消耗的I/O口為48(消耗比例52%),消耗內(nèi)存位245760 b(消耗比例58%),滿足本文平臺(tái)控制系統(tǒng)對(duì)數(shù)模轉(zhuǎn)換模塊、編碼器采集模塊等的開發(fā)需求。芯片擁有144個(gè)I/O口,支持LVTTL、LVCMOS等標(biāo)準(zhǔn)電壓規(guī)范,直接與外設(shè)芯片互聯(lián)而無(wú)需各類轉(zhuǎn)換芯片,可以為串口、傳感器等其他功能拓展預(yù)留足夠的接口資源??刂葡到y(tǒng)時(shí)鐘源是頻率為30 MHz的無(wú)源晶振,經(jīng)過DSP內(nèi)核倍頻至150 MHz作為運(yùn)算系統(tǒng)時(shí)鐘,然后四分頻為37.5 MHz至外部接口時(shí)鐘XCLKOUT,作為FPGA系統(tǒng)時(shí)鐘。
軟件設(shè)計(jì)流程圖如圖4所示,按照開發(fā)方式區(qū)別為FPGA設(shè)計(jì)與DSP設(shè)計(jì)部分。整個(gè)控制過程中,DSP作為運(yùn)算控制核心,是實(shí)現(xiàn)云臺(tái)伺服控制的關(guān)鍵[7];FPGA作為外設(shè)管理核心,主要輔助DSP獲取信息和輸出指令。
圖4 控制系統(tǒng)軟件設(shè)計(jì)流程圖
DSP部分的程序設(shè)計(jì)采用自上而下、模塊化的設(shè)計(jì)思路。當(dāng)DSP上電復(fù)位后,首先完成對(duì)系統(tǒng)時(shí)鐘、PLL、外設(shè)時(shí)鐘和看門狗初始化,并對(duì)中斷向量表、CPU定時(shí)器和一些用戶自定義模塊進(jìn)行配置。初始化步驟完成后,主程序跳入“空閑”狀態(tài)等待定時(shí)器中斷響應(yīng)[8]。定時(shí)器的中斷周期設(shè)為云臺(tái)控制系統(tǒng)的伺服控制周期,每次中斷響應(yīng)后DSP主程序需要依次完成:通過XINTF從FPGA端獲取AD轉(zhuǎn)換結(jié)果和絕對(duì)式編碼器輸出信息,完成濾波降噪預(yù)處理并由伺服控制器計(jì)算出電機(jī)控制指令,通過XINTF向FPGA端輸出DA轉(zhuǎn)換所需數(shù)字量。
FPGA部分的程序設(shè)計(jì)通過Verilog HDL構(gòu)建模型框架,在Quartus II 13.0上完成編譯和仿真[9]。系統(tǒng)上電后,首先獲取DSP端發(fā)送的時(shí)鐘信號(hào)與復(fù)位信號(hào),對(duì)內(nèi)部寄存器完成初始化后,F(xiàn)PGA進(jìn)入并行工作狀態(tài),利用其豐富的管腳資源和強(qiáng)大的邏輯輸出能力,同時(shí)進(jìn)行3個(gè)信息流處理:對(duì)AD模塊的時(shí)序控制和數(shù)字量采集、絕對(duì)式編碼器的CLK信號(hào)發(fā)生和DATA數(shù)據(jù)接收、對(duì)DA模塊的時(shí)序控制和數(shù)字量輸入。其中,AD轉(zhuǎn)換結(jié)果、編碼器信息和DA轉(zhuǎn)換輸入都通過線網(wǎng)變量存儲(chǔ)至公共變量區(qū),通過對(duì)DSP輸出管腳XRD、XWE0及ZXCS0電平檢測(cè),識(shí)別當(dāng)前DSP是處于讀請(qǐng)求還是寫請(qǐng)求狀態(tài)。若是讀操作,則讀選通信號(hào)XRD被拉低,同時(shí)將數(shù)據(jù)鎖存進(jìn)DSP;反之,寫選通信號(hào)XWE被拉低,將數(shù)據(jù)送到數(shù)據(jù)總線上。
結(jié)合豐富的硬件資源,本文所提出的電路設(shè)計(jì)包含諸多軟件設(shè)計(jì)內(nèi)容,現(xiàn)以其中編碼器讀取部分和XINTF通信部分為例來具體說明。
SSI通信協(xié)議為同步串行接口(Synchronous Serial Interface)的縮寫[10]。這是一種主機(jī)主動(dòng)式的同步傳輸方式,在主機(jī)所發(fā)出的時(shí)鐘控制下,編碼器遵循一定的幀格式按有效位從高至低傳輸,相比總線式的傳輸方式具有安裝方便和經(jīng)濟(jì)實(shí)用的顯著特點(diǎn)。本文所設(shè)計(jì)SSI采集程序原理圖如圖5所示。頂層模塊內(nèi)封裝3個(gè)子模塊:模塊u1周期性生成1 MHz的同步時(shí)鐘信號(hào),每個(gè)操作周期結(jié)束后發(fā)出一個(gè)脈沖代表時(shí)鐘生成完畢;模塊u2對(duì)u1所輸出時(shí)鐘信號(hào)的上升沿進(jìn)行捕捉,每次捕捉成功則發(fā)出一個(gè)完成標(biāo)志位L2H_sig;模塊u3每收到一次L2H_sig,對(duì)數(shù)據(jù)信號(hào)線上的電平進(jìn)行捕捉,并將串行結(jié)果轉(zhuǎn)為并行數(shù)據(jù)向頂層模塊輸出。
圖5 SSI協(xié)議采集原理圖
在使用XINTF進(jìn)行外部存儲(chǔ)接口拓展時(shí)[8],DSP共有3個(gè)外部存儲(chǔ)區(qū)域可供用戶訪問。本文所選的訪問區(qū)域?yàn)閆one0,其對(duì)應(yīng)訪問地址為:0x0000_4000~0x0000_4FFF,對(duì)應(yīng)片選信號(hào)為XZCS0。任何對(duì)XINTF區(qū)域的讀寫訪問的時(shí)序都可以分為3個(gè)階段,即建立、跟蹤和激活。XTIMING寄存器中可設(shè)置訪問過程中每個(gè)階段等待狀態(tài)的XTIMCLK數(shù)。在建立階段,所訪問區(qū)域Zone0的片選信號(hào)拉低,對(duì)應(yīng)空間的訪問地址被發(fā)送到地址總線XA上;激活階段,對(duì)應(yīng)讀(寫)訪問的選通信號(hào)XRD(XWE0)被拉低,由于不采用XREADY信號(hào),激活周期等于1個(gè)XTIMCLK周期加上相應(yīng)的XTIMING寄存器指定的周期數(shù);跟蹤階段,讀寫選通信號(hào)被拉高,而片選信號(hào)繼續(xù)保持一段時(shí)間的低電平。
通過擴(kuò)展DSP訪問空間的數(shù)據(jù)總線實(shí)質(zhì)上是一組雙向數(shù)據(jù)線,故Verilog建模中并聯(lián)總線端口被定義為inout型[11]。inout變量在FPGA硬件中一般用三態(tài)門來實(shí)現(xiàn),數(shù)據(jù)方向通過對(duì)總線方向標(biāo)志位inout_flag的條件判斷語(yǔ)句決定,從而設(shè)置數(shù)據(jù)總線XD是輸出數(shù)據(jù)還是處于高阻態(tài)。XINTF通信部分代碼如下,其中部分端口和寄存器定義語(yǔ)句已省略。
always@(posedge clk or negedge rstn)
if (!rstn)
begin
inout_flag <= 1′b0;
XD_out <= 16′b0;
//da輸入寄存器初始化
XD_in1 <= 16′b0;
XD_in2 <= 16′b0;
XD_in3 <= 16′b0;
XD_in4 <= 16′b0;
//ad輸出寄存器初始化
data_tx1 <= 16′h0000;
data_tx2 <= 16′h0000;
data_tx3 <= 16′h0000;
data_tx4 <= 16′h0000;
//ssi輸出寄存器初始化
data_tx5 <= 16′h2222;
data_tx6 <= 16′h2222;
end
else if (!(XWE) && !(XZCS0))
//DSP向FPGA寫數(shù)據(jù)
begin
inout_flag <= 1′b0;
case(XA_in)
//讀地址總線
da_addr1:XD_in1 <= XD_inout;
da_addr2:XD_in2 <= XD_inout;
da_addr3:XD_in3 <= XD_inout;
da_addr4:XD_in4 <= XD_inout;
endcase
end
else if (!(XRD) && !(XZCS0))
//DSP從FPGA讀數(shù)據(jù)
begin
inout_flag <= 1′b1;
case(XA_in)
ad_addr1:XD_out <= data_tx1;
ad_addr2:XD_out <= data_tx2;
ad_addr3:XD_out <= data_tx3;
ad_addr4:XD_out <= data_tx4;
ssi_addr1:XD_out <= data_tx5;
ssi_addr2:XD_out <= data_tx6;
endcase
end
本文所設(shè)計(jì)云臺(tái)控制電路是以FPGA為外設(shè)管理核心,因此需要通過SignalTapII邏輯分析儀來對(duì)FPGA的I/O管腳進(jìn)行邏輯監(jiān)視[12],以此來判斷FPGA是否執(zhí)行了正確的時(shí)序操作。
圖6為FPGA通過SSI通信方式采集過程中,通過SignalTap II捕捉到的兩次相鄰周期的關(guān)鍵信號(hào)時(shí)序圖,主要反映編碼器工作時(shí)SSI驅(qū)動(dòng)時(shí)鐘電平變化、SSI數(shù)據(jù)寄存器更新以及狀態(tài)機(jī)內(nèi)容等。結(jié)合圖5的SSI采集原理圖可以看出,在每次捕捉到時(shí)鐘信號(hào)ssi_clk后,F(xiàn)PGA通過狀態(tài)機(jī)order的順序引導(dǎo),將當(dāng)前數(shù)據(jù)線data上的電平狀態(tài)按照從高至低的順序保存至SSI輸出結(jié)果的寄存器rssi_clk當(dāng)中,并在采集完成信號(hào)ssi_done_sig拉高之前將內(nèi)容輸出。在一次采集時(shí)鐘序列結(jié)束時(shí),SSI輸出信號(hào)在最后一個(gè)時(shí)鐘下降沿進(jìn)入單穩(wěn)態(tài)時(shí)間,編碼器輸出寄存器被復(fù)位,準(zhǔn)備下一次采集的時(shí)鐘序列到來。輸出變量ssi_data的更新動(dòng)作發(fā)生在采集周期末,因此前一周期的采集結(jié)果會(huì)在采集周期內(nèi)保存,直到所有位數(shù)據(jù)采集完成并覆蓋原始數(shù)據(jù)。經(jīng)過測(cè)量,本文SSI采集方法的數(shù)據(jù)測(cè)量刷新頻率可以達(dá)到22.76 kHz。
XINTF作為DSP伺服控制算法的數(shù)據(jù)接口,在云臺(tái)控制系統(tǒng)中承擔(dān)著數(shù)據(jù)傳輸?shù)闹匾匚?,因此?duì)其功能實(shí)驗(yàn)也格外重要。圖7和圖8為對(duì)XINTF通信功能實(shí)現(xiàn)的測(cè)試結(jié)果,主要反映地址總線與數(shù)據(jù)總線的實(shí)時(shí)內(nèi)容與DSP映射地址內(nèi)的變量?jī)?nèi)容。DSP在CPU定時(shí)器中斷響應(yīng)程序中依順序執(zhí)行:讀AD轉(zhuǎn)換通道1、通道2,讀SSI采集通道1、通道2,寫DA轉(zhuǎn)換通道1、通道2。從邏輯分析儀采集的時(shí)序圖中可以看出,XRD和XWE選通信號(hào)分別被先后拉低4次和2次。FPGA在確認(rèn)地址線XA_in的地址信息之后,將對(duì)應(yīng)的數(shù)據(jù)送入數(shù)據(jù)總線XD_inout,經(jīng)對(duì)比在傳輸過程中數(shù)據(jù)信息完整無(wú)損壞。經(jīng)過測(cè)量,DSP通過以上步驟進(jìn)行數(shù)據(jù)交流需用時(shí)2.4 μm。
圖6 相鄰周期內(nèi)SSI通信協(xié)議信號(hào)采集時(shí)序
圖7 XINTF通信信號(hào)采集時(shí)序圖
圖8 CCS端變量觀察器
本文充分利用FPGA并行操作優(yōu)勢(shì)及其強(qiáng)大邏輯輸出能力,在現(xiàn)有以DSP為單核心的云臺(tái)控制電路基礎(chǔ)上進(jìn)行優(yōu)化設(shè)計(jì),輔以FPGA作為數(shù)據(jù)處理核心和數(shù)據(jù)緩沖區(qū),提高了系統(tǒng)處理輸入采集量和輸出控制量的精確性和實(shí)時(shí)性。經(jīng)過實(shí)驗(yàn)驗(yàn)證,該電路設(shè)計(jì)可以對(duì)絕對(duì)編碼器進(jìn)行高速精準(zhǔn)采集,并且通過XINTF實(shí)現(xiàn)雙核心間重要數(shù)據(jù)交流。該設(shè)計(jì)能夠廣泛應(yīng)用在云臺(tái)穩(wěn)定控制領(lǐng)域,為無(wú)人機(jī)視覺系統(tǒng)提供精確、快速的數(shù)字平臺(tái)。