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

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

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

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

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

 


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

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

此內容為AET網站原創(chuàng),未經授權禁止轉載。