<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          作者: 時間:2016-10-22 來源:網(wǎng)絡(luò) 收藏

          摘要:針對在舵機、導(dǎo)引頭、慣導(dǎo)等彈上設(shè)備日益數(shù)字化的趨勢下飛控系統(tǒng)的需求,提出了一種基于結(jié)構(gòu)的通用飛控計算機平臺。結(jié)構(gòu)能發(fā)揮兩種處理芯片各自的優(yōu)勢,而且具有良好的通用性和擴展性。針對多個外部設(shè)備問題,采用2個交替工作的方法,保證各彈上設(shè)備數(shù)據(jù)幀的同步和完整連續(xù)。通過半實物仿真系統(tǒng)的驗證,飛控計算機性能良好,性能滿足設(shè)計要求。

          本文引用地址:http://www.ex-cimer.com/article/201610/309283.htm

          關(guān)鍵詞:;;;

          飛控計算機是現(xiàn)代導(dǎo)彈制導(dǎo)與控制系統(tǒng)的核心裝置,其性能的好壞直接關(guān)系到精確制導(dǎo)的精度和殺傷目標的概率。近年來舵機、導(dǎo)引頭、慣導(dǎo)等彈載設(shè)備日益向著數(shù)字化方向發(fā)展,因此設(shè)計一種能兼容多數(shù)字式設(shè)備的通用飛控計算機平臺尤為重要。傳統(tǒng)的單處理器核心飛控計算機難以在多通道異步數(shù)據(jù)收發(fā)的同時保證數(shù)據(jù)處理速度,難以滿足現(xiàn)代導(dǎo)彈的要求。本文提出了一種基于DSP+FPGA結(jié)構(gòu),對外接口為422的通用數(shù)字飛控計算機平臺。此平臺能充分發(fā)揮DSP的運算速度,實現(xiàn)飛控算法。采用基于FPGA的雙RAM緩沖機制,能很好地解決異步串行數(shù)據(jù)實時同步數(shù)據(jù)處理問題,滿足飛控系統(tǒng)需求。

          1 設(shè)計思想和工作原理

          1.1 設(shè)計思想

          對于單DSP核心的飛控計算機,要收發(fā)多路異步串行數(shù)據(jù)就會占用多路中斷,導(dǎo)致中斷響應(yīng)不及時造成數(shù)據(jù)丟失。同時多路中斷也會影響到數(shù)據(jù)傳輸?shù)膶崟r性。飛控計算機對數(shù)據(jù)的完整性和實時性要求較高,傳統(tǒng)單DSP核心不能滿足彈上多數(shù)字式設(shè)備的要求。由于FPGA具有強大的并行處理能力,所以采用增加一片F(xiàn)PGA用于異步串行數(shù)據(jù)的收發(fā)的方法彌補單DSP核心的缺陷。DSP+FPGA的結(jié)構(gòu)能將DSP從繁瑣的外部接口管理中解放出來,充分發(fā)揮DSP的運算優(yōu)勢,提高運算效率的同時易于維護和擴展。

          1.2 飛控計算機工作原理

          飛控計算機的一般工作過程如下:飛控計算機上電之后進行自檢,向載機發(fā)出“導(dǎo)彈存在”指令。飛控計算機接收載機的裝訂信息,完成初始對準,并且向載機發(fā)出“允許發(fā)射”指令。當導(dǎo)引頭探測到目標向飛控計算機發(fā)出導(dǎo)引數(shù)據(jù)時,飛控計算機向載機發(fā)出“目標截獲”指令。載機經(jīng)過判斷決策,向飛控計算機給出“發(fā)射”指令。發(fā)射之后,飛控計算機進行飛行時間計時,并開始按照已有的控制率,結(jié)合慣導(dǎo)和導(dǎo)引頭輸入進行飛控解算,得出四路舵機控制信號信號,控制導(dǎo)彈運動;并將接收到慣導(dǎo)數(shù)據(jù)、導(dǎo)引頭數(shù)據(jù)、舵控量等內(nèi)容組成遙測信息,發(fā)送給觀測人員。

          2 結(jié)構(gòu)和硬件設(shè)計

          根據(jù)飛控計算機工作原理,它具備以下功能:

          能夠收發(fā)裝訂、慣導(dǎo)、導(dǎo)引頭和遙測等數(shù)據(jù);

          能夠?qū)崿F(xiàn)導(dǎo)引率,完成導(dǎo)航數(shù)據(jù)解算功能;

          能夠控制執(zhí)行機構(gòu)——舵機。

          RS422通信協(xié)議具有抗干擾能力強,傳輸距離遠,實現(xiàn)簡單的特點,已經(jīng)被各種數(shù)字設(shè)備廣泛采用。本彈載機對外通信接口均采用422通信協(xié)議。根據(jù)飛控計算機的功能可以得出,此系統(tǒng)至少應(yīng)該包含裝訂、慣導(dǎo)、導(dǎo)引頭、遙測數(shù)據(jù)的收發(fā)和舵機控制5路數(shù)據(jù)通信。由于彈載機工作時收發(fā)“導(dǎo)彈存在”、“目標截獲”、“允許發(fā)射”等開關(guān)量,還需要開關(guān)量的輸入輸出。故FPGA對外的接口共包括5路RS422和8位DIO通信接口。系統(tǒng)結(jié)構(gòu)簡圖如圖1所示(圖中XINTF接口和的說明見本文第4部分)。

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          DSP選用TI公司的高性能浮點處理器TMS320F28335,150 MHz主頻,性能相比于2812有大幅提升,廣泛應(yīng)用于控制系統(tǒng)。FPGA選用ALTERA的Cyclone II系列,完全滿足應(yīng)用需求。DSP+FPGA組成的最小系統(tǒng)主要由電源、復(fù)位電路、晶振、燒寫接口等部分組成。電源芯片選用TPS7 67D301PWP,可以為DSP提供3.3 V的工作電壓和1.9 V的內(nèi)核電壓;FPGA的內(nèi)核電壓由ASM1117-1.2穩(wěn)壓得到。DSP復(fù)位芯片采用MAX809S,晶振采用30 MHz的有源晶振;FPGA用50 MHz的有源晶振。配置芯片選用EPCS1,容量為1M bits,用AS模式燒寫。

          對外的RS422接口采用MAX3491協(xié)議芯片實現(xiàn)。MAX3491將FPGA的TTL電平轉(zhuǎn)換成422差分電平,和彈上設(shè)備通信。由于FPGA引腳的驅(qū)動能力弱,因此對外的8位DIO采用74LN244芯片,增強驅(qū)動能力。

          3 軟件設(shè)計

          DSP通過XINTF接口與FPGA通信。DSP將地址傳遞給FPGA,F(xiàn)PGA經(jīng)過地址譯碼操作對應(yīng)外部設(shè)備數(shù)據(jù)。

          3.1 FPGA軟件設(shè)計

          FPGA主要功能是完成5路RS422串口數(shù)據(jù)的同時收發(fā)操作開關(guān)量的輸入和輸出,并和DSP交換數(shù)據(jù)。FPGA可使用進程語句實現(xiàn)并行運行,對各外設(shè)的操作都是實時并行的,相互之間沒有影響。

          3.1.1 串口通信

          先將時鐘通過分頻得到8倍于波特率的串口時鐘。數(shù)據(jù)接收時,根據(jù)串口通信的特點,首先判斷低電平起始位。檢測到起始位之后,按照嚴格地每八個時鐘一位的關(guān)系采集一個字節(jié)8位的電平。由于噪聲的存在可能會導(dǎo)致采集到的瞬時電平有誤,此時采用表決機制,即在8個時鐘期間采樣3次,以其中2次相同的電平為準。實驗證明,表決機制能極大排除隨即噪聲干擾,降低串行通信的誤碼率。接收到數(shù)據(jù)之后存儲在對應(yīng)的雙端口RAM中,等待DSP讀取。串口數(shù)據(jù)接受流程如圖2所示。

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          數(shù)據(jù)發(fā)送時先從雙端口RAM中讀出需要發(fā)送的數(shù)據(jù),按照串口時鐘,先發(fā)送起始位(低電平),再依次通過移位寄存器將8位的數(shù)據(jù)轉(zhuǎn)換成串行的‘0’/‘1’發(fā)出。主要由下面語句實現(xiàn):

          txd=txd_buf(0);

          txd_buf(6 downto 0)=txd_buf(7 downto 1);

          其中txd是要發(fā)送的1位邏輯電平,txd_buf中存儲著將要發(fā)送的數(shù)據(jù)。發(fā)送流程如圖3所示。

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          將按照上述流程設(shè)計的程序在FPGA中進行測試。將FPGA串口和PC機連接,采用115 200波特率連續(xù)工作3分鐘,收發(fā)均無錯誤字節(jié)。

          3.1.2 雙RAM緩沖機制

          由于串口外設(shè)的波特率是115 200,屬于低速外設(shè),因此在串口數(shù)據(jù)和DSP之間采用雙端口RAM作為緩沖區(qū)。由于此FPGA上自帶片上RAM,因此可以利用開發(fā)環(huán)境自帶的IP核生成片上雙端口RAM,不用額外增加片外RAM器件(圖1)。雙端口RAM的實體定義和讀寫時序:

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計
          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          將每個RAM中的最后一個字節(jié)作為反映RAM存儲狀態(tài)的狀態(tài)字。RAM的狀態(tài)字代表的含義如下:

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          bit0:1-串口接收到新數(shù)據(jù)幀 0-無新數(shù)據(jù)幀;

          bit1:1-數(shù)據(jù)已經(jīng)被讀取 0-數(shù)據(jù)未被讀取;

          慣導(dǎo)和導(dǎo)引頭向彈載機每6 ms傳輸一幀數(shù)據(jù),將數(shù)據(jù)存儲到雙端口RAM中,同時將bit0置‘1’,bit1清零,即RAM狀態(tài)為“新數(shù)據(jù)幀未被讀取”。由于慣導(dǎo)和導(dǎo)引頭的數(shù)據(jù)不同步,因此DSP每1ms就查詢一次RAM的狀態(tài)字。若接收到新的數(shù)據(jù)幀(bit0=1),則讀取RAM數(shù)據(jù),并將“數(shù)據(jù)被讀取”位置1(bit1=1)。這樣,慣導(dǎo)和導(dǎo)引頭給DSP發(fā)送的數(shù)據(jù)延遲不超過1 ms,可以認為慣導(dǎo)和導(dǎo)引頭的數(shù)據(jù)是實時同步的。

          在串口接收數(shù)據(jù)期間,如果串口和DSP在同一時間操作RAM,可能導(dǎo)致DSP讀取到幀錯亂的數(shù)據(jù)。為了保證數(shù)據(jù)幀的完整,不使兩者同時讀取RAM,采用雙RAM緩沖機制,即為每個串口配置2個雙端口RAM的作為緩沖,如圖5所示。串口數(shù)據(jù)接收程序通過查詢RAMa和RAMb的狀態(tài)字,若bit1=1,則將接收到的數(shù)據(jù)幀存儲到對應(yīng)的RAM中,完成之后將bit0置1,bit1清0,這個周期為6 ms。與此同時,DSP每1 ms查詢一次RAMa和RAMb,若bit0為1,則讀取對應(yīng)RAM中的數(shù)據(jù)幀,同時將bit0清0。bit1置1。串口數(shù)據(jù)發(fā)送過程與接收類似,數(shù)據(jù)傳輸方向相反。

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          采用雙RAM緩沖機制,使得串口和DSP不在同一時間訪問同一RAM區(qū),避免了錯幀和丟幀,同時保證了數(shù)據(jù)傳輸?shù)膶崟r性。

          3.2 DSP軟件設(shè)計

          DSP軟件設(shè)計采用模塊化設(shè)計方式,分為應(yīng)用層和底層軟件兩部分。應(yīng)用層軟件主要實現(xiàn)飛控流程和飛控算法;底層軟件主要實現(xiàn)數(shù)據(jù)格式的轉(zhuǎn)換,以便通過DSP總線和FPGA進行數(shù)據(jù)交換。

          3.2.1 應(yīng)用層軟件設(shè)計

          外部的慣導(dǎo)和導(dǎo)引頭6 ms產(chǎn)生一次數(shù)據(jù),DSP開啟1ms的定時器中斷,在中斷中每1 ms查詢一次雙端口RAM的狀態(tài)字,判斷是否有新數(shù)據(jù)產(chǎn)生,這樣采集的數(shù)據(jù)延遲不會超過1 ms。飛控解算的周期為6 ms,遙測數(shù)據(jù)發(fā)送的周期為12 ms,在定時器中斷程序中完成飛控解算和遙測數(shù)據(jù)發(fā)送。

          中斷服務(wù)程序每1 ms運行一次,每次首先查詢導(dǎo)引頭和慣導(dǎo)有沒有更新數(shù)據(jù),再讀取新數(shù)據(jù)存儲在全局結(jié)構(gòu)體里。每6ms用全局結(jié)構(gòu)體里得到的新數(shù)據(jù)解算一次飛控指令,得到舵機的輸出角度,輸出舵控指令,控制舵機。流程如圖6所示。

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          3.2.2 底層軟件設(shè)計

          DSP底層軟件主要完成外部數(shù)據(jù)交換和數(shù)據(jù)格式的轉(zhuǎn)換。DSP通過XINTF產(chǎn)生讀寫時序(圖2圖3所示時序),F(xiàn)PGA也設(shè)計與之相匹配的時序完成兩者之間的數(shù)據(jù)交換。

          DSP應(yīng)用層軟件使用的是浮點數(shù),而DSP和FPGA之間只能傳遞二進制數(shù),因此需要按照IEEE標準進行浮點數(shù)和二進制數(shù)之間的轉(zhuǎn)換。根據(jù)IEEE標準,可以用32位,即8個字節(jié)表示一個浮點數(shù)。如果將代表浮點數(shù)的4個字節(jié)組合成32位的整型數(shù)inte32,進行強制類型轉(zhuǎn)換皆可以得到浮點數(shù),轉(zhuǎn)換函數(shù)如下:

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          將浮點數(shù)轉(zhuǎn)換成整型數(shù)的方法與此類似。底層軟件按照上述方法實現(xiàn)數(shù)據(jù)轉(zhuǎn)換,供應(yīng)用層調(diào)用。

          4 系統(tǒng)驗證

          彈載機實物設(shè)汁制作完成之后可以利用半實物仿真平臺進行測試,該半實物仿真平臺由上位機、慣導(dǎo)、舵機和三軸轉(zhuǎn)臺組成。如圖上位機的作用是模擬導(dǎo)彈動力學模型和導(dǎo)引頭信息,并控制三軸轉(zhuǎn)臺運動模擬導(dǎo)彈姿態(tài)。導(dǎo)彈的運動信息由慣導(dǎo)測量之后發(fā)送給飛控計算機,飛控計算機根據(jù)運動信息解算出舵機控制量控制舵機轉(zhuǎn)動,同時將遙測數(shù)據(jù)發(fā)送給上位機。上位機采集舵機反饋的實際角度,將其代入導(dǎo)彈動力學模型,計算導(dǎo)彈姿態(tài),控制三軸轉(zhuǎn)臺,這樣就形成了完整的半實物仿真回路。

          基于DSP+FPGA的數(shù)字導(dǎo)彈飛控計算機設(shè)計

          仿真實驗中,首先不接入飛控計算機,由仿真計算機中的控制系統(tǒng)數(shù)學模型直接實現(xiàn)控制算法,所得導(dǎo)彈運動軌跡如圖8所示;將飛控計算機接入仿真回路,由飛控計算機實現(xiàn)制導(dǎo)控制算法所得運動軌跡如圖9所示。

          由圖8和圖9的對比可以看出,飛控計算機接入之后飛控系統(tǒng)工作正常,導(dǎo)彈飛行軌跡基本一致,飛控計算機控制效果理想。

          5 結(jié)論

          文中提出了一種基于DSP+FPGA的飛控計算機設(shè)計方法,在半實物仿真系統(tǒng)中驗證了其性能,滿足設(shè)計要求。解決了在多數(shù)字彈上設(shè)備存在情況下的數(shù)據(jù)幀實時同步問題。由于FPGA可以通過編程實現(xiàn)各種時序,所以此飛控計算機可以擴展為除了RS422外部接口外的其他多種數(shù)字設(shè)備接口,滿足模塊化、通用化的實際應(yīng)用需求。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();