CAN总线(一)我是一个电子菜鸟,现在从事产品研发的工作,在以后漫长的时间里会接触到很多新的IC,新的技术,新的理论,我很喜欢这种感觉。最近在接触CAN总线方面的知识,需要用CAN总线来实现电梯的并联,一脸茫然,好不容易查到一些有用的资料,发上来跟大家分享。也希望有这方面经验的大虾们能够留下你们的脚步,给点技术支持哈~CAN总线简介CAN[Control(Controller)AreaNetwork]是控制(器)局域网的简称。CAN是一种有效支持分布式控制或实时控制的串行通信网络,最初由德国Bosch公司80年代用于汽车内部测试和控制仪器之间的数据通信。目前CAN总线规范已被国际标准化组织ISO制订为国际标准ISO11898,并得到了Motorola,Intel,Philips等大半导体器件生产厂家的支持,迅速推出各种集成有CAN协议的产品。目前CAN总线主要用于汽车自动化领域,如发动机自动点火、注油、复杂的加速刹车控制(ASC)、抗锁定刹车系统(ABS)和抗滑系统等。BENZ、BMW等著名汽车上已经采用CAN来满足上述功能。在工业过程控制领域,CAN也得到了广泛的应用。1.1.1CAN协议CAN总线采用分层结构,规范规定了任意两个节点之间的兼容性。包括电气特件利数据解释协议。CAN协议可分为:目标层、传送层、物理层。其中目标层和传送层包括了ISO/OSI定义的数据链路的所有功能。目标层的功能包括:确认要发送的信息;位应用层提供接口。传送层功能包括:数据帧组织:总线仲裁:检错、错误报告、错误处理。CAN总线以报文为单位进行信息交换,报文中含有标示符(ID),它既描述了数据的含义又表明了报文的优先权。CAN总线上的各个协点都可主动发送数据。当同时有两个或两个以上的节点发送报文时,CAN控制器采用ID进行仲裁。ID控制节点对总线的访问。发送具有最高优先权报文的节点获得总线的使用权,其他节点自动停止发送,总线空闲后,这些节点将自动重发报文。CAN支持四类信息帧类型。(1)数据帧CAN协议有两种数据帧类型标准2.0A和标准2.0B。两者本质的不同在于ID的长度不同。在2.0A类型中,ID的长度为ll位;在2.0B类型中ID为29位。一个信息震中包括7个主要的域:帧起始域——标志数据帧的开始,由一个显性位组成。仲裁域——内容由标示符和远程传输请求位(RTR)组成,RTR用以表明此信息帧是数据帧还是不包含任何数据的远地请求帧。当2.0A的数据帧和2.0B的数据帧必须在同一条总线上传输时,首先判断其优先权,如果ID相同,则非扩展数据帧的优先权高于扩展数据帧。控制域——r0、r1是保留位,作为扩展位,DLC表示一帧中数据字节的数目。数据域——包含0~8字节的数据。校验域——检验位错用的循环冗余校验域,共15位。应答域——包括应答位和应答分隔符。正确接收到有效报文的接收站在应答期间将总线值为显性电平。帧结束——由七位隐性电平组成。(2)远程帧接受数据的节点可通过发远程帧请求源节点发送数据。它由6个域组成:帧起始、仲裁域、控制域、校验域、应答域、帧结束。(3)错误指示帧由错误标志和错误分界两个域组成。接收节点发现总线上的报文有误时,将自动发出“活动错误标志”其他节点检测到活动错误标志后发送“错误认可标志”。(4)超载帧由超载标志和超载分隔符组成。超载帧只能在一个帧结束后开始。当接收方接收下一帧之前,需要过多的时间处理当前的数据,或在帧问空隙域检测到显性电平时,则导致发送超载帧。(5)帧间空隙位于数据帧和远地帧与前面的信息帧之间,由帧间空隙和总线空闲状态组成。帧间空隙是必要的,在此期间,CAN不进行新的帧发送,为的是CAN控制器在下次信息传递前有时间进行内部处理操作。当总线空闲时CAN控制器方可发送数据。1.1.2电气参数及信号表示总线上的数据采用不归零编码方式(NRZ),可具有两种互补的逻辑值之一:显性及隐性。CAN总线中各节点使用相同的位速率。它的每位时间由同步段、传播段、相位缓冲段1及相位缓冲段2组成。发送器在同步段前改变输出的位数值,接受器在两个相位缓冲段间采样输入位值,而两个相位缓冲段长度可自由调节,以保证采样的可靠性。另外,CAN总线采用时钟同步技术来保证通讯的同步。1.2CAN的主要技术特点CAN网络上的节点不分主从,任一节点均可在任意时刻主动地向网络上其他节点发送信息,通信方式灵活,利用这一特点可方便地构成多机备份系统,CAN只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据,无需专门的调度CAN的直接通信距离最远可达10km(速率5kbps以下);通信速率最高可达1Mbps(此时通信距离最长为40m)。CAN上的节点数主要决定于总线驱动电路,目前可达110个;报文标识符可达2032种(CAN2.0A),而扩展标准(CAN2.0B)的报文标识符几乎不受限制。1.3CAN总线通信系统拓扑结构CAN在物理结构上属于总线式通信网络。系统的组成如下图:图1CAN总线系统结构图该系统由上位监控PC机、智能节点和现场设备三部分组成。上位监控PC机主要负责对系统数据的接受与管理、控制命令的发送以及各控制单元动态参数和设备状态的实时显示;智能节点可以使现场设备方便地连接到CAN总线上,主要负责对现场的环境参数和设备状态进行监测,对采集来的数据进行打包处理并将处理后的数字信号通过CAN通信控制器SJA1000发送到CAN总线。智能节点的设计和选择,对通信信号的传输发送有很的影响,系统中的数据传送和接收,都是通过CAN总线接口实现。CAN总线接口电路的设计,对CAN总线很是重要。本文正是基于此,对CAN总线接口电路进行设计分析,给出一种设计方案。2CAN总线接口电路设计2.1总体方案设计CAN总线接口电路主要包括:单片机、控制器接口、总线收发器和看门狗电路等。采用Philips公司生产的SJA1000控制器和与其配套的82C250CAN收发器。按照CAN总线物理层协议选择总线介质,设计布线方案,连接成CAN网络。双绞屏蔽线可设两套,在两套介质上同时进行信息传输,接收方只用一个介质。在冗余和非冗余段的连接临界点处进行总线切换。硬件电路的设计主要是CAN通信控制器与微处理器之间和CAN总线收发器与物理总线之间的接口电路的设计。CAN通信控制器是CAN总线接口电路的核心,主要完成CAN的通信协议,而CAN总线收发器的主要功能是增大通信距离,提高系统的瞬间抗干扰能力,保护总线,降低射频干扰(RFI),实现热防护等。看门狗电路主要是实现对电路的监控和复位作用。目前广泛流行的CAN总线器件有两大类:一类是独立的CAN控制器,如82C200、SJA1000及Intel82526/82527等,另一类是带有在片CAN的微控制器,如P8XC582及16位微控制器87C196CA/CB等。本课题选取PHILIPS公司的SJA1000CAN控制器以及82C250总线收发器,主要是考虑到SJA1000支持CAN2.0A/B规约。而82C250可以支持110个CAN节点,并且国内市场上PHILIPS的产品型号比较多,购买比较方便。在本次设计中,接口电路简单表示如下图:图2-1接口电路总体框图2.2各模块电路的设计2.2.1单片机最小系统本设计中,应用到单片机为ATMEL公司51系列的89C51,该型号的单片机应用广泛,技术成熟,市场上价格便宜,而且在学习中所学到的多为该型号,在本次设计中是首选的芯片。89C51单片机作为系统的核心控制部分,但在本设计中不是重点讲解内容,其相关技术应用和引脚特点功能等,可参照其他相关资料。设计的电路原理方框大致如下图2-2所示。设计中为避免出现时钟信号的冲突,对单片机的外接晶振引脚XTAL1、XTAL2不接上外围电路,而是通过控制器SJA1000的时钟信号脚反馈给单片机。同时,对单片机的复位信号处理,RST引脚接上X5045P的RST脚,复位信号可由X5045P输出,在X5045P芯片看门狗外围电路的作用下,减少了以往由电阻、电容组成的简易复位电路造成的不精确、延时高等不良作用,使单片机回复到初始状态,完成复位操作。由于在该电路中要用到单片机的存储作用,存储由SJA1000传输过来的处理数据。因此,脚/EA接上高电平,选用片内ROM。对ALE脚,也即地址锁存有效信号除数端是和控制器SJA1000的ALE脚接通。图2-2单片机最小系统2.2.2CAN总线接口控制电路设计SJA1000在电路中是一个总线接口芯片,通过它实现上位机与现场微处理器之间的数据通信。该电路的主要功能是通过CAN总线接收来自上位机的数据进行分析组态然后下传给下位机的控制电路实现控制功能,当CAN总线接口接收到下位机的上传数据,SJA1000就产生一个中断,引发微处理器产生中断,通过中断处理程序接收每一帧信息并通过CAN总线上传给上位机进行分析。AT89C51是CAN总线接口电路的核心,其承担CAN控制器的初始化、CAN的收发控制等任务。2.2.2.1SJA1000简介PHILIPS公司的PCA82C200是符合CAN2.0A协议的总线控制器,SJA1000是它的替代产品,它是应用于汽车和一般工业环境的独立CAN总线控制器。具有完成CAN通信协议所要求的全部特性。经过简单总线连接的SJA1000可完成CAN总线的物理和数据链路层的所有功能。其硬件与软件设计和PCA82C200的基本CAN模式(BesicCAN)兼容。同时,新增加的增强CAN模式(PeliCAN)还可支持CAN2.0B协议。●管脚及电气特性与独立CAN总线控制器PCA82C200兼容;●软件与PCA82C200兼容(缺省为基本CAN模式);●扩展接收缓冲器(64字节FIFO);●支持CAN2.0B协议;●同时支持11位和29位标识符;●位通讯速率为1Mbits/s;●增强CAN模式(PeliCAN);7●采用24MHz时钟频率;●支持多种微处理器接口;●可编程CAN输出驱动配置;●工作温度范围为-40~+125℃。图2-3SJA1000引脚配置SJA1000的功能框图如表1所示,图2-3是其引脚图。SJA1000型独立CAN总线控制器由以下几部分构成;(1)接口管理逻辑:它接收来自微处理器的命令,控制CAN寄存器的地址,并为微处理器提供中断和状态信息。(2)发送缓冲器:有13字节长。它位于CPU和位流处理器(BSP)之间,能存储一条将在CAN总线上发送的完整的报文,报文由CPU写入,由SBP读出。(3)接收缓冲器(RXB、RXFIFO):它是CPU和接收滤波器之间的接口,用来存储从CAN总线接收并通过了滤波的报文。接收缓冲器RXB是提供给CPU可访问的13字节的窗口,这个窗口是属于接收FIFO(RXFIFO)的一部分,共由64字节长。有了这个FIFO,可以在CPU处理一个报文的同时继续接收其他到来的报文。(4)接收滤波器:它把报文头中的标识符和接收滤波寄存器中的内容进行比较,以判断文报文是否被接收。如果被接收,报文存入RXFIFO。(5)位流处理器:它是一个控制发送缓冲器、RXFIFO并行数据和CAN总线(串行数据)之间数据的序列发生器,同时它也执行错误检测、仲裁、位填充和CAN总线错误处理功能。(6)位定时逻辑不:它将SJA1000同步于CAN总线上的位流。(7)错误管理逻辑:它按照CAN协议完成错误界定。由于SJA1000与PCA82C2000兼容,因此SJA1000的缺省工作方式即基本CAN模式与82C200相同。下面介绍SJA1000工作在增强CAN模式(PeliCAN)下的寄存器配置。在初始化期间,芯片在复位模式(RESETMODE)时的寄存器配置如表1所列,在工作期间的运行模式(OPERATINGMODE)下,部分寄存器的定义将有所更改,具体见表2。表2SJA1000寄存器配置(工作模式)SJA1000的新增功能如下:(1)支持CAN2.0B协议SJA1000完全支持CAN2.0B协议,这意味着实现了扩展的振荡器容差和处理扩展帧报文,在基本CAN方式中,仅可发送