《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 浮空器慣性姿態(tài)測(cè)量系統(tǒng)冗余CAN總線(xiàn)設(shè)計(jì)
浮空器慣性姿態(tài)測(cè)量系統(tǒng)冗余CAN總線(xiàn)設(shè)計(jì)
來(lái)源:電子技術(shù)應(yīng)用2013年第7期
李保國(guó),吳 孟,胡文媛,張海宏
北京航空航天大學(xué) 儀器科學(xué)與光電工程學(xué)院,北京100191
摘要: 為滿(mǎn)足浮空器慣性姿態(tài)測(cè)量系統(tǒng)在高空長(zhǎng)航時(shí)環(huán)境下對(duì)CAN通信高可靠性的要求,設(shè)計(jì)了一種雙CAN總線(xiàn)全系統(tǒng)冗余方案。采用兩片集成度較高的LPC11C24微控制器,在DSP+FPGA架構(gòu)的導(dǎo)航計(jì)算機(jī)上搭建冗余系統(tǒng),并結(jié)合上位機(jī)對(duì)該系統(tǒng)進(jìn)行了測(cè)試與驗(yàn)證。測(cè)試結(jié)果表明,該冗余系統(tǒng)通信功能正常。當(dāng)主CAN出現(xiàn)故障時(shí),從CAN投入運(yùn)行,有較好的容錯(cuò)性,在不增加成本和空間的前題下,提高了慣性姿態(tài)測(cè)量系統(tǒng)的可靠性。
中圖分類(lèi)號(hào): TH873.7
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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總線(xiàn)系統(tǒng)已經(jīng)成熟應(yīng)用在慣性姿態(tài)測(cè)量系統(tǒng)中,具有很好的實(shí)時(shí)性和抗干擾能力[1]。雖然CAN協(xié)議本身具有較強(qiáng)的檢錯(cuò)糾錯(cuò)能力,但在一些特殊應(yīng)用場(chǎng)合,比如高空長(zhǎng)航的工作狀態(tài),或受惡劣天氣等環(huán)境的干擾,以及傳輸介質(zhì)損壞等都會(huì)嚴(yán)重影響CAN的可靠通信。在要求高可靠性的應(yīng)用系統(tǒng)中,解決這一問(wèn)題的有效途徑是進(jìn)行CAN總線(xiàn)冗余設(shè)計(jì)[2-3]。本文針對(duì)浮空器慣性姿態(tài)測(cè)量系統(tǒng),基于兩片LPC11C24微控制器,設(shè)計(jì)實(shí)現(xiàn)了CAN總線(xiàn)冗余系統(tǒng)。

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

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

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

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

 


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

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

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