一种CAN总线波特率自适应设置方法与流程

文档序号:17693936发布日期:2019-05-17 21:18阅读:2727来源:国知局
一种CAN总线波特率自适应设置方法与流程

本发明属于嵌入式计算机can总线技术领域,具体涉及一种can总线波特率自适应设置方法。



背景技术:

在工业应用现场,各种嵌入式计算机实现互联互通是大势所趋。在各种现场总线的使用过程中,由于can总线具有抗干扰性强、传输距离远以及维护成本低等优点,在各种工业现场已广为应用。根据实际的工业现场使用场景,当can控制器节点数少时,可以设置can总线的波特率为1mbit/s来提高传输速率;而当can控制器节点数目较多时,1mbit/s的波特率无法满足使用的要求,会出现严重的丢帧现象,因此需要降低can总线的波特率,如500kbit/s或者250kbit/s等。

目前,基于can总线的波特率自适应控制器产品已开始应用于工业控制现场,但技术并不成熟。例如,当某个控制器节点出现异常时,可能会导致一直复位现象发生。这种现象能够对can总线造成严重干扰,轻则使can总线丢帧,重则可能导致can总线瘫痪。



技术实现要素:

为了解决现有技术中存在的上述问题,本发明提出一种can总线波特率自适应设置方法。

为实现上述目的,本发明采用如下技术方案:

一种can总线波特率自适应设置方法,包括以下步骤:

步骤1,设置can总线的初始波特率;

步骤2,对can总线上的所有数据帧进行实时监测;

步骤3,如果在设定的第一时间阈值内监测到can总线上的数据帧,则波特率设置成功,自适应设置完毕;否则,转步骤4;

步骤4,按照设定的步长降低波特率,转步骤2;

步骤5,如果在设定的第二时间阈值内没有监测到can总线上的数据帧,对can控制器进行复位操作,转步骤1。

与现有技术相比,本发明具有以下有益效果:

本发明通过实时监测can总线上的所有数据帧,根据是否监测到数据帧判断can总线波特率设置是否成功,如果不成功,按步长逐渐降低波特率,直到监测到数据帧,实现了can总线波特率的自适应设置。本发明通过采用广播接收方式,不对任何can标识符数据帧进行过滤,监测can总线上的所有数据帧,大大提高了can总线波特率设置的效率;本发明还具有can控制器故障监测与自动复位功能,如果在设定的时间(第二时间阈值)内没有监测到can总线上的数据帧,对can控制器进行复位后重新执行波特率自适应设置流程。

附图说明

图1为本发明实施例一种can总线波特率自适应设置方法的流程图。

具体实施方式

下面结合附图对本发明作进一步详细说明。

本发明实施例一种can总线波特率自适应设置方法的流程图如图1所示,所述方法包括:

s101、设置can总线的初始波特率;

s102、对can总线上的所有数据帧进行实时监测;

s103、如果在设定的第一时间阈值内监测到can总线上的数据帧,则波特率设置成功,自适应设置完毕;否则,转s104;

s104、按照设定的步长降低波特率,转s102;

s105、如果在设定的第二时间阈值内没有监测到can总线上的数据帧,对can控制器进行复位操作,转s101。

在本实施例中,步骤s101用于设置can总线的初始波特率。初始波特率一般设置得较高,如1mbit/s。如果设置不成功,再逐步降低波特率,直到设置成功。can总线波特率的设置一般通过设置波特率设置寄存器实现。例如,对于at91sam7x256型嵌入式微处理器,cpu主频为48mhz,可通过将can_br寄存器的值设置为0x00173255,将波特率设置为250kbit/s;通过将can_br寄存器的值设置为0x00050301,将波特率设置为1mbit/s。

在本实施例中,步骤s102用于对can总线上的所有数据帧进行实时监测,根据是否监测到数据帧判断波特率设置是否成功。对can总线上的所有数据帧进行实时监测,也就是采取广播接收方式,不对任何can标识符数据帧进行过滤,可以接收can总线上的所有数据帧。例如,如果一条can总线上挂有多个控制器节点,当can总线上有一条数据帧传输时,所有的控制器节点均能接收到此数据帧。只要接收到数据帧就认为can波特率设置成功,波特率设置成功之后,再根据各个节点控制器的实际地址进行can标识符接收屏蔽过滤设置。这样处理可大大提高can总线波特率自适应设置的效率。

在本实施例中,步骤s103主要用于判断波特率设置是否成功。判断方法是:设置第一时间阈值,根据在第一时间阈值内是否监测到can总线上的数据帧进行判断,如果接收到数据帧,就认为波特率设置成功,自适应设置结束;如果没有接收到数据帧,就认为当前的波特率不匹配,即设置失败。第一时间阈值取值过大,将使波特率的自适应设置耗时过长;取值过小,可能会出现误判,有可能将本来可以匹配的波特率因等待时间太短判为不匹配。第一时间阈值的大小一般根据经验或反复试验确定。第一时间阈值可利用定时器获得。例如,如果第一时间阈值为200ms,可配置一个10ms的定时器,每10ms中断一次,对中断次数进行计数,如果当计数值为20(20×10ms=200ms)时,依然没有监听到can总线上的任何数据帧,则说明设置的波特率与can总线上的波特率不匹配,波特率设置失败。

在本实施例中,步骤s104主要用于当波特率设置失败时重新设置波特率,重新设置的波特率比当前设置失败的波特率低一个步长。每次重新设置采用的步长可以相等,也可以不等。步长尽量不要过大,步长过大很难使自适应设置的波特率达到或接近最大值;当然,步长也不要太小,步长太小会使波特率自适应设置次数明显增加,从而增加自适应设置的耗时。

在本实施例中,步骤s105主要用于实现can控制器的故障监测与自动复位功能。当can控制器发生故障时,可能出现这样的现象:不管将波特率设置多低都无法监测到can总线上的数据帧。为了解决上述问题,本实施例采取如下技术方案:如果在设定的第二时间阈值内没有监测到can总线上的数据帧,对can控制器进行复位操作后转步骤s101,重新执行波特率自适应设置流程。can控制器复位主要包括关闭can总线时钟、配置can管脚使能、开启can管脚时钟、开启can总线时钟等。第二时间阈值明显大于第一时间阈值,第二时间阈值的大小同样根据经验或反复试验确定。

作为一种可选实施例,所述s101具体包括:读取存储器中的波特率和crc16校验码,计算所述波特率对应的crc16校验码,如果计算结果与读取的crc16校验码相等,按照读取的波特率设置can总线的波特率;否则,按照预定的初始波特率设置can总线的波特率;所述s103还包括:如果在设定的第一时间阈值内监测到can总线上的数据帧,将设置的波特率及其对应的crc16校验码保存至所述存储器。

本实施例给出了设置can总线初始波特率的一种改进方法。在设置初始波特率之前,先判断在此次波特率设置之前是否已经成功地设置过波特率,如果是,采用成功设置过的波特率;如果不是,将波特率设置为预定的初始波特率。判断方法是:读取存储器中的波特率和crc16校验码,计算所述波特率对应的crc16校验码,如果计算结果与读取的crc16校验码相等,表明在此次波特率设置之前已经成功地设置过波特率,因为所述存储器是专门用于保存设置成功的波特率及其对应的crc16校验码的,步骤s103在波特率设置成功后,将该波特率及其对应的crc16校验码存入所述存储器中。因此,如果此次波特率设置之前还没有成功地设置过波特率,从所述存储器中读出的两个数据将不可能恰好一个数据是另一个数据的crc16校验码。

根据can总线协议,can控制器具有主动错误(主动报错)和被动错误(主动报错)功能,当一条can总线上某个节点的can波特率与其它节点的波特率不匹配时,该节点在监测总线数据时,会导致总线错误。当主动报错节点检测到一个总线错误时,这个节点将产生一个主动错误标志来中断当前的报文发送。主动错误标志由6个连续的显性位构成,这种位序列主动打破了位填充规则,所有其它节点在识别到所生成的位填充错误后,会自行产生错误帧,称为错误反射标志。例如,当前can总线的正常通讯波特率为500kbit/s,由于某个节点控制器存在故障,一直不停地复位,并且每次上电初始的波特率为125kbit/s,必定对can总线造成严重的干扰,使can通讯丢帧严重。而本实施例通过上电后从存储器中读取上一次波特率设置成功后保存的波特率值,并以该值作为初始波特率,即使某个节点控制器存在故障,由于波特率始终与总线的波特率一致,也不会导致can总线错误以及使can总线上产生错误反射标志,从而增强了can总线工作的稳定性。

作为一种可选实施例,所述s102通过设置can控制器的接收消息邮箱的信息帧接收掩码为0,实现对can总线上的所有数据帧进行实时监测。

本实施例给出了实现对can总线上的所有数据帧进行实时监测的一种技术方案。can控制器具有接收屏蔽过滤功能,将can控制器的接收消息邮箱的信息帧接收掩码设置为0(例如,将can_mamx寄存器的值设置为0),即可不对任何can标识符数据帧进行过滤,从而监测can总线上的所有数据帧。can接收邮箱是can控制器里面的一个缓存区,用于接收指定地址消息的数据。

优选地,所述第一时间阈值为0.2秒。

优选地,所述第二时间阈值为10秒。

上述仅对本发明中的几种具体实施例加以说明,但并不能作为本发明的保护范围,凡是依据本发明中的设计精神所做出的等效变化或修饰或等比例放大或缩小等,均应认为落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1