季霆
?。贤ù髮W 電氣工程學院,江蘇 南通226000)
摘要:高精度和高可靠的時鐘同步方法是CAN總線能夠安全運行的關鍵,在分析主從、協(xié)商同步特點的基礎上,提出了一種基于CAN總線的單主時鐘協(xié)商同步方法,該方法僅需要一個時鐘同步主節(jié)點即可實現(xiàn)總線的可靠運轉,當從節(jié)點失效時利用CAN總線的時鐘特性及時對即時偏差進行估計,使總線各節(jié)點依然能夠正常工作,并引入時鐘方差的概念更新主時鐘同步優(yōu)先級列表選擇新的主節(jié)點。最后利用CANoe軟件對該方法進行仿真,并利用51單片機、SJA1000T以及TJA1050構建硬件實驗平臺,結果表明該時鐘同步機制能夠防止單節(jié)點失效,可靠性高,具有更高的同步精度。
關鍵詞:時鐘同步;即時偏差;主時鐘選擇;時鐘方差
中圖分類號:U469文獻標識碼:ADOI: 10.19358/j.issn.1674-7720.2016.24.018
引用格式:季霆. 基于CAN總線的單主時鐘同步方法研究[J].微型機與應用,2016,35(24):61-65,69.
0引言
控制器局域網(wǎng)(Controller Area Network,CAN)是目前應用最廣泛的總線之一,其具有實時性好、抗干擾能力強、可靠性高的優(yōu)點,因此受到越來越多用戶的青睞。目前國內(nèi)外對CAN總線進行了大量的研究,希望提高總線系統(tǒng)運行的精度和安全,本文以時鐘同步算法為研究對象,對CAN總線進行研究。
國內(nèi)外諸多文獻對該領域進行了研究,文獻[1]提出了基于主從配置的CAN總線時鐘同步算法,只需要發(fā)送一條同步消息即可保證網(wǎng)絡中所有節(jié)點的同步,節(jié)省了網(wǎng)絡資源,但是主節(jié)點一旦失效就無法實現(xiàn)時鐘同步。文獻[2]在協(xié)商時鐘同步方法[34]的基礎上提出了一種基于軟件的“前期協(xié)商”時鐘同步方法,該算法引入了同步主節(jié)點優(yōu)先級表的概念,在主節(jié)點失效時根據(jù)同步主節(jié)點優(yōu)先級表選擇新的主時鐘節(jié)點,既實現(xiàn)了節(jié)點容錯錯,也減少了網(wǎng)絡同步開銷,然而該方法中同步主節(jié)點優(yōu)先級表一旦建立無法改變,降低了時鐘選擇的實時性,并且對網(wǎng)絡延時考慮較少,也降低了同步精度。文獻[5]在分析主從、協(xié)商等同步算法的基礎上,提出了基于最小“相對即時偏差”的主從協(xié)商選擇方法(以下簡稱為“相對偏差選擇方法”),該方法可以在主時鐘節(jié)點失效時協(xié)商選擇出新的主時鐘節(jié)點,并且給出了網(wǎng)絡延時的測算方法,獲得了更高的時鐘精度,但是該方法并沒有考慮各個節(jié)點之間由于距離、溫度等原因而造成的網(wǎng)絡延時誤差。
本文在上述時鐘同步方法的基礎上,對CAN總線時鐘同步過程進行研究,提出了一種基于CAN總線的單主時鐘協(xié)商同步選擇方法,該方法對即時偏差與網(wǎng)絡延時測算方法進行了改進,可以提高CAN系統(tǒng)同步精度,減少網(wǎng)絡負載率。
1CAN時鐘同步基本問題描述
1.1CAN時鐘同步
CAN總線時鐘同步可分為應用層時鐘同步和物理層時鐘同步,其中物理層同步又分為硬同步和重同步,只有物理層同步準確無誤,應用層時鐘同步才能被正確執(zhí)行[58]。本文主要對應用層時鐘同步進行研究,通過對從節(jié)點相對于主節(jié)點的即時偏差進行測量計算,從而對本地時鐘進行調(diào)節(jié),以獲得更加精確的時間信息。
1.2時鐘同步基本問題描述
在CAN總線上,每個節(jié)點時鐘均由其內(nèi)部時鐘振蕩器驅(qū)動,每個振蕩器都產(chǎn)生一定頻率的脈沖,同時每個節(jié)點內(nèi)部都包含一個軟件計數(shù)器對脈沖進行計數(shù)。若節(jié)點k時鐘振蕩器的頻率為fk(t),那么該節(jié)點計數(shù)器的值稱為節(jié)點k的本地時鐘Tk(t)。本地時鐘Tk(t)可由式(1)計算[9],其中t0為節(jié)點k初始時刻的實際時刻,Tk(t0)為節(jié)點k在初始時刻的本地時鐘。
Tk(t)=∫tt0fk(t)dt+Tk(t0)(1)
若令節(jié)點k在第m個時鐘同步周期的實際起始時刻為tm0,實際結束時刻為tmf,則在一個同步周期T(T=tmf-tm0)內(nèi),由于時間較短,振蕩器保持穩(wěn)定不發(fā)生劇烈頻偏,為了方便討論,假設節(jié)點k在該時鐘同步周期內(nèi)的時鐘振蕩頻率為一定值fmk,那么由式(1)可得節(jié)點k在第m個時鐘周期內(nèi)的本地時間為:
Tmk(t)=fmk[t-tm0]+Tmk(t0)
(tm0<t≤tmf)(2)
在一個CAN總線系統(tǒng)中,由于各節(jié)點的時鐘振蕩器受到內(nèi)部或者外部環(huán)境的影響,產(chǎn)生的脈沖頻率并不相同,導致節(jié)點時鐘產(chǎn)生漂移,時鐘漂移的程度通常用漂移率ρ來描述,即1臺時鐘每1 s偏離標準時間的微秒數(shù)。那么在一個時鐘同步周期T內(nèi),由于時鐘漂移而產(chǎn)生的主節(jié)點與從節(jié)點之間的時鐘差值稱之為時鐘偏差,記某一從節(jié)點k相對于主節(jié)點i的即時偏差[10] Tmoffset(t)=Tmi(t)-Tmk(t)(tm0<t≤tmf),將式(2)帶入該式可得:
Tmoffset(t)=[fmi-fmk][t-tm0]+Tmi(t0)-Tmk(t0)(tm0<t≤tmf)(3)
在時鐘同步過程中,漂移往往是一個連續(xù)的過程,所以從節(jié)點k第m次時鐘同步的時間漂移率ρmk=Tmoffset/T。
為了保證CAN系統(tǒng)的時鐘精度,總線上各從節(jié)點每隔一個時鐘同步周期需要根據(jù)本節(jié)點與主節(jié)點之間的時間偏差對本地時鐘以及時鐘頻率進行調(diào)整。假設節(jié)點k在第m-1個時鐘同步周期結束時刻tm-1f開始測量計算該時刻的即時偏差,第m個時鐘同步周期開始時刻tm0完成測量計算并對本地時鐘以及時鐘頻率進行調(diào)整,調(diào)整的值分別為ΔTmk=Tm-1offset(tf)=Tmi(tf)-Tmk(tf)和Δfmk=ρm-1k=Tm-1offset(tf)/T。
由于tm0-tm-1f的值相對于時鐘同步周期T來說很小,可以近似看作為0,因此本地時鐘和時鐘頻率有如下關系:
Tmi(t0)=Tm-1i(tf)
Tmk(t0)=Tm-1k(tf)-ΔTmk
fmk=fm-1k-Δfmk+ρm-1k
fmi=fm-1i+ρm-1i(4)
其中ρm-1i和ρm-1k分別是主節(jié)點i和從節(jié)點k在第m-1個時鐘同步周期內(nèi)產(chǎn)生的漂移率。將式(4)帶入式(3)可得:
Tmoffset(t)=[ρm-1i-ρm-1k][t-tm0](tm0<t≤tmf)(5)
假設主節(jié)點i和從節(jié)點k處于相同環(huán)境下,那么在同一時間段內(nèi)(一個時間同步周期)ρm-1i-ρm-1k可以看作為一個定值ρm-1,那么帶入式(5)可得:
Tmoffset(t)=ρm-1[t-tm0](tm0<t≤tmf)(6)
圖1給出主從節(jié)點本地時鐘之間的關系,實線為主節(jié)點本地時鐘與實際時間之間的關系,虛線為從節(jié)點本地時鐘與實際時間之間的關系。
2基于CAN總線的單主節(jié)點協(xié)商同步算法
2.1即時偏差計算
為了測量計算第m個時鐘同步周期的即時偏差Tmoffset,引入以下兩個特殊報文:Sync報文和Resp報文,Sync報文用于同步從節(jié)點和主節(jié)點周期性發(fā)送,Resp報文為Sync報文的響應報文,Resp報文內(nèi)包含Sync報文到達從節(jié)點到達時間等信息[11]。
即時偏差Tmoffset測算過程如圖2所示。主節(jié)點i按照定義的時間間隔T周期性地廣播Sync報文,在第m個周期起始時刻t0(節(jié)點i的本地時鐘為Tmi(t0))向總線上從節(jié)點發(fā)送Sync報文;t1時刻總線上從節(jié)點k接收到Sync報文并記下接收到Sync報文的時間(節(jié)點k的本地時鐘為Tmk(t1))。因此,由式(2)可得:
Tmi(t0)=Tm-1i+Tm-1i(t0)=Tfm-1i+Tm-1i(t0)
Tmk(t0)=Tm-1k+Tm-1k(t0)=T(fm-1k+Δfm-1k+ηmk)+ΔTm-1k+Tm-1k(t0)(7)
其中Tm-1i和Tm-1k分別是主節(jié)點i和從節(jié)點k在第(m-1)個時鐘同步周期內(nèi)的本地時間間隔,假設總線上同一個消息的網(wǎng)絡傳輸延時是相等的,可得Tm-1k(t1)=Tm-1k(t0)+Tdelay,Tmk(t1)=Tmk(t0)+Tdelay,那么帶入(7)式中可得:
Tmk(t1)=Tm-1k+Tm-1k(t1)(8)
由式(7)和(8)可得Tm-1i和Tm-1k的表示式:Tm-1i=Tmi(t0)-Tm-1i(t0),Tm-1k=Tmk(t1)-Tm-1k(t1)。此時,從節(jié)點k可以計算出第m個時鐘同步周期開始時刻即(m-1)個時鐘同步周期結束時刻的即時偏差:
Tmoffset(t0)=Tmi(t0)-Tmk(t0)
=Tm-1i(t0)-Tm-1k(t0)+(Tm-1i-Tm-1k)
=Tm-1offset(t0)+[Tmi(t0)-Tm-1i(t0)-Tmk(t1)+Tm-1k(t1)](9)
由于在(m-1)個時鐘同步周期開始時刻,從節(jié)點k已經(jīng)根據(jù)前一時鐘同步周期所測量計算的即時偏差對本地時鐘進行調(diào)整,因此式(9)中的Tm-1offset(t0)≈0,即時偏差如式(10)所示:
Tmoffset(t0)=Tmi(t0)-Tm-1i(t0)-Tmk(t1)+Tm-1k(t1)(10)
其中Tm-1i(t0),Tm-1k(t1)的值已經(jīng)在上一個時鐘同步周期保存在從節(jié)點k中,新值測量計算完成,自動保存。從節(jié)點完成即時偏差的測量和計算后,即對本地時鐘以及時鐘頻率進行調(diào)整,調(diào)整值分別為ΔTmk和Δfmk。
ΔTmk=Tmi(t0)-Tm-1i(t0)-Tmk(t1)+Tm-1k(t1)
Δfmk=ΔTmk/Tm-1k=Tmi(t0)-Tm-1i(t0)-Tmk(t1)+Tm-1k(t1)
=[Tmi(t0)-Tm-1i(t0)-Tmk(t1)+Tm-1k(t1)]/[Tmk(t1)-Tm-1k(t1)](11)
當從節(jié)點k完成時鐘同步,t2時刻(節(jié)點k的本地時鐘為Tmk(t2)),從節(jié)點k將向主節(jié)點i發(fā)送Resp報文,Resp報文中包含Tmoffset(t0),Tmi(t0),Tmk(t1)的值。
2.2主時鐘失效選擇
為了保證總線安全可靠地運行,避免主時鐘節(jié)點失效而造成系統(tǒng)癱瘓,網(wǎng)絡中往往需要多個主節(jié)點。若總線網(wǎng)絡中僅有一個主節(jié)點,那么就需要引入一種選擇機制來確保系統(tǒng)能夠在主節(jié)點失效后快速確立新的主節(jié)點。文獻[2]中通過在主時鐘同步優(yōu)先級列表中預先設置優(yōu)先級的方法來達到選擇新主節(jié)點的目的,但是該優(yōu)先級表一旦確立將無法改變,導致選擇新的主節(jié)點之后精度變低。本文在原主時鐘同步優(yōu)先級列表的基礎上提出一種基于實時優(yōu)先級的主時鐘同步優(yōu)先級列表。
為了能夠?qū)崟r評價各個節(jié)點的優(yōu)先級,引入時鐘方差的概念[1213]:
每個時鐘同步周期從節(jié)點都能通過式(12)計算出時鐘方差σ2,并在網(wǎng)絡中廣播,每個節(jié)點對σ2值進行排序,更新主時鐘同步優(yōu)先級列表。σ2值越小說明該節(jié)點越穩(wěn)定,則在主時鐘同步優(yōu)先級列表中的優(yōu)先級越高。
在通信過程中,若總線發(fā)生如下情況之一則認為主節(jié)點發(fā)生故障:(1)兩節(jié)點成功接收消息的時刻差值Δ>ΔΓtight(ΔΓtight是CAN總線緊密性極限);(2)同步周期內(nèi),從節(jié)點在規(guī)定時間內(nèi)未收到同步消息或者即時偏差超過正常范圍(|Tmoffset|>(1+ρmk)ΔΓtight),則系統(tǒng)判定主節(jié)點發(fā)生故障,錯誤計數(shù)器+1,此時從節(jié)點k就要對即時時鐘偏差做出估計,該周期時鐘偏差的估計值Tmoffset(t)如下式所示。
如果該節(jié)點故障次數(shù)達到設定值n,則從節(jié)點k認為該主節(jié)點i失效,向總線各節(jié)點發(fā)出更換主節(jié)點的請求。其他節(jié)點接收請求,檢查錯誤計數(shù)器并做出反饋,若錯誤計數(shù)器達到n/2,則同意,否則反對。當同意更換主節(jié)點數(shù)超過50%時,系統(tǒng)掃描主時鐘同步優(yōu)先級列表,選擇優(yōu)先級最高的節(jié)點成為主節(jié)點,并向總線上所有節(jié)點發(fā)送確認消息。
2.3基于CAN總線的單主節(jié)點協(xié)商同步算法
本文建立了一種基于CAN總線的單主時鐘協(xié)商同步算法,如圖3所示。
具體步驟如下:
?。?)初始化設置,設置CAN控制寄存器,錯誤計數(shù)器M置0,更新時鐘同步優(yōu)先級列表,選擇初始優(yōu)先級最高的節(jié)點i作為主時鐘節(jié)點。
?。?)主時鐘節(jié)點i按照定義的時間間隔T周期性地廣播Sync報文,記錄該時刻的本地時鐘,第m個時鐘同步周期的時刻記為Tmi(t0);成功接收到該Sync報文的從節(jié)點k記錄接收時刻的本地時鐘,記為Tmk(t1)。
?。?)計算Tmoffset(t0),各從節(jié)點根據(jù)式(10)計算出本節(jié)點與主節(jié)點之間的即時偏差Tmoffset(t0),若|Tmoffset|≤(1+ρmk)ΔΓtight,則根據(jù)式(11)計算從節(jié)點本地時鐘以及頻率的調(diào)整值ΔTmk和Δfmk,令本地時鐘Tmk(t)=Tmk(t)+ΔTmk,fmk=fmk+Δfmk+η,否則錯誤計數(shù)器M=M+1,根據(jù)式(13)計算出從節(jié)點在該時鐘周期內(nèi)的時鐘偏差估計值Tmoffset(t),從而得出調(diào)整值的估計值ΔTmk、Δfmk ,并對節(jié)點時鐘進行調(diào)整。圖3基于CAN總線的單主時鐘同步算法(4)各從節(jié)點完成時鐘同步測量計算過程后,保存各值并向總線上其他節(jié)點發(fā)送Resp報文,該報文包括Tmoffset(t0)、Tmi(t0)、Tmk(t1)的值,各節(jié)點接收到Resp報文后根據(jù)式(12)計算時鐘方差σ2,并更新時鐘同步優(yōu)先級列表。
?。?)在規(guī)定時間內(nèi)沒有收到報文的節(jié)點,錯誤計數(shù)器M=M+1,同時本地時鐘Tmk(t)=Tmk(t)+ΔTmk,fmk=fmk+Δfmk+η。
(6)若某節(jié)點錯誤計數(shù)M≥n,向總線發(fā)送更換主節(jié)點請求。
(7)各節(jié)點接收到更換請求,檢查各自錯誤計數(shù)器,若達到n/2,則同意更換,否則不同意。
(8)若同意更換主節(jié)點數(shù)超過50%,則系統(tǒng)掃描主時鐘同步優(yōu)先級列表,選擇優(yōu)先級最高的節(jié)點成為主節(jié)點,并向總線上所有節(jié)點發(fā)送確認消息,否則不同意。
(9)同步周期結束,各從節(jié)點計數(shù)器清零,返回步驟(2)。
3實驗驗證
為了驗證上述算法,在Vector CANoe仿真軟件上對其進行試驗驗證。首先建立7個ECU節(jié)點所組成的CAN網(wǎng)絡,如圖4所示。網(wǎng)絡初始化時將選擇出主節(jié)點(本次仿真選擇VCU為初始主節(jié)點)。建立節(jié)點消息數(shù)據(jù)庫,每個節(jié)點都包含_Sync_Message消息和_Resp_Message消息,其中_Sync_Message為主節(jié)點向各從節(jié)點發(fā)送同步消息,各從節(jié)點收到_Sync_Message消息后,向主節(jié)點發(fā)送_Resp_Message消息,_Message消息為各節(jié)點之間信息傳輸?shù)钠胀ㄏⅰ?/p>
利用CAPL編寫程序,設置主節(jié)點發(fā)送同步消息的周期為200 ms,程序如下。
variables
{
message VCU_Sync_Message mVCU_Sync_Message;
mstimer timer_VCU;
}
on timer timer_VCU
{
setTimer(timer_VCU,200);
output(mVCU_Sync_Message)
}
配置完成后進行仿真,仿真結果如圖5所示。
由于在仿真過程中各節(jié)點都在理論情況下運行,為了使仿真能夠反映真實的系統(tǒng)情況,在仿真過程中加入適當?shù)母蓴_。選擇優(yōu)先級最高的節(jié)點VCU作為初始主時鐘節(jié)點,其余節(jié)點為從節(jié)點。當主時鐘節(jié)點VCU發(fā)生故障時,各節(jié)點掃描主時鐘同步優(yōu)先級列表,選擇優(yōu)先級最高的節(jié)點EMS作為新的主時鐘節(jié)點。仿真結果表明本文所提算法可以防止主從時鐘同步的單點失效,增強了系統(tǒng)的可靠性。圖5仿真過程Trace窗口
圖6CAN通信模塊接線圖為了能夠真實反映本文所提出的同步算法的可靠性以及精度,構建一個具有真實節(jié)點的實驗平臺,并利用CANoe軟件對整個系統(tǒng)進行功能分析和測試。其中每一個節(jié)點均由微控制器(51單片機)、CAN控制器(SJA1000T)以及CAN收發(fā)器(TJA1050)所構成,CAN通信模塊連接圖如圖6所示。
選取文獻[2]中的前期協(xié)商同步方法以及文獻[5]中的相對偏差選擇方法與本文所述方法在上述實驗平臺上進行比較,圖7為上述時鐘同步方法在波特率為500 kb/s時利用CANoe軟件測量的同步偏差的絕對值,橫坐標為同步周期(ms),縱坐標為同步偏差(μs)。從圖中可以看出,本文時鐘同步方法的同步偏差略小于相對偏差選擇方法,而前期協(xié)商同步方法的同步偏差都要大于其他兩種方法,但是相對偏差選擇方法在同步過程中同步消息并沒有考慮傳輸過程中的消息延時,因此本文時鐘同步方法的精度更好。
4結論
本文在分析主從同步、協(xié)商同步等方法存在問題及CAN網(wǎng)絡時鐘同步特點基礎上,對CAN總線時鐘同步基本問題進行了描述,并提出了一種基于CAN總線的單主時鐘協(xié)商同步算法。該算法可在主、從節(jié)點出現(xiàn)失效時利用CAN總線的時鐘特性及時地對即時偏差進行估計,使總線各節(jié)點依然能夠正常工作,并利用主時鐘同步優(yōu)先級列表選擇新的主節(jié)點。實驗結果表明:新的時鐘同步機制能夠防止單點失效,可靠性高,具有更高的同步精度,并且適用更為廣泛,為CAN系統(tǒng)精確時鐘同步提供更好的解決方法。
參考文獻
[1] MACII D,FONTANELLI D,PETRI D.A master-slave synchronization model for enhanced servo clock design[J].Brescia:ISPCS 2009 International IEEE Symposium on Precision Clock Synchronization for Measurement,Control and Communication,2009:1 6.
?。?] 張利,李縣軍,王躍飛.汽車CAN網(wǎng)絡時鐘同步方法研究[J].電子測量與儀器學報,2011,25(2):147 152.
[3] GADERER G,LOSCHMIDT P,SAUTER T,et al.Improving fault tolerance in highprecision clock synchronization[J].IEEE Transactions on Industrial Informatics,2010,6(2):206 215.
?。?] TOVAR E,VASQUE F.Non preemptive scheduling of messages on SMTV tokenpassing network[R].RealTime Systems,2000.
?。?] 王躍飛,楊錦,張利,等.汽車CAN系統(tǒng)精確時鐘同步機制研究[J].電子測量與儀器學報,2014,28(1):22 28.
?。?] 王瑞曉,賀占莊.CAN總線位定時和同步機制的設計與實現(xiàn)[J].計算機技術與發(fā)展,2010,20(4):235 238.