【往期回顾】工业通讯 | CAN基础内容详解(一)
物理层主要完成设备间的信号传送,把各种信号转换成物理信号,并将这些信号传输到其他目标设备。在这一层中,CAN-bus对信号电平、通信时使用的电缆及连接器等进行了详细规定。
CAN-bus由ISO标准化后发布了两个标准,分别是ISO11898(125kpbs~1Mbps的高速通信标准)和ISO11519(小于125kpbs的低速通信标准)。这两个标准仅在物理层不同,在数据链路层是相同的。
1 CAN收发器与信号电平
位于CAN-bus物理层的器件要完成逻辑信号与电缆上物理信号的转换,该器件称为收发器。
如下图所示为CAN收发器的引脚图。
CAN-bus使用两根电缆进行信号传输,分别为CAN_High和CAN-Low(简称CAN_H和CAN_L)。CAN收发器根据两根电缆之间的电压差来判断总线电平,这种传输方式称为“差分传输”。电缆上的电平信号只有两种可能,分别为显性电平(代表逻辑0)和隐形电平(代表逻辑1)。如下图所示是ISO11898和ISO11519信号电平的对比。
信号使用双绞线进行传输,是因为双绞线上传输差分信号可以抑制共模干扰,能够提高通讯的稳定性、可靠性和抗干扰的能力。
2 线与原理
如下左图为CAN收发器的引脚图,其中CAN_H引脚在芯片里面等效电路为如下右图所示。
CAN收发器开路集电极和总线相连通过切换开关状态输出高低电平。
因为所有的收发器的输出开关都是并联的,所以在总线上显性电平具有优先权,只要有一个单元输出显性电平(低电平),总线上即为显性电平(低电平)。而隐形电平(高电平)则具有包容的意味,只有所有的单元都输出隐性电平(高电平),总线上才为隐性电平(显性电平比隐性电平更强)。CAN控制器在发送的同时,会监听总线的当前电平是否与自己发送的电平一致,如果不一致则会进行相应的处理。如果不一致发生在仲裁域,就会迫使输出隐形电平的节点退出发送;如果发生在其他区域,则会出现触发错误。
3 同步与填充位
通信方式分为两种,同步串行通信与异步串行通信。CAN-bus属于异步串行通信的方式。
异步串行通信的优点是减少了一根时钟线,缺点是各接收器的时钟不可能完全一致,总是会有偏差,有些偏快,有些偏慢,这些误差会累积直到通信出错。
如下图所示为标准波特率时采集的数据。
如下两幅图分别为波特率偏大20%和波特率偏小20%时采样的数据。
由上述几幅图可以看出,由于各接收器的时钟可能会存在偏差,这就导致传输一两个位时,误差可能看不出来,但是传输的位数变多了之后,这些误差会累积直到通信出错。
那么如何解决这个问题呢?同步!同步串行通信和异步串行通信的波形图如下图所示。同步就像给钟表校时一样,隔一段时间所有节点的时钟就同步一次。这样尽管大家的时钟仍有误差,但是可以消除累积误差。
CAN-bus规定信号的跳变沿时刻进行同步,因此只要信号发生变化,节点时钟就会被同步。如下图所示,累积的误差可以限制在两个跳变沿之间,减少错误的发生。
然而这种同步方式又会带来新的问题,比如说发送多个相同位时,并无跳变沿可用于同步,这样就会导致误差不断累积,最后导致通信出错。
接下来先让我们了解一下位时间这个概念。
一个标称的位时间=1/波特率
- 同步段用于同步各节点,正常情况下跳变沿落在此段内。
- 传播段用于补偿网络内的传输延时。
- 相位缓冲段用来补偿跳变沿的相位误差,可以被再同步处理延长或缩短。
- 采样点时刻读取的电平代表这个位的电平,一般位于相位缓冲段1的结尾
- 信息处理时间是从采样点开始留出的一段用于计算后续位电平的时间。
只有采样点设置正确了,我们才能进行正确的采样,获得正确的数据。不同的波特率下,1位时间的时间份额不相同,采样点也不相同,如下图为不同波特率下的采样点设置。
不同波特率下的时间份额设置可参考下表。
关于虹科工业通讯
虹科是一家在工业自动化领域,特别是工业总线通讯行业经验超过10年的高科技公司。虹科工业通讯事业部与世界知名的工业通讯专家【PEAK-System,Hilscher,Kunbus,SYS TEC,Koenig-Pa,Port,Copa-data,TenAsys,SoC-e、RELYUM】等深度合作,提供业内顶尖水平的工业总线协议软硬件解决方案,协议类型包含【CAN、CANopen、EtherCAT、PROFIBUS、PROFINET、EtherNET/IP、TSN】等,产品类型包含代码、软件、芯片、板卡、模块等。虹科工业通讯以客户需求为导向,以技术能力为基础,为国内企业提供最适合的产品和最满意的服务。特别是在工业4.0的大环境下,虹科工业通讯与时俱进,推出了TSN(时间敏感网络)的解决方案,后者将在推动万物互联的潮流中扮演着如高速公路般的连接作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)