趙宗紅,王大明
(西安工業(yè)大學(xué)電子信息工程學(xué)院,陜西 西安 710032)
目前,國內(nèi)主要采用單片機+FPGA或采用DSP技術(shù)實現(xiàn)ARINC429信號的轉(zhuǎn)換,不僅結(jié)構(gòu)和設(shè)計復(fù)雜,需要擴展電路,且價格昂貴。而根據(jù)USB,RS232和ARINC429的特點,以Cortex-M3微處理器為核心,設(shè)計了的 USB/RS232轉(zhuǎn)ARINC429總線模塊,具有硬件設(shè)計簡單、易于開發(fā)和成本低等優(yōu)點。為了提高傳輸速率、數(shù)據(jù)轉(zhuǎn)換速率和數(shù)據(jù)的存儲容量,擬采用意法半導(dǎo)體公司的STM32F103芯片。由于它采用3級流水線和哈佛結(jié)構(gòu),加上具有豐富的外設(shè)資源,提高了系統(tǒng)的靈活性和可靠性。
模塊的硬件設(shè)計平臺主要由ARM芯片STM32F103、支持ARINC429總線協(xié)議的串行收發(fā)器 DEI1016、具有 TTL/CMOS電平轉(zhuǎn)標準ARINC429電平功能的電平轉(zhuǎn)換芯片、RS232的收發(fā)器、1個用于切換速率的模擬開關(guān)以及各種信號的隔離芯片組成。主控芯片用于接收USB和RS232串行信號到緩沖區(qū),經(jīng)過內(nèi)部轉(zhuǎn)換把串行信號轉(zhuǎn)換成并行信號發(fā)送給DEI1016;接收DEI1016發(fā)送的并行信號,轉(zhuǎn)換成USB和RS232串行信號發(fā)送出去。系統(tǒng)整體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)的整體結(jié)構(gòu)
由于主控芯片內(nèi)部集成了USB設(shè)備控制器,硬件電路設(shè)計比較簡單。要采用差分信號傳輸方式,只需將差分信號線與主控芯片的對應(yīng)引腳連接即可。RS232信號收發(fā)器將RS232標準的電平轉(zhuǎn)換成TTL/CMOS標準電平,具有2路驅(qū)動器2路接收器。
ARINC429總線采用的是雙極性歸零碼的三態(tài)碼調(diào)制方式,即調(diào)制方式為高(+9~+11V)、零(-0.5~+0.5V )和低(-9~ -11V)狀態(tài)組成的三電平狀態(tài)調(diào)制。傳輸采用32位或25位為一個字的差分模式,傳輸速率有100kB/s和12.5kB/s 2種[1]。DEI1016的輸出電平是TTL標準,需要經(jīng)過BD429電平轉(zhuǎn)換器轉(zhuǎn)換成ARINC429標準電平格式,再發(fā)送出去。而每個接收通道都不需要電平轉(zhuǎn)換,可直接連接到ARINC429數(shù)據(jù)總線。通過STM32F103和模擬開關(guān)DG412來控制BD429的CA和CB引腳,以切換傳輸速率。
DEI1016的硬件接口電路如圖2所示。
圖2 DEI1016的硬件接口電路
1.3.1 DEI1016典型的發(fā)送數(shù)據(jù)時序
DEI1016發(fā)送數(shù)據(jù)的時序如圖3所示。
圖3 DEI1016發(fā)送數(shù)據(jù)的時序
在發(fā)送數(shù)據(jù)時,如果TXR為高電平,說明發(fā)送存儲器空閑可以接收數(shù)據(jù),把ENTX置低禁止發(fā)送,從16位數(shù)據(jù)總線上下載6個ARINC字到緩沖區(qū),最多可達到8×32bit字。當/LD1為低,/LD2為高,下載的是 Word1;當/LD1為高,/LD2為低,下載的是 Word2。當ENTX置高,就可以通過DOA,DOB發(fā)送出去[2]。
1.3.2 DEI1016典型的接收數(shù)據(jù)時序
DEI1016接收數(shù)據(jù)的時序如圖4所示。在接收數(shù)據(jù)時,如果接收到有效數(shù)據(jù),則系統(tǒng)自動把/DR1或者/DR2位置0。當SEL為低,/OE1為低且/OE2為高時,接收通道1的數(shù)據(jù)傳到16位數(shù)據(jù)總線上;當/OE1為高,/OE2為低時,接收通道2的數(shù)據(jù)傳到16位數(shù)據(jù)線上[2]。
圖4 DEI1016接收數(shù)據(jù)的時序
軟件部分主要包括應(yīng)用程序、USB的驅(qū)動程序和STM32F103的固件程序。由于操作系統(tǒng)的應(yīng)用程序主要用于人機交互,人機界面越友好越方便用戶操作,但不是設(shè)計的重點。設(shè)計的重點是USB的驅(qū)動程序和STM32F103的固件程序。
USB驅(qū)動程序的編寫采用Driver Studio,它對必用的DDK進行了包裝,只要使用簡單的向?qū)Ь湍苌梢粋€驅(qū)動框架。而接口操作部分的子函數(shù)還是要用VC++編寫。應(yīng)用程序主要通過Create-File,C1oseHandle,ReadFile,WriteFile,DeviceIo-Control函數(shù)調(diào)用驅(qū)動程序。通過ReadFile和WriteFile訪問驅(qū)動程序的Read和Write函數(shù),通過DeviceIoControl函數(shù)訪問驅(qū)動程序的Control Code函數(shù)[3]。通過傳遞KIrp類(提供IRP各個域的存取方式)成員函數(shù)做參數(shù),可以獲取緩沖區(qū)地址、讀和寫數(shù)據(jù)的長度等參數(shù)。驅(qū)動程序處理I/O管理發(fā)來的I/O請求包(IRP),最后再將處理完成后的IRP返回給I/O管理。接著創(chuàng)建一個URB(USB請求塊)由USB驅(qū)動程序處理。
STM32F103的固件程序主要包括初始化程序、主程序和中斷服務(wù)程序。初始化程序主要對USB,RS232和 ARINC429接口進行初始化[4];主程序主要是進入主循環(huán)等待各種中斷;中斷服務(wù)程序包括枚舉過程、數(shù)據(jù)發(fā)送部分和數(shù)據(jù)接收部分。
USB的中斷服務(wù)程序如圖5所示。主機首先發(fā)送一個令牌包啟動USB傳輸,當STM32F103收到令牌包后就會觸發(fā)中斷。觸發(fā)中斷的類型有復(fù)位、掛起、枚舉過程、端點1接收數(shù)據(jù)和端點2發(fā)送數(shù)據(jù)。再讀取中斷寄存器,判斷產(chǎn)生中斷的類型,并進行相應(yīng)的中斷處理。其中枚舉過程的成敗決定USB能否正常傳輸數(shù)據(jù),只有枚舉過程成功,PC機才能發(fā)現(xiàn)新設(shè)備[5]。
圖5 USB中斷流程
ARINC429總線接收數(shù)據(jù)同樣采用中斷方式,如圖6所示。當DEI1016接收到ARINC429總線數(shù)據(jù)時,硬件自動置/DR1或/DR2為低電平,/DR1或/DR2與主控制芯片I/O口連接,再把這2個I/O口配置成外部中斷。當外部中斷到來,主控芯片只需要查詢與/DR1或/DR2相接的I/O口的狀態(tài),以便確定接收1或接收2通道傳輸?shù)臄?shù)據(jù),再作相應(yīng)的數(shù)據(jù)處理[6]。
圖6 ARINC429總線引發(fā)的中斷流程
經(jīng)過Protues7.8軟件仿真和大量實驗證明,ARINC429信號可以正確地接收和發(fā)送信號。利用STM32F103控制DEI1016的譯碼、速率轉(zhuǎn)換和通道選擇,提高了系統(tǒng)穩(wěn)定性、可靠性。使用本模塊,使ARINC429信號測試更為方便,高、低速率之間切換更簡單,具有工業(yè)實用價值。
[1]張 磊,李靜昭.基于MSP430的ARINC429航空總線測試接口設(shè)計[J].電子測試,2011,(10):5-8.
[2]郭警濤,韓 敏.基于CPLD與DEI1016的ARINC429總線板設(shè)計[J].空軍雷達學(xué)院學(xué)報,2011,25(4):300-302.
[3]馬存寶,張 韋,周宇晗.基于USB協(xié)議的ARINC429總線接口板的設(shè)計[J].計算機測量與控制,2008,16(6):859-864.
[4]彭 剛,秦志強.基于ARM Cortex-M3的STM32系列嵌入式微控制器應(yīng)用實踐[M].北京:電子工業(yè)出版社,2011.
[5]劉 榮.圈圈教你玩USB[M].北京:北京航空航天大學(xué)出版社,2009
[6]李 榕,劉衛(wèi)國,劉曉劍.航空用ARINC429總線收發(fā)系統(tǒng)設(shè)計與實現(xiàn)[J].計算機測量與控制,2005,13(9):970-972,984.