【CAN通讯系列8】如何准确接收数据?

在 【CAN通讯系列7】波特率是什么?已经介绍了CAN位时间和采样点等概念,每1位由同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)四个段组成,这个也成为位时序,采样点位置处于PBS1和PBS2的交界处,如下所示:

图片

这样定义的目的是为了保证当发送节点发送一帧数据到总线时,接收节点能准确接收到这帧数据,收发双方数据同步,下面具体了解其机制。

1 数据传输同步  

CAN协议的通信方法为NRZ(不归零)编码方式,即1和0都分别由不同的电子显著状态来表现,除此之外,没有中性状态、也没有其他种状态,而且各个位的开头或者结尾都没有附加同步信号。发送节点以与位时序同步的方式开始发送数据,相应地,接收节点根据总线上电平的变化进行同步和接收。发送节点和接收节点存在时钟频率误差,传输路径上电缆和驱动器等的相位延迟,这些情况会引起同步偏差,因此接收节点需要采取一些方法来调整时序,针对帧结构,在空闲状态检测出第一个下降沿(帧起始SOF下降沿)时,进行硬同步,则在其余各段进行再同步。

图片

1.1 硬同步  

在总线空闲状态,接收节点检测出帧起始(SOF位)时,会调整当前位的同步(SS)段,调整宽度不限,这就是硬同步,即接收节点直接将此下降沿的位置认为是SS段,强行将自己的SS段与发送节点的SS段直接拉齐,然后按照位时序对信号进行采样,达到同步的效果。

图片

发送节点在发送SOF位时,SOF位的下降沿在SS段,此时接收节点发现自己当前位的SS段和发送节点SOF位的SS段不同步,于是接收节点强行将自己的SS段拉到与SOF位的SS段同步。

1.2 再同步  

再同步是指接收节点检测出除SOF位以外的其他位时,通过加长PSB1段或缩短PBS2段进行的同步调整,以保证采样点的准确。

比较发送节点和接收节点的时序,存在两种情况需要进行再同步,一种发送节点慢于接收节点产生SS段,另一种是发送节点快于接收节点产生SS段。

情况1:发送节点慢于接收节点

发送节点比接收节点的时间慢了,也就是说发送节点当前位的ss段产生的时候,接收节点当前位的ss段已经在2个Tq之前产生了;此时,接收节点就将PBS1延长2个Tq的时间。以使得两者的采样点同步,如下所示。    

 source:一篇易懂的CAN通讯协议指南1

情况2:发送节点快于接收节点

发送节点当前位的SS段诞生2Tq时长之后,接收节点当前位才产生SS段;于是接收节点当前位的PBS2段缩短,使得接收节点的下一位能够提前2个Tq,从而接收节点的下一位采样点和发送节点下一位的采样点能够同步。

图片

 source:一篇易懂的CAN通讯协议指南1

对于这两种情况,存在延长或缩短若干个Tq,这里对于Tq数量是有限制的,使用同步跳转宽度SJW来做限制。SJW是指PSB1或PSB2段进行再同步时允许跳转的最大宽度,其必须满足以下2个条件:1)SJW必须小于PBS1和PBS2的最小值;2)SJW最大值不能超过4个Tq。    

通过上述内容的介绍,应该会对同步段、传播时间段、相位缓冲段1和相位缓冲段2有更深入的理解,可以再回顾下这四个段的定义:

1)同步段:CAN网络中的所有节点,在接收一位数据时,以此段作为位起始的参考点,进行下降沿的检测,统计下降沿基于SS段的偏移,然后进行位时序的调整,使接收趋于同步(下降沿在理想情况下应出现在SS段)。

2)传播时间段:CAN总线上数据的传输会受到物理延迟,比如发送节点的发送延迟、总线上信号的传播延迟、接收节点的输入延迟等,PTS段就是用来补偿这些因素产生的时间延迟。

3)相位缓冲段1:若下降沿延后n个Tq,且延迟不大于同步跳转宽度,使得原本位时序中采样点位置提前n个Tq,则需要对PBS1段增加n个Tq数(使采样点位置延后n个Tq),吸收这段误差。

4)相位缓冲段2:若跳变边沿提前n个Tq, 且不大于同步跳转宽度,使得原本位时序中采样点位置延后n个Tq,则需要对上一个位时序的PBS2段减少n个Tq数(使采样点位置提前n个Tq),吸收这段误差。

因此有了这样的机制后,接收节点才能采样准确,获取发送节点的真实数据。

2 小结  

理解了同步段、传播时间段、相位缓冲段1和相位缓冲段2之后,那我们就可以结合一个实际的例子来看:在实际开发过程中,如何对芯片配置这四段的Tq数,以实现波特率,请关注下篇文章。 

在LabVIEW中,CAN通信发送数据正常但无法接收数据可能有以下几个可能的原因: 1. 硬件连接问题:首先,确保CAN硬件与计算机正确连接。检查硬件设备、电缆和连接接口是否正常。确保CAN适配器的供电正常,也可以尝试更换另一个适配器进行测试。 2. 软件配置问题:LabVIEW的CAN通信模块通常需要进行配置才能正确接收CAN数据。确保已正确设置接口类型、波特率和其他相关参数。同时,确保已正确配置接收缓冲区,以便能够接收到期望的数据。 3. 错误的ID或数据格式:在CAN通信中,每个消息都有唯一的标识符(ID),用于区分不同的消息。在发送和接收数据时,确保ID的设置正确。另外,确保发送和接收的数据格式(例如数据长度、格式等)一致。 4. 信号干扰和噪声:在CAN通信中,信号干扰和噪声可能导致数据传输错误或丢失。确保CAN通信线路与其他高电磁干扰设备(如电机、高频设备等)隔离。同时,使用屏蔽电缆和滤波器可以减少信号干扰。 5. 软件逻辑错误:最后,检查LabVIEW程序的逻辑是否正确。确保在数据接收部分没有逻辑错误或数据处理问题。可以利用LabVIEW的调试工具,例如数据监视器和调试器,来检查数据的流动和处理过程。 综上所述,通过检查硬件连接,正确配置软件,确保正确的ID和数据格式,减少信号干扰,以及排除软件逻辑错误,可以解决LabVIEW中CAN通信发送数据正常无法接收数据的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值