课程设计题目 CAN通信二级学院电子信息与自动化专业自动化班级 107070103 学生姓名学号指导教师熊文考核项目设计50分平时成绩20分答辩30分设计质量20分创新设计15分报告质量15分熟练程度20分个人素质10分得分总分考核等级教师签名摘要:CAN总线是控制器局域网总线(contr01ler AreaNetwork)的简称。
属于现场总线的范畴,是一种有效支持分布式控制或实时控制的串行通信网络。
由于其高性能、高可靠性及独立的设计而被广泛应用于工业现场控制系统中。
SJAl000是一个独立的CAN控制器,PCA82C200的硬件和软件都兼容,具有一系列先进的性能,特别在系统优化、诊断和维护方面,因此,SJAl000将会替代PCA82C200。
SJAl000支持直接连接到两个著名的微型控制器系列80C51和68xx。
下面以单片机AT89C52和SJAl000为例,介绍CAN总线模块的硬件设计和CAN通信软件的基本设计方法。
关键词:AT89S52 CAN通信 SJA1000目录:(一) 背景:(二) CAN介绍(三) SJA1000内部结构和功能简介(四) 硬件电路图(五) 初始化程序(六) 测试(七) 总结一背景:CAN(Controller Area Network)数据总线是一种极适于汽车环境的汽车局域网。
CAN总线是德国Bosch公司为解决汽车监控系统中的复杂技术难题而设计的数字信号通信协议,它属于总线式串行通信网络。
由于采用了许多新技术和独特的设计思想,与同类车载网络相比,CAN总线在数据传输方面具有可靠、实时和灵活的优点。
1991年9月Philips半导体公司制定并发布了CAN技术规范(版本2.0),该技术规范包括A部分和B两部分,其中2.0A给出了CAN报文的标准格式;2.0B给出了标准和扩展两种格式。
此后,1993年11月ISO正式颁布了道路交通运输工具一数据信息交换一高速通信控制器局域网(CAN)的国际标准IS011898,为控制器局域网的标准化和规范化铺平了道路。
二CAN介绍CAN通信的特点:(1) CAN是到目前为止唯一具有国际标准且成本较低的现场总线;(2) CAN废除了传统总线的站地址编码,对通信数据块进行编码,为多主方式工作,不分主从,通信方式灵活,通过报文标识符通信,可使不同的节点同时接收到相同的数据,无需站地址等节点信息。
(3) CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。
尤其是在网络负载很重的情况下也不会出现网络瘫痪情况(以太网则有可能出现这种情况)。
(4) CAN只需通过报文滤波即可实现点对点、一点对多点即全局广播等方式传送接收数据,无需专门的“调度”。
(5) CAN的直接通信距离最远可达10km(速率5kbps以下);通信速率最高可lMbps(此时通信距离最长为40m);(6) CAN上的节点数最多可达110个(主要取决于总线驱动电路)。
(7) CAN采用短帧结构,单帧最大长度仅150位,传输时间短,从而保证了通信的实时性,受干扰概率低。
(8) CAN的每帧信息都有CRC校验及其他检错措施,降低了数据出错率,保证了数据通信的可靠性。
(9) CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响。
(10) CAN的通信介质可使用双绞线作为传输介质,价格低廉,可靠性强。
三SJA1000内部结构和功能简介SJAl000是一个独立的控制器,有两种不同的模式。
(1)BasiccAN 模式:系统上电后默认的模式,与PCA82C200兼容。
(2)PelicAN模式:支持CAN2.0B协议规定的所有功能。
SJAl000的内部结构如图1所示,其功能模块主要有:接口管理逻辑、接收FIFO队列、接收滤波器、发送缓冲器和CAN核心模块。
CAN核心模块基于CAN2.0B的协议执行对CAN帧的发送和接收。
逻辑管理接口实现与外部单片机的连接。
SJAlO00的发送缓冲器可以存储一个完整的报文,当单片机开始一个传送时,逻辑管理接口会使CAN核心模块读发送缓冲器的数据,依照CAN2.OB 协议发送数据。
当收到一个报文时,cAN核心控制模块将连续的位转换为标准的数据存放于接收过滤器中,通过验收码寄存器、验收屏蔽寄存器进行过滤处理,将符合标志位要求的数据放人接收FIF0队列中。
图1●管脚及电气特性与独立CAN总线控制器PCA82C200兼容;●软件与PCA82C200兼容(缺省为基本CAN模式);●扩展接收缓冲器(64字节FIFO);●支持CAN2.0B协议;●同时支持11位和29位标识符;●位通讯速率为1Mbits/s;●增强CAN模式(PeliCAN);●采用24MHz时钟频率;●支持多种微处理器接口;●可编程CAN输出驱动配置;●工作温度范围为-40~+125℃。
图2SJA1000的功能框图如表1所示,图2是其引脚图。
从表1可以看出,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)下的寄存器配置。
在初始化期间,芯片在复位模式(RESET MODE)时的寄存器配置如表1所列,在工作期间的运行模式(OPERATING MODE)下,部分寄存器的定义将有所更改。
四硬件电路图图3图3是一般CAN总线连接方式图,本文中采用AT89C52作为主控芯片,SJA1000为CAN控制芯片,PCA82C250作为CAN总线收发器,应用了2套这样的系统,一个作为下位机,另一个作为上位机,下位机负责接受由上位机经CAN总线传输过来的数据。
图4CAN总线接口的原理框图如图4所示。
SJAl000的地址/数据复用总线同AT89C52的PO口相连,MODE引脚接高电平时选择Intel模式。
SJA1000的ALE ,RD,WR与单片机对应的管脚相连,INT接单片机的INT0口,CS接P2.7。
为了提高总线的驱动能力,在SJAl000与CAN总线之间加PCA82C250总线驱动芯片,PCA82C250是SJAl000与物理总线间的接口。
对模拟信号的采样用AD7715该器件有一个差分模拟输入端口,能直接接收来自传感器的弱电平信号并输出连续的数字信号。
它运用转换技术实现了无损编码。
AT89C52的P1口通过驱动电路接执行机构。
五初始化程序系统软件设计的指导思想是系统上电后首先对单片机和SJA1000 进行初始化。
以下是用C写的程序初始化程序。
void CAN_init(void){EA=0;rest=0; // 将复位键拉低,SJA1000进入复位工作模式delay(1);do // 进入复位请求{CONTROL_REG=0x01;}while( (CONTROL_REG & 0x01) != 0x01 );//时钟分频寄存器BIT7位0:BasicCAN模式;1:PeliCAN模式CDR_REG=0x08; //CLOCK OFF=1BTR0_REG=0x31; // 10kbpsBTR1_REG=0x1c; //SAM=1 总线采样3次ACR_REG=0x55; //第1个节点AMR_REG=0xAA; //验收滤波OCR_REG=0xAA; //下拉输出CONTROL_REG |=0x1A; // OIE=1 EIE=1 TIE=1 RIE=1 RR=0rest=1;do{CONTROL_REG=0x1A;}while( (CONTROL_REG & 0x1A) != 0x1A);EA=1;}对CAN控制器进行初始化,实际上就是对ACR、AMR、BTR0、BTRl、OCR 这些寄存器进行访问。
只有当控制寄存器CR中的复位请求位为高时,访问才被允许,否则既写不进去,也读不出正确的内容。
对CR进行第一次写操作,要设定将要开放的中断类型,并置位复位请求,允许初始化开始。
对ACR、AMR进行写操作,要界定对什么样的报文予以接收,因此有时称它们为验收滤波器。
当满足以下两个条件之一,并存在空的接收缓存器(RBF)时,完整报文可被正确接收。
条件一:ACR与报文标识符的高8位在AMR为“0”相关位上对应相等。
条件二:AMR=0FFH,即ACR的所有位均为不相关(或屏蔽)位。
这两个寄存器也是编排标识符的基本依据。
对BTR0进行操作,可决定波特率预分频器(BRP)和同步跳转宽度(SJW)的数值;对BTRl进行写操作,可决定位周期的宽度,采样点的位置及在每个采样点进行采样的次数。
这两个寄存器的内容,可唯一确定波特率及同步跳转宽度。
例如:程序中BTR0=00H,BTRl=14H,晶振频率为16MHz时,采样时钟周期TSCL等于两倍的振荡器时钟周期。
波特率刚好为lMbps,同步跳转宽度为一个TSCL。
六测试1本系统在建立好硬件平台,确保硬件电路无误后。
首先测试单片机AT89S52、显示模块、串口通信模块都能正常工作,2在对SJA1000进行程序初始化、写一个数据0x35到SJA1000中,在SJA1000处于正常工作模式下在此去读发送缓冲区中数据,将数据显示到1602中,可以观察到显示数据,本系统再次都能正常工作。
3在将上位机和下位机通过CAN总线相连,这样就是一个简单的CAN总线网络,但上位机不能接到下位机传输过来的数据,经过对上位机硬件检测,发现CAN传输线上少接了一个120欧的匹配电阻,接上后用示波器查看可以在上位机中SJA1000中的TR0口得到相应的数字信号。