文獻(xiàn)標(biāo)識碼: A
文章編號: 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ì)損壞等都會嚴(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ū)動器以及總線4部分組成[4],?;贑AN總線的冗余方法主要從3個(gè)環(huán)節(jié)進(jìn)行不同程度的冗余:有總線驅(qū)動器冗余、總線控制器冗余和全系統(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ū)動器以及相關(guān)電平轉(zhuǎn)換芯片。導(dǎo)航計(jì)算機(jī)屬于嵌入式產(chǎn)品,,固定在載體的機(jī)械結(jié)構(gòu)上,,幾何形狀和質(zhì)量都一般力求小型化。冗余設(shè)計(jì)器件數(shù)的增多不但會增加系統(tǒng)的成本和容量的開銷,,而且使系統(tǒng)的構(gòu)成較復(fù)雜,,也可能會引來新的錯(cuò)誤。
本文選用LPC11C24微控制器來設(shè)計(jì)CAN總線冗余系統(tǒng),,其基本架構(gòu)如圖1所示,。LPC11C24是恩智浦(NXP)公司近年推出的一款Cortex-M0微控制器,內(nèi)嵌易用型片上CAN驅(qū)動,,集成了高速CAN物理層收發(fā)器TJF1051,,在低成本LQFP48封裝中實(shí)現(xiàn)了完整的CAN功能。LPC11C24的成本低,、集成度高,,是兼容CAN 2.0B的LPC11C00系列控制器的新成員之一,可為惡劣環(huán)境下的應(yīng)用帶來最佳性能[6],?;贚PC11C24的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)信號控制線:讀控制信號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口實(shí)現(xiàn),。數(shù)據(jù)發(fā)送準(zhǔn)備完成后,同時(shí)觸發(fā)兩LPC微控制器INT,,INT通過定時(shí)器捕獲外部事件中斷來實(shí)現(xiàn),。復(fù)位信號由FPGA產(chǎn)生一個(gè)低電平實(shí)現(xiàn),讀寫控制信號在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之間有兩交互信號,分別為EN0和EN1,,EN0是發(fā)出故障切換信號,,EN1是接受處理信號,,或稱之使能CAN通信信號。工作過程中,,使能一個(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)文控制其啟動后才按照總線調(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ū)動,,片上驅(qū)動程序存放在引導(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)文編號隨著每一次通信而增加,,而且可用于監(jiān)控引入的信息,。當(dāng)超過255時(shí),,信息代碼會歸零。這使得網(wǎng)絡(luò)中的任意節(jié)點(diǎn)可以通過報(bà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)文對象編號
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)文對象的編號,,這樣指向報(bào)文對象結(jié)構(gòu)的指針會被傳遞到接收函數(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中斷處理程序會按照中斷級別來調(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)的全面冗余,主要解決總線故障的自動檢測和總線的切換問題,。
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ā)出的使能信號,從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給出使能信號啟動,;若沒有及時(shí)修復(fù),則系統(tǒng)處于無冗余狀態(tài),,若再次出現(xiàn)故障,,則禁止系統(tǒng)運(yùn)行。
4 測試與驗(yàn)證
要驗(yàn)證本文設(shè)計(jì)的CAN總線冗余系統(tǒng)的有效性,,需搭建測試平臺進(jìn)行實(shí)驗(yàn),。實(shí)驗(yàn)軟件環(huán)境包括TKScope嵌入式智能仿真開發(fā)平臺、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),;手動斷開CAN0總線,CAN1總線啟動,,CAN0總線關(guān)閉,;接好CAN0總線,手動斷開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ū)動模塊中的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.