《CAN总线通信系统设计1教学提纲.doc》由会员分享,可在线阅读,更多相关《CAN总线通信系统设计1教学提纲.doc(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Good is good, but better carries it.精益求精,善益求善。CAN总线通信系统设计1-摘要:CAN总线是控制器局域网总线(contr01lerAreaNetwork)的简称。属于现场总线的范畴,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性及独立的设计而被广泛应用于工业现场控制系统中。SJAl000是一个独立的CAN控制器,PCA82C200的硬件和软件都兼容,具有一系列先进的性能,特别在系统优化、诊断和维护方面,因此,SJAl000将会替代PCA82C200。SJAl000支持直接连接到两个著名的微型控制器系列80C51和68xx。下
2、面以单片机STC89C52和SJAl000为例,介绍CAN总线模块的硬件设计和CAN通信软件的基本设计方法。关键字:CAN总线STC89C52SJA1000Summary:CANbusiscontrollerLANbus(contr01lerAreaNetwork)forshort.Belongstothecategoryoffieldbus,isakindofeffectivesupportdistributedcontrolorreal-timecontrolofserialcommunicationnetwork.Becauseofitshighperformance,highrelia
3、bilityandtheindependentdesignandiswidelyusedintheindustrialfieldcontrolsystem.SJAl000isanindependentCANcontroller,PCA82C200hardwareandsoftwarearecompatiblewithaseriesofadvancedproperties,especiallyinsystemoptimization,diagnosisandmaintenance,therefore,SJAl000willreplacePCA82C200.SJAl000supportdirect
4、lyconnectedtothetwofamousmicrocontrollerseries80C51and68xx.TheSTC89C52andSJAl000withthesinglechipprocessorasanexample,thispaperintroducesthehardwaredesignofCANbusmoduleandCANthecommunicationsoftwarebasicdesignmethod.Keywords:CANbusSTC89C52SJA1000目录1、系统方案设计1.1设计要求1.2系统基本方案1.2.151单片机1.2.2CAN总线控制器1.2.3
5、CAN总线收发器1.2.4显示电路2、系统的硬件设计与实现2.1系统硬件的基本组成部分2.2主要单元电路设计2.2.1单片机电路设计2.2.2CAN总线控制器电路设计2.2.3CAN总线接口电路设计2.2.4显示电路设计3、系统测试与编程调试3.1电路测试与编程调试3.2系统实现的功能4结论4.1评价4.2心得5参考文献6附录6.1器件清单6.2系统原理图6.3程序代码1.系统方案设计1.1设计要求(1)设计一套CAN总线通信系统(包括1发送板和1接收板),发送板需显示拨码开关的状态并通过CAN总线发送出去,接受板通过CAN总线接受并动态显示开关的状态以验证通信的正确性。(2)开关的状态采用两
6、位数码管显示;(3)系统可靠性好、运行稳定;(4)必须具有上电自检功能及外接电源、公共地线接口。1.2基本方案根据题目要求,可以得到以下几个部分。总体设计框图1.2.151单片机系统的控制芯片采用STC89C52单片机来控制,因为STC89C52应用比较广泛,并且成本低,操作控制简单,功耗较低,运行可靠性强。系统本身对处理器处理速度的要求不是很高,所以选择该款单片机。STC89C52的引脚图STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-FlashProgramableandErasableReadOnlyMemory)的低电压,高性能COMOS8的微处理器,俗称单片
7、机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。STC89C52主要功能主要功能特性兼容MCS51指令系统8K可反复擦写FlashROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能1.2.2CAN总线控制器CAN总线控制器选用SJA1000。SJAl000是一个独立的控制器,有两种不同的模式。(1)BasiccAN模式:系统上电后默认的模式,与PCA82C20
8、0兼容。(2)PelicAN模式:支持CAN2.0B协议规定的所有功能。SJAl000的内部结构如图1所示,其功能模块主要有:接口管理逻辑、接收FIFO队列、接收滤波器、发送缓冲器和CAN核心模块。CAN核心模块基于CAN20B的协议执行对CAN帧的发送和接收。逻辑管理接口实现与外部单片机的连接。SJAlO00的发送缓冲器可以存储一个完整的报文,当单片机开始一个传送时,逻辑管理接口会使CAN核心模块读发送缓冲器的数据,依照CAN2.OB协议发送数据。当收到一个报文时,cAN核心控制模块将连续的位转换为标准的数据存放于接收过滤器中,通过验收码寄存器、验收屏蔽寄存器进行过滤处理,将符合标志位要求的
9、数据放人接收FIF0队列中以下为SJA1000芯片的特点:管脚及电气特性与独立CAN总线控制器PCA82C200兼容;软件与PCA82C200兼容(缺省为基本CAN模式);扩展接收缓冲器(64字节FIFO);支持CAN2.0B协议;同时支持11位和29位标识符;位通讯速率为1Mbits/s;增强CAN模式(PeliCAN);采用24MHz时钟频率;支持多种微处理器接口;可编程CAN输出驱动配置;工作温度范围为-40+125。SJA1000内部结构图从芯片的结构图中可以看出,SJA1000型独立CAN总线控制器由以下几部分构成;(1)接口管理逻辑:它接收来自微处理器的命令,控制CAN寄存器的地址
10、,并为微处理器提供中断和状态信息。(2)发送缓冲器:有13字节长。它位于CPU和位流处理器(BSP)之间,能存储一条将在CAN总线上发送的完整的报文,报文由CPU写入,由SBP读出。(3)接收缓冲器(RXB、RXFIFO):它是CPU和接收滤波器之间的接口,用来存储从CAN总线接收并通过了滤波的报文。接收缓冲器RXB是提供给CPU可访问的13字节的窗口,这个窗口是属于接收FIFO(RXFIFO)的一部分,共由64字节长。有了这个FIFO,可以在CPU处理一个报文的同时继续接收其他到来的报文。(4)接收滤波器:它把报文头中的标识符和接收滤波寄存器中的内容进行比较,以判断文报文是否被接收。如果被接
11、收,报文存入RXFIFO。(5)位流处理器:它是一个控制发送缓冲器、RXFIFO并行数据和CAN总线(串行数据)之间数据的序列发生器,同时它也执行错误检测、仲裁、位填充和CAN总线错误处理功能。(6)位定时逻辑不:它将SJA1000同步于CAN总线上的位流。(7)错误管理逻辑:它按照CAN协议完成错误界定。1.2.3CAN总线收发器CAN总线收发器选用Philips公司PCA82C250产品。CAN总线收发器是CAN协议控制器和物理总线之间的接口,该器件对总线提供差动发送能力并对CAN控制器提供差动接受能力,有很强的对抗电磁干扰(EMI)的能力,至少可挂110个节点。PCA82C250内部构造
12、1.2.4显示电路根据系统的设计要求,采用两位数码管显示电路。与液晶显示器相比较,数码管显示比较显眼,而且电路设计比较简单,更重要的是编写程序比较容易。完全能达到系统的设计要求。2.系统的硬件设计与实现2.1系统硬件的基本组成部分该系统的硬件主要包含这几个部分:处理器、CAN总线控制器、CAN总线收发器、数码管。结构电路如下:2.2主要单元电路设计2.2.1单片机电路设计本设计选择STC89C52单片机。STC89C52自带有片内ROM和一定数量的RAM,一般不需要扩展片外的存储器,并且能和MCS51产品兼容。本设计选用简单基本的经典复位电路,它利用电容和电阻的充放电来产生一个达到时间要求的连
13、续低电压,并输入到单片机的复位管脚,如下图所示:2.2.2CAN总线控制器电路SJA1000被设计为全面支持CAN2.0B协议,而且支持多处理器接口,其接口电路十分简单,如下图所示:其电路图如下:2.2.3CAN总线收发器电路CAN总线收发器选用PCA82C250,其封装为SOIC,而且只有8个引脚,其设计电路如下图所示:由图中可以看出,在CAN总线的终端接了一个120欧的电阻。这个电阻是很必要的,因为高频信号传输时,信号波长相对传输线较短,信号在传输线终端会形成反射波,干扰原信号,所以需要在传输线末端加终端电阻,使信号到达传输线末端后不反射。对于低频信号则不用。2.2.4显示电路设计该系统采
14、用2位数码管显示,电路结构简单,如下所示:3.系统软件设计3.1发送板软件设计初始化寄存器程序:CANI1:MOVXA,DPTR;判复位请求有效JNBACC.0,CANI1MOVDPTR,#0FE04H;写接收码寄存器MOVA,#20H;设置本节点地址为20HMOVXDPTR,AMOVDPTR,#0FE05H;写接收码屏蔽寄存器MOVA,#00HMOVXDPTR,AMOVDPTR,#0FE06H;写总线定时寄存器0MOVA,#43H;设置波特率MOVXDPTR,AMOVDPTR,#0FE07H;写总线定时寄存器1MOVA,#2FHMOVXDPTR,AMOVDPTR,#0FE08H;写输出控制寄
15、存器MOVA,#0FAHMOVXDPTR,AMOVDPTR,#0FE1FH;写时钟分频寄存器MOVA,#40HMOVXDPTR,AMOVDPTR,#0FE00H;写控制寄存器MOVA,#0EH;开放中断源MOVXDPTR,ACAN发送子程序:MAINLOOP:LCALLDISP;调用显示子程序MOVDPTR,#0FE02H;读状态寄存器判接收缓冲区是否有报文MOVXA,DPTRJNBACC.0,MAINLOOPMOVDPTR,#0FE16H;读取接收缓冲区开关状态数据MOVXA,DPTRMOVRECDAT,AMOVDPTR,#0FE01H;接收完毕释放缓冲区MOVA,#04HMOVXDPTR,
16、A3.2接收板软件设计CAN总线接收子程序:LCALLDISP;调用显示子程序MOVDPTR,#0FE02H;读状态寄存器判接收缓冲区是否有报文MOVXA,DPTRJNBACC.0,MAINLOOPMOVDPTR,#0FE16H;读取接收缓冲区开关状态数据MOVXA,DPTRMOVRECDAT,AMOVDPTR,#0FE01H;接收完毕释放缓冲区MOVA,#04HMOVXDPTR,AAJMPMAINLOOP数码管显示子程序:DISP:MOVA,RECDATANLA,#0FH;取开关状态低4位MOVLED0,AMOVA,RECDATANLA,#0F0H;取开关状态高4位SWAPAMOVLED1,
17、AMOVDPTR,#TABLEMOVA,LED0MOVCA,A+DPTRSETBP3.3MOVP2,ALCALLDELAYCLRP3.3MOVA,LED1MOVCA,A+DPTRSETBP3.4MOVP2,ALCALLDELAYCLRP3.4RET4结论41评价系统优点:系统电路结构简单,易于维护。而且系统工作稳定,抗干扰能力强。同时,系统可用于完成一些基本的CAN总线通信实验,而且方便观察实验的结果。不足之处:系统电路制作时,出现小小得失误,制作电路板时,出现断线的情况。器件布局以及布线有待改进。42心得这次实训锻炼了自己的动手能力,将自己平时所学的CAN总线理论知识与实践结合起来了,让自己
18、对理论知识有了更新的认识。同时也让自己对单片机的控制理论有了更深的认识,以前一些模糊的概念变得清晰起来。有一种,读书百变,还不如自己动手做一遍来得实在。通过这次设计,锻炼了自己汇编程序编写水平。让我体会到了汇编程序的简介性。用汇编程序驱动器件,比C语言容易多了,但是就是难以理解点。5参考文献现场总线及其应用技术李正军机械工业出版社单片机原理及接口技术(第3版)李朝青北京航空航天大学出版社6附录6.1器件清单CAN总线通信系统主要元器件清单名称数量STC89C522SJA10002PCA82C2502IMP7082自锁开关2两位数码管212MHz晶振216MHz晶振2拨码开关16.2系统原理图6
19、.3程序代码发送板程序:LED0EQU33H;低4位LED1EQU34H;高4位ORG0000HAJMPMAINORG0030H;初始化MAIN:CLRP3.5MOVDPTR,#0FE00H;写控制寄存器MOVA,#01H;置复位请求为高MOVXDPTR,ACANI1:MOVXA,DPTR;判复位请求有效JNBACC.0,CANI1MOVDPTR,#0FE04H;写接收码寄存器MOVA,#10H;设置本节点地址为10HMOVXDPTR,AMOVDPTR,#0FE05H;写接收码屏蔽寄存器MOVA,#00HMOVXDPTR,AMOVDPTR,#0FE06H;写总线定时寄存器0MOVA,#43H;
20、设置波特率MOVXDPTR,AMOVDPTR,#0FE07H;写总线定时寄存器1MOVA,#2FHMOVXDPTR,AMOVDPTR,#0FE08H;写输出控制寄存器MOVA,#0FAHMOVXDPTR,AMOVDPTR,#0FE1FH;写时钟分频寄存器MOVA,#40HMOVXDPTR,AMOVDPTR,#0FE00H;写控制寄存器MOVA,#0EH;开放中断源MOVXDPTR,ALOOP:MOVP1,#0FFH;P1为准双向口,先写1NOPMOVA,P1;读拨码开关编码MOV30H,ATXBUFF:MOVDPTR,#0FE02H;读状态寄存器,判发送缓冲区状态MOVXA,DPTRJNBAC
21、C.2,TXBUFFMOVDPTR,#0FE0AH;向发送缓冲区填入标识符MOVA,#20H;接收方地址20HMOVXDPTR,AMOVDPTR,#0FE0BH;填入数据长度MOVA,#01HMOVXDPTR,AMOVDPTR,#0FE0CH;填入拨码开关编码MOVA,30HMOVXDPTR,AMOVDPTR,#0FE01H;置CMR.0为1请求发送MOVA,#01HMOVXDPTR,ALCALLDISP;调用显示子程序AJMPLOOPDISP:MOVP1,#0FFH;P1为准双向口,先写1NOPMOVA,P1;读拨码开关编码ANLA,#0FH;取开关状态低4位MOVLED0,AMOVA,P1
22、ANLA,#0F0H;取开关状态高4位SWAPAMOVLED1,AMOVDPTR,#TABLEMOVA,LED0MOVCA,A+DPTRSETBP3.3MOVP2,ALCALLDELAYCLRP3.3MOVA,LED1MOVCA,A+DPTRSETBP3.4MOVP2,ALCALLDELAYCLRP3.4RETDELAY:MOVR6,#10;延时5毫秒D1:MOVR7,#25DJNZR7,$DJNZR6,D1RETTABLE:DB88H,9fH,0a4H,85H,93HDB0c1H,0c0H,8fH,80H,81HDB82H,0d0H,0e8H,94H,0e0H,0e2HEND接收板程序:LE
23、D0EQU33H;低4位LED1EQU34H;高4位RECDATEQU35H;开关状态值ORG0000HAJMPMAINORG0030HMAIN:CLRP3.5NOPMOVRECDAT,#00H;赋初值00H;CAN总线初始化MOVDPTR,#0FE00H;写控制寄存器MOVA,#01H;置复位请求为高MOVXDPTR,ACANI1:MOVXA,DPTR;判复位请求有效JNBACC.0,CANI1MOVDPTR,#0FE04H;写接收码寄存器MOVA,#20H;设置本节点地址为20HMOVXDPTR,AMOVDPTR,#0FE05H;写接收码屏蔽寄存器MOVA,#00HMOVXDPTR,AMO
24、VDPTR,#0FE06H;写总线定时寄存器0MOVA,#43H;设置波特率MOVXDPTR,AMOVDPTR,#0FE07H;写总线定时寄存器1MOVA,#2FHMOVXDPTR,AMOVDPTR,#0FE08H;写输出控制寄存器MOVA,#0FAHMOVXDPTR,AMOVDPTR,#0FE1FH;写时钟分频寄存器MOVA,#40HMOVXDPTR,AMOVDPTR,#0FE00H;写控制寄存器MOVA,#0EH;开放中断源MOVXDPTR,AMAINLOOP:LCALLDISP;调用显示子程序MOVDPTR,#0FE02H;读状态寄存器判接收缓冲区是否有报文MOVXA,DPTRJNBAC
25、C.0,MAINLOOPMOVDPTR,#0FE16H;读取接收缓冲区开关状态数据MOVXA,DPTRMOVRECDAT,AMOVDPTR,#0FE01H;接收完毕释放缓冲区MOVA,#04HMOVXDPTR,AAJMPMAINLOOPDISP:MOVA,RECDATANLA,#0FH;取开关状态低4位MOVLED0,AMOVA,RECDATANLA,#0F0H;取开关状态高4位SWAPAMOVLED1,AMOVDPTR,#TABLEMOVA,LED0MOVCA,A+DPTRSETBP3.3MOVP2,ALCALLDELAYCLRP3.3MOVA,LED1MOVCA,A+DPTRSETBP3.4MOVP2,ALCALLDELAYCLRP3.4RETDELAY:MOVR6,#10;延时5毫秒D1:MOVR7,#250DJNZR7,$DJNZR6,D1RETTABLE:DB88H,9fH,0a4H,85H,93HDB0c1H,0c0H,8fH,80H,81HDB82H,0d0H,0e8H,94H,0e0H,0e2HEND-
限制150内