《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 浮空器慣性姿態(tài)測量系統(tǒng)冗余CAN總線設(shè)計
浮空器慣性姿態(tài)測量系統(tǒng)冗余CAN總線設(shè)計
來源:電子技術(shù)應(yīng)用2013年第7期
李保國,吳 孟,胡文媛,張海宏
北京航空航天大學(xué) 儀器科學(xué)與光電工程學(xué)院,北京100191
摘要: 為滿足浮空器慣性姿態(tài)測量系統(tǒng)在高空長航時環(huán)境下對CAN通信高可靠性的要求,設(shè)計了一種雙CAN總線全系統(tǒng)冗余方案。采用兩片集成度較高的LPC11C24微控制器,在DSP+FPGA架構(gòu)的導(dǎo)航計算機(jī)上搭建冗余系統(tǒng),并結(jié)合上位機(jī)對該系統(tǒng)進(jìn)行了測試與驗證。測試結(jié)果表明,該冗余系統(tǒng)通信功能正常。當(dāng)主CAN出現(xiàn)故障時,從CAN投入運行,有較好的容錯性,在不增加成本和空間的前題下,提高了慣性姿態(tài)測量系統(tǒng)的可靠性。
中圖分類號: TH873.7
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)07-0021-04
Design of redundant CAN bus for aerostat inertial attitude measurement system
Li Baoguo,Wu Meng,Hu Wenyuan,Zhang Haihong
School of Instrumentation & Opto-Electronics Engineering,Beihang University,Beijing 100191,China
Abstract: In order to improve the CAN communication ability of aerostat inertial attitude measurement system under severe environment, a system method of double-CAN redundant bus is designed. Two LPC11C24 micro-controllers with high integration are used to establish the redundant system based on DSP & FPGA navigation computer. The system′s function is tested and verified with upper computer. The test result shows that this redundant system performs well. Slave CAN starts working when ever the master CAN fails. Fault tolerance is stable. The reliability and quality of aerostat inertial attitude measurement system are enhanced without adding cost and space.
Key words : inertial attitude measurement system;CAN bus;redundant;LPC11C24

    目前,CAN總線系統(tǒng)已經(jīng)成熟應(yīng)用在慣性姿態(tài)測量系統(tǒng)中,具有很好的實時性和抗干擾能力[1]。雖然CAN協(xié)議本身具有較強(qiáng)的檢錯糾錯能力,但在一些特殊應(yīng)用場合,比如高空長航的工作狀態(tài),或受惡劣天氣等環(huán)境的干擾,以及傳輸介質(zhì)損壞等都會嚴(yán)重影響CAN的可靠通信。在要求高可靠性的應(yīng)用系統(tǒng)中,解決這一問題的有效途徑是進(jìn)行CAN總線冗余設(shè)計[2-3]。本文針對浮空器慣性姿態(tài)測量系統(tǒng),基于兩片LPC11C24微控制器,設(shè)計實現(xiàn)了CAN總線冗余系統(tǒng)。

1 冗余系統(tǒng)設(shè)計
    典型的CAN總線通信電路主要由微控制器、CAN總線控制器和CAN總線驅(qū)動器以及總線4部分組成[4]?;贑AN總線的冗余方法主要從3個環(huán)節(jié)進(jìn)行不同程度的冗余:有總線驅(qū)動器冗余、總線控制器冗余和全系統(tǒng)冗余3種。3種冗余方法各有優(yōu)缺點,其中全系統(tǒng)冗余方法可靠度最高[5]。全系統(tǒng)冗余方法由雙路CAN通信電路組成,需要的主要器件數(shù)為無冗余系統(tǒng)的2倍。傳統(tǒng)的慣性姿態(tài)測量系統(tǒng)由導(dǎo)航計算機(jī)作為微控制器,CAN總線節(jié)點設(shè)計需要CAN總線控制器、CAN總線驅(qū)動器以及相關(guān)電平轉(zhuǎn)換芯片。導(dǎo)航計算機(jī)屬于嵌入式產(chǎn)品,固定在載體的機(jī)械結(jié)構(gòu)上,幾何形狀和質(zhì)量都一般力求小型化。冗余設(shè)計器件數(shù)的增多不但會增加系統(tǒng)的成本和容量的開銷,而且使系統(tǒng)的構(gòu)成較復(fù)雜,也可能會引來新的錯誤。
    本文選用LPC11C24微控制器來設(shè)計CAN總線冗余系統(tǒng),其基本架構(gòu)如圖1所示。LPC11C24是恩智浦(NXP)公司近年推出的一款Cortex-M0微控制器,內(nèi)嵌易用型片上CAN驅(qū)動,集成了高速CAN物理層收發(fā)器TJF1051,在低成本LQFP48封裝中實現(xiàn)了完整的CAN功能。LPC11C24的成本低、集成度高,是兼容CAN 2.0B的LPC11C00系列控制器的新成員之一,可為惡劣環(huán)境下的應(yīng)用帶來最佳性能[6]。基于LPC11C24的CAN總線冗余設(shè)計能充分利用該款芯片的優(yōu)勢,減少導(dǎo)航計算機(jī)的電氣互連,節(jié)省50%以上的電路,從而提高了整個系統(tǒng)的可靠性。

2 系統(tǒng)硬件設(shè)計
    本文慣性姿態(tài)測量系統(tǒng)導(dǎo)航計算機(jī)采用DSP+FPGA架構(gòu),DSP主要實現(xiàn)導(dǎo)航姿態(tài)的實時解算和系統(tǒng)控制,F(xiàn)PGA集成系統(tǒng)所有的接口功能,包括CAN通信接口。CAN總線冗余系統(tǒng)是基于兩路LPC11C24最小系統(tǒng)來實現(xiàn)的,兩片LPC微控制器以主-從模式工作。其在導(dǎo)航計算機(jī)中的基本設(shè)計原理如圖2所示。

    DSP輸出的主要是導(dǎo)航姿態(tài)信息,接收的信息主要是IMU數(shù)據(jù)、外部傳感器(GPS、磁強(qiáng)計等)數(shù)據(jù)以及相關(guān)指令信息。CAN通信模塊搭建在FPGA上,通過FPGA與DSP進(jìn)行數(shù)據(jù)交互,數(shù)據(jù)信息在FPGA內(nèi)部寄存器中緩沖。這樣的設(shè)計減少了DSP對外開銷,保證了導(dǎo)航姿態(tài)的實時解算以及與人機(jī)交互低速數(shù)據(jù)的匹配。FPGA與LPC微控制器的主要連接如下:
    (1)數(shù)據(jù)線D0~D7:8根數(shù)據(jù)線,用于完成FPGA與LPC的數(shù)據(jù)交互。
    (2)地址線A0~A4:5根地址線,最大數(shù)據(jù)交互的字節(jié)數(shù)不應(yīng)超過32,若超過,則需增加地址線。
    (3)信號控制線:讀控制信號CAN_RE、寫控制信號CAN_RE、數(shù)據(jù)發(fā)送準(zhǔn)備完成信號CAN_RDY以及復(fù)位信號CAN_RST。
    兩LPC微控制器共用數(shù)據(jù)線D0~D7和數(shù)據(jù)發(fā)送準(zhǔn)備完成信號線CAN_RDY,數(shù)據(jù)線和地址線通過GPIO口實現(xiàn)。數(shù)據(jù)發(fā)送準(zhǔn)備完成后,同時觸發(fā)兩LPC微控制器INT,INT通過定時器捕獲外部事件中斷來實現(xiàn)。復(fù)位信號由FPGA產(chǎn)生一個低電平實現(xiàn),讀寫控制信號在FPGA與CAN通信數(shù)據(jù)交互過程中分別有效。
    實現(xiàn)CAN通信功能還需搭建LPC微控制器最小系統(tǒng)。LPC最小系統(tǒng)主要包括供電電源、外部時鐘和調(diào)試接口。LPC微控制器所需電壓3.3 V由導(dǎo)航計算機(jī)電源模塊提供。本文采用12 MHz外部時鐘給系統(tǒng)提供基準(zhǔn)時鐘。由于LPC1100系列Cortex-M0不再支持JTAG調(diào)試模式,所以調(diào)試接口采用SWD串行調(diào)試模式。兩總線輸出之間連接EMI濾波器,濾除總線上的高頻干擾。此外,兩LPC之間有兩交互信號,分別為EN0和EN1,EN0是發(fā)出故障切換信號,EN1是接受處理信號,或稱之使能CAN通信信號。工作過程中,使能一個CAN的同時禁用一個CAN。
3 系統(tǒng)軟件設(shè)計
      CAN總線冗余系統(tǒng)采用兩條完全獨立的CAN總線,實現(xiàn)系統(tǒng)的物理層和數(shù)據(jù)鏈路層全面冗余。
      系統(tǒng)上電復(fù)位后,初始化兩路 CAN 總線;一路CAN總線中斷開啟,處于正常運行狀態(tài),另一路CAN總線中斷關(guān)閉,處于備用狀態(tài);系統(tǒng)采用兼容兩種觸發(fā)方式的報文分配方式,將傳輸報文分為周期傳送報文(時間觸發(fā))與非周期傳送報文(事件觸發(fā)),其中導(dǎo)航姿態(tài)信息為20 ms周期報文,控制報文為非周期報文。慣性姿態(tài)測量系統(tǒng)平時不輸出任何報文,當(dāng)控制報文控制其啟動后才按照總線調(diào)度策略進(jìn)行輸出,完成導(dǎo)航測姿功能。CAN總線冗余系統(tǒng)設(shè)計主要實現(xiàn)兩部分功能:一為單路通信程序設(shè)計,二為雙路總線切換設(shè)計。冗余系統(tǒng)的工作流程如圖3所示。

3.1 單路CAN通信程序設(shè)計
    CAN節(jié)點通信過程主要包括系統(tǒng)初始化、CAN報文接收、CAN報文發(fā)送和CAN中斷處理等。其中系統(tǒng)初始化主要包括系統(tǒng)配置初始化、管腳初始化、定時器初始化以及CAN模塊初始化等。LPC11C24微控制器中包含了C_CAN片上驅(qū)動,片上驅(qū)動程序存放在引導(dǎo)ROM中,并通過定義好的API向用戶應(yīng)用程序提供CAN初始化和通信特性[7]。下列幾個常用的函數(shù)包含在API中,其調(diào)用實現(xiàn)如下:
    (1)CAN控制器的初始化是在基于寄存器的陣列值上實現(xiàn)的,這些值通過指針來進(jìn)行傳遞。CAN初始化調(diào)用范例如下:
    void CAN_init()
    {
        ROM **rom =(ROM **)0x1fff1ff8;
        uint32_t CanApiClkInitTable[2] = {
        0x00000000UL, //晶振時鐘分頻數(shù)
        0x00007EC3UL };//位定時寄存器配置7EC3:24;
//CAN通信速率為500 kb/s
        (*rom)->pCANAPI->init_can(&CanApiCanInitTable
           [0]);
    }
    (2)CAN發(fā)送函數(shù)允許設(shè)置報文對象,并可在總線上觸發(fā)CAN報文的傳送;報文編號隨著每一次通信而增加,而且可用于監(jiān)控引入的信息。當(dāng)超過255時,信息代碼會歸零。這使得網(wǎng)絡(luò)中的任意節(jié)點可以通過報文編號來測定報文的進(jìn)程和正確的順序,以進(jìn)行檢查。發(fā)送函數(shù)如下:
    void CAN_send(  )
    {
        msg_obj.msgobj = 2;//報文對象
        msg_obj.mode_id= 0x001UL;//報文對象編號
        msg_obj.mask = 0x0UL;//不屏蔽任何ID
        msg_obj.dlc = 1;//數(shù)據(jù)長度
        msg_obj.data[0] = 0x00;
        (*rom)->pCAND->can_transmit(&msg_obj);
    }
    (3)CAN接收函數(shù)在調(diào)用之前,必須在結(jié)構(gòu)體中設(shè)置要被讀取的報文對象的編號,這樣指向報文對象結(jié)構(gòu)的指針會被傳遞到接收函數(shù)中。其實現(xiàn)如下:
    void CAN_receive( )
    {
        msg_obj.msgobj = 1;
        (*rom)->pCAND->can_receive(&msg_obj);
    }
    (4)用戶應(yīng)用程序必須為CAN中斷提供中斷處理程序才能處理CAN事件,調(diào)用回調(diào)函數(shù),并根據(jù)CAN總線上接收到的數(shù)據(jù)和檢查到的狀態(tài)采取相關(guān)的操作。CAN中斷處理程序調(diào)用如下:
    (*rom)->pCAND->isr();
    (5)CAN API支持各種事件的回調(diào)函數(shù),包括報文發(fā)送、報文接收和錯誤處理等?;卣{(diào)函數(shù)通過API函數(shù)來發(fā)布,CAN中斷處理程序會按照中斷級別來調(diào)用CAN回調(diào)函數(shù)。注冊回調(diào)表如下:
    const CAN_CALLBACKS callbacks =
    {
        CAN_rx,
        CAN_tx,
        CAN_error,
    };
3.2 雙路CAN總線切換設(shè)計

 


    雙CAN總線冗余采用熱備方式運行。一個CAN控制器作為系統(tǒng)上電后默認(rèn)的CAN,另一個為系統(tǒng)的備用CAN。系統(tǒng)正常工作時,投入運行的CAN稱為主CAN,另一路稱為從CAN。當(dāng)主CAN發(fā)生故障時,從CAN總線投入運行。系統(tǒng)運行時,要求兩路CAN控制器處于熱備狀態(tài),經(jīng)初始化后都隨時準(zhǔn)備接收信息,但是在一個時間點上,系統(tǒng)中有且僅有一路CAN通道在工作,另一路處于監(jiān)聽狀態(tài)(正常工作時)或故障狀態(tài)(發(fā)生故障時)。實現(xiàn)CAN總線系統(tǒng)的全面冗余,主要解決總線故障的自動檢測和總線的切換問題。
    CAN2.0協(xié)議中規(guī)定節(jié)點處于錯誤激活態(tài)、忽略錯誤態(tài)、脫離總線態(tài)3種狀態(tài)之一[8]。總線正常工作時處于錯誤激活狀態(tài),利用CAN總線控制器的故障界定機(jī)制可以判斷總線錯誤。硬件初始化后錯誤計數(shù)器為0,控制器檢測到錯誤后將發(fā)送/接收錯誤計數(shù)器的值遞增。當(dāng)發(fā)送或者接收錯誤計數(shù)值大于127時,總線狀態(tài)為忽略錯誤態(tài),可能的原因是CANH、CANL斷開;當(dāng)總線發(fā)送或者接收錯誤計數(shù)值大于255時,總線狀態(tài)為脫離總線態(tài),可能的原因是CANH與CANL短路,或者CANH與地短路,或者CANL與電源短路。在錯誤狀態(tài)發(fā)生時,需立即執(zhí)行總線切換操作。
    系統(tǒng)運行時,如兩路CAN(CAN0和CAN1)都運行良好,則選取CAN0作為默認(rèn)主CAN,CAN1處于關(guān)閉狀態(tài),等待CAN0發(fā)出的使能信號,從CAN則隨時備用。當(dāng)主CAN發(fā)生錯誤狀態(tài)時,讀取錯誤狀態(tài)寄存器,同時觸發(fā)CAN1使能引腳,CAN1給出響應(yīng)并禁用CAN0,響應(yīng)完畢后,開啟CAN1,兩CAN主從模式切換。CAN0處于故障狀態(tài),等待修復(fù),若修復(fù)完畢,即可作為從CAN備用,在下一次出現(xiàn)故障時由CAN1給出使能信號啟動;若沒有及時修復(fù),則系統(tǒng)處于無冗余狀態(tài),若再次出現(xiàn)故障,則禁止系統(tǒng)運行。
4 測試與驗證
    要驗證本文設(shè)計的CAN總線冗余系統(tǒng)的有效性,需搭建測試平臺進(jìn)行實驗。實驗軟件環(huán)境包括TKScope嵌入式智能仿真開發(fā)平臺、ZLGCANTset監(jiān)測軟件以及串口調(diào)試助手等。硬件環(huán)境包括AK100仿真器、USBCAN模塊以及基于導(dǎo)航計算機(jī)的雙LPC組成的CAN冗余電路等。實驗過程主要是對單路CAN通信功能和雙路冗余功能進(jìn)行測試。
    (1)單路CAN通信功能測試。單路CAN通信的功能測試主要包括CAN的收發(fā),以及I/O口的中斷、數(shù)據(jù)交互等。為了便于調(diào)試,隔離開導(dǎo)航計算機(jī)中DSP模塊,采用上位機(jī)串口進(jìn)行模擬。首先由上位機(jī)串口模擬發(fā)送導(dǎo)航姿態(tài)信息,周期為20 ms,F(xiàn)PGA收取數(shù)據(jù)至內(nèi)部緩存器,然后由LPC讀取并發(fā)送至CAN總線上。同樣,CAN模塊可以接收總線上的報文信息,產(chǎn)生中斷讀取并轉(zhuǎn)發(fā)至上位機(jī)串口顯示。測試過程中, CANTest監(jiān)測軟件收發(fā)和串口調(diào)試助手發(fā)收數(shù)據(jù)一致,表明CAN通信正常。
    (2)雙CAN冗余功能測試。冗余功能測試是在完成了單路通信測試而且雙路CAN通信都能獨立正常工作的基礎(chǔ)上進(jìn)行的。實驗過程中,需增加一個USBCAN模塊。首先,系統(tǒng)上電正常工作時,只有CAN0處于運行狀態(tài),而且其基本通信功能正常,CAN1總線處于關(guān)閉狀態(tài);手動斷開CAN0總線,CAN1總線啟動,CAN0總線關(guān)閉;接好CAN0總線,手動斷開CAN1總線,CAN1總線關(guān)閉,CAN0總線恢復(fù)。圖4給出了在CAN模塊發(fā)送數(shù)據(jù)過程中,CAN0總線發(fā)生故障時,數(shù)據(jù)切換到CAN1總線上的情況。實驗測試過程中,主CAN出現(xiàn)故障,能及時切換到從CAN運行,有較強(qiáng)的容錯性。

    采用雙LPC設(shè)計實現(xiàn)的CAN總線冗余系統(tǒng)節(jié)約了導(dǎo)航計算機(jī)的成本和空間的開銷,而且開發(fā)過程中充分利用了LPC控制器片上CAN驅(qū)動模塊中的API函數(shù),縮短了開發(fā)周期。CAN總線冗余系統(tǒng)的設(shè)計增強(qiáng)了系統(tǒng)對環(huán)境的應(yīng)對能力,有效提高了浮空器慣性姿態(tài)測量系統(tǒng)可靠性。
參考文獻(xiàn)
[1] 宋凝芳,任磊,林恒,等.光纖陀螺捷聯(lián)航姿系統(tǒng)CAN總線設(shè)計[J].中國慣性技術(shù)學(xué)報,2008,16(1):16-19.
[2] 杜倩倩.雙冗余CAN總線模塊研制[D].哈爾濱:哈爾濱工業(yè)大學(xué),2011.
[3] 禹春來,許化龍,劉根旺,等.CAN總線冗余方法研究[J].測控技術(shù),2003,22(10):28-30.
[4] 莫傳孟.CAN總新冗余通信在機(jī)車控制系統(tǒng)中的應(yīng)用研究[D].成都:西南交通大學(xué),2003.
[5] 湯宜涌,王傳德.CAN總線冗余系統(tǒng)的研究及可靠性分析[J].中原工學(xué)院學(xué)報,21(5):73-75.
[6] LPC11Cx2/Cx4 Product data sheet(Rev.2-3)[M].廣州周立功單片機(jī)公司,2010.
[7] LPC11C1x系列微控制器用戶手冊(Rev.00.13)[M].廣州周立功單片機(jī)公司,2010.
[8] 汪孟寅,高明煜.基于STM32F105微控制器的雙CAN冗余設(shè)計[J].杭州電子科技大學(xué)學(xué)報,2011,31(2):9-12.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。