1、页 1现场总线 CAN 原理与应用技术论文班级:物联网工程 1202 班姓名:武朋真 学号:2012234050207页 2目录1、CAN 的特点2、 CAN 总线协议基本概念3、CAN 总线协议基本规则4、CAN 总线的工作原理5、了解与学习 SJA10006、SJA1000 与单片机的接口7、SJA1000 与单片机图页 31、CAN 的特点由于采用了许多新技术及独特的设计,CAN 总线与一般的通信总线相比,它的数据通信具有突出的可靠性、实用性和灵活性。其特点可概括如下: CAN 是到目前为止唯一有国际标准的现场总线。 CAN 为多主方式工作,网络上任一节点均可在任意时刻主动地向网络上其他
2、节点发送信息,而不分主从。 在报文标识符上,CAN 上的节点分成不同的优先级,可满足不同的实时要求,优先级高的数据最多在 134s 内得到传输。 CAN 采用非破坏总线仲裁技术。当多个节点同时向总线发送信息出现冲突时,优先级较低的节点会主动退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。尤其是在网络负载很重的情况下,也不会出现网络瘫痪的情况(以太网则可能) 。 CAN 节点只需通过对报文的标识符滤波即可实现点对点、一对多点及全局广播等几种方式传送接收数据。 CAN 的直接通信距离最远可达 10km(速率在 5kbps 以下) ;通信速率最高可达1Mbps(
3、这时通讯距离最长为 40m)。 CAN 上的节点数主要取决于总线驱动电路,目前可达 110 个。在标准帧报文标识符有 11 位。而在扩展帧的报文标识符(29 位)的个数几乎不受限制。 报文采用短帧结构,传输时间短,受干扰概率低,保证了数据出错率极低。 CAN 的每帧信息都有 CRC 校验及其他检错措施,具有极好的检错效果。 CAN 的通信介质可为双绞线、同轴电缆或光纤,选择灵活。 CAN 节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响 CAN 总线具有较高的性能价格比。它结构简单,器件容易购置,每个节点的价格比较低,而且开发技术容易掌握,能充分利用现有的单片机开发
4、工具。2、CAN 总线协议基本概念(1 )什么是现场总线顾名思义,现场总线应当是应用在生产最底层的一种总线型拓扑的网络。进一步的来说,这种总线是用作现场控制系统的、直接与所有受控(设备)节点串行相连的通信网络。工业自动化控制的现场范围可以从一台家电设备到一个车间、一个工厂。受控设备和网络所处的环境以及报文的结构都有其特殊性,对信号的干扰往往是多方面的,而要求控制必须实时性很强。这就决定了现场总线有别于一般网络的特点。(2 )报文总线上的信息以几个不同的固定格式的报文发送,但长度受限。当总线空闲时,任何链接的单元都可以开始发送新的报文。(3 )信息路由在 CAN 系统里, CAN 的节点不使用任
5、何关于系统结构的信息(比如,站地址) 。以下是与此有关的几个重要的概念。 系统灵活性:不需要应用层以及任何节点软件个硬件的任何改变,可以在 CAN 网络中直接添加节点。 报文路由:报文的寻址内容由标识符指定。标识符不指出报文的目的地,但是这个数据的特点含义使得网络上所有的节点可以通过报文滤波来判断该数据是否与页 4它们相符合。 多点传送:由于报文滤波的作用,任何数目的节点对同一条报文都可以接收并同时对此作出反应。 数据一致性:在 CAN 网络里确保报文同时被所有的节点接收(或无节点接收) 。系统的这种数据一致性是靠多点传送和错误处理的功能来实现的。(4 )位速率在一个给定的 CAN 系统里位速
6、率是唯一的,并且是固定的。(5 )优先权报文中的数据帧和远程帧都有标识符段,在访问总线期间,标识符确定了一个静态的(固定的)报文优先权。当多个 CAN 单元同时传输报文发生总线冲突时,标识符码值越小的报文优先级越高。(6 )多主机总线空闲时,任何单元都可以开始传送报文具有较高优先权的报文的单元可以获得总线的访问权。(7 )仲裁只要总线空闲,任何单元都可以开始发送报文。如果两个或两个以上的单元同时开始传送报文,那么就会有总线访问冲突。通过使用了标识符的逐位仲裁可以解决这个冲突。仲裁的机制确保了报文和时间均不损失。当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。在仲裁期间,每一个发
7、送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一“隐性”电平而监视到的是一“显性”电平,那么这个单元就失去了仲裁,必须退出发送状态。(8 )安全性为了获得最安全的数据发送,CAN 的每一个节点均采取了强有力的措施来进行错误检测、错误标定及错误自检。1) 错误检测要进行检测错误,必须采取以下措施 监视(发送器对发送位的电平与被监控的总线电平进行比较) ; 循环冗余检查: 位填充; 报文格式检查;2) 错误检测的执行错误检测的机制具有以下的属性: 检测到所有的全局错误; 检测到发送器的所有的局部错误; 可以检测到报文里多达 5 个任意分布的错误;
8、 检测到报文里长度低于 15(位)的突发性错误; 检测到报文里任一奇数个的错误。(9 )错误标定和恢复时间任何检测到错误的节点会标志出损坏的报文。次报文会失效并将自动重新传送。如果不再出现错误,那么从检测到错误到下一报文的传送开始为止,恢复时间最多为 31 个位的时间。(10 )故障界定CAN 节点能够把永久故障和短暂的干扰区别开来。故障的节点会被关闭。页 5(11 )连接CAN 串行通信链路是可以连接许多单元的总线。理论上,可以连接无数个单元。但实际上由于受延迟时间以及总线线路上电气负载能力的影响,连接单元的数量是有限的。(12 )应答所有的接收器对接收到的报文进行一致性检查。对于一致的报文
9、,接收器给予应答;对于不一致的报文,接收器做出标志。3、CAN 总线协议的基本规则(1 )总线访问:采用载波监听多路访问,CAN 控制器能够在总线空闲时,就是节点侦听到网络上至少存在 3 个空闲(隐形位)时开始发送,采用硬同步,所有的控制器同步都为与帧的起始的前沿。过了一定时间,并在在一定条件后,重同步。(2 )仲裁:各节点向总线发电平时也对总线上电平进行读取,并于自身发送的电平进行比较,相同则发下一位,直至全部发完。不同则说明网络上有更高优先级的信息帧正在发送,即停止发送,退出竞争。(3 )编码/解码:帧起始域、仲裁域、控制域、数据域和 CRC 序列均使用位填充技术进行编码,就是 5 个连续
10、的同状态电平插入一位与它相补的电平,还原时每 5 个同状态的电平后的相补电平被删除。(4 )出错标注:当检测到位错误、填充错误、形式错误或应答错误时,检测出错条件的 CAN 控制器将发送一个出错标志。(5 )超载标注:一些控制器会发送一个或多个超载帧以延迟下一个数据帧或远程帧的发送。4、CAN 总线的工作原理CAN 是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发了的,并最终成为国际标准(ISO11898)。是国际上应用最广泛的现场总线之一。在北美和西欧,CAN 总线协议已经成为汽车计 算机控制系统和
11、嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。CAN 总线原理是通过 CAN 总线、传感器、控制器和执行器由串行数据线连接起来。它不仅仅是将电缆按树形结构连接起来,其通信协议相当于 ISO/OSI 参考模型中的数据链路层,网络可根据协议探测和纠正数据传输过程中因电磁干扰而产生的数据错误。CAN 网络的配制比较容易,允许任何站之间直接进行通信,而无需将所有数据全部汇总到主计算机后再行处理。当 CAN
12、 总线上的一个节点( 站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头的 11 位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。CAN 信号可以使用双绞线、光纤等介质传输。具体信号也是逻辑电平,采用差分方式传输。两条线号线分别是 CAN_H 和 CAN_L。H 和 L 均为 2.5V 左右时,表示信号逻辑“1” ,也称为“隐性” 。采用 CAN_H 比 CAN_L 高表示逻辑“0” ,称为“显性” ,CAN_H=3.5V,CAN_L=1.5V。CAN 总线采用 CSMA/CD 模式检测整个网络,只有
13、当总线处于空闲状态时,才允许发送。当发生冲突时 CAN 收发器具备仲裁能力,仲裁规则根据每个设备的 ID 决定, ID 越小优先权越高。帧格式:标准帧具有 11bit 识别符;扩展帧具有 29bit 标识符。页 6帧类型:数据帧数据帧从发送器传输到接收器。由 7 个不同的位场组成:帧起始位、仲裁场、控制场、数据场、校验场、应答场、帧结尾。数据场长度可以为 0。远程帧由总线单元发出,请求发送具有统一识别符的数据帧错误帧任何节点检测到总线错误就发出错误帧过载帧用以在先行和后续的数据帧之间附加一定延时5、了解与学习 SJA1000(1 )对 SJA1000 学习中主要用到的储存器及工作方式:发送缓冲
14、器 TXB 和接收缓冲器RXFIFO、位流处理器 BSP、接收过滤器 ASP、位时序处理逻辑 BTL 错误管理逻辑 EML、内部震荡器及复位电路。CPU 的控制经 IML,把要发送的数据写 TXB,TXB 中的数据由 BSP 处理后经 BTL 输出到 CAN BUS。BTL 始终监视 CAN BUS,当检测到有效的信息头“隐性电平 A 控制电平”的转换时启动接收过程,接收的信息首先要由位流处理器 BSP 处理,并由 ASP 过滤,只有当接收的信息的识别码与 ASP 检验相符合时,接收信息才最终被写入 RXB 或RXFIFO 中。RXFIFO 最多可以缓存 64 字节的数据,该数据可被 CPU
15、读取。EML 负责传送层中调制器的错误管制,它接收 BSP 的出错报告,促使 BSP 和 IML 进行错误统计。(2 )常用到的寄存器的结构及地址分配在学习中了解到 CAN 控制器工作模式的设定、数据的发送和接收都是通过这些寄存器来实现的。时钟分频寄存器 OCR 用于设定 SJA1000 工作于 BASIC CAN 还是 PeliCAN 还用于CLKOUT 引脚输出始终频率的设定。在工作模式下,控制寄存器 CR 用于控制 CAN 控制器的行为,可读可写;命令寄存器 CMR 只能写;状态寄存器 SR 只能读,IR,ACR,AMR,BTR0 ,BTR1 ,OCR 在工作模式下读写无意义。通常,在系
16、统初始化时,先用 CR.0=1 进入复位模式。在此模式下 IR,ACR,AMR, BTR0,BTR1,OCR 均可读可写,此时设置相应的初值。当退出复位模式时,SJA1000 即按复位时设定的相应情况工作于工作模式,除非再次使芯片复位,否则上次设定的值不变。当需要发送信息时,若发送缓冲器空闲,由 CPU 控制信息写入 TXB,再由 CMR 控制发送;当接收缓冲器 RXFIFO 未满且接收信息通过了 ASP,则接收到的信息被写入 RXFIFO。可通过两种方法读取接收到的信息。一种方法是,在中断被使能的情况下,由 SJA1000 向 CPU 发中断信号,CPU 通过 SR 及 IR可以识别该中断,
17、并读取数据释放接收缓冲器;另一种方法是直接读 SR,查询 RXFIFO 的状态,当有信息接收时,读取该信息并释放接收缓冲器。当接收缓冲器中有多条信息时,当前的信息被读取后,接收缓冲器有效信号会再次有效,通过中断方式或查询方式可以再次读取信息,直到 RXFIFO 中的信息被全部读出为止。当 RXFIFO 已满,如还有信息被接收,此信息不被保存,且发出相应的缓冲器溢出信号供 CPU 读取处理。6、SJA1000 与单片机的接口SJA1000 引脚 AD0AD7 时 8 位地址的数据复用线,可以接至单片机地址、数据复用口,用于传递单片机需要访问的 SJA1000 寄存器地址与数据。因为采用地址与数据
18、分时复用,所以 SJA1000 要用到地址锁存信号,可由单片机 ALE 引脚提供,单片机对于 SJA1000读写时,某一个时刻读或写的数据流向不确定,但可以把 SlA1000 看成片外 RAM,SJA1000种的每一个寄存器就相当于片外 RAM 的一个单元,单片机对片外 RAM 操作的所有指令和接线都可以用于 SJA1000。SJA1000 的片选引脚 CS 可接到高位地址线上。 SJA1000 的读写地址锁存控制引脚接到单片机 WR 和 RD,ALE 端,当 CS 位状态有效时, SJA1000 开始工作,依照程序需要这些控制引脚状态自动的按照时序工作, ,SJA1000 的 CLKOUT
19、引脚用于提供页 7了时钟信号,该引脚状态受 SJA1000 内部时钟分频寄存器控制,可以设置允许或禁止时钟输出,设置时钟时频率,当允许时钟输出时,该引脚输出时钟信号可作为单片机外部时钟源。接至单片机晶振输入端。SJA1000 的复位引脚 REST 低电平有效,可以接电阻和电容实现自动上电复位,或接单片机 i/o 口,由单片机控制复位。SJA1000 的 INT 引脚为中断输出,当 SJA1000 内部中断寄存器某一位被置位时,此引脚输出低电平表示产生了有效的中断,因为该引脚输出低电平表示产生了有效的中断,因为引脚为开漏输出,所以要经拉电阻接高电平。如果单片机对 CAN 的控制采用查询方式,IN
20、T 引脚可不接,但需要不断读 SJA1000状态寄存器判断是否产生了中断。7、SJA1000 与单片机图程序:NUM EQU 31HSJA_BaseAdr EQU 7F00HCR EQU 7F01HNODECODE EQU 7F02HBTR0 EQU 0010HBTR1 EQU 0011HAMR EQU 7F05HOCR EQU 0008H页 8ORG 0000H ;单片机复位后的程序入口地址LJMP MAIN;ORG 0003H ;外部中断 0 的中断服务程序入口的地址;ORG 000BH;定时器 0 的中断服务程序入口的地址JMP LOOPCONTINUE:LCALL DelayLCALL
21、 DisplayJMP LOOPCX:LCALL DelayJNB P3.3,CXXLJMP LOOPCXX:MOV A,NUMINC AMOV NUM,ACJNE A,#16,CXXX ;如果不相等,则跳转,相等就执行下一条指令MOV NUM,#0LJMP LOOPCXXX:LCALL CAN_SEND页 9LCALL DisplayLCALL DelayLJMP LOOPCAN_SEND:PUSH ACC ;ACC 入栈PUSH PSW ;PSW 入栈CLR EAMOV DPTR,#7F10HMOV A,#1MOVX DPTR,AMOV DPTR,#7F11HMOV A,#00HMOVX
22、DPTR,AMOV DPTR,#7F13HMOV R0,#NUMMOV A ,R0MOVX DPTR,AMOV DPTR,#7F01HMOV A,#01HMOVX DPTR,ASETB EAPOP PSW页 10POP ACCRETSja1000_init:MOV DPTR,#CR ;控制寄存器 CR 的地址送 DPTRMOV A,#01HMOVX DPTR,A ;进入复位模式MOV A,#00HMOVX DPTR,A ;选择 BASIC CAN 模式、时钟不输出/MOV A,#NODECODEMOVX DPTR,A ;节点号 NODECODE 写入 ACR/MOVX DPTR,#AMRMOV
23、 A,#00H/MOV DPTR,A ;AMR 置为 0,当且仅当 RXIDO=ACR 时接收数据MOV DPTR,#BTR0 ;设定总线时序寄存器 BTR0,系统采用 12MHz晶振MOV A,#85H ;分频后总线时钟频率为 2MHzMOVX DPTR,A ;同步跳转宽度为 3tsclMOV DPTR,#BTR1 ;设定总线时序寄存器 BTR1MOV A,#0B4H ;为同步时间为 1 个 tscl。采样开始位置 TSEG1=5tsclMOVX DPTR,A ;TSEG2=4TSCL.每一位时间 10tscl(200KHz ) ,每位采样 3 次页 11MOV DPTR,#OCR ;设置输
24、出控制寄存器/MOV DPTR,A ;TX1 不用MOV DPTR ,#CR ;初始化完成使控制器退出复位模式,进入工作模式工作MOV A,#06H/MOV DPTR,ADisplay:CLR P2.0CLR P2.1CLR P2.2CLR P2.3MOV R1,#NUMMOV A,R1MOV DPTR,#Tab ;将字形表的首地址MOVX A,A+DPTR ;取字形码MOV P1,A ;将 A 中的值付给 P1LCALL DelayRETTab:DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3,DB 99H,92H,82H,0F8H ;4,5,6,7,页 12DB 80H,90H,88H,83H ;8,9,A,BDB 0C6H,0A1H,86H,8EH ;C,D,E,FRETDelay:PUSH ACC ;ACC 入栈PUSH PSW ;PSW 入栈MOV R7,#200D1:MOV R6,#200D2:DJNZ R6,D2DJNZ R7,D1POP PSWPOP ACCRET ;返回END