季霆
(南通大学 电气工程学院,江苏 南通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 在一个CAN总线系统中,由于各节点的时钟振荡器受到内部或者外部环境的影响,产生的脉冲频率并不相同,导致节点时钟产生漂移,时钟漂移的程度通常用漂移率ρ来描述,即1台时钟每1 s偏离标准时间的微秒数。那么在一个时钟同步周期T内,由于时钟漂移而产生的主节点与从节点之间的时钟差值称之为时钟偏差,记某一从节点k相对于主节点i的即时偏差[10] Tmoffset(t)=Tmi(t)-Tmk(t)(tm0 Tmoffset(t)=[fmi-fmk][t-tm0]+Tmi(t0)-Tmk(t0)(tm0 在时钟同步过程中,漂移往往是一个连续的过程,所以从节点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 假设主节点i和从节点k处于相同环境下,那么在同一时间段内(一个时间同步周期)ρm-1i-ρm-1k可以看作为一个定值ρm-1,那么带入式(5)可得: Tmoffset(t)=ρm-1[t-tm0](tm0 图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.