李春艷,陳敬軒
(1.中國北方車輛研究所, 北京 100072;2.北京理工大學機械與車輛學院, 北京 100081)
CAN通訊中的一種動態自同步方法設計
李春艷1,陳敬軒2
(1.中國北方車輛研究所, 北京 100072;2.北京理工大學機械與車輛學院, 北京 100081)
摘 要:解決CAN通訊在網絡負載大的時較為突出的因為無序發送和異步通訊導致的信號實時采集難以實現的問題提出了一種同步采集方法,通過在CPU內存中建立幀ID隊列的方式,讓每個幀都能找到對應的發送時刻,實現同步采集的功能。該方法已經在一個實際的數據采集系統中得到檢驗并取得良好效果。
關鍵詞:CAN通訊;ID隊列;步采集
本文引用格式:李春艷,陳敬軒.CAN通訊中的一種動態自同步方法設計[J].新型工業化,2015,5(4):55-60
CAN總線作為最初就專門為車輛通訊設計的現場總線,在車間通訊和車聯網領域有著不可或缺的作用[1-2]。但是,在車輛電子控制領域,如何保證收發端數據的同步,即接收端可以正確接收和解析發送端的數據,對保證行車安全,提高車輛的操縱穩定性和燃油經濟性有著舉足輕重的地位。采用異步串行通信協議的CAN總線協議,盡管具有布線簡單,實現容易等獨特優勢,也不可避免的面臨如何保證各個CPU通訊的同步一致的問題。現有的CAN控制器采用的硬同步和再同步機制在節點數量少,網絡負載輕的傳輸環境中有著較為良好的效果。但是,在節點數量變化的工程現場尤其是節點數目較多的車輛電子控制系統中,由于各節點受振蕩器容差的影響不盡相同,重同步機制中的各個節點的相位調整段長度和同步跳轉寬度難以計算,各個節點的同步效果并不理想[3]。
同時,當節點數目較少時,CAN總線的仲裁機制能夠較好的保障通訊的可靠性和實時性,但是在節點數目較多時,因為沖突導致的丟幀現象頻發,低優先級節點往往因為數次競爭總線使用權失敗而無法正常工作,通訊的可靠性無法得到保障[4]。現有的動態優先級算法[5]和負載均散方法[6]依舊難以避免幀碰撞,TTCAN等對CAN協議的改進也因為和CAN協議不兼容的問題難以進行實際應用[7]。
除此之外,在實際工程系統比如車輛控制系統中,為保證控制信息的有效性和可靠性,核心控制系統需要盡可能的采集到同一時刻的各個物理信息,比如節氣門開度和油溫信息等以便處理。這一要求在傳統的CAN總線通信中很難滿足。
為此,本文提出了一種基于幀ID隊列的動態自同步CAN通訊方法,參與通訊的每個CPU都在內存中建立一個幀ID隊列,再把本CPU要發送的幀在這個幀隊列中重新定位,只有當本CPU的幀ID時間到,才發送數據,這樣就可以避免發生幀沖突,從而大大提高CAN通訊成功率,確保實時信息采集的可靠性和實時性,使得每個CPU都可以預測自己的信息發送時刻,實現準同步功能。該方法已經在一個實際的數據采集系統中得到檢驗,并取得了良好效果。
1.1傳統CAN通信的信息采集誤差
在CAN總線通信現場,各個節點往往在實時的采集信息然后在需要的時刻發送其當前采集到的數據。但是,因為CAN總線通信的特點,同一時刻只允許有一個幀傳輸,因而要想某一節點想要收到完全相同時刻的其余任意節點數據是不可能實現的,只能盡可能縮短并且控制二者的時間間隔。
假設系統中某一節點A需要接收同一時刻ti節點B、C采集到的數據。對單一節點而言,該節點不可能持續不斷的發送數據,占用內存。因而在工程現場,往往會為節點設定一個發送周期,該節點每隔該周期發送一次數據。根據節點采集數據的重要性,各個節點的發送周期不盡相同。為了實現采集的同步,設置B的發送間隔為10ms,C的發送間隔為11ms,如此一來,在理想情況下,節點A就能接收到B、C之間間隔為1ms的信息,準同步采集能夠實現。
但是,在一般情況下,由于CAN總線的廣播特性,各個節點都有權利征用總線傳輸信息,總線沖突較為嚴重。假設某一時刻節點B發送的信息和一優先級較高的信息發生沖突,此時節點B因為仲裁失敗停止發送該幀信息而等到下一個發送周期再發送信息。如此一來,該時刻節點A采集到的B、C數據就相差了10ms。當節點數目眾多時,幀碰撞嚴重,由于仲裁失敗導致的采集時刻差難以計算和控制,同步采集無法實現。
1.2傳統CAN同步方式的缺陷
當CAN系統中節點數目較少時,因為幀碰撞較少,由于仲裁的其他因素引起的幀延時較小也較為固定,此時,硬同步和重同步方式能較好的實現收發節點間信號的準同步,逐位仲裁造成的丟幀不多。但當網絡中節點數目較多,網絡負載較重時,幀碰撞嚴重,傳輸延時難以確定,通訊的可靠性和實時性難以保障[8]。同時,實際工程中位定時的參數受振蕩器容差和最大總線長度的影響很難確定。參考文獻[9]中詳細介紹了重同步中各參數及延遲時間的計算和CAN控制器的配置,本文不再贅述。
此外,當幀碰撞劇烈時,如前文所述的因為因仲裁導致的信息采集不同步問題變得格外嚴重,信息的同步采集幾乎無法實現。
2.1方法的提出
為了實現準同步的信息發送和采集功能,我們希望能夠給各個CPU定義一個有順序的發送隊列,每個CPU都按照這個發送隊列有序的發送消息。每當隊列中的前一節點發送完信息之后,后一節點立刻發送信息。這樣一來,相鄰兩節點間的時間延時僅僅只是每幀數據發送所需要的時間,這一時間和節點的發送周期相比一般微乎其微,在硬同步機制的幫助下,系統通信的同步性能得到更好的保障。
本文引入一種基于幀ID隊列的同步采集方法,通過軟件,在各個CPU中按照所發送的數據幀的優先級(即幀ID的大小)進行排序,形成一個優先級由高到低的隊列。系統工作時,各個CPU都接收總線上初始幀數據(通過驗收濾波器實現),動態調整隊列,當CPU需要發送某幀信息時,先在軟件中判斷隊列中的初始幀是否已經接收。如果是,則立刻發送本幀數據。如此一來,各自CPU的幀ID都可以找到自己發送數據的時刻,只要全部的節點都嚴格按照這個方式通訊,就可以保證同一時刻只有一個CPU向總線發送數據,不會發生幀碰撞,大大減少幀沖突,提高CAN通訊的數據量和通信的同步性。同時,也使得數據采集的時間間隔變得可控,同步采集得以實現。
2.2方法的內容
2.2.1初始幀ID隊列和幀發送的時刻
上電啟動后,各個CPU都有一個缺省的幀隊列,該隊列是進行系統設計時已經規劃好的隊列,作為起始發送數據順序隊列。
系統工作時,每當總線上有幀成功發送完畢,CPU就通過接收中斷進入程序,提取該幀的幀ID并和隊列中原有的幀ID一同進行比較排列,優先級高的(幀ID數值小的)排在隊列的前面,優先級低的(幀ID數值大的)排在隊伍的后面。同時,每個CPU都把自己要發送的本幀數據的幀ID根據相同的方法插入這個隊列中,形成一個完整的幀ID隊列。
可以看出,各個CPU中的幀ID隊列是不斷動態變化的,而且每個CPU中的幀ID隊列不一定完全一致。
2.2.2幀發送的方法
CPU在完成對系統CAN的初始化之后,每當某個CPU得知其隊列中上一幀已經成功發送時,就立刻通過接收中斷進入軟件,判斷當前系統時刻距離上一次本CPU發送信息的時間間隔是否大于本CPU預設的發送周期,如果是,則立刻發送本幀數據,如果不是,就等待時間間隔達到CPU預設的發送周期后立刻發送本幀數據。
2.3方法的一個實例
為了更好地說明本方法的工作原理,現舉一個具體例子闡述采用動態自同步方法傳輸數據的CPU工作情況。假設某系統中有A~E五個CPU節點。為敘述方便,假設每個節點有且僅有一個幀ID(即每個節點只發送一種數據幀),其幀ID由小到大依次為:A、B、C、D、E。系統中每個節點的發送周期相同,均設為10-2秒。每個CPU中定時器的時間間隔均設為10-4秒。CAN總線以其所能達到的最大通訊速率即1Mbps工作。

圖1 第一個發送周期的通訊情況
上電啟動前,各個CPU內部事先約定了一個發送隊列。按照其優先級由高到低排列為:A、B、C、D、E。該隊列儲存在CPU的內存中。圖1展示了第一個發送周期:0~10-2秒,各個節點發送信息的情況。橫軸的總長度是一個發送周期即10-2秒。相鄰兩點間的時間間隔的意義是隊列中的前一節點發送信息的時間(t1)到隊列中的后一節點得知前一節點已經發送完畢(這一功能在CPU的其他硬件中實現)的時間(t2),這二者的時間間隔(δt=t2-t1)就是圖中相鄰兩點橫坐標的間隔。因為本實例中假設CAN總線的通訊速率是1Mbps,因而在正常情況下,10-4秒足夠使得每幀數據傳輸完畢,因此這里設置10-4秒為后續節點等待的時間間隔。時刻1,A節點作為事先約定的初始節點首先發送信息。因為每個節點都接收總線上的數據,因而當節點A傳送完畢后,每個節點都知道節點A的數據已經發送。一旦節點B發現節點A已經完成了數據的傳輸,那么節點B立刻通過接收中斷標志進入圖中所示時刻2,而后節點B判斷這一時刻距離上一次本節點(節點B)發送數據的時間間隔是否已經大于發送周期(10-2秒),如果是,節點B立刻發送信息。如果不是,就等待到該時間間隔達到預設周期時立刻發送本幀數據。同理,節點C在收到節點B發送的幀后,通過接收中斷進入和B相同的發送判斷程序,如果這一時刻距離上一次本節點(節點C)發送數據的時間間隔大于發送周期(10-2秒)就立刻發送數據。同理,在后續時刻,每個CPU有條不紊的按次序發送自己的信息,完全避免了幀的碰撞,很好的保障了通信的可靠性和實時性。同時每個CPU都能知道自己發送的時刻,各個節點發送與接收信息之間的時間差僅僅是接收完數據的時間間隔,很好的實現了準同步功能。
同時,從圖中我們可以很清楚的看到,在現有的五個節點的系統中,正常情況下,該五個節點的數據全部發送完成的時間遠遠小于10-2秒,因而留有較多的空閑時間,完全能夠滿足新的節點增加的要求,而不會造成幀的碰撞沖突。
此外,在本系統中,節點A作為系統設計中擁有最高優先級的節點,起到了基準的作用。節點A不管其他節點的發送狀況如何,每到其設定的發送周期時刻(本實例中為10-2秒)就立刻發送數據,其他節點以A為基準能夠校準自己的發送時刻,也就是說由于傳輸延時和接收處理信息造成的誤差不會累加,通信的同步性得到更好的保障。
2.4方法的誤差分析
如前文所述,本方法設定了一個通訊中的初始節點作為基準,所有節點的信息發送都以前一個節點的信息到來作為發送信息的依據。在一次發送周期中,所有節點的發送是有序的,由于只需嚴格遵守本方法的發送規則就可以避免幀的碰撞丟失,若相鄰兩個節點為一對收發節點,在一次發送周期中的信息延時僅僅只是信號從前一節點傳輸到后一節點的時間間隔以及CPU中斷處理的延時,一般情況下這一延時對于一個發送周期的時間長度而言完全可以忽略不計,通信的同步性和實時性較傳統方法有極大的提高。
對于信息采集而言,仍舊以3.3所述系統為例,如果節點D需要接收同一時刻的B、C的信息,那么其收到的信息中B、C兩節點的物理量的時間間隔僅僅為約10-4秒,而在傳統的通信方法中,即使兩節點中僅有一個僅因為一次幀碰撞且仲裁失敗導致漏發一幀而造成的時間間隔為一個發送周期(10-2秒)的采集誤差。因而,采用這一通信方法能夠很好地保證信號采集的同步性。
本方法的一個主要缺點是要求CPU無論是否需要起始節點的數據都要接收起始的CAN信息,增加了CPU的負擔。同時,要求每次發送的起始報文都通過接收中斷方法進入CPU,增加了開支。但是,由于CAN通訊天生的缺陷:為了仲裁機制能夠正確執行,在共享介質上的傳輸延時和位時間相比可以忽略不計是很必要的[10],這一缺陷很大程度上限制了CAN傳輸的通訊速率。一般來說,CAN的最大傳輸速率在傳輸距離為40m時僅有1Mbit/s;另一方面,隨著微電子技術的發展,普通CPU的字長已經基本達到了64位,CPU主頻也基本在2吉赫茲以上。因而對一般的網絡傳輸,尤其是在車輛實時網絡領域,CPU的處理能力完全能勝任這一任務,對幀ID進行實時排列所花費的時間對傳輸實時性和傳輸同步性的影響可以忽略。
圖2所示是8通道壓力信號采集卡TGWH3028的原理圖,圖3是TGWH3028的實物圖,該采集卡可以同時8通道的壓力信號。如圖3所示,U1是32位ARM芯片STM32F103,該芯片價格低廉,性能優異,具有豐富的IO口和內置CAN控制器,實現對8路24位的采集芯片HX711的控制功能,實現采集功能,并且將采集的信息通過CAN傳送到上位機,上位機再將該信息傳送到PC,從而實現信號采集功能。圖3所示的JP1實現CAN站點號設置功能,總線上可以有16個CPU同時工作,便于系統的功能擴充。

圖2 8通道壓力采集和CAN通信原理圖

圖3 實物照片
多個采集卡在同一個CAN網絡通信問題是本采集重點研究內容,不同的TGWH3028通過JP1就可以設置不同的CAN站點號,CPU根據JP的狀態自動設置不同的CAN幀ID,采用幀ID隊列方式進行CAN通訊,實現實時壓力采集功能。
圖4中通道6和通道7是試驗臺壓力信號,可以看出,采集的壓力信號光滑、連續,表明通訊過程中沒有數據丟失,保證了信號的連續性和實時性,也驗證了本方法的有效性。

圖4 信號采集波形
本文介紹了一種基于幀ID隊列的同步CAN采集方法,實現準同步的信號采集結果。該方法的目的是通過建立準同步原則,讓各個CPU按照一個統一的順序發送,從而減少沖突發生的可能性,避免各個CPU無序發送的局面,避免了幀的碰撞,大大提高了通訊的有效數據流量和網絡數據的實時性,同時為各個CPU的信息發送規定對應的幀ID序列,減少了各個CPU因為仲裁沖突而漏發數據幀的情形,很好的保障了信息采集的同時性。
隨著工業科技的發展,工程系統日益復雜,CAN通訊在車輛電控、工業現場等場合的應用將越發普遍。CAN通訊和采集的實時性和同步性對車輛的安全性非常重要,采用本方法對提高車輛的安全性有很好的作用,且不必變更現有CAN系統的硬件,因此應用前景十分廣泛。
參考文獻:
[1]Supriya Kelkar, Rajkamal.“Control area network based quotient remainder compression-algorithm for automotive applications,” in proc.of IECON 2012, 38th Annual Conference of the IEEE Industrial Electronics Society, Montreal, Canada, 2012: 3030-3036,.
[2]Supriya Kelkar, Raj Kamal, “Comparison and analysis of quotient remainder compression algorithms for automotives,” in proc.of INDICON 2012, IEEE International Conference, Kochi, India, 2012: 802-807.
[3]李芳, 劉魯源, 呂偉杰.CAN總線位定時和同步機制的分析[J].電子產品世界, 2005(05): 106-110.LI Fang, LIU Luyuan, LV Weijie.The Analysis of Bit Timing and Synchronization Mechanism of CAN Bus[J].electronic engineering & product world, 2005(05): 106-110.
[4]鄧婕.CAN總線通信原理分析[J].電子設計工程, 2012(07): 104-107.DENG Jie.Analysing communication mechanism of CAN bus[J].Electronic Design Engineering, 2012(07): 104-107.
[5]A.Farahani, G.Latif Shabgahi.A Novel Method for Softening some of the Drowbaks of CAN, Proc.of the Int.corif.Signal Processing Systems, Singapor, 2009: 771-775.
[6]丁旭陽.一種汽車電子控制器通信網絡總線負載的均散化方法: 中國專利, 201010528846.4[P].2011-02-16.
[7]Wang Huan,Wang Lifang,Shan Rongming, Researches on fault diagnosis of time master in TTCAN on hybrid, World Electric Vehicle Journal, 2011, 4(1): 243-248.
[8]G.Buja, R.Pimentel, and A.Zuccollo, Overcoming Babbling idiot Failures in CAN Networks: A Simple and Effective Bus Gurdian Solution for the FlexCAN Arbitration, IEEE Trans on Industrial Informations, 2007, 3(3).
[9]張健.CAN總線中位定時的設定方法[J].河北師范大學學報, 2002, 26(4): 355-358.ZHANG Jian.The Method of the CAN Bit Timming[J].journal of hebei normal university (natural science edition), 2002, 26(4): 355-358.
[10]G.Cena, A.Valenzano.Fastcan: a High-Performance Enhanced CAN-Like Network, IEEE Trans on Industrial Electronics, 2000, 47(4).
A Design of a Dynamic Synchronized Method in CAN
LI Chunyan1, CHEN Jingxuan2
(1.China North Vehicle Research Institute, Beijing 100072, China; 2.School of Mechanical and Vehicular Engineering, Beijing Institute of Technology, Beijing 100081, China)
Abstract:In order to sovle the problems of tough relization of synchronized acquisition of information under the circumstance of multiple nodes, a dynamic autonomous synchronization method is proposed, which bulids a dynamic queue of IDs of frames to tell the time slot when the data to be sent and then realizes the synchronization of acquisition.The method has been tested in an information collection system and achieved great results.
Key words:CAN communication; frame identity queue; dynamic autonomous synchronization
DOI:10.3969/j.issn.2095-6649.2015.04.08
作者簡介:李春艷(1967-),男,中國北方車輛研究所研究員,主要研究方向:車輛電子;陳敬軒(1992-),男, 北京理工大學機械與車輛學院交通工程碩士,主要研究方向:交通信息采集與信號處理。
Citation: LI Chunyan, CHEN Jingxuan.A Design of a Dynamic Synchronized Method in CAN [J].The Journal of New Industrialization, 2015, 5(4): 55?60.