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