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