接口/总线/驱动
CAN总线在硬件系统中占有一席之地,国际上应用最广泛的现场总线之一,与我们讲过的SPI、UART不同,属于“高端高效”系列。
CAN总线由来
CAN总线最早是由Bosch和Intel在80年代末开发的,虽然最早是用在汽车级的通信系统中的,但是随着技术的发展,CAN总线应用范围已经不在局限于汽车中,像机器人、工业、自动控制系统中,都有广泛的应用。
CAN总线为什么这么好用
以CAN总线应用最广的汽车给大家举例,汽车电子控制系统之间的数据通信基本上都是通过CAN总线实现。
在下图中,Motronic控制单元和变速箱控制单元之间的数据通信包含5根数据线。这还仅仅是两个控制器之间的传输线。如果我们再加上转向控制、雨刷控制、车窗控制等等,就需要大量的信号数据线,这个时候会导致整车的电子控制系统线路复杂,维修起来也非常困难。
而如果使用CAN总线,各个控制单元之间的信息通过两根数据线就可以进行交换了:
使用CAN总线之后的通信网络对比:
CAN总线技术原理
CAN总线使用串行数据传输方式,可以1Mb/s的速率在40m的双绞线上运行,也可以使用光缆连接,而且支持多主控制器。
当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。
CAN总线的软件报文在上面这组报文中:仲裁域,每组报文开头内容,前11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总线读取时,这种配置十分重要。
在仲裁域的最后一位是远程传输请求位(RTR),代表信息帧是数据帧还是不包含任何数据的远地请求帧
控制域,前两位是保留位,作为扩展位,DLC表示一帧中数据字节的数目。
数据域,包含0~8字节的数据。
校验域,检验位错用的循环冗余校验域,共15位。
结束域,由七位隐性电平组成。
CAN总线是可靠性很高的总线,共有五种错误:
CRC错误:发送与接收的CRC值不同发生该错误;
格式错误:帧格式不合法发生该错误;
应答错误:发送节点在ACK阶段没有收到应答信息发生该错误;
位发送错误:发送节点在发送信息时发现总线电平与发送电平不符发生该错误;
位填充错误:通信线缆上违反通信规则时发生该错误。
当发生这五种错误之一时,发送节点或接受节点将发送错误帧。
CAN总线物理层
在节点终端的接口器件有三种形式,如下图:
CAN总线的终端电阻的接法如下:
增加终端电阻的目的是为了增强CAN通讯的可靠性,消除CAN总线终端信号反射干扰。CAN总线网络最远的两个端点通常要加入终端匹配电阻,如上图。一般如果CAN总线使用的是在双绞线上运行,这时我们会增加120Ω的电阻,这是因为匹配电阻是由传输电缆的特性阻抗决定的。
常用CAN控制器与收发器
在开发板上CAN总线需要控制器和收发器,下图是常用的CAN总线接口电路:
SJA1000是用的较多的独立CAN控制器,价格又很便宜,几十块钱。SJA1000可以和51单片机、STM32等组合快速搭建CAN总线网络。SJA1000通过并行总线与MCU连接,需要通过地址、数据、读写控制等多个线进行连接。PCA82C250收发器是CAN控制器的物理接口,可以给总线提供差动发送和接受信号。和SJA1000一样,都是采用5V供电。
没玩过CAN总线的小伙伴,可以自制或者淘宝购买2个带有单片机+控制器和收发器的开发板,两者之间一对一点对点通信,一块作为主控发送控制数据,另一块接受数据并执行操作,比如点个灯。
责任编辑人:CC
全部0条评论
快来发表一下你的评论吧 !