打印
[总线技术]

CAN 总线入门介绍

[复制链接]
2148|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
千岁寒|  楼主 | 2018-9-25 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN是Controller Area Network(控制器局域网络)的缩写.
CAN具有很高的可靠性和良好的错误检测能力,广泛应用于汽车计算机控制系统和环境温度恶劣/电磁辐射强及振动大的工业环境。
CAN主要用在两个设备之间的通讯。

CAN总线节点上的节点发送数据是以报文的形式广播给网络中所有节点。收发器接收到数据就把数据传送给控制器,再由控制器检查判断是不是所需数据。不是则忽略。

  •   网络上任何一个节点在任何时候都可以发送数据 ----- 理论上,无主从设备之区分!
  •   多个节点发送数据,优先级低主动退出发送
  •   短帧结构,每帧数据信息为0~8字节(具体用户定义),对数据编码而不是地址编码
  •   CAN每帧都有CRC校验和其他检验措施,严重错误的情况下具有自动关闭输出的功能
CAN总线采用双绞线进行数据传输。两根导线中,一根称为CAN-High,另一根称为CAN-Low。这两根导线在静止状态下对地电压均为2.5V,此时两根导线的电压差值为0V,该状态称为隐性状态,其数字信号用1来表示;当CAN-High的对地电压为3.5V,CAN-Low的对地电压为1.5V时,此时CAN-High和CAN-Low两根导线的电压差为2V,该状态称为显性状态,其数字信号用0来表示

CAN的特点

  • 多主控制。总线空闲时,所有单元都可发送消息,而两个以上的单元同时发送消息时,根据标识符(ID, 非地址)决定优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜(优先级最高)的单元可继续发送消息,仲裁失利的单元则立即停止发送而进行接收工作。
  • 系统柔软性。连接总线的单元,没有类似"地址"的信息。因此,在总线上添加单元时,以连接的其他单元的软硬件和应用层都不需要做改变。
  • 速度快,距离远。最高1Mbps(距离<40m),最远可达10KM(速率<5Kbps)。CAN物理层的形式主要分为闭环总线和开环总线,一个适合于高速通讯,一个适合于远距离通讯(速度慢)。闭环通讯网络是一种高速、短距离网络,它的总线最大长度为40m,通信速度最高1Mbps,总线的两端各要求有一个"120欧"的电阻。开环总线网络是低速、远距离网络,它的最大传输距离1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个"2.2千欧"的电阻。
  • 具有错误检测/错误通知和错误恢复功能所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送次消息直到成功发送位置(错误恢复功能)
  • 故障封闭功能。CAN可以判断出错误的类型是总线上数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生次序数据错误时,可将引起此故障的单元从总线上隔离出去。
  • 连接节点多。CAN总线可同时可同时连接多个单元。可连接的单元总数理论上是没有限制的。但实际上可连接的单元受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

物理层特征

CAN通讯兵不是以时钟信号来进行同步的,它是一种异步通信,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。
CAN控制器根据CAN_L和CAN_H上的电位差来判断总线电平。总线电平分为显性电平和隐形电平,二者比居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
显性电平对应逻辑:0
CAN_High的电平为3.5V,CAN_Low线的电平为1.5V,CAN_H和CAN_L的电压差为2V左右。
隐性电平对应逻辑:1
CAN_High和CAN_Low线上的电压均为2.5v, CAN_H和CAN_L之间的电压差为0V。
显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只要所有的单元都输出隐形电平,总线上才为隐形电平(显性电平比隐形电平更强)。

通讯节点

CAN总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于CAN通讯协议不对节点进行地址编码,而是对数据内容进行编码,所以网络中的节点个数理论上不受限制,只要总线的负载足够即可,可以通过中继器增强负载
CAN通讯节点由一个CAN控制器及CAN收发器组成,控制器与收发器(电平转换)之间通过CAN_Tx及CAN_Rx信号线相连,收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。
当CAN节点需要发送数据时,控制器把要发送的二进制编码通过CAN_Tx线发送到收发器,然后有收发器把这个普通的逻辑电平转化为差分信号,通过差分线CAN_High和CAN_Low线输出到CAN总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的CAN_High及CAN_Low信号转化为普通的逻辑电平信号,通过CAN_Rx线接收输出到控制器中。
由于CAN总线协议的物理层只有1对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说,CAN通讯是半双工的,收发数据需要分时进行。在CAN的通讯网络中,因为共用总线,在整个网络中同一时刻只能有一个通讯节点发送信号,其余的节点在该时刻都只能接收

波特率及位同步

由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口通讯那样,节点间使用约定好的波特率进行通讯,特别地,CAN还会使用"位同步"的方式来抗干扰/吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常

位时序分解

为了实现位同步,CAN协议把每一个数据位的时序分解成SS段,PTS段,PBS1段,PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,而一个完整的位由8~25个Tq组成。

SS(SYNC SEG)段
SS段译为同步段,若通讯节点检测到总线上信号的跳变被包含在SS段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到的总线电平即可被确定为该位的电平。SS段固定大小为1Tq。
PTS段(PROP SEG)
PTS段译为传播时间段,这个时间段是用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍。PTS段的大小可以为1~8Tq。
PBS1段(PHASE SEG1)
PBS1译为相位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。PBS1段的初始大小可以为1~8Tq。
PBS2段(PHASE SEG2)
PBS2是另一个相位缓冲段,也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短。PBS2段的初始大小可以为2~8Tq。
信号的采样点位于PBS1段与PBS2段之间,通过控制各段的长度,可以对采样点的位置进行偏移,以便准确地采样。

波特率

总线上的各个通讯节点只要约定好1个Tq的时间长度(T)以及每一个数据位占据多少个Tq(n),就可以确定CAN通讯的波特率。   1/(n*T)

帧种类介绍

CAN通信以5种类型的帧进行:
数据帧:用于通讯节点向外传送数据
遥控帧:用于向远端节点请求数据
错误帧:用于向远端节点通知校验错误,请求重新发送上一个数据。
过载帧:用于通知远端节点:本节点尚未做好接受准备。
间隔帧:用于将数据帧及遥控帧与前面的帧分离开来的帧。




总线仲裁:
     CAN总线上的节点都是自顾自的发送报文,抢夺总线资源的;然后,一个CAN节点在发送报文的同时也在接收总线上的信息,每个报文都是从ID先开始发送,并且通过ID判断优先级(显性覆盖隐性),当它发现接收到的数据(ID)与它发送的不一致时就退出发送,等待一会;优先级最高的就抢到了总线,其实它并不知道有人跟它抢(因为它优先级高),它认为总线对它来说是空闲的。
     在CAN总线上,若同一个时刻,既有节点向总线上发送隐形电平(1),也有节点发送显性电平(0),那么此时总线上表现出来的为显性(0)。  当总线空闲时,有多个节点同时需要发送报文,那么每个节点的发送器将会对发送位的电平和被监控的总线电平做比较,如果电平相同,那么该节点可以继续发送,如果发送的为一个“隐性”电平(1),但是监控到一个“显性”电平(0),那么该节点失去仲裁,必须退出发送状态,只到下一次总线空闲的时候在参与总线的仲裁竞争。 由以上也可以看出,当有多个节点同时争夺总线的控制权,ID最小的那个节点将会胜出,所以在CAN总线上,节点的ID越小,优先级越高。


评论
千岁寒 2018-9-25 09:53 回复TA
LIN总线(Local Interconnect Network),作为一个对CAN总线作为低成本辅助总线:请教一下,如此LIN总线如何挂在到CAN总线上? 

相关帖子

沙发
零三翟邢止胃| | 2019-3-22 11:36 | 只看该作者
ID最小的那个节点将会胜出,所以在CAN总线上,节点的ID越小,优先级越高。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

244

帖子

4

粉丝