孫大元,閆 冬
(中國電子科技集團公司第五十四研究所,河北 石家莊 050081)
?
基于FPGA的冗余CAN總線通信節(jié)點設計
孫大元,閆冬
(中國電子科技集團公司第五十四研究所,河北 石家莊 050081)
摘要針對航天領域對通信系統(tǒng)可靠性要求高的特點,提出了基于FPGA、SJA1000和PCA82C250的冗余CAN總線通信節(jié)點設計。介紹了CAN總線冗余方式的選擇原則,詳細給出了采用控制器級冗余方式的通信節(jié)點硬件設計和FPGA控制程序設計,重點對SJA1000初始化流程、收發(fā)報文處理過程、SJA1000錯誤處理過程和鏈路熱備份條件下的數(shù)據(jù)選擇策略進行了說明。通過FPGA程序仿真,驗證了收發(fā)報文時SJA1000的控制時序,進行了高低溫條件下的節(jié)點傳輸性能測試和冗余數(shù)據(jù)處理功能測試。測試結果證明,節(jié)點工作穩(wěn)定性高、實時性強,適用于航天和航空等高可靠性要求的領域。
關鍵詞CAN總線;FPGA;冗余;CAN控制器;SJA1000
0引言
Control Area Network(CAN)總線是一種采用異步串行方式工作的現(xiàn)場總線,最早由德國BOSCH公司提出用于實現(xiàn)汽車內部控制[1],由于其傳輸速率高,抗電磁干擾性能強,同時配置靈活,使用方便,所以被越來越多地應用于航天領域,近年來我國發(fā)射成功的多顆小衛(wèi)星都采用了CAN總線通信系統(tǒng)[2]。星上設備長時間在高低溫、真空和輻射等惡劣條件下工作,且故障后不可維護,因此對總線可靠性提出了更高的要求。
在傳統(tǒng)的CAN總線通信系統(tǒng)中,通常采用單片機作為總線節(jié)點的處理器,但是單片機處理速度慢、抗干擾能力差的缺點使其在航天領域應用中受到很大限制。本文針對航天應用的特點,提出了一種基于FPGA作為處理器的總線節(jié)點設計方案,同時為了進一步提高系統(tǒng)可靠性,對節(jié)點進行了控制器級的冗余設計,使總線通信鏈路由1條變?yōu)榛闊醾浞莸?條,在保證系統(tǒng)實時性不受影響的同時,極大地提高了系統(tǒng)的可靠性。
1總體設計
1.1冗余方式選擇
CAN總線的冗余設計分為驅動器冗余、控制器冗余和處理器冗余3種方案[3]。驅動器冗余方案中通信節(jié)點包括:1個處理器、1個CAN控制器、2個CAN驅動器和1個切換電路,工作時由處理器控制切換電路進行2個CAN驅動器間的選擇,該方案實現(xiàn)較為簡單,但如果控制器出現(xiàn)故障會導致系統(tǒng)無法工作,對節(jié)點可靠性的提升相對較小。控制器冗余方案中通信節(jié)點由1個處理器、2個CAN控制器和2個CAN驅動器來實現(xiàn),此時2條CAN鏈路獨立,對節(jié)點可靠性有很大提高。處理器冗余方案中通信節(jié)點包括2個處理器、2個CAN控制器和2個CAN驅動器,該方案實現(xiàn)了硬件上的完全獨立,冗余度最高,但處理器的增加會使節(jié)點軟硬件復雜度極大提高。航天應用中對節(jié)點的體積、功耗等指標要求較為嚴格,并且處理器芯片等級一般為軍品級或宇航級,成本較高,因此不適宜采用處理器冗余方案,而驅動器冗余方案對系統(tǒng)可靠性的提升有限,同樣不適用于高可靠性要求的場合。本文設計選擇使用控制器冗余方案,2條鏈路熱備份,即處理器同時通過2條鏈路收發(fā)數(shù)據(jù),與冷備份相比,熱備份方案雖然使系統(tǒng)功耗有所增加,但其可靠性更高、實時性更好。采用控制器冗余方案的CAN總線系統(tǒng)結構框圖如圖1所示[4]。
圖1 控制器冗余CAN總線系統(tǒng)結構
1.2節(jié)點硬件設計
CAN總線節(jié)點硬件包括總線驅動器、協(xié)議控制器和處理器[5]??偩€驅動器提供協(xié)議控制器與物理總線之間的接口,完成信號電平控制,協(xié)議控制器執(zhí)行CAN總線協(xié)議,實現(xiàn)報文收發(fā)緩沖、總線錯誤處理等功能[6]。處理器對協(xié)議控制器操作,完成CAN總線工作模式選擇、工作參數(shù)設置以及報文的發(fā)送和接收。CAN通信節(jié)點硬件組成框圖如圖2所示。
圖2 CAN通信節(jié)點硬件組成
本設計中協(xié)議控制器和總線驅動器分別選擇Philips公司的SJA1000和PCA82C250[7]。同時為提高節(jié)點的抗干擾能力,在SJA1000與PCA82C250之間增加光耦6N137,以實現(xiàn)CAN節(jié)點與總線通道的電氣隔離。節(jié)點處理器FPGA選擇XILINX公司的XQ4VSX55,由于FPGA與SJA1000之間接口電平不匹配,因此在二者之間增加雙向總線收發(fā)器54AC164245,實現(xiàn)3.3 V TTL電平與5 V TTL電平之間的轉換[8]。
1.3SJA1000工作方式
1.3.1SJA1000初始化
系統(tǒng)上電后首先需要對SJA1000進行初始化,通過設置模式寄存器、中斷使能寄存器、驗收代碼寄存器、驗收屏蔽寄存器、總線定時寄存器、輸出控制寄存器和時鐘分頻寄存器完成SJA1000工作模式的選擇、各類中斷的使能、報文濾波的設置、波特率的設置以及輸出特性的選擇[9]。SJA1000的初始化必須在復位模式中進行,系統(tǒng)上電后,F(xiàn)PGA給SJA1000的RST管腳輸出一個負脈沖,脈沖結束后通過讀取模式寄存器RM位的值判斷SJA1000是否進入復位模式,如果成功進入復位模式則依次給各個寄存器賦值,賦值完畢后,將模式寄存器的RM位寫0,退出復位模式,進入工作模式。
1.3.2報文發(fā)送
報文發(fā)送過程可以通過SJA1000的中斷請求或查詢狀態(tài)標志控制實現(xiàn),本設計中選擇使用查詢狀態(tài)標志的方式發(fā)送數(shù)據(jù)。在發(fā)送數(shù)據(jù)之前,需要通過讀取狀態(tài)寄存器的接收狀態(tài)位、發(fā)送完畢狀態(tài)位以及發(fā)送緩沖區(qū)狀態(tài)位值判斷當前SJA1000是否具備發(fā)送條件,只有當接收狀態(tài)位為0(空閑),發(fā)送完畢狀態(tài)位為1(完畢),發(fā)送緩沖區(qū)狀態(tài)位為1(非鎖定)時,才可以進行發(fā)送。發(fā)送報文時,F(xiàn)PGA將報文內容、幀信息和標識符寫到SJA1000的發(fā)送緩沖區(qū),之后將命令寄存器的發(fā)送請求位寫1,啟動SJA1000發(fā)送。
1.3.3報文接收
與發(fā)送報文過程相同,接收報文也可以通過中斷或查詢2種方式實現(xiàn)。接收數(shù)據(jù)過程是被動的,如果采用查詢方式,程序需要不斷讀取SJA1000的接收緩沖區(qū)狀態(tài)來確認是否接收到了數(shù)據(jù),實時性較差。因此,本設計中采用中斷請求的接收方式[10]。設計中使用3種類型的中斷:接收中斷、數(shù)據(jù)溢出中斷和錯誤中斷,程序接收到中斷后,通過讀取中斷寄存器判斷中斷類型,如果為接收中斷,則讀取接收緩沖區(qū)內容并釋放接收緩沖區(qū);如果為數(shù)據(jù)溢出中斷,則清數(shù)據(jù)溢出狀態(tài)并釋放接收緩沖區(qū),否則中斷類型為錯誤中斷,進行相應的處理。
1.3.4錯誤處理
本設計中SJA1000工作于PeliCAN模式,此時總線上出現(xiàn)錯誤的次數(shù)會在發(fā)送錯誤計數(shù)寄存器和接收錯誤計數(shù)寄存器的值上體現(xiàn),如果錯誤計數(shù)器的值大于255,則總線會進入關閉狀態(tài),從而導致通信中斷,該狀態(tài)不會自主恢復,必須由程序進行處理[11]。程序接收到中斷并通過中斷寄存器的值判斷類型為錯誤中斷后,讀取模式寄存器的值,如果其RM位為1則說明總線關閉,SJA1000進入復位狀態(tài),此時需重新進行SJA1000初始化流程,使SJA1000恢復工作狀態(tài)。
1.3.5SJA1000控制流程
SJA1000控制程序工作流程如圖3所示。程序運行后首先進行SJA1000初始化,初始化完成后進入空閑等待狀態(tài),如果在等待狀態(tài)中有中斷到來則進行中斷類型判斷并進行相應的處理,如果有數(shù)據(jù)需要發(fā)送則在確認發(fā)送條件滿足后進行發(fā)送。
圖3 SJA1000控制程序工作流程
2冗余處理
冗余處理是節(jié)點設計中的關鍵部分。在其他相關文章中,基本都是采用冷冗余方案,2條CAN總線鏈路中同時只有一條鏈路工作,當判斷當前鏈路工作異常后,進行鏈路切換和數(shù)據(jù)重發(fā)。冷冗余方案雖然保證了冗余鏈路的增加不會提高節(jié)點功耗,但鏈路切換、數(shù)據(jù)重發(fā)機制會導致系統(tǒng)的實時性大大降低。本設計中采用了熱冗余方案,2條CAN總線鏈路同時工作,互為熱備份。發(fā)送報文時,數(shù)據(jù)通過2條鏈路同時發(fā)送,當一條鏈路出現(xiàn)故障時,另一條鏈路工作不受影響,保證了系統(tǒng)的實時性。接收報文時,節(jié)點需要對2條鏈路上的數(shù)據(jù)進行甄別、選擇,避免同一條報文的重復接收,具體選擇策略為:節(jié)點在一條鏈路上接收到一幀數(shù)據(jù)幀后,記錄其幀類型碼,如果在小于T的時間間隔內在另一條鏈路上收到了一幀具有同樣類型碼的數(shù)據(jù)幀,則認為該幀與之前接收的數(shù)據(jù)幀為同一幀,將其丟棄,其中時間間隔T根據(jù)不同類型報文的發(fā)送頻率等條件靈活設置。與冷冗余方案相比,本設計中采用的熱冗余方案實時性更好,判決策略簡單,可靠性更高。
3FPGA頂層模塊設計
FPGA頂層模塊如圖4所示。
圖4 FPGA頂層模塊功能
其中SJA1000_CTRL為SJA1000控制模塊,負責完成SJA1000初始化、報文發(fā)送、報文接收以及SJA1000的錯誤處理[12]。SEND_FIFO為發(fā)送數(shù)據(jù)緩存FIFO,用于緩存待發(fā)送數(shù)據(jù),實現(xiàn)前后端數(shù)據(jù)速率匹配,當FIFO中存儲數(shù)據(jù)量大于預置的發(fā)送門限后,SEND_FIFO通過將其使能標志S_EN置1,告知SJA1000_CTRL模塊有數(shù)據(jù)需要發(fā)送。RECIEVE_FIFO為接收數(shù)據(jù)緩存FIFO,用于存儲從SJA1000讀取到的數(shù)據(jù),當FIFO接收完一幀數(shù)據(jù)幀后,RECIEVE_FIFO讀使能標志R_EN置1,告知REDUNDANT_SEL模塊將數(shù)據(jù)讀出并進行處理。REDUNDANT_SEL模塊負責冗余數(shù)據(jù)處理,完成2條鏈路數(shù)據(jù)的冗余判斷和選擇接收。
4仿真驗證
FPGA程序設計通過ISE和Modelsim軟件進行了綜合以及功能仿真,并通過ChipScope軟件進行FPGA程序的在線調試,主要對SJA1000控制模塊收發(fā)數(shù)據(jù)時的信號時序進行了驗證。發(fā)送數(shù)據(jù)內容為固定0xAA,接收數(shù)據(jù)內容為0x06、0x07、0x08、0x09、0x0A、0x0B、0x0C和0x0D,ChipScope中截取發(fā)送、接收數(shù)據(jù)時的相關信號波形如圖5和圖6所示。
圖5 發(fā)送數(shù)據(jù)時的信號波形
圖6 接收數(shù)據(jù)時的信號波形
5測試結果
利用周立功公司的USB-CAN II調試器和配套的CANtest軟件進行了節(jié)點軟硬件性能測試驗證。首先對硬件性能進行了測試,測試內容為不同波特率、高低溫條件下時的總線傳輸性能。測試中計算機通過調試器以5 ms為間隔給CAN節(jié)點發(fā)送固定內容數(shù)據(jù)幀,CAN節(jié)點收到數(shù)據(jù)幀后給將收到的幀內容發(fā)送回計算機,并且每隔1 s查詢一次SJA1000總線錯誤寄存器值發(fā)送給計算機,計算機通過CANtest軟件監(jiān)測CAN節(jié)點發(fā)送幀數(shù)、幀內容以及SJA1000錯誤寄存器值,分析節(jié)點硬件性能,測試結果如表1所示。通過表1的測試結果可見,在高低溫條件下,節(jié)點硬件工作均穩(wěn)定可靠。
硬件性能測試完成后對冗余功能進行了測試驗證。測試中計算機以20 ms間隔分別通過2條鏈路給CAN節(jié)點發(fā)送固定內容數(shù)據(jù)幀,CAN節(jié)點收到一幀數(shù)據(jù)幀后程序中的接收幀計數(shù)加1,同時將幀計數(shù)通過2條鏈路發(fā)送回計算機,計算機通過CANtest軟件監(jiān)測CAN節(jié)點返回的幀內容。分別測試2條鏈路之間發(fā)送時延小于T和大于T的情況,并測試2條鏈路發(fā)送同樣幀類型碼和不同幀類型碼的情況,測試結果如表2所示。
表1 節(jié)點硬件性能測試結果
表2 冗余處理功能測試
從表2的測試結果可見,當2條鏈路上發(fā)送數(shù)據(jù)幀的幀類型碼一致并且發(fā)送時延小于T,則節(jié)點將收到的2幀作為一幀處理,否則將2條鏈路上的數(shù)據(jù)幀認為是不同的2幀接收,測試結果與程序設計預期一致。
6結束語
采用FPGA作為CAN總線節(jié)點處理器,可靠性高,實時性好,接口靈活,并且應用層擴展方便,除航天應用外,在航空和高性能要求的工業(yè)控制等領域等都具有很好的適用性。通過在高低溫條件下針對不同波特率進行總線傳輸性能測試,驗證了節(jié)點在惡劣工作環(huán)境下的可靠性。
與大多數(shù)采用冷冗余方案的系統(tǒng)不同,本文采用的熱冗余方案中,2條CAN總線鏈路同時工作互為熱備份,當一條鏈路出現(xiàn)故障時另一條鏈路工作完全不受影響,不存在總線切換數(shù)據(jù)重發(fā)過程,系統(tǒng)實時性得到保證。
本設計經(jīng)過測試驗證后已成功應用于系統(tǒng)中,在軌工作穩(wěn)定,為航空航天領域中的CAN總線系統(tǒng)設計提供了一種高可靠性的設計方案。
參考文獻
[1]廉保旺,李勇,張怡.CAN總線系統(tǒng)設計與實現(xiàn)[J].無線電工程,2000,30(1):12-15.
[2]周新發(fā),尚志,劉群.工業(yè)現(xiàn)場CAN總線技術在航天領域的應用[J].現(xiàn)場總線與網(wǎng)絡技術,2006(1):60-63,96.
[3]禹春來,許化龍,劉根旺,等.CAN總線冗余方法研究[J].測控技術,2003,22(10):28-30.
[4]楊亮,賈慶軒,孫漢旭.冗余CAN總線系統(tǒng)設計[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2007,20(5):4-5,8.
[5]鄒志慧.CAN總線分析、實現(xiàn)及應用實例[J].無線電工程,2006,36(1):51-54.
[6]張培坤,高偉,宋宗喜,等.基于FPGA的CAN總線通信節(jié)點設計[J].儀表技術與傳感器,2010(12):68-70.
[7]吳坎.基于SJA1000和PCA82C250的CAN總線接口設計[J].機械設計與制造,2010(7):55-57.
[8]蘇虎平,沈三民,劉文怡,等.基于冗余CAN 總線的實時通信系統(tǒng)設計[J].總線與網(wǎng)絡,2013(1):26-29,55.
[9]杜尚豐,曹曉鐘,徐津.CAN總線測控技術及其應用[M].北京:電子工業(yè)出版社,2007.
[10]賈長春.基于SJA1000的CAN總線智能節(jié)點設計[J].工業(yè)控制計算機,2015,28(2):5-6.
[11]杜倩倩.雙冗余CAN總線模塊研制[D].哈爾濱:哈爾濱工業(yè)大學,2011.
[12]陳萍,姜秀杰.基于FPGA的CAN總線通信系統(tǒng)[J].計算機測量與控制,2009,17(12):2 482-2 484.
doi:10.3969/j.issn.1003-3106.2016.07.19
收稿日期:2016-03-09
基金項目:國家高技術研究發(fā)展計劃(“863”計劃)基金資助(SS2015AA011303)。
中圖分類號TP391.4
文獻標志碼A
文章編號1003-3106(2016)07-0071-05
作者簡介
孫大元男,(1985—),工程師。主要研究方向:航天測控。
閆冬女,(1985—),工程師。主要研究方向:航天測控。
Design of Redundancy CAN Bus Communication Node Based on FPGA
SUN Da-yuan,YAN Dong
(The54thResearchInstituteofCETC,ShijiazhuangHebei050081,China)
AbstractIn view of the requirements for high reliability of the communication system in aerospace field,a design of redundancy CAN bus node is proposed based on FPGA,SJA1000 and PCA82C250.The selection principle of CAN bus redundancy mode is introduced,the hardware design of CAN bus node with controller redundancy and the design of the FPGA control program are described in detail.Then,the paper focuses on explaining the initialization flow of SJA1000,message sending/receiving process,error handling of SJA1000 and data selection strategy under hot backup condition of the link.The control timing of SJA1000 is verified by the simulation result of the FPGA program,and finally the transmission performance test under high and low temperature and the function test of redundancy data processing are made.The test results prove that the CAN bus node has high real-time performance and high stability,and the design is suitable for many fields which require high reliability such as space field and aviation field.
Key wordsCAN bus;FPGA;redundancy;CAN controller;SJA1000
引用格式:孫大元,閆冬.基于FPGA的冗余CAN總線通信節(jié)點設計[J].無線電工程,2016,46(7):71-75.