一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

波特率自适应方法、装置、计算机设备和存储介质与流程

2022-02-22 18:47:41 来源:中国专利 TAG:


1.本发明涉及通信技术领域,尤其是一种波特率自适应方法、装置、计算机设备和计算机可读存储介质。


背景技术:

2.波特率是串行通信中最重要的参数之一,主机和从机必须波特率保持一致才可能建立通信。因此主机按照特定波特率发送数据时,需要通过一些方法使从机知道当前通信的波特率才能使从机正确接收和处理数据。应用场景主要分为两种:一种是主机从机都可控制,通讯协议可以修改或微调;另一种是主机完全是黑盒子,无法要求主机进行特殊操作,仅从主机发送出的波形中提取波特率信息。
3.常用的方案是主机发送约定的字符,从机通过检测这段低电平信号的宽度就可以计算得到波特率。例如约定主机发送0x55,从机测到的电平显然就代表着1bit的时间t(s),那么波特率就是(1/t)。也可以使用归零码使得每bit数据都自带波特率信息。这两种方法在主机和从机都可以控制的情况下是百分之百准确且高效的,但都一定程度上改变了通信协议。
4.对于主机是黑盒子的情况,只知道通讯协议,不知道主机的波特率,也无法让主机发送特殊字符,这种场景下通常利用电平宽度进行判断。传统的方式连续测量足够多的电平脉宽,最小的必然是1bit对应的脉宽t(s)。采用传统的方式在实际应用中特定情况下会出现错误,而且判不出的情况不少,一直不来新的电平宽度就会一直判不出。传统的波特率自适应方法存在自适应效率低的问题。


技术实现要素:

5.基于此,有必要针对上述技术问题,提供一种能够提高波特率自适应效率的波特率自适应方法、装置、计算机设备和存储介质。
6.一种波特率自适应方法,所述方法包括:
7.获取相邻跳变沿之间的第一电平宽度;
8.获取后向的相邻跳变沿之间的第二电平宽度;所述第一电平宽度和所述第二电平宽度不同;
9.将所述第一电平宽度和所述第二电平宽度进行迭代作差,获得目标电平宽度集合;
10.根据所述目标电平宽度集合确定设备之间通信的目标波特率;
11.基于所述目标波特率进行通信。
12.一种波特率自适应装置,所述装置包括:
13.第一获取模块,用于获取相邻跳变沿之间的第一电平宽度;
14.第二获取模块,用于获取后向的相邻跳变沿之间的第二电平宽度;所述第一电平宽度和所述第二电平宽度不同;
15.迭代作差模块,用于将所述第一电平宽度和所述第二电平宽度进行迭代作差,获得目标电平宽度集合;
16.波特率确定模块,用于根据所述目标电平宽度集合确定设备之间通信的目标波特率;
17.通信模块,用于基于所述目标波特率进行通信。
18.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现各实施例的方法的步骤。
19.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现各实施例的方法的步骤。
20.上述波特率自适应方法、装置、计算机设备和存储介质,通过获取第一电平宽度和第二电平宽度,并进行迭代作差,可充分利用已得到的电平宽度从而得到多个电平宽度,不需要一直等着新的电平宽度值出现,通过多个电平宽度即可以快速获得波特率。
附图说明
21.图1为一个实施例中波特率自适应的应用环境图;
22.图2为一个实施例中波特率自适应方法的流程示意图;
23.图3为一个实施例中电平宽度的示意图;
24.图4为另一个实施例中波特率自适应方法的流程示意图;
25.图5为一个实施例中波特率自适应装置的结构框图;
26.图6为一个实施例中计算机设备的内部结构图。
具体实施方式
27.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
28.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
29.需要说明,本发明实施例中所有方向性指示(诸如上、下、左、右、前、后
……
)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变,所述的连接可以是直接连接,也可以是间接连接。
30.另外,在本发明中如涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
31.在一个实施例中,如图1所示,为一个实施例中波特率自适应的应用环境图。其中包括车辆诊断仪110和车辆120。由于车辆诊断仪难以预先得知车辆的车型以及通信的波特
率,仅知道设备之间通信所采用的通信协议,因此需要进行波特率自适应。在图1的场景中,车辆诊断仪110可以视为是从机,车辆120视为主机。对于主机是黑盒子的情况,无论是通过什么方法得到波特率,用来得到波特率的那段波形所携带的通信信息必然会丢失。在波特率得出之前从机无法正确接收和解析,得到波特率的快慢就意味着丢失信息的多少,因此波特率自适应的效率至关重要。可以理解的是,本技术各实施例还可以应用于两个计算机设备之间。以下均以波特率自适应方法应用于计算机设备,该计算机设备为车辆诊断仪为例进行说明。
32.在一个实施例中,如图2所示,为一个实施例中波特率自适应方法的流程示意图,包括:
33.步骤202,获取相邻跳变沿之间的第一电平宽度。
34.具体地,相邻跳变沿之间的第一电平宽度是指符合通信协议的电平宽度。对于有有限个波特率的通信协议,例如通信协议为can(controller area network,控制器局域网总线)通信协议时,由于can通信协议有独特的“满5插1”机制,在can总线上出现连续5个相同电平时就会插入1个相反电平,产生用于同步的跳变沿。因此在波特率一致的can报文中相邻跳变沿之间的第一电平宽度只有对应1bit、2bit、3bit、4bit、5bit的共5种情况。
35.对于波特率可连续变化的通信协议,例如通信协议为uart(universal asynchronous receiver/transmitter,通用异步收发传输器)时,由于最常用的uart格式是空闲 起始位 8位数据 停止位,显然在波特率一致的波形中第一电平宽度有1bit、2bit、3bit、4bit、5bit、6bit、7bit、8bit、9bit的共9种情况。波特率可连续变化的通信协议是指该通信协议支持的波特率不是特定的几个波特率,而可以是任意波特率。车辆发送信号仅用通信协议其中的一个波特率,即同一车辆发送的信号采用的波特率一般是相同的。
36.可以理解的是,第一电平宽度可以是高电平的宽度,也可以是低电平的宽度。由于通信总线空闲时一般为高电平,因此第一电平宽度优选为低电平的宽度。车辆诊断仪接收车辆发送的信号,通过计数器实时获取信号中相邻跳变沿之间的第一电平宽度。该信号为非归零码信号。
37.步骤204,获取后向的相邻跳变沿之间的第二电平宽度;第一电平宽度和第二电平宽度不同。
38.其中,第二电平宽度是在第一电平宽度之后的且为相邻跳变沿之间的电平宽度。并且第一电平宽度的值和第二电平宽度的值不相同。可以理解的是,第二电平宽度可以是高电平的宽度,也可以是低电平的宽度。由于通信总线空闲时一般为高电平,因此第二电平宽度优选为低电平的宽度。第二电平宽度的电平类型可以与第一电平宽度的电平类型相同,也可以不同。
39.具体地,在获取第一电平宽度之后,车辆诊断仪继续获取电平宽度,当获得的电平宽度与第一电平宽度相同时,不保留该电平宽度。直至获得与第一电平宽度的值不相同的第二电平宽度。
40.本实施例中,如图3所示,为一个实施例中电平宽度的示意图。以第一电平宽度和第二电平宽度均为低电平宽度为例,图3中的

则为第一电平宽度,

为第二电平宽度。
41.步骤206,将第一电平宽度和第二电平宽度进行迭代作差,获得目标电平宽度集合。
42.其中,迭代作差是指多次作差的过程,多次作差得到的不重复的差值。目标电平宽度集合中包括差值。目标电平宽度集合中也可以包括差值、第一电平宽度和第二电平宽度。
43.具体地,车辆诊断仪将第一电平宽度和第二电平宽度进行迭代作差,直至没有新值出现,获得目标电平宽度集合。新值不同于已得到的值。
44.步骤208,根据目标电平宽度集合确定设备之间通信的目标波特率。
45.具体地,车辆诊断仪根据目标电平集合确定最小电平宽度,根据最小电平宽度确定设备之间通信的目标波特率。即在迭代作差后,车辆诊断仪可得到多个电平宽度,那么车辆诊断仪可从目标电平宽度集合中确定最小电平宽度,将最小电平宽度对应的波特率作为目标波特率。例如,第一电平宽度为4,第二电平宽度为5,那么迭代作差则有5-4=1,5-1=4,4-1=3,3-1=2

因此差值则包括了1、2、3和4。那么设备不需要等待1出现,而通过迭代作差即可得到最小电平宽度,最小电平宽度的倒数即为目标波特率。上述1、2、3、4和5用于表示相对宽度。
46.步骤210,基于目标波特率进行通信。
47.其中,波特率表示每条中传送的码元符号的个数,它是对符号传输速率的一种度量。在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。
48.具体地,车辆诊断仪基于目标波特率与车辆进行通信。
49.上述波特率自适应方法,通过获取第一电平宽度和第二电平宽度,并进行迭代作差,可充分利用已得到的电平宽度从而得到多个电平宽度,不需要一直等着新的电平宽度值出现,通过多个电平宽度即可以快速获得波特率。
50.在一个实施例中,目标电平宽度集合中包括迭代作差所得到的差值、第一电平宽度和第二电平宽度。
51.根据目标电平宽度集合确定设备之间通信的目标波特率,包括:
52.当差值与第一电平宽度和第二电平宽度均不同时,从第一电平宽度、第二电平宽度和差值中确定最小电平宽度;
53.确定最小电平宽度所对应的波特率;
54.将最小电平宽度所对应的波特率作为设备之间通信的目标波特率。
55.具体地,当迭代作差所得到的差值中包含与第一电平宽和第二电平宽度均不同的差值时,车辆诊断仪从第一电平宽度、第二电平宽度和差值中确定最小电平宽度。车辆诊断仪将最小电平宽所对应的波特率作为设备之间通信的目标波特率。例如,第一电平宽度为3,第二电平宽度为2,那么得到迭代的差值结果包括1,1与2和3均不同,因此可以从1、2和3之中确定最小电平宽度1,从而求得波特率。
56.本实施例中,经过分析发现,对于含有有限个波特率的通信协议如can协议,有(2n 1)个电平宽度。由于当得到(n 1)个电平宽度时,必然能够得到一个奇数值,那么通过迭代作差一定可以得到最小电平宽度,因此可将最小电平宽度所对应的波特率作为目标波特率。
57.而对于波特率可变化的通信协议如uart协议,不存在如有限个波特率的特殊电平值,那么,通过牺牲一些精确度,也可以将其中的最小电平宽度所对应的波特率作为目标波特率。
58.如下表1,对于波特率可连续变化的通信协议,为一个周期内低电平宽度的可能组合。波特率可连续变化的通信协议是指该通信协议支持的波特率不是特定的几个波特率,而可以是任意波特率。车辆发送信号仅用通信协议其中的一个波特率,即同一车辆发送的信号采用的波特率一般是相同的。以uart协议为例,一个周期内最多出现5段低电平,因此设置有第五个值。第一个值是指接收的第一个电平宽度,第二个值是指接收的第二个电平宽度

第五个值是指接收的第五个电平宽度,这些宽度有如表1所示的可能组合。考虑位置是指由于uart一个周期中可以有9个电平,考虑获得的值(即电平宽度)在波形中所处的位置。以第一个值为1和第二个值为2为例,则1可能出现在第一个位置、第二个位置

等,2可能出现在第二个位置、第三个位置等,即可能是低高低低高高高高高,也可能是低高高低低高高高高,低高高高低低高高高

一共有10种可能性。
59.根据下表1的数据进行统计,总共有256种组合。出现1的概率为207/256、出现2的概率为138/256、出现3的概率为74/256、出现4的概率为35/256、出现5的概率为16/256、出现6的概率为7/256、出现7的概率为3/256、出现8的概率为1/256以及出现9的概率为1/256。显然出现1、2的概率要远远大于出现8、9的概率。可以猜想,在牺牲一点点准确度的条件下,将无法判出的情况,如接收到3、6和9或者2、4和8等的情况视为接收到了1、2和3,可以大幅提升效率,同时可以消除因为一直不来新值而判不出的大部分情况。将接收到3、6和9或者2、4和8的情况视为接收到了1、2和3的类似情况称为大概率近似。
60.表1
[0061][0062]
如下表2,收到1byte(字节)判不出的概率是指收到一个字节后,无法确定波特率的概率。本身或作差包含1的概率是指该1个字节中本身就包含最小电平宽度,或者经过迭代作差后包含最小电平宽度的概率。无法判定但含1的概率,是指无法确定波特率但是1字节中包含最小电平宽度的概率。本身或作差包含1且多于3个的概率,是指本身的电平宽度中包含1且电平宽度的值多于3个的概率。以1byte为例,无法判定但含1且多于3个的概率是指本身或作差包含1且多于3个的概率占收到1byte判不出的概率中的比例。数学含义即为采用大概率近似的方式,可以从判不出的情况中确定出目标波特率的概率。如无法判定但含1且多于3个的概率=35.54688%/91.79688%
×
100%=38.72340%。即在判不出的情况中,有38.72340%的概率能够判断出正确的波特率。
[0063]
表2
[0064][0065]
对于波特率可连续变化的通讯协议,增加大概率近似可以在牺牲极小的准确率的前提下获得较大的效率提升。以uart为例,实际上对于发送随机数的uart波形,不同宽度出现的概率不是均匀分布的,出现1bit宽度的概率远高于9bit宽度,从1到9出现的概率逐渐降低。考虑到尽可能早地判出波特率,计算了1byte判出、2byte判出、3byte判出的概率和无法判出的情况中包含1bit宽度的概率。可以发现2byte判不出的情况中包含1bit宽度的概率为95.33229%。由于出现1、2组合和2、4组合等的概率都较高,而2、4不含1,所以若需要提高准确率,可以加一个限制条件:3byte内需要出现3种宽度,这样判出概率降为93.90364%,准确率有一定提升。
[0066]
而3byte判不出的情况中包含1bit宽度的概率为98.22860%。3byte判不出的情况可以是接收到1、2和3或者2、3和4的情况,因为接收到1、2和3时不清楚实际上是1、2和3还是2、4和6,或者3、6和9,接收到2、3和4的情况不清楚实际上是2、3和4还是4、6和8。而由于3byte判不出的情况中包含1bit宽度的概率高达98.22860%,因此在对效率要求高且允许牺牲一定准确率的应用场景下可以认为3byte判不出的情况中都包含1bit宽度。即如果获取到3种电平宽度,目标波特率的准确率可达到93.90364%,已经满足需求。也可以获取到4种电平宽度之后再确定目标波特率的计算,实际上就是准确率和效率之间的博弈。
[0067]
对于前面提到的无法判出的特殊情况,可以知道很大概率它们本身或者迭代作差后得到的差里面含有代表1bit的宽度。工程应用中通常不要求百分之百可靠,只要出错概
率在可接受的范围内即可,因此考虑大概率能判出的情况也视为可判出,下表3给出了这样处理的相关概率。由于1和2出现的概率很大,而如果一直只给出1、2的宽度,很难分辨是1、2还是2、4或者3、6等,这导致判不出的情况中含1且大于3个的概率看上去并不高,实际上大部分不是不满足含1的条件,而是不满足不同宽度多于3个,因此在得到3个以上不同宽度时将迭代作差无法得到五个值的情况中最小值直接视为1bit宽度的做法是可取的,几乎不会出错。
[0068]
如表3所示,为表示有无大概率近似自适应效率和无法判出的特殊情况对比。
[0069][0070][0071]
上表3给出了不考虑大概率近似和考虑大概率近似时自适应效率的对比结果。需要不同宽度的数量是相同的,但是考虑大概率近似的情况下,无论是收到几个字节才判出,能够判出的概率都大幅提高。2字节判出概率就达到了80%以上,3字节判出概率已接近94%。如果将要求放宽到4字节判出的话,概率会进一步上升,相比之下对于波特率可变的通信协议,考虑大概率近似的电平宽度迭代作差法实现波特率自适应效率非常高。
[0072]
本实施例中,当获得与第一电平宽度和第二电平宽度均不同的差值时,确定其中的最小电平宽度,从而确定目标波特率,不需要等待信号中的新值出现,提高波特率自适应效率。
[0073]
在一个实施例中,根据差值结果确定设备之间通信的目标波特率,包括:
[0074]
当目标电平宽度集合中包含的数值小于三个时,获取第三电平宽度;第三电平宽度是在第二电平宽度后向的相邻跳变沿之间的电平宽度;第三电平宽度与第一电平宽度和第二电平宽度均不同;
[0075]
根据目标电平宽度集合和第三电平宽度进行迭代作差,直至未迭代出新值,获得多个电平宽度;
[0076]
从多个电平宽度中确定最小电平宽度;
[0077]
确定最小电平宽度所对应的波特率,获得设备之间通信的目标波特率。
[0078]
其中,目标电平宽度集合中包含迭代作差所得的结果、第一电平宽度和第二电平宽度。
[0079]
具体地,对于最大电平宽度对应(2n)bit或(2n 1)bit的通讯协议,只需要得到(n 1)个不同的相邻跳变沿之间的电平宽度就能通过迭代作差得到所有可能的低电平宽度。以
can协议为例,电平宽度包含1、2、3、4和5,那么当得到2和4时,迭代作差无法得到新的值,那么再获取一个新的电平宽度,即为1、3或者5,那么任意奇数与2和4迭代作差,必然能够得到1。从多个电平宽度中确定最小电平宽度,则能够确定目标波特率。而以uart协议为例,通过获取3个电平宽度从而计算出目标波特率的准确率也能达到93.9%。
[0080]
本实施例中,当目标电平宽度集合中包含的数值小于三个时,获取不同于第一电平宽度和第二电平宽度的第三电平宽度,则能够基本满足(n 1)的条件,从而在提高波特率自适应准确性的同时也提高波特率自适应效率。
[0081]
在一个实施例中,确定最小电平宽度所对应的波特率,包括:
[0082]
将最小电平宽度进行宽度匹配,确定最小电平宽度所对应的参考电平宽度;
[0083]
确定参考电平宽度所对应的参考波特率。
[0084]
其中,参考电平宽度是指参考波特率所对应的电平宽度。例如,波特率为1m所对应的参考电平宽度为1us,波特率为250k所对应的参考电平宽度为4us等。
[0085]
具体地,在通信协议为有有限个波特率的通信协议的情况下,车辆诊断仪将最小电平宽度与各电平宽度范围进行宽度匹配,确定对应的电平宽度范围,从而获得参考电平宽度。一个电平宽度范围对应一个参考电平宽度。则,参考电平宽度的倒数即为参考波特率。例如,最小电平宽度为4.1,对应的电平宽度范围为3.6~4.4,那么实际上对应的参考电平宽度应当为4,从而获得波特率为250k。
[0086]
如表4,为时钟为10mhz的最小电平宽度匹配。由表4可知,波特率为1m时,参考电平宽度为10,电平宽度范围中的最小值为9,最大值为11。
[0087]
表4最小长度输出匹配(10mhz)
[0088]
波特率/bsp参考电平宽度minmax1m10911500k201822250k403644100k10090110error5其他其他
[0089]
表5最小长度输出匹配(50mhz)
[0090][0091][0092]
本实施例中,将最小电平宽度进行宽度匹配,确定最小电平宽度所对应的参考电平宽度,则能够减少最小电平宽度的误差使之匹配上标准的电平宽度,并确定参考电平宽度所对应的参考波特率,则可以获得正确的波特率。
[0093]
在一个实施例中,目标电平宽度集合中包括迭代作差所得到的差值。
[0094]
根据目标电平宽度集合确定设备之间通信的目标波特率,包括:
[0095]
当在迭代作差时获得处于预设电平宽度集合中的目标差值时,将目标差值对应的波特率作为设备之间通信的目标波特率;预设电平宽度集合中的预设电平宽度有且仅对应一个波特率。
[0096]
其中,预设电平宽度集合中的预设电平宽度有且仅对应一个波特率。并且预设电平宽度可以表示范围内的电平宽度。
[0097]
具体地,对于含有有限个波特率的通信协议,如波特率只能是1m、500k、250k、100k等,通过分析可得知,一些特定长度的电平宽度只有在特定波特率下才存在。例如,当迭代作差时得到的电平宽度为1us时,波特率必然为1m。因此,当在迭代作差时获得处于预设电平宽度集合中的目标差值时,车辆诊断仪可将目标差值对应的波特率作为设备之间通信的目标波特率。
[0098]
在一个实施例中,如表6,对于含有有限个波特率的通信协议,时钟频率为10mhz,t=0.1us,有:
[0099][0100]
其中,bsp表示波特率,*1/us表示微秒,
±
10%表示考虑10%的误差。例如,波特率为1m时,电平宽度可能为1微秒、2微秒、3微秒、4微秒和5微秒。上述表中表示时钟为10mhz时计数,即每次计数为0.1us,那么电平宽度为1us的则计数为9-11,为2us的则计数为18-22。由于有些数值重复,因此丢弃重复的数值54、55、108、109和110。9-11、18-22等均为电平宽度范围。
[0101]
预设电平宽度集合中包括1、3、5、6、12、16、30、40和50。或者按计数值,也可以是10、30、50、60、120、160、300、400和500。考虑电平宽度的误差,预设电平宽度集合也可以包括0.9-1.1、2.7-3.3、4.5-5.5、5.4-6.6、10.8-13.2、14.4-17.6、27-33、36-44和45-55。同样地,预设电平宽度集合也可以包括是9-11、27-33、45-55、5.4-6.6、90-110、108-132、90-110。
[0102]
通过分析表6可得到,以时长单位为微秒为例进行说明,当相邻跳变沿之间的电平宽度为1时,仅有波特率为1m的情况出现。而当相邻跳变沿之间出现2时,可能是1m,也可能是500k的波特率。此时需要再获取第二电平宽度,如果出现8,那么8-2=6,6-2=4,4-2=2,
那么最小低电平为2,则可以得到波特率为500k。
[0103]
如表7,为对于含有有限个波特率的通信协议,时钟频率为50mhz,t=20ns,有;
[0104][0105]
不考虑刚好偏到10%的极端情况;考虑采样误差;表格中红字表示有重叠部分;绿色底纹的单元格表示能够直接判出波特率的情况,不需要进入自适应状态机。丢弃收到的220-225、265-280、445、535-555。
[0106]
对于有有限个常用波特率的通讯协议,会存在一些只有在特定波特率下才会出现的特殊值。以can协议为例,观察上面2个表格可以发现,如果输入匹配到1、3、5,那么可以的直接得到通信波特率为1mhz,如果输入匹配到6,则波特率为500khz,如果输入匹配到12、16,则波特率对应250k,如果输入匹配到30、40、50,则波特率必然是100khz。可以总结出如下结论:对于有有限个常用波特率的通讯协议,会存在一些只有在特定波特率下才会出现的特殊值,如果输入或作差时出现了这些值,可以立刻判断出波特率跳出循环,尽可能减少因波特率判断而错失的信息。
[0107]
本实施例中,当在迭代作差时获得处于预设电平宽度集合中的目标差值时,将目标差值对应的波特率作为目标波特率,则可以不完成迭代作差就得到目标波特率,提高波特率自适应效率。
[0108]
在一个实施例中,获取后向的相邻跳变沿之间的第二电平宽度,包括:
[0109]
当第一电平宽度未处于预设电平宽度集合中时,获取后向的相邻跳变沿之间的第二电平宽度。预设电平宽度集合中的预设电平宽度有且仅对应一个波特率。
[0110]
具体地,对于有有限个波特率的通信协议,将第一电平宽度进行宽度匹配,确定第一电平宽度对应的参考电平宽度;当第一电平宽度对应的参考电平宽度未处于预设电平宽度集合中时,获取后向的相邻跳变沿之间的第二电平宽度。
[0111]
本实施例中,当第一电平宽度未处于预设电平宽度集合中则说明仅通过第一电平宽度无法确定目标波特率,因此需要结合后向的相邻跳变沿之间的第二电平宽度进行波特率自适应。
[0112]
在一个实施例中,该波特率自适应方法还包括:当第一电平宽度处于预设电平宽度集合中时,将第一电平宽度所对应的波特率作为设备之间通信的目标波特率。
[0113]
具体地,对于有有限个波特率的通信协议,将第一电平宽度进行宽度匹配,确定第一电平宽度对应的参考电平宽度;当第一电平宽度对应的参考电平宽度处于预设电平宽度
集合中时,将第一电平宽度所对应的波特率作为设备之间通信的波特率。
[0114]
本实施例中,当第一电平宽度处于预设电平宽度集合中时,说明仅通过第一电平宽度即可确定目标波特率,提高波特率自适应效率。
[0115]
在一个实施例中,在基于目标波特率进行通信之后,该波特率自适应方法还包括:
[0116]
监测总线上得到的波形的电平宽度;
[0117]
当基于波形的电平宽度确定出现异常宽度时,发出告警信号并重新执行获取相邻跳变沿之间的第一电平宽度的步骤。
[0118]
本实施例中,在完成波特率自适应后仍可监测总线上得到的波形是否存在过长或过短的异常脉宽,如果出现异常脉宽,能够给控制器报错,控制器在需要时可以重置,重新开始自适应波特率。
[0119]
在一个实施例中,一种波特率自适应方法,包括:
[0120]
步骤a1,获取相邻跳变沿之间的第一电平宽度。
[0121]
步骤a2,当第一电平宽度处于预设电平宽度集合中时,将第一电平宽度所对应的波特率作为设备之间通信的目标波特率。
[0122]
步骤a3,当第一电平宽度未处于预设电平宽度集合中时,获取后向的相邻跳变沿之间的第二电平宽度;预设电平宽度集合中的预设电平宽度有且仅对应一个波特;第一电平宽度和第二电平宽度不同。
[0123]
步骤a4,将第一电平宽度和第二电平宽度进行迭代作差,获得目标电平宽度集合;目标电平宽度集合中包括迭代作差所得到的差值、第一电平宽度和第二电平宽度。
[0124]
步骤a5,当在迭代作差时获得处于预设电平宽度集合中的目标差值时,将目标差值对应的波特率作为设备之间通信的目标波特率;预设电平宽度集合中的预设电平宽度有且仅对应一个波特率。
[0125]
步骤a6,当差值与第一电平宽度和第二电平宽度均不同时,从第一电平宽度、第二电平宽度和差值中确定最小电平宽度。
[0126]
步骤a7,确定最小电平宽度所对应的波特率。
[0127]
步骤a8,将最小电平宽度所对应的波特率作为设备之间通信的目标波特率。
[0128]
步骤a9,当目标电平宽度集合中包含的数值小于三个时,获取第三电平宽度;第三电平宽度是在第二电平宽度后向的相邻跳变沿之间的电平宽度;第三电平宽度与第一电平宽度和第二电平宽度均不同。
[0129]
步骤a10,根据目标电平宽度集合和第三电平宽度进行迭代作差,直至未迭代出新值,获得多个电平宽度。
[0130]
步骤a11,从多个电平宽度中确定最小电平宽度。
[0131]
步骤a12,将最小电平宽度进行宽度匹配,确定最小电平宽度所对应的参考电平宽度。
[0132]
步骤a13,确定参考电平宽度所对应的参考波特率,获得设备之间通信的目标波特率。
[0133]
步骤a14,基于目标波特率进行通信。
[0134]
步骤a15,监测总线上得到的波形的电平宽度。
[0135]
步骤a16,当基于波形的电平宽度确定出现异常宽度时,发出告警信号并重新执行
获取相邻跳变沿之间的第一电平宽度的步骤。
[0136]
上述波特率自适应方法,通过预设电平宽度集合首先筛选出能够确定唯一波特率,不需要作差到完整序列就可以得到波特率;考虑了实际应用场景下的各种偏差和干扰,避免了将两个非常相近的值作为不同值相减而出错的情况,大幅减少了主机发送的波形中一直不出现新的宽度而导致波特率无法判出的情况。
[0137]
在一个实施例中,如图4所示,为另一个实施例中波特率自适应方法的流程示意图。
[0138]
直接输入或adc采样:车辆诊断仪接收车辆所发送的信号,或者车辆诊断仪通过adc(analog to digital converter,模拟数字转换器)采样信号。
[0139]
测量低电平宽度:车辆诊断仪测量相邻跳变沿之间的低电平宽度。
[0140]
输入匹配:对于有有限个波特率的通信协议,特定时钟下测量的低电平宽度的所有结果是可以预测的,以这些标准的理论值为中心,考虑时钟偏移、采样等因素引入的误差,将相邻两个中心之间的数划分,舍弃重叠部分的数值,在保证准确性的前提下提高了效率,可用的值变多了,且不会出现两个实际相同却因误差而不同的数值被判断为2个不同的数值,从而作差得到一个很小的数导致波特率自适应出错的情况。
[0141]
对于有有限个波特率的通讯协议,存在一些某一波特率下特有的宽度值可以直接得出波特率值。以can总线通讯为例,can的波特率有1m、500k、250k、100k四种,将1m对应的1bit宽度计作1则有,
[0142]
输入匹配结果出现1、3、5时,可以确定波特率必然为1m;
[0143]
输入匹配结果出现6时,波特率必然为500k;
[0144]
输入匹配结果出现12、16时,波特率必然为250k;
[0145]
输入匹配结果出现30、40、50时,波特率必然为100k;
[0146]
同理,在迭代作差的结果中一旦出现上述的特殊值,就可以立刻得到目标波特率。
[0147]
对于波特率连续的通信协议的输入匹配:在电平宽度进行比较时,由于测量误差,脉宽误差等误差的影响,会出现理论上应该相等但是实际上存在微小偏差的情况,需要考虑如何将微小偏差的值归为同一个值。和有有限个常用波特率的情况不同,理论上此类协议的波特率可能值可以是任何值,因此不存在所谓的中心值,每一个测到的值都有可能是标准的没有偏差的值。这里的处理是以先得到的数为中心值,后续得到的数如果落在中心值划分的范围内,则认为是相同的值,这样做主要是因为用相近的波特率都可以正确接收某一波特率下的信号,中心值略有偏差对结果不会造成影响。具体的实现方案主要有2种,一是忽略计数器的后n位,二是规定偏差在一定比例之内视为相同。前者是固定数值偏差修正,由于目标设计的自适应波特率范围跨度大,固定数值修正会导致大值误判,将本该相同的值写入;后者是固定比例偏差修正,考虑偏差1/16以内都视作相同值,这样可以防止写入偏差很小,理论上应该相等的值而导致最终波特率判定结果是一个很大的值。对于波特率可变化的通信协议,当满足预设比值条件时,也可从满足预设比值条件的电平宽度中确定最小电平宽度,从而确定目标波特率。
[0148]
迭代作差:低电平宽度最简单的利用方式就是收到所有可能的宽度后取最小的那个必然对应1bit,波特率等于其倒数,但是这样效率极低,且如果其中一种不出现就一直判不出;而迭代作差则可以最大效率地利用这些宽度。以can总线上测量到1、5的低电平宽度
为例,通过迭代作差我们可以得到所以可能的5种宽度,立刻得到了波特率。对于任意一组低电平宽度,迭代作差到不会出现新的值时最大化利用了这些数据,在低电平宽度的利用上达到了最大效率。当迭代作差得到新值时,从获取的低电平宽度和迭代作差所得到的差值中找出最小电平宽度。当迭代作差无法得到新值时,返回测量低电平宽度的步骤。
[0149]
找出最小电平宽度:从获取的低电平宽度和差值结果中找出最小电平宽度。
[0150]
最小电平宽度匹配:对于有有限个常用波特率的通讯协议,经过输入匹配后可能会存在一些因为偏差过大或其他原因而落在匹配间隙的值。这些值经过迭代作差就有可能出现与几个波特率下最小电平宽度的标准值相差一点点的波特率值。虽然这样得到的值可能是错误的应当舍弃,但也存在可以利用的情况。为了最大化波特率自适应判断的效率,增加了输出匹配,将前述情况得到的最小电平宽度值匹配到对应标准波特率的中心值上。
[0151]
因为在输入匹配中没有对匹配间隙的值作报error处理,会进入自适应阶段,需要在自适应结果无法匹配时报set_error处理。例如,171和65在输入时就是匹配间隙的值,完成自适应过程后最小值是65,无法完成结果匹配,报set_error,并关闭通道。由于这些间隙的值没有做输入匹配,所以出现的情况还是很多的,大部分在完成自适应过程后还是会落在结果匹配的间隙,会报set_error。还有部分数值因为某些原因输入匹配处在间隙的值在自适应后,输出结果落在了结果匹配区域内,也可以就按结果去解,解不出来自然会报错关闭通道,如果能解出来,那就说明是正确的。
[0152]
目标波特率:将最小电平宽度所对应的波特率作为目标波特率。
[0153]
控制器:控制器获取目标波特率,并基于目标波特率进行设备之间通信。
[0154]
本实施例中,以有限个波特率的通信协议为例,一帧无法判出的情况只可能是表6或者表7中2、4和4、8的情况,只有2值且2值之差不是新值,所以会判不出,为了评估这样的情况出现的概率,进行了10000次试验。可以看到10000次试验(最后会多一个rst,所以图中最后rst次数是10002)中完成波特率设置的有9989次,出现判错的情况只有12次,出现特殊情况的概率约为0.12%,是一个相当低的值,是容许出现的。而对于波特率可变化的通信协议,上述方式判出目标波特率的概率高达93.9%。因此,可以在保证正确率的情况下提高波特率的效率。
[0155]
应该理解的是,虽然上述图2和图4的流程图中各个步骤按照箭头的指示依次显示,步骤(a1)至步骤(a16)中的各个步骤按照标号指示依次显示,但是这些步骤并不是必然按照箭头或者数字指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2和图4中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0156]
在一个实施例中,如图5所示,为一个实施例中波特率自适应装置的结构框图,该装置包括第一获取模块502、第二获取模块504、迭代作差模块506、波特率确定模块508和通信模块510,其中:
[0157]
第一获取模块502,用于获取相邻跳变沿之间的第一电平宽度;
[0158]
第二获取模块504,用于获取后向的相邻跳变沿之间的第二电平宽度;第一电平宽度和第二电平宽度不同;
[0159]
迭代作差模块506,用于将第一电平宽度和第二电平宽度进行迭代作差,获得目标电平宽度集合;
[0160]
波特率确定模块508,用于根据目标电平宽度集合确定设备之间通信的目标波特率;
[0161]
通信模块510,用于基于目标波特率进行通信。
[0162]
上述波特率自适应装置,通过获取第一电平宽度和第二电平宽度,并进行迭代作差,可充分利用已得到的电平宽度从而得到多个电平宽度,不需要一直等着新的电平宽度值出现,通过多个电平宽度即可以快速获得波特率。
[0163]
在一个实施例中,目标电平宽度集合中包括迭代作差所得到的差值、第一电平宽度和第二电平宽度。波特率确定模块508,用于当差值与第一电平宽度和第二电平宽度均不同时,从第一电平宽度、第二电平宽度和差值中确定最小电平宽度;
[0164]
确定最小电平宽度所对应的波特率;
[0165]
将最小电平宽度所对应的波特率作为设备之间通信的目标波特率。
[0166]
本实施例中,经过分析发现,对于含有有限个波特率的通信协议如can协议,有(2n 1)个电平宽度。由于当得到(n 1)个电平宽度时,必然能够得到一个奇数值,那么通过迭代作差一定可以得到最小电平宽度,因此可将最小电平宽度所对应的波特率作为目标波特率。
[0167]
在一个实施例中,波特率确定模块508,用于目标电平宽度集合中包含的数值小于三个时,获取第三电平宽度;第三电平宽度是在第二电平宽度后向的相邻跳变沿之间的电平宽度;第三电平宽度与第一电平宽度和第二电平宽度均不同;
[0168]
根据目标电平宽度集合和第三电平宽度进行迭代作差,直至未迭代出新值,获得多个电平宽度;
[0169]
从多个电平宽度中确定最小电平宽度;
[0170]
确定最小电平宽度所对应的波特率,获得设备之间通信的目标波特率。
[0171]
本实施例中,当目标电平宽度集合中包含的数值小于三个时,获取不同于第一电平宽度和第二电平宽度的第三电平宽度,则能够基本满足(n 1)的条件,从而在提高波特率自适应准确性的同时也提高波特率自适应效率。
[0172]
在一个实施例中,波特率确定模块508,用于将最小电平宽度进行宽度匹配,确定最小电平宽度所对应的参考电平宽度;确定参考电平宽度所对应的参考波特率。
[0173]
本实施例中,将最小电平宽度进行宽度匹配,确定最小电平宽度所对应的参考电平宽度,则能够减少最小电平宽度的误差使之匹配上标准的电平宽度,并确定参考电平宽度所对应的参考波特率,则可以获得正确的波特率。
[0174]
在一个实施例中,目标电平宽度集合中包括迭代作差所得到的差值。波特率确定模块508,用于当在迭代作差时获得处于预设电平宽度集合中的目标差值时,将目标差值对应的波特率作为设备之间通信的目标波特率;预设电平宽度集合中的预设电平宽度有且仅对应一个波特率。
[0175]
本实施例中,当在迭代作差时获得处于预设电平宽度集合中的目标差值时,将目标差值对应的波特率作为目标波特率,则可以不完成迭代作差就得到目标波特率,提高波特率自适应效率。
[0176]
在一个实施例中,第二获取模块504用于当第一电平宽度未处于预设电平宽度集合中时,获取后向的相邻跳变沿之间的第二电平宽度。预设电平宽度集合中的预设电平宽度有且仅对应一个波特率。
[0177]
本实施例中,当第一电平宽度未处于预设电平宽度集合中则说明仅通过第一电平宽度无法确定目标波特率,因此需要结合后向的相邻跳变沿之间的第二电平宽度进行波特率自适应。
[0178]
在一个实施例中,波特率确定模块508还用于当第一电平宽度处于预设电平宽度集合中时,将第一电平宽度所对应的波特率作为设备之间通信的目标波特率。
[0179]
本实施例中,当第一电平宽度处于预设电平宽度集合中时,说明仅通过第一电平宽度即可确定目标波特率,提高波特率自适应效率。
[0180]
在一个实施例中,该波特率自适应装置还包括告警模块,告警模块用于监测总线上得到的波形的电平宽度;
[0181]
当基于波形的电平宽度确定出现异常宽度时,发出告警信号;
[0182]
第一获取模块502还用于重新执行获取相邻跳变沿之间的第一电平宽度。
[0183]
本实施例中,在完成波特率自适应后仍可监测总线上得到的波形是否存在过长或过短的异常脉宽,如果出现异常脉宽,能够给控制器报错,在需要时本装置可以重置,重新开始自适应波特率。
[0184]
关于波特率自适应装置的具体限定可以参见上文中对于波特率自适应方法的限定,在此不再赘述。上述波特率自适应装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0185]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端设备,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、nfc(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种波特率自适应方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
[0186]
本领域技术人员可以理解,图6中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0187]
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各波特率自适应方法实施例的步骤。
[0188]
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各波特率自适应方法实施例的步骤。
[0189]
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得计算机设备执行上述各方法实施例中的步骤。
[0190]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例中流程。其中,本技术所提供的各实施例中所使用地对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(ramdom access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
[0191]
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献