基于CAN總線的A320模擬器硬件仿真方案研究
摘要: 針對(duì)飛機(jī)模擬器硬件仿真時(shí)系統(tǒng)模塊多、通信頻繁、結(jié)構(gòu)復(fù)雜而導(dǎo)致模塊間布線繁雜, 以及由此產(chǎn)生的干擾等問(wèn)題, 提出一種基于CAN 總線的駕駛艙仿真方案。該方案中上位機(jī)負(fù)責(zé)邏輯運(yùn)算, 下位機(jī)負(fù)責(zé)操作信息采集, 通過(guò)CAN 總線將上、下位機(jī)組成一個(gè)網(wǎng)絡(luò), 實(shí)現(xiàn)駕駛艙功能仿真。闡述系統(tǒng)的總體結(jié)構(gòu), 設(shè)計(jì)了整個(gè)駕駛艙的數(shù)據(jù)傳輸協(xié)議, 結(jié)合實(shí)際應(yīng)用, 給出了節(jié)點(diǎn)中數(shù)據(jù)收發(fā)模塊的硬件設(shè)計(jì)結(jié)構(gòu)和數(shù)據(jù)傳輸軟件實(shí)現(xiàn)方法。實(shí)際測(cè)試結(jié)果表明, 該設(shè)計(jì)布線簡(jiǎn)潔, 數(shù)據(jù)傳輸穩(wěn)定可靠, 達(dá)到預(yù)期目標(biāo)。
根據(jù)國(guó)家建設(shè)民航強(qiáng)國(guó)的需要, 國(guó)內(nèi)對(duì)飛機(jī)模擬機(jī)的需求不斷增大, 但目前國(guó)內(nèi)模擬機(jī)研制規(guī)模不能滿(mǎn)足日益增長(zhǎng)的市場(chǎng)需求, 若引進(jìn)國(guó)外模擬機(jī), 則不僅成本高昂, 且不利于技術(shù)掌握, 因此擴(kuò)大模擬機(jī)自主研發(fā)規(guī)模成為必然趨勢(shì)。考慮到各種機(jī)型的駕駛艙功能的共性, 即系統(tǒng)模塊多、通信頻繁、結(jié)構(gòu)復(fù)雜而導(dǎo)致模塊間布線繁雜, 以及由此產(chǎn)生的干擾等問(wèn)題, 提出一種駕駛艙硬件仿真方案, 該方案可以滿(mǎn)足駕駛艙各模塊間穩(wěn)定通信, 且簡(jiǎn)化布線。
1 方案確立
駕駛艙仿真主要以報(bào)文的形式承載各系統(tǒng)模塊的操作信息, 通過(guò)上位機(jī)完成邏輯運(yùn)算, 實(shí)現(xiàn)駕駛艙功能仿真。駕駛艙仿真設(shè)計(jì)的原則是穩(wěn)定, 即整個(gè)駕駛艙網(wǎng)絡(luò)應(yīng)具備一定的容錯(cuò)能力, 在數(shù)據(jù)傳輸過(guò)程中若產(chǎn)生沖突競(jìng)爭(zhēng), 則應(yīng)有一種機(jī)制解決沖突, 且不丟失數(shù)據(jù), 而CAN( Cont roller A rea Netw or k) 是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò), 具有突出的可靠性、實(shí)時(shí)性和靈活性,基于此選取CAN 總線作為整個(gè)駕駛艙網(wǎng)絡(luò)通信方案。由于飛機(jī)駕駛艙結(jié)構(gòu)復(fù)雜、功能繁多, 所以需對(duì)駕駛艙進(jìn)行功能模塊劃分, 各模塊間通過(guò)CAN 總線進(jìn)行通信, 以下即從系統(tǒng)總體設(shè)計(jì)、CAN 節(jié)點(diǎn)通信接口硬件設(shè)計(jì)和數(shù)據(jù)傳輸軟件設(shè)計(jì)3 個(gè)方面詳細(xì)闡述該方案。
2 系統(tǒng)總體設(shè)計(jì)
飛機(jī)駕駛艙中的顯示部分主要有電子飛行儀表系統(tǒng)( Elect ronic Flight Inst rument System, EFIS) , 飛機(jī)電子中央監(jiān)控( Elect ronic Cent ralized Aircraft Mo nitoring , ECAM), 分別由3 臺(tái)觸摸屏顯示器顯示, 其顯示邏輯統(tǒng)一由上位機(jī)控制。操作部分有頂版、中央操縱臺(tái)、遮光板, 側(cè)桿, 這4 部分全部由硬件實(shí)現(xiàn), 基于區(qū)域劃分的原則將其進(jìn)行模塊劃分, 每一模塊為一節(jié)點(diǎn)。整體架構(gòu)如圖1 所示。
圖1 整體架構(gòu)圖
由于各節(jié)點(diǎn)間存在邏輯控制關(guān)系, 所以采用多主方式通信, CAN 總線網(wǎng)絡(luò)上任一節(jié)點(diǎn)均可作為主節(jié)點(diǎn)向其他節(jié)點(diǎn)發(fā)送數(shù)據(jù)。上位機(jī)作為其中一個(gè)節(jié)點(diǎn), 通過(guò)CAN 總線智能適配卡與網(wǎng)絡(luò)上的各節(jié)點(diǎn)進(jìn)行通信, 負(fù)責(zé)主要的邏輯運(yùn)算和駕駛艙顯示功能的控制, 其他節(jié)點(diǎn)不僅完成操作動(dòng)作的采集, 還根據(jù)邏輯要求互相控制。
3 CAN 節(jié)點(diǎn)通信接口硬件電路設(shè)計(jì)
由于駕駛艙各節(jié)點(diǎn)間的控制邏輯復(fù)雜, 數(shù)據(jù)量大,通信頻繁, 故對(duì)各節(jié)點(diǎn)主控芯片的存儲(chǔ)容量有較高的要求, 且對(duì)CAN 總線網(wǎng)絡(luò)中數(shù)據(jù)傳輸?shù)姆€(wěn)定性也有較高要求。選取C80C51F040 作主控芯片, 因其擁有4 352 B RAM 以及64 KB 的FLA SH, 滿(mǎn)足程序應(yīng)用需要。它內(nèi)部集成CAN 控制器, 它兼容CAN 技術(shù)規(guī)范2. 0A 和2. 0B, 主要由CAN 內(nèi)核、消息RAM( 獨(dú)立于CIP51 的RAM) 、消息處理單元和控制寄存器組成。
CAN 內(nèi)核由CAN 協(xié)議控制器和負(fù)責(zé)報(bào)文收發(fā)的串行/ 并行轉(zhuǎn)換RX/ T X 移位寄存器組成。消息RAM 用于存儲(chǔ)報(bào)文目標(biāo)和每個(gè)目標(biāo)的仲裁掩碼。這種CAN處理器有32 個(gè)隨意配置為發(fā)送和接收的報(bào)文目標(biāo), 并且每一個(gè)報(bào)文目標(biāo)都有自己的識(shí)別掩碼, 所有的數(shù)據(jù)傳輸和接收濾波都是由CAN 控制器完成, 而不是由CIP51 完成。C8051F040 所具備的完善的CAN 總線控制器和獨(dú)立的CAN 信息緩沖區(qū), 可以解決MCU ( MicroCo nt ro l U nit ) 與CAN 總線之間串/ 并轉(zhuǎn)換、不同節(jié)點(diǎn)間波特率誤差的校正、以及MCU 與CAN 總線通信的沖突競(jìng)爭(zhēng)和同步等問(wèn)題, 為CAN 總線網(wǎng)絡(luò)具有較高穩(wěn)定性提供了可靠的保障。
CAN 總線的收發(fā)器選用TI 公司的SN65HVD230芯片, 該芯片正常模式下的低電流設(shè)計(jì)使得芯片的發(fā)熱量小( 典型數(shù)值為370 A), 而且其優(yōu)化的驅(qū)動(dòng)器設(shè)計(jì)使得信號(hào)質(zhì)量得到進(jìn)一步改善; 為進(jìn)一步提高系統(tǒng)抗干擾能力, 在主控芯片C80C51F040 和收發(fā)器SN65HVD230 之間加入光耦6N137 進(jìn)行電氣隔離, 由于通信信號(hào)傳輸?shù)綄?dǎo)線的端點(diǎn)時(shí)會(huì)發(fā)生反射, 反射信號(hào)會(huì)干擾正常信號(hào)的傳輸, 因而總線兩端接有終端電阻以消除反射信號(hào), 有效隔離CAN 總線上的干擾信號(hào), 提高了系統(tǒng)可靠性。如圖2 所示。
圖2 CAN 節(jié)點(diǎn)通信接口原理圖
4 數(shù)據(jù)傳輸軟件設(shè)計(jì)
在CAN 總線上發(fā)送的每一條報(bào)文都具有惟一的一個(gè)11 位或29 位數(shù)字ID, 當(dāng)發(fā)生沖突時(shí), 仲裁器就根據(jù)ID 值的大小決定優(yōu)先級(jí)最高的ID 發(fā)送, 其他的退出總線。CAN 總線狀態(tài)取決于二進(jìn)制數(shù)0 而不是1, 即信號(hào)是線“與”關(guān)系: 當(dāng)一個(gè)節(jié)點(diǎn)發(fā)送1, 另一個(gè)節(jié)點(diǎn)發(fā)送0 時(shí), 其他節(jié)點(diǎn)接收到的是信號(hào)0。所以ID 值越小,該保報(bào)文擁有的優(yōu)先權(quán)越高。
4. 1 CAN 通信協(xié)議設(shè)計(jì)
通信協(xié)議設(shè)計(jì)主要包括兩部分, 確定報(bào)文ID 和定義報(bào)文所含8 位數(shù)據(jù)的每位具體含義。由于報(bào)文ID 決定其優(yōu)先級(jí), 所以需要根據(jù)實(shí)際邏輯確定每一報(bào)文的優(yōu)先級(jí), 鑒于駕駛艙操作部分部件少于1 000 件, 所以采用標(biāo)準(zhǔn)格式幀, 11 位的標(biāo)識(shí)符可以表達(dá)211 - 1 等于2 047種報(bào)文, 滿(mǎn)足實(shí)際需求。每個(gè)報(bào)文含有8 字節(jié)數(shù)據(jù), 由于上位機(jī)負(fù)責(zé)主要邏輯運(yùn)算, 所以上位機(jī)應(yīng)能根據(jù)每一個(gè)報(bào)文內(nèi)容精確定位駕駛艙被操作部件, 定義其格式如圖3 所示。
圖3 報(bào)文數(shù)據(jù)功能定義
協(xié)議采用Data0~ Data4 五個(gè)字節(jié)承載所有信息,信息內(nèi)容包括板號(hào)( Penal Number ) 、件號(hào)( Compo nentNumber) 、部件類(lèi)別( Component Sor t) 、部件狀態(tài)值( 整數(shù)部分和小數(shù)部分) 和小數(shù)標(biāo)志位( Do t ) 。經(jīng)過(guò)整合,共有32 塊面板, 所以使用5 位二進(jìn)制表示面板號(hào), 板號(hào)( PN0~ PN4) 對(duì)應(yīng)Data3. 3~ Data3. 7; 每塊面板上的部件數(shù)均少于128, 跳開(kāi)關(guān)面板上部件最多, 為125 個(gè), 所以采用7 位二進(jìn)制表示件號(hào), 件號(hào)( CN0~ CN6) 對(duì)應(yīng)Data4. 0~ Data4. 6; 根據(jù)部件輸出狀態(tài)將其分為5 類(lèi),分別是按鈕、波段開(kāi)關(guān)、電位器、顯示屏和跳開(kāi)關(guān), 所以用3 位二進(jìn)制表示件類(lèi)別, 部件類(lèi)別( CS0~ CS2) 對(duì)應(yīng)Data3. 0~ Data3. 2; 部件狀態(tài)值整數(shù)部分( Int0~ Int15)對(duì)應(yīng)Data1. 0~ Data1. 7 和Data2. 0~ Data2. 7, 狀態(tài)值小數(shù)部分( Dec0~ Dec7) 對(duì)應(yīng)Data0. 0~ Data0. 7, 小數(shù)標(biāo)志位( Dot ) 對(duì)應(yīng)data4. 7。
4. 2 通信實(shí)現(xiàn)
CAN 總線節(jié)點(diǎn)數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)主要分為三部分,分別是初始化設(shè)置、發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。初始化CAN 控制器的一般步驟如下:
?。?1) 將SFRPAGE 寄存器設(shè)置為CA N0_PA GE;
( 2) 將CAN0CN 寄存器中的IN IT 和CCE 位設(shè)置為1;
?。?3) 設(shè)置位定時(shí)寄存器和BRP 擴(kuò)展寄存器中的時(shí)序參數(shù);
( 4) 初始化每個(gè)消息對(duì)象或?qū)⑵銶sgVal 位設(shè)置為無(wú)效;
?。?5) 將INIT 位清零。接收數(shù)據(jù)有查詢(xún)和中斷兩種方式, 本文在設(shè)計(jì)時(shí)采用中斷方式。接收數(shù)據(jù)程序流程圖如圖4 所示。
當(dāng)總線上有數(shù)據(jù)傳入時(shí)程序進(jìn)入中斷, 讀取中斷寄存器的值, 該值對(duì)應(yīng)32 個(gè)消息對(duì)象中的其中一個(gè)消息號(hào), 將該消息號(hào)寫(xiě)入IFx 命令請(qǐng)求寄存器, 讀取IFx 報(bào)文控制寄存器, 查看標(biāo)志位NewData, 值為1 表示有新數(shù)據(jù), 值為0 表示沒(méi)有新數(shù)據(jù), 讀取完當(dāng)前數(shù)據(jù)后查看數(shù)據(jù)塊結(jié)束標(biāo)識(shí)位Eob, 值為1 表示數(shù)據(jù)塊結(jié)束, 當(dāng)前數(shù)據(jù)接收完成; 值為0, 表示數(shù)據(jù)塊沒(méi)有結(jié)束, 將消息號(hào)增一, 繼續(xù)接收下一個(gè)消息對(duì)象中的數(shù)據(jù), 直至接收完成。發(fā)送數(shù)據(jù)時(shí)需配置寄存器, 設(shè)定報(bào)文ID, 此外還需在將數(shù)據(jù)寫(xiě)入數(shù)據(jù)寄存器的時(shí)候, 先寫(xiě)高位后寫(xiě)低位,即先對(duì)CAN 0DAT H 賦值, 再對(duì)CAN0DAT L 賦值, 最后將消息號(hào)寫(xiě)入IFx 命令請(qǐng)求寄存器即啟動(dòng)數(shù)據(jù)傳送。
圖4 數(shù)據(jù)接收流程圖
5 結(jié) 語(yǔ)
實(shí)際測(cè)試表明, 模塊間通信穩(wěn)定, 抗干擾性強(qiáng), 且布線簡(jiǎn)潔。該方案已經(jīng)應(yīng)用于機(jī)載電子系統(tǒng)故障診斷模擬機(jī), 雖然該模擬機(jī)是針對(duì)A320 機(jī)型, 但是該方案也可擴(kuò)展應(yīng)用到其他機(jī)型的模擬機(jī), 具有廣闊的應(yīng)用前景。