文獻標識碼: A
文章編號: 0258-7998(2013)07-0021-04
目前,CAN總線系統已經成熟應用在慣性姿態測量系統中,具有很好的實時性和抗干擾能力[1]。雖然CAN協議本身具有較強的檢錯糾錯能力,但在一些特殊應用場合,比如高空長航的工作狀態,或受惡劣天氣等環境的干擾,以及傳輸介質損壞等都會嚴重影響CAN的可靠通信。在要求高可靠性的應用系統中,解決這一問題的有效途徑是進行CAN總線冗余設計[2-3]。本文針對浮空器慣性姿態測量系統,基于兩片LPC11C24微控制器,設計實現了CAN總線冗余系統。
1 冗余系統設計
典型的CAN總線通信電路主要由微控制器、CAN總線控制器和CAN總線驅動器以及總線4部分組成[4]。基于CAN總線的冗余方法主要從3個環節進行不同程度的冗余:有總線驅動器冗余、總線控制器冗余和全系統冗余3種。3種冗余方法各有優缺點,其中全系統冗余方法可靠度最高[5]。全系統冗余方法由雙路CAN通信電路組成,需要的主要器件數為無冗余系統的2倍。傳統的慣性姿態測量系統由導航計算機作為微控制器,CAN總線節點設計需要CAN總線控制器、CAN總線驅動器以及相關電平轉換芯片。導航計算機屬于嵌入式產品,固定在載體的機械結構上,幾何形狀和質量都一般力求小型化。冗余設計器件數的增多不但會增加系統的成本和容量的開銷,而且使系統的構成較復雜,也可能會引來新的錯誤。
本文選用LPC11C24微控制器來設計CAN總線冗余系統,其基本架構如圖1所示。LPC11C24是恩智浦(NXP)公司近年推出的一款Cortex-M0微控制器,內嵌易用型片上CAN驅動,集成了高速CAN物理層收發器TJF1051,在低成本LQFP48封裝中實現了完整的CAN功能。LPC11C24的成本低、集成度高,是兼容CAN 2.0B的LPC11C00系列控制器的新成員之一,可為惡劣環境下的應用帶來最佳性能[6]。基于LPC11C24的CAN總線冗余設計能充分利用該款芯片的優勢,減少導航計算機的電氣互連,節省50%以上的電路,從而提高了整個系統的可靠性。
2 系統硬件設計
本文慣性姿態測量系統導航計算機采用DSP+FPGA架構,DSP主要實現導航姿態的實時解算和系統控制,FPGA集成系統所有的接口功能,包括CAN通信接口。CAN總線冗余系統是基于兩路LPC11C24最小系統來實現的,兩片LPC微控制器以主-從模式工作。其在導航計算機中的基本設計原理如圖2所示。
DSP輸出的主要是導航姿態信息,接收的信息主要是IMU數據、外部傳感器(GPS、磁強計等)數據以及相關指令信息。CAN通信模塊搭建在FPGA上,通過FPGA與DSP進行數據交互,數據信息在FPGA內部寄存器中緩沖。這樣的設計減少了DSP對外開銷,保證了導航姿態的實時解算以及與人機交互低速數據的匹配。FPGA與LPC微控制器的主要連接如下:
(1)數據線D0~D7:8根數據線,用于完成FPGA與LPC的數據交互。
(2)地址線A0~A4:5根地址線,最大數據交互的字節數不應超過32,若超過,則需增加地址線。
(3)信號控制線:讀控制信號CAN_RE、寫控制信號CAN_RE、數據發送準備完成信號CAN_RDY以及復位信號CAN_RST。
兩LPC微控制器共用數據線D0~D7和數據發送準備完成信號線CAN_RDY,數據線和地址線通過GPIO口實現。數據發送準備完成后,同時觸發兩LPC微控制器INT,INT通過定時器捕獲外部事件中斷來實現。復位信號由FPGA產生一個低電平實現,讀寫控制信號在FPGA與CAN通信數據交互過程中分別有效。
實現CAN通信功能還需搭建LPC微控制器最小系統。LPC最小系統主要包括供電電源、外部時鐘和調試接口。LPC微控制器所需電壓3.3 V由導航計算機電源模塊提供。本文采用12 MHz外部時鐘給系統提供基準時鐘。由于LPC1100系列Cortex-M0不再支持JTAG調試模式,所以調試接口采用SWD串行調試模式。兩總線輸出之間連接EMI濾波器,濾除總線上的高頻干擾。此外,兩LPC之間有兩交互信號,分別為EN0和EN1,EN0是發出故障切換信號,EN1是接受處理信號,或稱之使能CAN通信信號。工作過程中,使能一個CAN的同時禁用一個CAN。
3 系統軟件設計
CAN總線冗余系統采用兩條完全獨立的CAN總線,實現系統的物理層和數據鏈路層全面冗余。
系統上電復位后,初始化兩路 CAN 總線;一路CAN總線中斷開啟,處于正常運行狀態,另一路CAN總線中斷關閉,處于備用狀態;系統采用兼容兩種觸發方式的報文分配方式,將傳輸報文分為周期傳送報文(時間觸發)與非周期傳送報文(事件觸發),其中導航姿態信息為20 ms周期報文,控制報文為非周期報文。慣性姿態測量系統平時不輸出任何報文,當控制報文控制其啟動后才按照總線調度策略進行輸出,完成導航測姿功能。CAN總線冗余系統設計主要實現兩部分功能:一為單路通信程序設計,二為雙路總線切換設計。冗余系統的工作流程如圖3所示。
3.1 單路CAN通信程序設計
CAN節點通信過程主要包括系統初始化、CAN報文接收、CAN報文發送和CAN中斷處理等。其中系統初始化主要包括系統配置初始化、管腳初始化、定時器初始化以及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發送函數允許設置報文對象,并可在總線上觸發CAN報文的傳送;報文編號隨著每一次通信而增加,而且可用于監控引入的信息。當超過255時,信息代碼會歸零。這使得網絡中的任意節點可以通過報文編號來測定報文的進程和正確的順序,以進行檢查。發送函數如下:
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總線上接收到的數據和檢查到的狀態采取相關的操作。CAN中斷處理程序調用如下:
(*rom)->pCAND->isr();
(5)CAN API支持各種事件的回調函數,包括報文發送、報文接收和錯誤處理等。回調函數通過API函數來發布,CAN中斷處理程序會按照中斷級別來調用CAN回調函數。注冊回調表如下:
const CAN_CALLBACKS callbacks =
{
CAN_rx,
CAN_tx,
CAN_error,
};
3.2 雙路CAN總線切換設計
雙CAN總線冗余采用熱備方式運行。一個CAN控制器作為系統上電后默認的CAN,另一個為系統的備用CAN。系統正常工作時,投入運行的CAN稱為主CAN,另一路稱為從CAN。當主CAN發生故障時,從CAN總線投入運行。系統運行時,要求兩路CAN控制器處于熱備狀態,經初始化后都隨時準備接收信息,但是在一個時間點上,系統中有且僅有一路CAN通道在工作,另一路處于監聽狀態(正常工作時)或故障狀態(發生故障時)。實現CAN總線系統的全面冗余,主要解決總線故障的自動檢測和總線的切換問題。
CAN2.0協議中規定節點處于錯誤激活態、忽略錯誤態、脫離總線態3種狀態之一[8]。總線正常工作時處于錯誤激活狀態,利用CAN總線控制器的故障界定機制可以判斷總線錯誤。硬件初始化后錯誤計數器為0,控制器檢測到錯誤后將發送/接收錯誤計數器的值遞增。當發送或者接收錯誤計數值大于127時,總線狀態為忽略錯誤態,可能的原因是CANH、CANL斷開;當總線發送或者接收錯誤計數值大于255時,總線狀態為脫離總線態,可能的原因是CANH與CANL短路,或者CANH與地短路,或者CANL與電源短路。在錯誤狀態發生時,需立即執行總線切換操作。
系統運行時,如兩路CAN(CAN0和CAN1)都運行良好,則選取CAN0作為默認主CAN,CAN1處于關閉狀態,等待CAN0發出的使能信號,從CAN則隨時備用。當主CAN發生錯誤狀態時,讀取錯誤狀態寄存器,同時觸發CAN1使能引腳,CAN1給出響應并禁用CAN0,響應完畢后,開啟CAN1,兩CAN主從模式切換。CAN0處于故障狀態,等待修復,若修復完畢,即可作為從CAN備用,在下一次出現故障時由CAN1給出使能信號啟動;若沒有及時修復,則系統處于無冗余狀態,若再次出現故障,則禁止系統運行。
4 測試與驗證
要驗證本文設計的CAN總線冗余系統的有效性,需搭建測試平臺進行實驗。實驗軟件環境包括TKScope嵌入式智能仿真開發平臺、ZLGCANTset監測軟件以及串口調試助手等。硬件環境包括AK100仿真器、USBCAN模塊以及基于導航計算機的雙LPC組成的CAN冗余電路等。實驗過程主要是對單路CAN通信功能和雙路冗余功能進行測試。
(1)單路CAN通信功能測試。單路CAN通信的功能測試主要包括CAN的收發,以及I/O口的中斷、數據交互等。為了便于調試,隔離開導航計算機中DSP模塊,采用上位機串口進行模擬。首先由上位機串口模擬發送導航姿態信息,周期為20 ms,FPGA收取數據至內部緩存器,然后由LPC讀取并發送至CAN總線上。同樣,CAN模塊可以接收總線上的報文信息,產生中斷讀取并轉發至上位機串口顯示。測試過程中, CANTest監測軟件收發和串口調試助手發收數據一致,表明CAN通信正常。
(2)雙CAN冗余功能測試。冗余功能測試是在完成了單路通信測試而且雙路CAN通信都能獨立正常工作的基礎上進行的。實驗過程中,需增加一個USBCAN模塊。首先,系統上電正常工作時,只有CAN0處于運行狀態,而且其基本通信功能正常,CAN1總線處于關閉狀態;手動斷開CAN0總線,CAN1總線啟動,CAN0總線關閉;接好CAN0總線,手動斷開CAN1總線,CAN1總線關閉,CAN0總線恢復。圖4給出了在CAN模塊發送數據過程中,CAN0總線發生故障時,數據切換到CAN1總線上的情況。實驗測試過程中,主CAN出現故障,能及時切換到從CAN運行,有較強的容錯性。
采用雙LPC設計實現的CAN總線冗余系統節約了導航計算機的成本和空間的開銷,而且開發過程中充分利用了LPC控制器片上CAN驅動模塊中的API函數,縮短了開發周期。CAN總線冗余系統的設計增強了系統對環境的應對能力,有效提高了浮空器慣性姿態測量系統可靠性。
參考文獻
[1] 宋凝芳,任磊,林恒,等.光纖陀螺捷聯航姿系統CAN總線設計[J].中國慣性技術學報,2008,16(1):16-19.
[2] 杜倩倩.雙冗余CAN總線模塊研制[D].哈爾濱:哈爾濱工業大學,2011.
[3] 禹春來,許化龍,劉根旺,等.CAN總線冗余方法研究[J].測控技術,2003,22(10):28-30.
[4] 莫傳孟.CAN總新冗余通信在機車控制系統中的應用研究[D].成都:西南交通大學,2003.
[5] 湯宜涌,王傳德.CAN總線冗余系統的研究及可靠性分析[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.