(國防科技大學 智能科學學院,湖南 長沙 410073)
隨著計算機技術、自動控制技術和圖像處理技術的快速發展,通過云臺安裝視覺跟蹤裝置、對近地目標進行捕捉辨識的無人機系統應運而生,且廣泛地應用在精確制導、公路巡航、反恐防暴和抗災救援等場合[1]。其中,穩定云臺系統作為搭載任務掛載的平臺,是無人機的一個重要組成部分[2]。沈陽航空航天大學的馮志剛,設計基于ARM的硬件平臺,運用神經網絡云臺控制技術,云臺的姿態角度誤差在±5°以內[3];南京理工大學的王娜,在分析無人機云臺控制系統功能需求的基礎上,提出了一種以STM32F407VGT6為核心的雙處理器硬件設計方案,可以提高整體系統控制的實時性[4];來自北京航空精密機械研究所的聶社云等人 ,設計了一種基于DSP和FPGA的嵌入式運動控制平臺,采用FPGA芯片Nios內核為協處理器實現良好的人機交互控制,并成功應用于一體化轉臺控制系統[5]。
在高精度云臺控制研究中,常常需要對被控對象進行各種關鍵信息采集,如空間姿態、速度及加速度等。隨著芯片及傳感器資源的精度不斷提高,所需要處理的數據速度和容量都大幅提升,而傳統云臺的控制架構大多以微處理器為核心,兼顧數據采集、控制算法以及信號輸出,不得不面對高頻率的中斷響應,由此造成額外需求的操作硬件資源的響應時間會因為中斷優先級別而不斷累加,將會限制伺服算法的復雜度;其次,利用微處理器直接針對一組外設資源進行程序設計,無法多線程處理中斷響應,這樣將會影響數據來源的實時性,不利于編程結構模塊化和功能拓展。本文設計了一種基于DSP+FPGA并行構架的云臺控制電路,具有信號采集速度快、數據傳輸方便、功能可拓展等優點。
控制系統的結構框圖如圖1所示,數據采集由AD采集通道和絕對式編碼器采集通道組成,輸出通道由DA輸出電路構成;FPGA作為系統外設管理核心,起到信號調度和數據緩存功能,通過對板上外設芯片的時序操作,實時讀取并存儲數據信息,并將數字信號向DA電路輸出;DSP作為控制系統算法核心,主要通過讀并行總線來實時獲取采樣數據,預處理后經內部伺服算法獲得控制輸出量,通過數據總線寫向FPGA;擴展通道中為額外功能拓展保留了適當的I/O資源,方便FPGA對其他外設進行管理。

圖1 云臺控制系統結構框圖
目前多通道AD采集芯片的單通道最大吞吐率可達350 kS/s,全通道同步采集時最大吞吐率也可達100 kS/s,若采用DSP直接讀取AD轉換數據,每秒需處理近1600 KB的數據量,采集動作將反復打斷DSP當前運算進程,極大地影響伺服算法的準確實現。為了更好地發揮DSP在伺服控制領域中的高速浮點運算能力,本文將FPGA作為DSP操作數據總線的中繼站,利用其豐富的接口資源和邏輯輸出能力來調度外設,實時采集并以寄存器形式存儲AD轉換結果和絕對式編碼器輸出信號,同時發送到寄存器中用于DA轉換的數字量。
圖2為云臺控制電路的采集/輸出接口連接圖,主要由FPGA、AD、DA及編碼器芯片組成。整體電路以24 V單電源供電,通過金升陽寬壓電源向AD、DA模塊供電±15 V和±5 V,通過德州儀器DC-DC開關穩壓器為DSP與FPGA產生3.3 V和1.2 V電源電壓。

圖2 采集/輸出電路連接圖
本方案中AD模塊采用AD7865芯片,具有4通道同步采樣功能,支持微處理器的高速并行接口連接,是一款低功耗的高速率高精度14位數模轉換器。AD模塊與FPGA之間的數據傳輸通過14位并行數據總線完成,其中低4位為雙向總線,用于配置階段采樣通道設置,高10位為單向總線,在轉換完成后與低4位組成完整的14位數據總線。AD模塊的模擬輸入前端設有調理電路,將輸入電壓適配到模擬輸入最大量程范圍,以求最大發揮轉換精度。
方案中的DA模塊選自ANALOG公司的DAC8412芯片,支持輸入通道雙緩沖模式和讀反饋功能,可以實現與FPGA的高速總線傳輸。通過12位并行數據總線從FPGA獲取數字量信息,以雙緩沖工作方式在同一時間更新4組輸出寄存器內容,實現多路模擬量同步輸出。
絕對式編碼器型號為Netzer DS-37,這是一款輕量化、高精度、高分辨率的旋轉式編碼器,可應用在高溫高濕及各類復雜電磁干擾環境下,支持數字量和模擬量多種接口,本文設計采用SSI接口實現FPGA對編碼器數據的讀取。編碼器輸出信號符合RS422電氣規范,擁有較強的共模干擾抑制能力,通過數字隔離器實現與FPGA管腳信號的隔絕與傳遞,并完成差分信號向單端信號轉換。
圖3為云臺控制系統的數據通信連接圖,主要包含一組單向地址總線和一組雙向數據總線和相關控制信號。核心算法控制采用TI公司DSP芯片TMS320F28335實現。該款芯片在保留原有DSP強大控制能力和信號處理能力等優點的基礎上,增加了浮點運算內核,能夠執行復雜浮點運算,同時節省了代碼執行周期和存儲空間,具有精度高、成本低、功耗小、外設集成度高、數據和程序存儲量大等顯著特點。DSP與FPGA之間通過XINTF接口實現并行通信[6],設計通過XINTF將FPGA的地址空間映射到DSP地址空間,從而使得DSP端可以方便地對FPGA進行數據讀寫。

圖3 XINTF通信接口連接圖
整體設計的邏輯控制采用Altera公司生產的Cyclone-IV系列FPGA芯片EP4CE10E22C8實現。該芯片擁有10320位邏輯單元,2路通用鎖相環,存儲容量高達424 Kb。考慮本文所設計模塊,所消耗的邏輯單元數為1497(消耗比例15%),消耗的I/O口為48(消耗比例52%),消耗內存位245760 b(消耗比例58%),滿足本文平臺控制系統對數模轉換模塊、編碼器采集模塊等的開發需求。芯片擁有144個I/O口,支持LVTTL、LVCMOS等標準電壓規范,直接與外設芯片互聯而無需各類轉換芯片,可以為串口、傳感器等其他功能拓展預留足夠的接口資源。控制系統時鐘源是頻率為30 MHz的無源晶振,經過DSP內核倍頻至150 MHz作為運算系統時鐘,然后四分頻為37.5 MHz至外部接口時鐘XCLKOUT,作為FPGA系統時鐘。
軟件設計流程圖如圖4所示,按照開發方式區別為FPGA設計與DSP設計部分。整個控制過程中,DSP作為運算控制核心,是實現云臺伺服控制的關鍵[7];FPGA作為外設管理核心,主要輔助DSP獲取信息和輸出指令。

圖4 控制系統軟件設計流程圖
DSP部分的程序設計采用自上而下、模塊化的設計思路。當DSP上電復位后,首先完成對系統時鐘、PLL、外設時鐘和看門狗初始化,并對中斷向量表、CPU定時器和一些用戶自定義模塊進行配置。初始化步驟完成后,主程序跳入“空閑”狀態等待定時器中斷響應[8]。定時器的中斷周期設為云臺控制系統的伺服控制周期,每次中斷響應后DSP主程序需要依次完成:通過XINTF從FPGA端獲取AD轉換結果和絕對式編碼器輸出信息,完成濾波降噪預處理并由伺服控制器計算出電機控制指令,通過XINTF向FPGA端輸出DA轉換所需數字量。
FPGA部分的程序設計通過Verilog HDL構建模型框架,在Quartus II 13.0上完成編譯和仿真[9]。系統上電后,首先獲取DSP端發送的時鐘信號與復位信號,對內部寄存器完成初始化后,FPGA進入并行工作狀態,利用其豐富的管腳資源和強大的邏輯輸出能力,同時進行3個信息流處理:對AD模塊的時序控制和數字量采集、絕對式編碼器的CLK信號發生和DATA數據接收、對DA模塊的時序控制和數字量輸入。其中,AD轉換結果、編碼器信息和DA轉換輸入都通過線網變量存儲至公共變量區,通過對DSP輸出管腳XRD、XWE0及ZXCS0電平檢測,識別當前DSP是處于讀請求還是寫請求狀態。若是讀操作,則讀選通信號XRD被拉低,同時將數據鎖存進DSP;反之,寫選通信號XWE被拉低,將數據送到數據總線上。
結合豐富的硬件資源,本文所提出的電路設計包含諸多軟件設計內容,現以其中編碼器讀取部分和XINTF通信部分為例來具體說明。
SSI通信協議為同步串行接口(Synchronous Serial Interface)的縮寫[10]。這是一種主機主動式的同步傳輸方式,在主機所發出的時鐘控制下,編碼器遵循一定的幀格式按有效位從高至低傳輸,相比總線式的傳輸方式具有安裝方便和經濟實用的顯著特點。本文所設計SSI采集程序原理圖如圖5所示。頂層模塊內封裝3個子模塊:模塊u1周期性生成1 MHz的同步時鐘信號,每個操作周期結束后發出一個脈沖代表時鐘生成完畢;模塊u2對u1所輸出時鐘信號的上升沿進行捕捉,每次捕捉成功則發出一個完成標志位L2H_sig;模塊u3每收到一次L2H_sig,對數據信號線上的電平進行捕捉,并將串行結果轉為并行數據向頂層模塊輸出。

圖5 SSI協議采集原理圖
在使用XINTF進行外部存儲接口拓展時[8],DSP共有3個外部存儲區域可供用戶訪問。本文所選的訪問區域為Zone0,其對應訪問地址為:0x0000_4000~0x0000_4FFF,對應片選信號為XZCS0。任何對XINTF區域的讀寫訪問的時序都可以分為3個階段,即建立、跟蹤和激活。XTIMING寄存器中可設置訪問過程中每個階段等待狀態的XTIMCLK數。在建立階段,所訪問區域Zone0的片選信號拉低,對應空間的訪問地址被發送到地址總線XA上;激活階段,對應讀(寫)訪問的選通信號XRD(XWE0)被拉低,由于不采用XREADY信號,激活周期等于1個XTIMCLK周期加上相應的XTIMING寄存器指定的周期數;跟蹤階段,讀寫選通信號被拉高,而片選信號繼續保持一段時間的低電平。
通過擴展DSP訪問空間的數據總線實質上是一組雙向數據線,故Verilog建模中并聯總線端口被定義為inout型[11]。inout變量在FPGA硬件中一般用三態門來實現,數據方向通過對總線方向標志位inout_flag的條件判斷語句決定,從而設置數據總線XD是輸出數據還是處于高阻態。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寫數據
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讀數據
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
本文所設計云臺控制電路是以FPGA為外設管理核心,因此需要通過SignalTapII邏輯分析儀來對FPGA的I/O管腳進行邏輯監視[12],以此來判斷FPGA是否執行了正確的時序操作。
圖6為FPGA通過SSI通信方式采集過程中,通過SignalTap II捕捉到的兩次相鄰周期的關鍵信號時序圖,主要反映編碼器工作時SSI驅動時鐘電平變化、SSI數據寄存器更新以及狀態機內容等。結合圖5的SSI采集原理圖可以看出,在每次捕捉到時鐘信號ssi_clk后,FPGA通過狀態機order的順序引導,將當前數據線data上的電平狀態按照從高至低的順序保存至SSI輸出結果的寄存器rssi_clk當中,并在采集完成信號ssi_done_sig拉高之前將內容輸出。在一次采集時鐘序列結束時,SSI輸出信號在最后一個時鐘下降沿進入單穩態時間,編碼器輸出寄存器被復位,準備下一次采集的時鐘序列到來。輸出變量ssi_data的更新動作發生在采集周期末,因此前一周期的采集結果會在采集周期內保存,直到所有位數據采集完成并覆蓋原始數據。經過測量,本文SSI采集方法的數據測量刷新頻率可以達到22.76 kHz。
XINTF作為DSP伺服控制算法的數據接口,在云臺控制系統中承擔著數據傳輸的重要地位,因此對其功能實驗也格外重要。圖7和圖8為對XINTF通信功能實現的測試結果,主要反映地址總線與數據總線的實時內容與DSP映射地址內的變量內容。DSP在CPU定時器中斷響應程序中依順序執行:讀AD轉換通道1、通道2,讀SSI采集通道1、通道2,寫DA轉換通道1、通道2。從邏輯分析儀采集的時序圖中可以看出,XRD和XWE選通信號分別被先后拉低4次和2次。FPGA在確認地址線XA_in的地址信息之后,將對應的數據送入數據總線XD_inout,經對比在傳輸過程中數據信息完整無損壞。經過測量,DSP通過以上步驟進行數據交流需用時2.4 μm。

圖6 相鄰周期內SSI通信協議信號采集時序

圖7 XINTF通信信號采集時序圖

圖8 CCS端變量觀察器
本文充分利用FPGA并行操作優勢及其強大邏輯輸出能力,在現有以DSP為單核心的云臺控制電路基礎上進行優化設計,輔以FPGA作為數據處理核心和數據緩沖區,提高了系統處理輸入采集量和輸出控制量的精確性和實時性。經過實驗驗證,該電路設計可以對絕對編碼器進行高速精準采集,并且通過XINTF實現雙核心間重要數據交流。該設計能夠廣泛應用在云臺穩定控制領域,為無人機視覺系統提供精確、快速的數字平臺。