《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于CAN總線的單主時(shí)鐘同步方法研究
基于CAN總線的單主時(shí)鐘同步方法研究
2016年微型機(jī)與應(yīng)用第24期
季霆
(南通大學(xué) 電氣工程學(xué)院,,江蘇 南通226000)
摘要: 高精度和高可靠的時(shí)鐘同步方法是CAN總線能夠安全運(yùn)行的關(guān)鍵,在分析主從,、協(xié)商同步特點(diǎn)的基礎(chǔ)上,,提出了一種基于CAN總線的單主時(shí)鐘協(xié)商同步方法,該方法僅需要一個(gè)時(shí)鐘同步主節(jié)點(diǎn)即可實(shí)現(xiàn)總線的可靠運(yùn)轉(zhuǎn),,當(dāng)從節(jié)點(diǎn)失效時(shí)利用CAN總線的時(shí)鐘特性及時(shí)對(duì)即時(shí)偏差進(jìn)行估計(jì),,使總線各節(jié)點(diǎn)依然能夠正常工作,并引入時(shí)鐘方差的概念更新主時(shí)鐘同步優(yōu)先級(jí)列表選擇新的主節(jié)點(diǎn),。最后利用CANoe軟件對(duì)該方法進(jìn)行仿真,,并利用51單片機(jī)、SJA1000T以及TJA1050構(gòu)建硬件實(shí)驗(yàn)平臺(tái),,結(jié)果表明該時(shí)鐘同步機(jī)制能夠防止單節(jié)點(diǎn)失效,,可靠性高,具有更高的同步精度,。
Abstract:
Key words :

  季霆

 ?。贤ù髮W(xué) 電氣工程學(xué)院,江蘇 南通226000)

       摘要:高精度和高可靠的時(shí)鐘同步方法是CAN總線能夠安全運(yùn)行的關(guān)鍵,,在分析主從,、協(xié)商同步特點(diǎn)的基礎(chǔ)上,提出了一種基于CAN總線的單主時(shí)鐘協(xié)商同步方法,,該方法僅需要一個(gè)時(shí)鐘同步主節(jié)點(diǎn)即可實(shí)現(xiàn)總線的可靠運(yùn)轉(zhuǎn),,當(dāng)從節(jié)點(diǎn)失效時(shí)利用CAN總線的時(shí)鐘特性及時(shí)對(duì)即時(shí)偏差進(jìn)行估計(jì),,使總線各節(jié)點(diǎn)依然能夠正常工作,并引入時(shí)鐘方差的概念更新主時(shí)鐘同步優(yōu)先級(jí)列表選擇新的主節(jié)點(diǎn),。最后利用CANoe軟件對(duì)該方法進(jìn)行仿真,,并利用51單片機(jī)、SJA1000T以及TJA1050構(gòu)建硬件實(shí)驗(yàn)平臺(tái),,結(jié)果表明該時(shí)鐘同步機(jī)制能夠防止單節(jié)點(diǎn)失效,,可靠性高,具有更高的同步精度,。

  關(guān)鍵詞:時(shí)鐘同步,;即時(shí)偏差;主時(shí)鐘選擇,;時(shí)鐘方差

  中圖分類號(hào):U469文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2016.24.018

  引用格式:季霆. 基于CAN總線的單主時(shí)鐘同步方法研究[J].微型機(jī)與應(yīng)用,,2016,35(24):61-65,69.

0引言

  控制器局域網(wǎng)(Controller Area Network,CAN)是目前應(yīng)用最廣泛的總線之一,,其具有實(shí)時(shí)性好,、抗干擾能力強(qiáng)、可靠性高的優(yōu)點(diǎn),,因此受到越來越多用戶的青睞,。目前國(guó)內(nèi)外對(duì)CAN總線進(jìn)行了大量的研究,希望提高總線系統(tǒng)運(yùn)行的精度和安全,,本文以時(shí)鐘同步算法為研究對(duì)象,,對(duì)CAN總線進(jìn)行研究。

  國(guó)內(nèi)外諸多文獻(xiàn)對(duì)該領(lǐng)域進(jìn)行了研究,,文獻(xiàn)[1]提出了基于主從配置的CAN總線時(shí)鐘同步算法,,只需要發(fā)送一條同步消息即可保證網(wǎng)絡(luò)中所有節(jié)點(diǎn)的同步,節(jié)省了網(wǎng)絡(luò)資源,,但是主節(jié)點(diǎn)一旦失效就無法實(shí)現(xiàn)時(shí)鐘同步,。文獻(xiàn)[2]在協(xié)商時(shí)鐘同步方法[34]的基礎(chǔ)上提出了一種基于軟件的“前期協(xié)商”時(shí)鐘同步方法,該算法引入了同步主節(jié)點(diǎn)優(yōu)先級(jí)表的概念,,在主節(jié)點(diǎn)失效時(shí)根據(jù)同步主節(jié)點(diǎn)優(yōu)先級(jí)表選擇新的主時(shí)鐘節(jié)點(diǎn),,既實(shí)現(xiàn)了節(jié)點(diǎn)容錯(cuò)錯(cuò),也減少了網(wǎng)絡(luò)同步開銷,,然而該方法中同步主節(jié)點(diǎn)優(yōu)先級(jí)表一旦建立無法改變,,降低了時(shí)鐘選擇的實(shí)時(shí)性,并且對(duì)網(wǎng)絡(luò)延時(shí)考慮較少,,也降低了同步精度,。文獻(xiàn)[5]在分析主從、協(xié)商等同步算法的基礎(chǔ)上,,提出了基于最小“相對(duì)即時(shí)偏差”的主從協(xié)商選擇方法(以下簡(jiǎn)稱為“相對(duì)偏差選擇方法”),,該方法可以在主時(shí)鐘節(jié)點(diǎn)失效時(shí)協(xié)商選擇出新的主時(shí)鐘節(jié)點(diǎn),,并且給出了網(wǎng)絡(luò)延時(shí)的測(cè)算方法,獲得了更高的時(shí)鐘精度,,但是該方法并沒有考慮各個(gè)節(jié)點(diǎn)之間由于距離,、溫度等原因而造成的網(wǎng)絡(luò)延時(shí)誤差。

  本文在上述時(shí)鐘同步方法的基礎(chǔ)上,,對(duì)CAN總線時(shí)鐘同步過程進(jìn)行研究,,提出了一種基于CAN總線的單主時(shí)鐘協(xié)商同步選擇方法,該方法對(duì)即時(shí)偏差與網(wǎng)絡(luò)延時(shí)測(cè)算方法進(jìn)行了改進(jìn),,可以提高CAN系統(tǒng)同步精度,減少網(wǎng)絡(luò)負(fù)載率,。

1CAN時(shí)鐘同步基本問題描述

  1.1CAN時(shí)鐘同步

  CAN總線時(shí)鐘同步可分為應(yīng)用層時(shí)鐘同步和物理層時(shí)鐘同步,,其中物理層同步又分為硬同步和重同步,只有物理層同步準(zhǔn)確無誤,,應(yīng)用層時(shí)鐘同步才能被正確執(zhí)行[58],。本文主要對(duì)應(yīng)用層時(shí)鐘同步進(jìn)行研究,通過對(duì)從節(jié)點(diǎn)相對(duì)于主節(jié)點(diǎn)的即時(shí)偏差進(jìn)行測(cè)量計(jì)算,,從而對(duì)本地時(shí)鐘進(jìn)行調(diào)節(jié),,以獲得更加精確的時(shí)間信息。

  1.2時(shí)鐘同步基本問題描述

  在CAN總線上,,每個(gè)節(jié)點(diǎn)時(shí)鐘均由其內(nèi)部時(shí)鐘振蕩器驅(qū)動(dòng),,每個(gè)振蕩器都產(chǎn)生一定頻率的脈沖,同時(shí)每個(gè)節(jié)點(diǎn)內(nèi)部都包含一個(gè)軟件計(jì)數(shù)器對(duì)脈沖進(jìn)行計(jì)數(shù),。若節(jié)點(diǎn)k時(shí)鐘振蕩器的頻率為fk(t),,那么該節(jié)點(diǎn)計(jì)數(shù)器的值稱為節(jié)點(diǎn)k的本地時(shí)鐘Tk(t)。本地時(shí)鐘Tk(t)可由式(1)計(jì)算[9],,其中t0為節(jié)點(diǎn)k初始時(shí)刻的實(shí)際時(shí)刻,,Tk(t0)為節(jié)點(diǎn)k在初始時(shí)刻的本地時(shí)鐘。

  Tk(t)=∫tt0fk(t)dt+Tk(t0)(1)

  若令節(jié)點(diǎn)k在第m個(gè)時(shí)鐘同步周期的實(shí)際起始時(shí)刻為tm0,,實(shí)際結(jié)束時(shí)刻為tmf,,則在一個(gè)同步周期T(T=tmf-tm0)內(nèi),由于時(shí)間較短,,振蕩器保持穩(wěn)定不發(fā)生劇烈頻偏,,為了方便討論,假設(shè)節(jié)點(diǎn)k在該時(shí)鐘同步周期內(nèi)的時(shí)鐘振蕩頻率為一定值fmk,,那么由式(1)可得節(jié)點(diǎn)k在第m個(gè)時(shí)鐘周期內(nèi)的本地時(shí)間為:

  Tmk(t)=fmk[t-tm0]+Tmk(t0)

 ?。╰m0<t≤tmf)(2)

  在一個(gè)CAN總線系統(tǒng)中,由于各節(jié)點(diǎn)的時(shí)鐘振蕩器受到內(nèi)部或者外部環(huán)境的影響,,產(chǎn)生的脈沖頻率并不相同,,導(dǎo)致節(jié)點(diǎn)時(shí)鐘產(chǎn)生漂移,,時(shí)鐘漂移的程度通常用漂移率ρ來描述,即1臺(tái)時(shí)鐘每1 s偏離標(biāo)準(zhǔn)時(shí)間的微秒數(shù),。那么在一個(gè)時(shí)鐘同步周期T內(nèi),,由于時(shí)鐘漂移而產(chǎn)生的主節(jié)點(diǎn)與從節(jié)點(diǎn)之間的時(shí)鐘差值稱之為時(shí)鐘偏差,記某一從節(jié)點(diǎn)k相對(duì)于主節(jié)點(diǎn)i的即時(shí)偏差[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)

  在時(shí)鐘同步過程中,,漂移往往是一個(gè)連續(xù)的過程,所以從節(jié)點(diǎn)k第m次時(shí)鐘同步的時(shí)間漂移率ρmk=Tmoffset/T,。

  為了保證CAN系統(tǒng)的時(shí)鐘精度,,總線上各從節(jié)點(diǎn)每隔一個(gè)時(shí)鐘同步周期需要根據(jù)本節(jié)點(diǎn)與主節(jié)點(diǎn)之間的時(shí)間偏差對(duì)本地時(shí)鐘以及時(shí)鐘頻率進(jìn)行調(diào)整。假設(shè)節(jié)點(diǎn)k在第m-1個(gè)時(shí)鐘同步周期結(jié)束時(shí)刻tm-1f開始測(cè)量計(jì)算該時(shí)刻的即時(shí)偏差,,第m個(gè)時(shí)鐘同步周期開始時(shí)刻tm0完成測(cè)量計(jì)算并對(duì)本地時(shí)鐘以及時(shí)鐘頻率進(jìn)行調(diào)整,,調(diào)整的值分別為ΔTmk=Tm-1offset(tf)=Tmi(tf)-Tmk(tf)和Δfmk=ρm-1k=Tm-1offset(tf)/T。

  由于tm0-tm-1f的值相對(duì)于時(shí)鐘同步周期T來說很小,,可以近似看作為0,,因此本地時(shí)鐘和時(shí)鐘頻率有如下關(guān)系:

  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é)點(diǎn)i和從節(jié)點(diǎn)k在第m-1個(gè)時(shí)鐘同步周期內(nèi)產(chǎn)生的漂移率。將式(4)帶入式(3)可得:

  Tmoffset(t)=[ρm-1i-ρm-1k][t-tm0](tm0<t≤tmf)(5)

  假設(shè)主節(jié)點(diǎn)i和從節(jié)點(diǎn)k處于相同環(huán)境下,,那么在同一時(shí)間段內(nèi)(一個(gè)時(shí)間同步周期)ρm-1i-ρm-1k可以看作為一個(gè)定值ρm-1,,那么帶入式(5)可得:

  Tmoffset(t)=ρm-1[t-tm0](tm0<t≤tmf)(6)

  圖1給出主從節(jié)點(diǎn)本地時(shí)鐘之間的關(guān)系,實(shí)線為主節(jié)點(diǎn)本地時(shí)鐘與實(shí)際時(shí)間之間的關(guān)系,,虛線為從節(jié)點(diǎn)本地時(shí)鐘與實(shí)際時(shí)間之間的關(guān)系,。

 

001.jpg

2基于CAN總線的單主節(jié)點(diǎn)協(xié)商同步算法

  2.1即時(shí)偏差計(jì)算

  為了測(cè)量計(jì)算第m個(gè)時(shí)鐘同步周期的即時(shí)偏差Tmoffset,引入以下兩個(gè)特殊報(bào)文:Sync報(bào)文和Resp報(bào)文,,Sync報(bào)文用于同步從節(jié)點(diǎn)和主節(jié)點(diǎn)周期性發(fā)送,,Resp報(bào)文為Sync報(bào)文的響應(yīng)報(bào)文,Resp報(bào)文內(nèi)包含Sync報(bào)文到達(dá)從節(jié)點(diǎn)到達(dá)時(shí)間等信息[11],。

002.jpg

  即時(shí)偏差Tmoffset測(cè)算過程如圖2所示,。主節(jié)點(diǎn)i按照定義的時(shí)間間隔T周期性地廣播Sync報(bào)文,在第m個(gè)周期起始時(shí)刻t0(節(jié)點(diǎn)i的本地時(shí)鐘為Tmi(t0))向總線上從節(jié)點(diǎn)發(fā)送Sync報(bào)文,;t1時(shí)刻總線上從節(jié)點(diǎn)k接收到Sync報(bào)文并記下接收到Sync報(bào)文的時(shí)間(節(jié)點(diǎn)k的本地時(shí)鐘為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é)點(diǎn)i和從節(jié)點(diǎn)k在第(m-1)個(gè)時(shí)鐘同步周期內(nèi)的本地時(shí)間間隔,,假設(shè)總線上同一個(gè)消息的網(wǎng)絡(luò)傳輸延時(shí)是相等的,,可得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),。此時(shí),從節(jié)點(diǎn)k可以計(jì)算出第m個(gè)時(shí)鐘同步周期開始時(shí)刻即(m-1)個(gè)時(shí)鐘同步周期結(jié)束時(shí)刻的即時(shí)偏差:

  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)個(gè)時(shí)鐘同步周期開始時(shí)刻,從節(jié)點(diǎn)k已經(jīng)根據(jù)前一時(shí)鐘同步周期所測(cè)量計(jì)算的即時(shí)偏差對(duì)本地時(shí)鐘進(jìn)行調(diào)整,,因此式(9)中的Tm-1offset(t0)≈0,,即時(shí)偏差如式(10)所示:

  Tmoffset(t0)=Tmi(t0)-Tm-1i(t0)-Tmk(t1)+Tm-1k(t1)(10)

  其中Tm-1i(t0),Tm-1k(t1)的值已經(jīng)在上一個(gè)時(shí)鐘同步周期保存在從節(jié)點(diǎn)k中,,新值測(cè)量計(jì)算完成,,自動(dòng)保存。從節(jié)點(diǎn)完成即時(shí)偏差的測(cè)量和計(jì)算后,,即對(duì)本地時(shí)鐘以及時(shí)鐘頻率進(jìn)行調(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)

  當(dāng)從節(jié)點(diǎn)k完成時(shí)鐘同步,,t2時(shí)刻(節(jié)點(diǎn)k的本地時(shí)鐘為Tmk(t2)),,從節(jié)點(diǎn)k將向主節(jié)點(diǎn)i發(fā)送Resp報(bào)文,Resp報(bào)文中包含Tmoffset(t0),,Tmi(t0),,Tmk(t1)的值。

  2.2主時(shí)鐘失效選擇

  為了保證總線安全可靠地運(yùn)行,,避免主時(shí)鐘節(jié)點(diǎn)失效而造成系統(tǒng)癱瘓,網(wǎng)絡(luò)中往往需要多個(gè)主節(jié)點(diǎn),。若總線網(wǎng)絡(luò)中僅有一個(gè)主節(jié)點(diǎn),,那么就需要引入一種選擇機(jī)制來確保系統(tǒng)能夠在主節(jié)點(diǎn)失效后快速確立新的主節(jié)點(diǎn)。文獻(xiàn)[2]中通過在主時(shí)鐘同步優(yōu)先級(jí)列表中預(yù)先設(shè)置優(yōu)先級(jí)的方法來達(dá)到選擇新主節(jié)點(diǎn)的目的,,但是該優(yōu)先級(jí)表一旦確立將無法改變,,導(dǎo)致選擇新的主節(jié)點(diǎn)之后精度變低。本文在原主時(shí)鐘同步優(yōu)先級(jí)列表的基礎(chǔ)上提出一種基于實(shí)時(shí)優(yōu)先級(jí)的主時(shí)鐘同步優(yōu)先級(jí)列表,。

  為了能夠?qū)崟r(shí)評(píng)價(jià)各個(gè)節(jié)點(diǎn)的優(yōu)先級(jí),,引入時(shí)鐘方差的概念[1213]:

  AVOJCD)I]1F1EN$UG)~EW@W.png

  每個(gè)時(shí)鐘同步周期從節(jié)點(diǎn)都能通過式(12)計(jì)算出時(shí)鐘方差σ2,并在網(wǎng)絡(luò)中廣播,,每個(gè)節(jié)點(diǎn)對(duì)σ2值進(jìn)行排序,,更新主時(shí)鐘同步優(yōu)先級(jí)列表。σ2值越小說明該節(jié)點(diǎn)越穩(wěn)定,,則在主時(shí)鐘同步優(yōu)先級(jí)列表中的優(yōu)先級(jí)越高,。

  在通信過程中,若總線發(fā)生如下情況之一則認(rèn)為主節(jié)點(diǎn)發(fā)生故障:(1)兩節(jié)點(diǎn)成功接收消息的時(shí)刻差值Δ>ΔΓtight(ΔΓtight是CAN總線緊密性極限),;(2)同步周期內(nèi),,從節(jié)點(diǎn)在規(guī)定時(shí)間內(nèi)未收到同步消息或者即時(shí)偏差超過正常范圍(|Tmoffset|>(1+ρmk)ΔΓtight),則系統(tǒng)判定主節(jié)點(diǎn)發(fā)生故障,,錯(cuò)誤計(jì)數(shù)器+1,,此時(shí)從節(jié)點(diǎn)k就要對(duì)即時(shí)時(shí)鐘偏差做出估計(jì),該周期時(shí)鐘偏差的估計(jì)值Tmoffset(t)如下式所示。

  KOKRP)BQL6[@S6~IGWTECBJ.png

  如果該節(jié)點(diǎn)故障次數(shù)達(dá)到設(shè)定值n,,則從節(jié)點(diǎn)k認(rèn)為該主節(jié)點(diǎn)i失效,,向總線各節(jié)點(diǎn)發(fā)出更換主節(jié)點(diǎn)的請(qǐng)求。其他節(jié)點(diǎn)接收請(qǐng)求,,檢查錯(cuò)誤計(jì)數(shù)器并做出反饋,,若錯(cuò)誤計(jì)數(shù)器達(dá)到n/2,則同意,,否則反對(duì),。當(dāng)同意更換主節(jié)點(diǎn)數(shù)超過50%時(shí),系統(tǒng)掃描主時(shí)鐘同步優(yōu)先級(jí)列表,,選擇優(yōu)先級(jí)最高的節(jié)點(diǎn)成為主節(jié)點(diǎn),,并向總線上所有節(jié)點(diǎn)發(fā)送確認(rèn)消息。

  2.3基于CAN總線的單主節(jié)點(diǎn)協(xié)商同步算法

  本文建立了一種基于CAN總線的單主時(shí)鐘協(xié)商同步算法,,如圖3所示,。

004.jpg

  具體步驟如下:

  (1)初始化設(shè)置,,設(shè)置CAN控制寄存器,,錯(cuò)誤計(jì)數(shù)器M置0,更新時(shí)鐘同步優(yōu)先級(jí)列表,,選擇初始優(yōu)先級(jí)最高的節(jié)點(diǎn)i作為主時(shí)鐘節(jié)點(diǎn),。

  (2)主時(shí)鐘節(jié)點(diǎn)i按照定義的時(shí)間間隔T周期性地廣播Sync報(bào)文,,記錄該時(shí)刻的本地時(shí)鐘,,第m個(gè)時(shí)鐘同步周期的時(shí)刻記為Tmi(t0);成功接收到該Sync報(bào)文的從節(jié)點(diǎn)k記錄接收時(shí)刻的本地時(shí)鐘,,記為Tmk(t1),。

  (3)計(jì)算Tmoffset(t0),,各從節(jié)點(diǎn)根據(jù)式(10)計(jì)算出本節(jié)點(diǎn)與主節(jié)點(diǎn)之間的即時(shí)偏差Tmoffset(t0),,若|Tmoffset|≤(1+ρmk)ΔΓtight,則根據(jù)式(11)計(jì)算從節(jié)點(diǎn)本地時(shí)鐘以及頻率的調(diào)整值ΔTmk和Δfmk,,令本地時(shí)鐘Tmk(t)=Tmk(t)+ΔTmk,,fmk=fmk+Δfmk+η,否則錯(cuò)誤計(jì)數(shù)器M=M+1,,根據(jù)式(13)計(jì)算出從節(jié)點(diǎn)在該時(shí)鐘周期內(nèi)的時(shí)鐘偏差估計(jì)值Tmoffset(t),,從而得出調(diào)整值的估計(jì)值ΔTmk、Δfmk ,,并對(duì)節(jié)點(diǎn)時(shí)鐘進(jìn)行調(diào)整,。圖3基于CAN總線的單主時(shí)鐘同步算法(4)各從節(jié)點(diǎn)完成時(shí)鐘同步測(cè)量計(jì)算過程后,保存各值并向總線上其他節(jié)點(diǎn)發(fā)送Resp報(bào)文,該報(bào)文包括Tmoffset(t0),、Tmi(t0),、Tmk(t1)的值,各節(jié)點(diǎn)接收到Resp報(bào)文后根據(jù)式(12)計(jì)算時(shí)鐘方差σ2,,并更新時(shí)鐘同步優(yōu)先級(jí)列表,。

  (5)在規(guī)定時(shí)間內(nèi)沒有收到報(bào)文的節(jié)點(diǎn),,錯(cuò)誤計(jì)數(shù)器M=M+1,,同時(shí)本地時(shí)鐘Tmk(t)=Tmk(t)+ΔTmk,fmk=fmk+Δfmk+η,。

  (6)若某節(jié)點(diǎn)錯(cuò)誤計(jì)數(shù)M≥n,,向總線發(fā)送更換主節(jié)點(diǎn)請(qǐng)求。

  (7)各節(jié)點(diǎn)接收到更換請(qǐng)求,,檢查各自錯(cuò)誤計(jì)數(shù)器,,若達(dá)到n/2,則同意更換,,否則不同意,。

  (8)若同意更換主節(jié)點(diǎn)數(shù)超過50%,則系統(tǒng)掃描主時(shí)鐘同步優(yōu)先級(jí)列表,,選擇優(yōu)先級(jí)最高的節(jié)點(diǎn)成為主節(jié)點(diǎn),,并向總線上所有節(jié)點(diǎn)發(fā)送確認(rèn)消息,否則不同意,。

  (9)同步周期結(jié)束,,各從節(jié)點(diǎn)計(jì)數(shù)器清零,,返回步驟(2),。

3實(shí)驗(yàn)驗(yàn)證

  為了驗(yàn)證上述算法,在Vector CANoe仿真軟件上對(duì)其進(jìn)行試驗(yàn)驗(yàn)證,。首先建立7個(gè)ECU節(jié)點(diǎn)所組成的CAN網(wǎng)絡(luò),,如圖4所示。網(wǎng)絡(luò)初始化時(shí)將選擇出主節(jié)點(diǎn)(本次仿真選擇VCU為初始主節(jié)點(diǎn)),。建立節(jié)點(diǎn)消息數(shù)據(jù)庫,,每個(gè)節(jié)點(diǎn)都包含_Sync_Message消息和_Resp_Message消息,其中_Sync_Message為主節(jié)點(diǎn)向各從節(jié)點(diǎn)發(fā)送同步消息,,各從節(jié)點(diǎn)收到_Sync_Message消息后,,向主節(jié)點(diǎn)發(fā)送_Resp_Message消息,_Message消息為各節(jié)點(diǎn)之間信息傳輸?shù)钠胀ㄏⅰ?/p>

005.jpg

  利用CAPL編寫程序,,設(shè)置主節(jié)點(diǎn)發(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)

  }

  配置完成后進(jìn)行仿真,,仿真結(jié)果如圖5所示。

  由于在仿真過程中各節(jié)點(diǎn)都在理論情況下運(yùn)行,,為了使仿真能夠反映真實(shí)的系統(tǒng)情況,,在仿真過程中加入適當(dāng)?shù)母蓴_。選擇優(yōu)先級(jí)最高的節(jié)點(diǎn)VCU作為初始主時(shí)鐘節(jié)點(diǎn),,其余節(jié)點(diǎn)為從節(jié)點(diǎn),。當(dāng)主時(shí)鐘節(jié)點(diǎn)VCU發(fā)生故障時(shí),各節(jié)點(diǎn)掃描主時(shí)鐘同步優(yōu)先級(jí)列表,,選擇優(yōu)先級(jí)最高的節(jié)點(diǎn)EMS作為新的主時(shí)鐘節(jié)點(diǎn),。仿真結(jié)果表明本文所提算法可以防止主從時(shí)鐘同步的單點(diǎn)失效,增強(qiáng)了系統(tǒng)的可靠性,。圖5仿真過程Trace窗口

  圖6CAN通信模塊接線圖為了能夠真實(shí)反映本文所提出的同步算法的可靠性以及精度,,構(gòu)建一個(gè)具有真實(shí)節(jié)點(diǎn)的實(shí)驗(yàn)平臺(tái),并利用CANoe軟件對(duì)整個(gè)系統(tǒng)進(jìn)行功能分析和測(cè)試,。其中每一個(gè)節(jié)點(diǎn)均由微控制器(51單片機(jī)),、CAN控制器(SJA1000T)以及CAN收發(fā)器(TJA1050)所構(gòu)成,CAN通信模塊連接圖如圖6所示,。

006.jpg

007.jpg

  選取文獻(xiàn)[2]中的前期協(xié)商同步方法以及文獻(xiàn)[5]中的相對(duì)偏差選擇方法與本文所述方法在上述實(shí)驗(yàn)平臺(tái)上進(jìn)行比較,,圖7為上述時(shí)鐘同步方法在波特率為500 kb/s時(shí)利用CANoe軟件測(cè)量的同步偏差的絕對(duì)值,橫坐標(biāo)為同步周期(ms),,縱坐標(biāo)為同步偏差(μs),。從圖中可以看出,本文時(shí)鐘同步方法的同步偏差略小于相對(duì)偏差選擇方法,,而前期協(xié)商同步方法的同步偏差都要大于其他兩種方法,,但是相對(duì)偏差選擇方法在同步過程中同步消息并沒有考慮傳輸過程中的消息延時(shí),因此本文時(shí)鐘同步方法的精度更好,。

4結(jié)論

  本文在分析主從同步,、協(xié)商同步等方法存在問題及CAN網(wǎng)絡(luò)時(shí)鐘同步特點(diǎn)基礎(chǔ)上,對(duì)CAN總線時(shí)鐘同步基本問題進(jìn)行了描述,,并提出了一種基于CAN總線的單主時(shí)鐘協(xié)商同步算法,。該算法可在主、從節(jié)點(diǎn)出現(xiàn)失效時(shí)利用CAN總線的時(shí)鐘特性及時(shí)地對(duì)即時(shí)偏差進(jìn)行估計(jì),,使總線各節(jié)點(diǎn)依然能夠正常工作,,并利用主時(shí)鐘同步優(yōu)先級(jí)列表選擇新的主節(jié)點(diǎn)。實(shí)驗(yàn)結(jié)果表明:新的時(shí)鐘同步機(jī)制能夠防止單點(diǎn)失效,,可靠性高,,具有更高的同步精度,,并且適用更為廣泛,為CAN系統(tǒng)精確時(shí)鐘同步提供更好的解決方法,。

參考文獻(xiàn)

 ?。?] 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網(wǎng)絡(luò)時(shí)鐘同步方法研究[J].電子測(cè)量與儀器學(xué)報(bào),2011,25(2):147 152.

 ?。?] GADERER G,LOSCHMIDT P,SAUTER T,et al.Improving fault tolerance in highprecision clock synchronization[J].IEEE Transactions on Industrial Informatics,2010,6(2):206 215.

 ?。?] TOVAR E,VASQUE F.Non preemptive scheduling of messages on SMTV tokenpassing network[R].RealTime Systems,2000.

  [5] 王躍飛,楊錦,張利,等.汽車CAN系統(tǒng)精確時(shí)鐘同步機(jī)制研究[J].電子測(cè)量與儀器學(xué)報(bào),2014,28(1):22 28.

 ?。?] 王瑞曉,賀占莊.CAN總線位定時(shí)和同步機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(4):235 238.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。