文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)07-0021-04
目前,,CAN總線系統(tǒng)已經(jīng)成熟應(yīng)用在慣性姿態(tài)測量系統(tǒng)中,,具有很好的實(shí)時(shí)性和抗干擾能力[1]。雖然CAN協(xié)議本身具有較強(qiáng)的檢錯(cuò)糾錯(cuò)能力,,但在一些特殊應(yīng)用場合,,比如高空長航的工作狀態(tài),或受惡劣天氣等環(huán)境的干擾,,以及傳輸介質(zhì)損壞等都會(huì)嚴(yán)重影響CAN的可靠通信,。在要求高可靠性的應(yīng)用系統(tǒng)中,解決這一問題的有效途徑是進(jìn)行CAN總線冗余設(shè)計(jì)[2-3],。本文針對浮空器慣性姿態(tài)測量系統(tǒng),,基于兩片LPC11C24微控制器,設(shè)計(jì)實(shí)現(xiàn)了CAN總線冗余系統(tǒng),。
1 冗余系統(tǒng)設(shè)計(jì)
典型的CAN總線通信電路主要由微控制器,、CAN總線控制器和CAN總線驅(qū)動(dòng)器以及總線4部分組成[4]?;贑AN總線的冗余方法主要從3個(gè)環(huán)節(jié)進(jìn)行不同程度的冗余:有總線驅(qū)動(dòng)器冗余,、總線控制器冗余和全系統(tǒng)冗余3種,。3種冗余方法各有優(yōu)缺點(diǎn),其中全系統(tǒng)冗余方法可靠度最高[5],。全系統(tǒng)冗余方法由雙路CAN通信電路組成,,需要的主要器件數(shù)為無冗余系統(tǒng)的2倍。傳統(tǒng)的慣性姿態(tài)測量系統(tǒng)由導(dǎo)航計(jì)算機(jī)作為微控制器,,CAN總線節(jié)點(diǎn)設(shè)計(jì)需要CAN總線控制器,、CAN總線驅(qū)動(dòng)器以及相關(guān)電平轉(zhuǎn)換芯片。導(dǎo)航計(jì)算機(jī)屬于嵌入式產(chǎn)品,,固定在載體的機(jī)械結(jié)構(gòu)上,幾何形狀和質(zhì)量都一般力求小型化,。冗余設(shè)計(jì)器件數(shù)的增多不但會(huì)增加系統(tǒng)的成本和容量的開銷,,而且使系統(tǒng)的構(gòu)成較復(fù)雜,也可能會(huì)引來新的錯(cuò)誤,。
本文選用LPC11C24微控制器來設(shè)計(jì)CAN總線冗余系統(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)用帶來最佳性能[6],。基于LPC11C24的CAN總線冗余設(shè)計(jì)能充分利用該款芯片的優(yōu)勢,,減少導(dǎo)航計(jì)算機(jī)的電氣互連,,節(jié)省50%以上的電路,從而提高了整個(gè)系統(tǒng)的可靠性,。
2 系統(tǒng)硬件設(shè)計(jì)
本文慣性姿態(tài)測量系統(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總線冗余系統(tǒng)是基于兩路LPC11C24最小系統(tǒng)來實(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上,通過FPGA與DSP進(jìn)行數(shù)據(jù)交互,,數(shù)據(jù)信息在FPGA內(nèi)部寄存器中緩沖,。這樣的設(shè)計(jì)減少了DSP對外開銷,保證了導(dǎo)航姿態(tài)的實(shí)時(shí)解算以及與人機(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)信號(hào)控制線:讀控制信號(hào)CAN_RE,、寫控制信號(hào)CAN_RE、數(shù)據(jù)發(fā)送準(zhǔn)備完成信號(hào)CAN_RDY以及復(fù)位信號(hào)CAN_RST,。
兩LPC微控制器共用數(shù)據(jù)線D0~D7和數(shù)據(jù)發(fā)送準(zhǔn)備完成信號(hào)線CAN_RDY,,數(shù)據(jù)線和地址線通過GPIO口實(shí)現(xiàn)。數(shù)據(jù)發(fā)送準(zhǔn)備完成后,,同時(shí)觸發(fā)兩LPC微控制器INT,,INT通過定時(shí)器捕獲外部事件中斷來實(shí)現(xiàn)。復(fù)位信號(hào)由FPGA產(chǎn)生一個(gè)低電平實(shí)現(xiàn),,讀寫控制信號(hào)在FPGA與CAN通信數(shù)據(jù)交互過程中分別有效,。
實(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)試模式。兩總線輸出之間連接EMI濾波器,,濾除總線上的高頻干擾,。此外,兩LPC之間有兩交互信號(hào),,分別為EN0和EN1,,EN0是發(fā)出故障切換信號(hào),EN1是接受處理信號(hào),,或稱之使能CAN通信信號(hào),。工作過程中,使能一個(gè)CAN的同時(shí)禁用一個(gè)CAN。
3 系統(tǒng)軟件設(shè)計(jì)
CAN總線冗余系統(tǒng)采用兩條完全獨(dú)立的CAN總線,,實(shí)現(xiàn)系統(tǒng)的物理層和數(shù)據(jù)鏈路層全面冗余,。
系統(tǒng)上電復(fù)位后,初始化兩路 CAN 總線,;一路CAN總線中斷開啟,,處于正常運(yùn)行狀態(tài),另一路CAN總線中斷關(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)測量系統(tǒng)平時(shí)不輸出任何報(bào)文,,當(dāng)控制報(bào)文控制其啟動(dòng)后才按照總線調(diào)度策略進(jìn)行輸出,,完成導(dǎo)航測姿功能。CAN總線冗余系統(tǒng)設(shè)計(jì)主要實(shí)現(xiàn)兩部分功能:一為單路通信程序設(shè)計(jì),,二為雙路總線切換設(shè)計(jì),。冗余系統(tǒng)的工作流程如圖3所示,。
3.1 單路CAN通信程序設(shè)計(jì)
CAN節(jié)點(diǎn)通信過程主要包括系統(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中,并通過定義好的API向用戶應(yīng)用程序提供CAN初始化和通信特性[7],。下列幾個(gè)常用的函數(shù)包含在API中,,其調(diào)用實(shí)現(xiàn)如下:
(1)CAN控制器的初始化是在基于寄存器的陣列值上實(shí)現(xiàn)的,這些值通過指針來進(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)文對象,并可在總線上觸發(fā)CAN報(bào)文的傳送,;報(bào)文編號(hào)隨著每一次通信而增加,,而且可用于監(jiān)控引入的信息。當(dāng)超過255時(shí),,信息代碼會(huì)歸零,。這使得網(wǎng)絡(luò)中的任意節(jié)點(diǎn)可以通過報(bào)文編號(hào)來測定報(bào)文的進(jìn)程和正確的順序,以進(jìn)行檢查,。發(fā)送函數(shù)如下:
void CAN_send( )
{
msg_obj.msgobj = 2;//報(bào)文對象
msg_obj.mode_id= 0x001UL;//報(bào)文對象編號(hào)
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è)置要被讀取的報(bào)文對象的編號(hào),,這樣指向報(bào)文對象結(jié)構(gòu)的指針會(huì)被傳遞到接收函數(shù)中。其實(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ù),,包括報(bào)文發(fā)送,、報(bào)文接收和錯(cuò)誤處理等?;卣{(diào)函數(shù)通過API函數(shù)來發(fā)布,,CAN中斷處理程序會(huì)按照中斷級別來調(diào)用CAN回調(diào)函數(shù)。注冊回調(diào)表如下:
const CAN_CALLBACKS callbacks =
{
CAN_rx,
CAN_tx,
CAN_error,,
};
3.2 雙路CAN總線切換設(shè)計(jì)
雙CAN總線冗余采用熱備方式運(yùn)行,。一個(gè)CAN控制器作為系統(tǒng)上電后默認(rèn)的CAN,另一個(gè)為系統(tǒng)的備用CAN,。系統(tǒng)正常工作時(shí),,投入運(yùn)行的CAN稱為主CAN,另一路稱為從CAN,。當(dāng)主CAN發(fā)生故障時(shí),,從CAN總線投入運(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ài)(正常工作時(shí))或故障狀態(tài)(發(fā)生故障時(shí))。實(shí)現(xiàn)CAN總線系統(tǒng)的全面冗余,,主要解決總線故障的自動(dòng)檢測和總線的切換問題,。
CAN2.0協(xié)議中規(guī)定節(jié)點(diǎn)處于錯(cuò)誤激活態(tài)、忽略錯(cuò)誤態(tài),、脫離總線態(tài)3種狀態(tài)之一[8],。總線正常工作時(shí)處于錯(cuò)誤激活狀態(tài),,利用CAN總線控制器的故障界定機(jī)制可以判斷總線錯(cuò)誤,。硬件初始化后錯(cuò)誤計(jì)數(shù)器為0,控制器檢測到錯(cuò)誤后將發(fā)送/接收錯(cuò)誤計(jì)數(shù)器的值遞增,。當(dāng)發(fā)送或者接收錯(cuò)誤計(jì)數(shù)值大于127時(shí),,總線狀態(tài)為忽略錯(cuò)誤態(tài),可能的原因是CANH、CANL斷開,;當(dāng)總線發(fā)送或者接收錯(cuò)誤計(jì)數(shù)值大于255時(shí),,總線狀態(tài)為脫離總線態(tài),可能的原因是CANH與CANL短路,,或者CANH與地短路,,或者CANL與電源短路。在錯(cuò)誤狀態(tài)發(fā)生時(shí),,需立即執(zhí)行總線切換操作,。
系統(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)完畢后,,開啟CAN1,,兩CAN主從模式切換。CAN0處于故障狀態(tài),,等待修復(fù),,若修復(fù)完畢,,即可作為從CAN備用,,在下一次出現(xiàn)故障時(shí)由CAN1給出使能信號(hào)啟動(dòng);若沒有及時(shí)修復(fù),,則系統(tǒng)處于無冗余狀態(tài),,若再次出現(xiàn)故障,則禁止系統(tǒng)運(yùn)行,。
4 測試與驗(yàn)證
要驗(yàn)證本文設(shè)計(jì)的CAN總線冗余系統(tǒng)的有效性,,需搭建測試平臺(tái)進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)軟件環(huán)境包括TKScope嵌入式智能仿真開發(fā)平臺(tái),、ZLGCANTset監(jiān)測軟件以及串口調(diào)試助手等,。硬件環(huán)境包括AK100仿真器、USBCAN模塊以及基于導(dǎo)航計(jì)算機(jī)的雙LPC組成的CAN冗余電路等,。實(shí)驗(yàn)過程主要是對單路CAN通信功能和雙路冗余功能進(jìn)行測試,。
(1)單路CAN通信功能測試。單路CAN通信的功能測試主要包括CAN的收發(fā),以及I/O口的中斷,、數(shù)據(jù)交互等,。為了便于調(diào)試,隔離開導(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總線上。同樣,,CAN模塊可以接收總線上的報(bào)文信息,,產(chǎn)生中斷讀取并轉(zhuǎn)發(fā)至上位機(jī)串口顯示。測試過程中,, CANTest監(jiān)測軟件收發(fā)和串口調(diào)試助手發(fā)收數(shù)據(jù)一致,,表明CAN通信正常。
(2)雙CAN冗余功能測試,。冗余功能測試是在完成了單路通信測試而且雙路CAN通信都能獨(dú)立正常工作的基礎(chǔ)上進(jìn)行的,。實(shí)驗(yàn)過程中,需增加一個(gè)USBCAN模塊,。首先,,系統(tǒng)上電正常工作時(shí),只有CAN0處于運(yùn)行狀態(tài),,而且其基本通信功能正常,,CAN1總線處于關(guān)閉狀態(tài);手動(dòng)斷開CAN0總線,,CAN1總線啟動(dòng),,CAN0總線關(guān)閉;接好CAN0總線,,手動(dòng)斷開CAN1總線,,CAN1總線關(guān)閉,CAN0總線恢復(fù),。圖4給出了在CAN模塊發(fā)送數(shù)據(jù)過程中,,CAN0總線發(fā)生故障時(shí),數(shù)據(jù)切換到CAN1總線上的情況,。實(shí)驗(yàn)測試過程中,,主CAN出現(xiàn)故障,能及時(shí)切換到從CAN運(yùn)行,,有較強(qiáng)的容錯(cuò)性,。
采用雙LPC設(shè)計(jì)實(shí)現(xiàn)的CAN總線冗余系統(tǒng)節(jié)約了導(dǎo)航計(jì)算機(jī)的成本和空間的開銷,,而且開發(fā)過程中充分利用了LPC控制器片上CAN驅(qū)動(dòng)模塊中的API函數(shù),縮短了開發(fā)周期,。CAN總線冗余系統(tǒng)的設(shè)計(jì)增強(qiáng)了系統(tǒng)對環(huán)境的應(yīng)對能力,,有效提高了浮空器慣性姿態(tài)測量系統(tǒng)可靠性。
參考文獻(xiàn)
[1] 宋凝芳,,任磊,,林恒,等.光纖陀螺捷聯(lián)航姿系統(tǒng)CAN總線設(shè)計(jì)[J].中國慣性技術(shù)學(xué)報(bào),,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é)報(bào),,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ì)[J].杭州電子科技大學(xué)學(xué)報(bào),2011,,31(2):9-12.