李春艷,陳敬軒
(1.中國北方車輛研究所, 北京 100072;2.北京理工大學(xué)機(jī)械與車輛學(xué)院, 北京 100081)
CAN通訊中的一種動態(tài)自同步方法設(shè)計
李春艷1,陳敬軒2
(1.中國北方車輛研究所, 北京 100072;2.北京理工大學(xué)機(jī)械與車輛學(xué)院, 北京 100081)
摘 要:解決CAN通訊在網(wǎng)絡(luò)負(fù)載大的時較為突出的因為無序發(fā)送和異步通訊導(dǎo)致的信號實時采集難以實現(xiàn)的問題提出了一種同步采集方法,通過在CPU內(nèi)存中建立幀ID隊列的方式,讓每個幀都能找到對應(yīng)的發(fā)送時刻,實現(xiàn)同步采集的功能。該方法已經(jīng)在一個實際的數(shù)據(jù)采集系統(tǒng)中得到檢驗并取得良好效果。
關(guān)鍵詞:CAN通訊;ID隊列;步采集
本文引用格式:李春艷,陳敬軒.CAN通訊中的一種動態(tài)自同步方法設(shè)計[J].新型工業(yè)化,2015,5(4):55-60
CAN總線作為最初就專門為車輛通訊設(shè)計的現(xiàn)場總線,在車間通訊和車聯(lián)網(wǎng)領(lǐng)域有著不可或缺的作用[1-2]。但是,在車輛電子控制領(lǐng)域,如何保證收發(fā)端數(shù)據(jù)的同步,即接收端可以正確接收和解析發(fā)送端的數(shù)據(jù),對保證行車安全,提高車輛的操縱穩(wěn)定性和燃油經(jīng)濟(jì)性有著舉足輕重的地位。采用異步串行通信協(xié)議的CAN總線協(xié)議,盡管具有布線簡單,實現(xiàn)容易等獨(dú)特優(yōu)勢,也不可避免的面臨如何保證各個CPU通訊的同步一致的問題。現(xiàn)有的CAN控制器采用的硬同步和再同步機(jī)制在節(jié)點數(shù)量少,網(wǎng)絡(luò)負(fù)載輕的傳輸環(huán)境中有著較為良好的效果。但是,在節(jié)點數(shù)量變化的工程現(xiàn)場尤其是節(jié)點數(shù)目較多的車輛電子控制系統(tǒng)中,由于各節(jié)點受振蕩器容差的影響不盡相同,重同步機(jī)制中的各個節(jié)點的相位調(diào)整段長度和同步跳轉(zhuǎn)寬度難以計算,各個節(jié)點的同步效果并不理想[3]。
同時,當(dāng)節(jié)點數(shù)目較少時,CAN總線的仲裁機(jī)制能夠較好的保障通訊的可靠性和實時性,但是在節(jié)點數(shù)目較多時,因為沖突導(dǎo)致的丟幀現(xiàn)象頻發(fā),低優(yōu)先級節(jié)點往往因為數(shù)次競爭總線使用權(quán)失敗而無法正常工作,通訊的可靠性無法得到保障[4]?,F(xiàn)有的動態(tài)優(yōu)先級算法[5]和負(fù)載均散方法[6]依舊難以避免幀碰撞,TTCAN等對CAN協(xié)議的改進(jìn)也因為和CAN協(xié)議不兼容的問題難以進(jìn)行實際應(yīng)用[7]。
除此之外,在實際工程系統(tǒng)比如車輛控制系統(tǒng)中,為保證控制信息的有效性和可靠性,核心控制系統(tǒng)需要盡可能的采集到同一時刻的各個物理信息,比如節(jié)氣門開度和油溫信息等以便處理。這一要求在傳統(tǒng)的CAN總線通信中很難滿足。
為此,本文提出了一種基于幀ID隊列的動態(tài)自同步CAN通訊方法,參與通訊的每個CPU都在內(nèi)存中建立一個幀ID隊列,再把本CPU要發(fā)送的幀在這個幀隊列中重新定位,只有當(dāng)本CPU的幀ID時間到,才發(fā)送數(shù)據(jù),這樣就可以避免發(fā)生幀沖突,從而大大提高CAN通訊成功率,確保實時信息采集的可靠性和實時性,使得每個CPU都可以預(yù)測自己的信息發(fā)送時刻,實現(xiàn)準(zhǔn)同步功能。該方法已經(jīng)在一個實際的數(shù)據(jù)采集系統(tǒng)中得到檢驗,并取得了良好效果。
1.1傳統(tǒng)CAN通信的信息采集誤差
在CAN總線通信現(xiàn)場,各個節(jié)點往往在實時的采集信息然后在需要的時刻發(fā)送其當(dāng)前采集到的數(shù)據(jù)。但是,因為CAN總線通信的特點,同一時刻只允許有一個幀傳輸,因而要想某一節(jié)點想要收到完全相同時刻的其余任意節(jié)點數(shù)據(jù)是不可能實現(xiàn)的,只能盡可能縮短并且控制二者的時間間隔。
假設(shè)系統(tǒng)中某一節(jié)點A需要接收同一時刻ti節(jié)點B、C采集到的數(shù)據(jù)。對單一節(jié)點而言,該節(jié)點不可能持續(xù)不斷的發(fā)送數(shù)據(jù),占用內(nèi)存。因而在工程現(xiàn)場,往往會為節(jié)點設(shè)定一個發(fā)送周期,該節(jié)點每隔該周期發(fā)送一次數(shù)據(jù)。根據(jù)節(jié)點采集數(shù)據(jù)的重要性,各個節(jié)點的發(fā)送周期不盡相同。為了實現(xiàn)采集的同步,設(shè)置B的發(fā)送間隔為10ms,C的發(fā)送間隔為11ms,如此一來,在理想情況下,節(jié)點A就能接收到B、C之間間隔為1ms的信息,準(zhǔn)同步采集能夠?qū)崿F(xiàn)。
但是,在一般情況下,由于CAN總線的廣播特性,各個節(jié)點都有權(quán)利征用總線傳輸信息,總線沖突較為嚴(yán)重。假設(shè)某一時刻節(jié)點B發(fā)送的信息和一優(yōu)先級較高的信息發(fā)生沖突,此時節(jié)點B因為仲裁失敗停止發(fā)送該幀信息而等到下一個發(fā)送周期再發(fā)送信息。如此一來,該時刻節(jié)點A采集到的B、C數(shù)據(jù)就相差了10ms。當(dāng)節(jié)點數(shù)目眾多時,幀碰撞嚴(yán)重,由于仲裁失敗導(dǎo)致的采集時刻差難以計算和控制,同步采集無法實現(xiàn)。
1.2傳統(tǒng)CAN同步方式的缺陷
當(dāng)CAN系統(tǒng)中節(jié)點數(shù)目較少時,因為幀碰撞較少,由于仲裁的其他因素引起的幀延時較小也較為固定,此時,硬同步和重同步方式能較好的實現(xiàn)收發(fā)節(jié)點間信號的準(zhǔn)同步,逐位仲裁造成的丟幀不多。但當(dāng)網(wǎng)絡(luò)中節(jié)點數(shù)目較多,網(wǎng)絡(luò)負(fù)載較重時,幀碰撞嚴(yán)重,傳輸延時難以確定,通訊的可靠性和實時性難以保障[8]。同時,實際工程中位定時的參數(shù)受振蕩器容差和最大總線長度的影響很難確定。參考文獻(xiàn)[9]中詳細(xì)介紹了重同步中各參數(shù)及延遲時間的計算和CAN控制器的配置,本文不再贅述。
此外,當(dāng)幀碰撞劇烈時,如前文所述的因為因仲裁導(dǎo)致的信息采集不同步問題變得格外嚴(yán)重,信息的同步采集幾乎無法實現(xiàn)。
2.1方法的提出
為了實現(xiàn)準(zhǔn)同步的信息發(fā)送和采集功能,我們希望能夠給各個CPU定義一個有順序的發(fā)送隊列,每個CPU都按照這個發(fā)送隊列有序的發(fā)送消息。每當(dāng)隊列中的前一節(jié)點發(fā)送完信息之后,后一節(jié)點立刻發(fā)送信息。這樣一來,相鄰兩節(jié)點間的時間延時僅僅只是每幀數(shù)據(jù)發(fā)送所需要的時間,這一時間和節(jié)點的發(fā)送周期相比一般微乎其微,在硬同步機(jī)制的幫助下,系統(tǒng)通信的同步性能得到更好的保障。
本文引入一種基于幀ID隊列的同步采集方法,通過軟件,在各個CPU中按照所發(fā)送的數(shù)據(jù)幀的優(yōu)先級(即幀ID的大?。┻M(jìn)行排序,形成一個優(yōu)先級由高到低的隊列。系統(tǒng)工作時,各個CPU都接收總線上初始幀數(shù)據(jù)(通過驗收濾波器實現(xiàn)),動態(tài)調(diào)整隊列,當(dāng)CPU需要發(fā)送某幀信息時,先在軟件中判斷隊列中的初始幀是否已經(jīng)接收。如果是,則立刻發(fā)送本幀數(shù)據(jù)。如此一來,各自CPU的幀ID都可以找到自己發(fā)送數(shù)據(jù)的時刻,只要全部的節(jié)點都嚴(yán)格按照這個方式通訊,就可以保證同一時刻只有一個CPU向總線發(fā)送數(shù)據(jù),不會發(fā)生幀碰撞,大大減少幀沖突,提高CAN通訊的數(shù)據(jù)量和通信的同步性。同時,也使得數(shù)據(jù)采集的時間間隔變得可控,同步采集得以實現(xiàn)。
2.2方法的內(nèi)容
2.2.1初始幀ID隊列和幀發(fā)送的時刻
上電啟動后,各個CPU都有一個缺省的幀隊列,該隊列是進(jìn)行系統(tǒng)設(shè)計時已經(jīng)規(guī)劃好的隊列,作為起始發(fā)送數(shù)據(jù)順序隊列。
系統(tǒng)工作時,每當(dāng)總線上有幀成功發(fā)送完畢,CPU就通過接收中斷進(jìn)入程序,提取該幀的幀ID并和隊列中原有的幀ID一同進(jìn)行比較排列,優(yōu)先級高的(幀ID數(shù)值小的)排在隊列的前面,優(yōu)先級低的(幀ID數(shù)值大的)排在隊伍的后面。同時,每個CPU都把自己要發(fā)送的本幀數(shù)據(jù)的幀ID根據(jù)相同的方法插入這個隊列中,形成一個完整的幀ID隊列。
可以看出,各個CPU中的幀ID隊列是不斷動態(tài)變化的,而且每個CPU中的幀ID隊列不一定完全一致。
2.2.2幀發(fā)送的方法
CPU在完成對系統(tǒng)CAN的初始化之后,每當(dāng)某個CPU得知其隊列中上一幀已經(jīng)成功發(fā)送時,就立刻通過接收中斷進(jìn)入軟件,判斷當(dāng)前系統(tǒng)時刻距離上一次本CPU發(fā)送信息的時間間隔是否大于本CPU預(yù)設(shè)的發(fā)送周期,如果是,則立刻發(fā)送本幀數(shù)據(jù),如果不是,就等待時間間隔達(dá)到CPU預(yù)設(shè)的發(fā)送周期后立刻發(fā)送本幀數(shù)據(jù)。
2.3方法的一個實例
為了更好地說明本方法的工作原理,現(xiàn)舉一個具體例子闡述采用動態(tài)自同步方法傳輸數(shù)據(jù)的CPU工作情況。假設(shè)某系統(tǒng)中有A~E五個CPU節(jié)點。為敘述方便,假設(shè)每個節(jié)點有且僅有一個幀ID(即每個節(jié)點只發(fā)送一種數(shù)據(jù)幀),其幀ID由小到大依次為:A、B、C、D、E。系統(tǒng)中每個節(jié)點的發(fā)送周期相同,均設(shè)為10-2秒。每個CPU中定時器的時間間隔均設(shè)為10-4秒。CAN總線以其所能達(dá)到的最大通訊速率即1Mbps工作。
圖1 第一個發(fā)送周期的通訊情況
上電啟動前,各個CPU內(nèi)部事先約定了一個發(fā)送隊列。按照其優(yōu)先級由高到低排列為:A、B、C、D、E。該隊列儲存在CPU的內(nèi)存中。圖1展示了第一個發(fā)送周期:0~10-2秒,各個節(jié)點發(fā)送信息的情況。橫軸的總長度是一個發(fā)送周期即10-2秒。相鄰兩點間的時間間隔的意義是隊列中的前一節(jié)點發(fā)送信息的時間(t1)到隊列中的后一節(jié)點得知前一節(jié)點已經(jīng)發(fā)送完畢(這一功能在CPU的其他硬件中實現(xiàn))的時間(t2),這二者的時間間隔(δt=t2-t1)就是圖中相鄰兩點橫坐標(biāo)的間隔。因為本實例中假設(shè)CAN總線的通訊速率是1Mbps,因而在正常情況下,10-4秒足夠使得每幀數(shù)據(jù)傳輸完畢,因此這里設(shè)置10-4秒為后續(xù)節(jié)點等待的時間間隔。時刻1,A節(jié)點作為事先約定的初始節(jié)點首先發(fā)送信息。因為每個節(jié)點都接收總線上的數(shù)據(jù),因而當(dāng)節(jié)點A傳送完畢后,每個節(jié)點都知道節(jié)點A的數(shù)據(jù)已經(jīng)發(fā)送。一旦節(jié)點B發(fā)現(xiàn)節(jié)點A已經(jīng)完成了數(shù)據(jù)的傳輸,那么節(jié)點B立刻通過接收中斷標(biāo)志進(jìn)入圖中所示時刻2,而后節(jié)點B判斷這一時刻距離上一次本節(jié)點(節(jié)點B)發(fā)送數(shù)據(jù)的時間間隔是否已經(jīng)大于發(fā)送周期(10-2秒),如果是,節(jié)點B立刻發(fā)送信息。如果不是,就等待到該時間間隔達(dá)到預(yù)設(shè)周期時立刻發(fā)送本幀數(shù)據(jù)。同理,節(jié)點C在收到節(jié)點B發(fā)送的幀后,通過接收中斷進(jìn)入和B相同的發(fā)送判斷程序,如果這一時刻距離上一次本節(jié)點(節(jié)點C)發(fā)送數(shù)據(jù)的時間間隔大于發(fā)送周期(10-2秒)就立刻發(fā)送數(shù)據(jù)。同理,在后續(xù)時刻,每個CPU有條不紊的按次序發(fā)送自己的信息,完全避免了幀的碰撞,很好的保障了通信的可靠性和實時性。同時每個CPU都能知道自己發(fā)送的時刻,各個節(jié)點發(fā)送與接收信息之間的時間差僅僅是接收完數(shù)據(jù)的時間間隔,很好的實現(xiàn)了準(zhǔn)同步功能。
同時,從圖中我們可以很清楚的看到,在現(xiàn)有的五個節(jié)點的系統(tǒng)中,正常情況下,該五個節(jié)點的數(shù)據(jù)全部發(fā)送完成的時間遠(yuǎn)遠(yuǎn)小于10-2秒,因而留有較多的空閑時間,完全能夠滿足新的節(jié)點增加的要求,而不會造成幀的碰撞沖突。
此外,在本系統(tǒng)中,節(jié)點A作為系統(tǒng)設(shè)計中擁有最高優(yōu)先級的節(jié)點,起到了基準(zhǔn)的作用。節(jié)點A不管其他節(jié)點的發(fā)送狀況如何,每到其設(shè)定的發(fā)送周期時刻(本實例中為10-2秒)就立刻發(fā)送數(shù)據(jù),其他節(jié)點以A為基準(zhǔn)能夠校準(zhǔn)自己的發(fā)送時刻,也就是說由于傳輸延時和接收處理信息造成的誤差不會累加,通信的同步性得到更好的保障。
2.4方法的誤差分析
如前文所述,本方法設(shè)定了一個通訊中的初始節(jié)點作為基準(zhǔn),所有節(jié)點的信息發(fā)送都以前一個節(jié)點的信息到來作為發(fā)送信息的依據(jù)。在一次發(fā)送周期中,所有節(jié)點的發(fā)送是有序的,由于只需嚴(yán)格遵守本方法的發(fā)送規(guī)則就可以避免幀的碰撞丟失,若相鄰兩個節(jié)點為一對收發(fā)節(jié)點,在一次發(fā)送周期中的信息延時僅僅只是信號從前一節(jié)點傳輸?shù)胶笠还?jié)點的時間間隔以及CPU中斷處理的延時,一般情況下這一延時對于一個發(fā)送周期的時間長度而言完全可以忽略不計,通信的同步性和實時性較傳統(tǒng)方法有極大的提高。
對于信息采集而言,仍舊以3.3所述系統(tǒng)為例,如果節(jié)點D需要接收同一時刻的B、C的信息,那么其收到的信息中B、C兩節(jié)點的物理量的時間間隔僅僅為約10-4秒,而在傳統(tǒng)的通信方法中,即使兩節(jié)點中僅有一個僅因為一次幀碰撞且仲裁失敗導(dǎo)致漏發(fā)一幀而造成的時間間隔為一個發(fā)送周期(10-2秒)的采集誤差。因而,采用這一通信方法能夠很好地保證信號采集的同步性。
本方法的一個主要缺點是要求CPU無論是否需要起始節(jié)點的數(shù)據(jù)都要接收起始的CAN信息,增加了CPU的負(fù)擔(dān)。同時,要求每次發(fā)送的起始報文都通過接收中斷方法進(jìn)入CPU,增加了開支。但是,由于CAN通訊天生的缺陷:為了仲裁機(jī)制能夠正確執(zhí)行,在共享介質(zhì)上的傳輸延時和位時間相比可以忽略不計是很必要的[10],這一缺陷很大程度上限制了CAN傳輸?shù)耐ㄓ嵥俾?。一般來說,CAN的最大傳輸速率在傳輸距離為40m時僅有1Mbit/s;另一方面,隨著微電子技術(shù)的發(fā)展,普通CPU的字長已經(jīng)基本達(dá)到了64位,CPU主頻也基本在2吉赫茲以上。因而對一般的網(wǎng)絡(luò)傳輸,尤其是在車輛實時網(wǎng)絡(luò)領(lǐng)域,CPU的處理能力完全能勝任這一任務(wù),對幀ID進(jìn)行實時排列所花費(fèi)的時間對傳輸實時性和傳輸同步性的影響可以忽略。
圖2所示是8通道壓力信號采集卡TGWH3028的原理圖,圖3是TGWH3028的實物圖,該采集卡可以同時8通道的壓力信號。如圖3所示,U1是32位ARM芯片STM32F103,該芯片價格低廉,性能優(yōu)異,具有豐富的IO口和內(nèi)置CAN控制器,實現(xiàn)對8路24位的采集芯片HX711的控制功能,實現(xiàn)采集功能,并且將采集的信息通過CAN傳送到上位機(jī),上位機(jī)再將該信息傳送到PC,從而實現(xiàn)信號采集功能。圖3所示的JP1實現(xiàn)CAN站點號設(shè)置功能,總線上可以有16個CPU同時工作,便于系統(tǒng)的功能擴(kuò)充。
圖2 8通道壓力采集和CAN通信原理圖
圖3 實物照片
多個采集卡在同一個CAN網(wǎng)絡(luò)通信問題是本采集重點研究內(nèi)容,不同的TGWH3028通過JP1就可以設(shè)置不同的CAN站點號,CPU根據(jù)JP的狀態(tài)自動設(shè)置不同的CAN幀ID,采用幀ID隊列方式進(jìn)行CAN通訊,實現(xiàn)實時壓力采集功能。
圖4中通道6和通道7是試驗臺壓力信號,可以看出,采集的壓力信號光滑、連續(xù),表明通訊過程中沒有數(shù)據(jù)丟失,保證了信號的連續(xù)性和實時性,也驗證了本方法的有效性。
圖4 信號采集波形
本文介紹了一種基于幀ID隊列的同步CAN采集方法,實現(xiàn)準(zhǔn)同步的信號采集結(jié)果。該方法的目的是通過建立準(zhǔn)同步原則,讓各個CPU按照一個統(tǒng)一的順序發(fā)送,從而減少沖突發(fā)生的可能性,避免各個CPU無序發(fā)送的局面,避免了幀的碰撞,大大提高了通訊的有效數(shù)據(jù)流量和網(wǎng)絡(luò)數(shù)據(jù)的實時性,同時為各個CPU的信息發(fā)送規(guī)定對應(yīng)的幀ID序列,減少了各個CPU因為仲裁沖突而漏發(fā)數(shù)據(jù)幀的情形,很好的保障了信息采集的同時性。
隨著工業(yè)科技的發(fā)展,工程系統(tǒng)日益復(fù)雜,CAN通訊在車輛電控、工業(yè)現(xiàn)場等場合的應(yīng)用將越發(fā)普遍。CAN通訊和采集的實時性和同步性對車輛的安全性非常重要,采用本方法對提高車輛的安全性有很好的作用,且不必變更現(xiàn)有CAN系統(tǒng)的硬件,因此應(yīng)用前景十分廣泛。
參考文獻(xiàn):
[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ī)制的分析[J].電子產(chǎn)品世界, 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].電子設(shè)計工程, 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]丁旭陽.一種汽車電子控制器通信網(wǎng)絡(luò)總線負(fù)載的均散化方法: 中國專利, 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總線中位定時的設(shè)定方法[J].河北師范大學(xué)學(xué)報, 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-),男, 北京理工大學(xué)機(jī)械與車輛學(xué)院交通工程碩士,主要研究方向:交通信息采集與信號處理。
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.