基于CAN总线的主从机通信系统设计.docx
《基于CAN总线的主从机通信系统设计.docx》由会员分享,可在线阅读,更多相关《基于CAN总线的主从机通信系统设计.docx(21页珍藏版)》请在冰豆网上搜索。
![基于CAN总线的主从机通信系统设计.docx](https://file1.bdocx.com/fileroot1/2023-2/1/547e446b-6143-4673-82a0-9e1e1dd0d69e/547e446b-6143-4673-82a0-9e1e1dd0d69e1.gif)
基于CAN总线的主从机通信系统设计
课程设计〔论文〕任务及评语
院〔系〕:
电气工程学院教研室:
自动化
学号
070302145
学生姓名
李娜
专业班级
自动化075
课程设
计题目
基于CAN总线的主从机通信系统设计
课程设计〔论文〕任务
课题完成的功能、设计任务及要求、技术参数
实现功能
以CAN总线为根底,设计主从机间通信,硬件上完成单片机最小系统、总线控制器、驱动器、串口通信等电路的设计,软件上完成主机、从机和CAN总线的收发数据。
设计任务及要求
1、选择总线控制器、单片机型号,确定设计方案;
2、设计单片机最小系统〔晶振、电源、复位等〕;
3、设计实现系统功能的单片机外围电路;
4、设计CAN总线电路〔包括控制器、驱动器、接口电路〕;
5、软件设计〔编写主程序、接收、发送程序及相应的流程图〕
6、要求认真独立完成所规定的全部内容;所设计的内容要求正确、合理。
7、撰写、打印设计说明书一份;设计说明书应在4000字以上。
技术参数
1、符合标准;
2、CAN节点参数:
晶振频率为24MHz,,总线的速度为20kb/s,最大的传输距离为3000m,双滤波接收数据。
进度方案
1、布置任务,熟悉课设题目,查找及收集相关书籍、资料。
〔1天〕
2、确定控制方案、选型。
〔2天〕
3、总线电路硬件设计。
〔3天〕
4、程序实现及流程图。
〔2天〕
5、撰写设计说明书。
〔1天〕
6、验收及辩论。
〔1天〕
指导教师评语及成绩
平时:
论文质量:
辩论:
总成绩:
指导教师签字:
年月日
注:
成绩:
平时20%论文质量60%辩论20%以百分制计算
摘要
现场总线是当今自动化领域技术开展的热点之一,被誉为自动化领域的计算机局域网。
它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。
CAN(ControllerAreaNetwork)属于现场总线的范畴,是一种多主方式的串行通讯总线,数据通信实时性强。
与其它现场总线比较而言,CAN总线具有通信速率高、容易实现、可靠性高、性价比高等诸多特点。
本系统要在单片机中实现CAN总线的接口,通过CAN总线,实现两个模块之间的数据通讯。
系统主要由四局部所构成:
PC机、微控制器80C51、独立CAN通信控制器SJA1000和CAN总线收发器PCA82C250。
微处理器80C51负责SJA1000的初始化,通过控制SJA1000实现数据的发送和接收等通信任务。
CAN总线节点的软件设计主要包括三大局部:
CAN节点初始化、报文发送和报文接收。
本系统通过扩展CAN总线控制器SJA1000,在单片机系统中实现了CAN总线的接口,并且编写了SJA1000的驱动程序,通过读写其的内部存放器,完成工作方式的设置、接收滤波方式的设置、接收屏蔽存放器〔AMR〕和接收代码存放器〔ACR〕的设置、波特率参数设置和中断允许存放器〔IER〕的设置等根本操作;利用各根本操作,完成了对SJA1000的初始化,并且实现了数据发送和接收。
关键词:
CAN总线;SJA1000;89C51;PCA82C250。
第1章绪论
CAN即控制器局域网络,控制器局部网〔CAN-CONTROLLERAREANETWORK〕是BOSCH公司领先推出的一种多主机局部网,由于其高性能、高可靠性、实时性等优点现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部门。
控制器局部网将在我国迅速普及推广。
由于CAN为愈来愈多不同领域采用和推广,导致要求各种应用领域通信报文的标准化。
为此,1991年9月PHILIPSSEMICONDUCTORS制订并发布了CAN技术标准〔VERSION2.0〕。
该技术标准包括A和B两局部。
给出了曾在CAN技术标准版本1.2中定义的CAN报文格式,能提供11位地址;而2.0B给出了标准的和扩展的两种报文格式,提供29位地址。
此后,1993年11月ISO正式公布了道路交通运载工具--数字信息交换--高速通信控制器局部网〔CAN〕国际标准〔ISO11898〕,为控制器局部网标准化、标准化推广铺平了道路。
第2章
课程设计的方案
概述
本次设计主要是综合应用所学知识,设计基于CAN总线的主从机通信系统,并在实践的根本技能方面进展一次系统的训练。
能够较全面地稳固和应用“工业控制网络〞课程中所学的根本理论和根本方法,并初步了解CAN总线协议标准。
系统介绍:
扩展CAN总线控制器,在单片机系统中实现CAN总线的接口,并编写接口芯片的驱动程序。
通过CAN总线,实现两个模块之间的数据通讯,CPU控制第一个模块发送1帧数据,第二个模块收到这帧数据并送至另一个CPU的内部存储器。
系统组成总体构造
在本系统中,采用AT89C51单片机,AT89C51与PC机串行通信,设置SJA1000工作于Intel模式,由PC机发送的数据写入SJA1000并通过CAN收发器发送。
接收数据是通过中断进展的,CAN总线传输过来的数据经CAN接口芯片PCA82C250接收并写入SJA1000的RXFIFO,然后通过中断提请CPU读取,读取的数据上传送给PC机。
系统构造框图如下图。
82c250
收发
器
6N137
发送隔离
6N137
发送隔离
SJA1000
CAN总线控制器
AT
89C51
单片机
MAX232
图2.1系统构造框图
第3章硬件设计
单片机最小系统设计
单片机AT89C51
ATMEL公司生产的AT89C51单片机采用高性能的静态80C51设计,并采用先进工艺制造,还带有非易失性Flash程序存储器。
它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。
其主要特点如下:
图3.1AT89C51
●面向控制的8为CPU;
●一个片内振荡器和时钟产生电路,振荡频率为0~24MHz;
●片内4KBFlashROM程序存储器;
●128B的片内数据存储器;
●可寻址64KB的片外程序存储器和片外数据存储器控制电路;
●2个16位定时/计数器;
●5个中断源,2个中断优先级;
●一个全双工的异步串行口;
●4个并行I/O口,共32条可单独编程的I/O线;
●21个特殊功能存放器;
●具有节点工作方式,即休闲方式和掉电保护方式;
时钟电路
时钟电路用于产生单片机工作所需的时钟信号。
时钟信号可以有两种方式产生:
内部时钟方式和外部时钟方式。
本设计选用内部时钟方式如图3.2所示。
图3.2时钟电路
复位电路设计
复位操作可以使单片机初始化,也可以使死机状态下的单片机重新启动,因此复位电路对单片机非常重要。
复位电路一般分为上电复位,按键复位等。
本系统所选用的复位电路为按键复位如图3.3。
图3.3按键复位电路
电源电路设计
本系统用LM1572芯片设计电源电路。
LM1572是一个频率为500kHz降压型开关脉宽调制稳压电路,可驱动的负载,占用较小的PCB空间,有极好的电流响应特性和较宽的工作电压范围,是美国国半公司采用先进的模拟双极形CMOS与DMOS处理工艺制造,能够较高的开关频率下提供较高的效率。
内置150mΩ场效应功率管可在较小的封装中提供较大的功率。
其输出电压可固定5V和或可调输出。
电路图如图3.4所示。
图3.4电源电路
CAN总线电路设计
控制器SJA1000
SJA1000是PHILIPS公司早期CAN控制器PCA82C200的替代品,功能更强,具有如下特点:
1完全兼容PCA82C200及其工作模式,即BASICCAN模式;
2具有扩展的接收缓冲器,64字节的FIFO构造;
3支持CAN2.0B;
4支持11位和29位识别码;
5位速率可达1Mbit/s;
6支持peliCAN模式及其扩展功能;
724MHz的时钟频率;
8支持与不同微处理器的接口;
9可编程的CAN输出驱动配置;
对于CPU来说,CAN控制器是确保双方独立工作的存贮器映象外围设备。
CAN控制器与外部CPU的接口是通过控制器接口逻辑〔CIL〕实现的,80C51的CPU通过将地址总线〔AB〕和数据总线〔DB〕连接到CIL上来完成与CAN控制器之间的信息交换,不需要专门的控制总线〔CB〕,CPU与PCA82C250之间的状态、控制和命令信号的交换在CAN控制器中完成。
SJA1000
图3.5SJA1000与单片机的接口电路
驱动器及接口电路MAX232
MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。
它的内部构造可分为三个局部;第一局部是电荷泵电路,由1、2、3、4、5、6脚和4只电容构成,功能是产生+12v和-12v两个电源,提供应RS-232串口电平的需要。
第二局部是数据转换通道,由7、8、9、10、11、12、13、14脚构成两个数据通道,其中13脚〔R1IN〕、12脚〔R1OUT〕、11脚〔T1IN〕、14脚〔T1OUT〕为第一数据通道;8脚〔R2IN〕、9脚〔R2OUT〕、10脚〔T2IN〕、7脚〔T2OUT〕为第二数据通道;TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三局部是供电。
15脚DNG、16脚VCC〔+5v〕。
MAX232芯片引脚如图3.6所示。
发送隔离6N137
高速光电耦合器6N137由磷砷化镓发光二极管和光敏集成检测电路组成。
通过光敏二极管接收信号并经内部高增益线性放大器把信号放大后,由集电极开路门输出。
6N137引脚图如下图。
该光电器件高、低电平传输延迟时间短,典型值仅为45ns,已接近TTL电路传输延迟时间的水平。
具有10Mbps的高速性能,因而在传输速度上完全能够满足隔离总线的要求。
内部噪声防护装置提供了典型10kV/μs的共模抑制功能。
除此之外,6N137还具有一个控制端,通过对该端的控制,可使光耦输出端呈现高阻状态。
图3.6MAX232引脚图
图3.7发送隔离6N137
收发器PCA82C250
PCA82C250是CAN协议控制器和物理总线间的接口,它主要是为汽车中高速通讯〔高达1Mbps〕应用而设计。
此器件对总线提供差动发送能力,对CAN控制器提供差动接收能力,与ISO11898标准完全兼容。
PCA82C250芯片由接收器、驱动器、基准电压产生电路、工作模式选择电路及保护电路等组成。
PCA82C250内部的限流电路可以防止发送输出级对电池电压的正端和负端短路。
虽然在这种故障条件出现时,功耗将增加,但这种特性可以阻止发送器输出级的破坏。
在节点温度大约超过160℃时,两个发送器输出端的极限电流将减少。
由于发送器是功耗的主要局部,因此芯片温度会迅速降低。
PCA82C50芯片的其他局部将继续工作。
当总线短路时,热保护十分重要。
图PCA82C250
硬件原理图
第4章软件设计
主程序
CAN总线节点的软件设计主要包括三大局部:
CAN节点初始化、报文发送和报文接收。
程序开场运行后,先调用初始化子程序,分别对两个CAN模块中的SJA1000进展初始化,然后把要发送的数据写入CPU的存储器中,然后循环调用发送数据子程序和接收数据子程序。
具体流程如下图。
开场
CAN1初始化
CAN2初始化
待发送数据写入存储器
CAN1发送数据
CPU读取数据
完毕
图4.1主程序流程图
初始化子程序
SJA1000的初始化只有在复位模式下才可以进展,初始化主要包括工作方式的设置、接收滤波方式的设置、接收屏蔽存放器〔AMR〕和接收代码存放器〔ACR〕的设置、波特率参数设置和中断允许存放器〔IER〕的设置等。
在完成SJA1000的初始化设置以后,SJA1000就可以回到工作状态,进展正常的通信任务。
初始化子程序先设置MOD选择复位模式,然后分别设置CDR选择工作模式;设置IER选择中断类型;设置BTR0、BTR1设定传输速率;设置OCR选择输出模式;设置ACR、AMR设定接收数据类型;RBSA、TXERR、ECC均清零,最后设置MOD进入工作模式。
具体流程如下图
开场
设置复位模式
设置时钟分频存放器
设置中断时间存放器
设置总线定时存放器
设置输出控制存放器
设置验收代码存放器
设置验收屏蔽存放器
接收缓冲器首地址清零
发送错误计数器清零
错误代码捕捉存放器清零
进入工作模式
完毕
图4.2初始化子程序流程图
报文发送子程序
发送子程序负责节点报文的发送。
发送时用户只需将待发送的数据按特定格式组合成一帧报文,送入SJA1000发送缓存区中,然后启动SJA1000发送即可。
发送数据子程序先把三个控制字节写入发送缓冲区,然后把等待发送的数据也写入发送缓冲区,最后设置CMR,发出发送请求、启动SJA1000发送数据。
具体流程如下图。
开场
控制字节写入发送缓冲区
待发送数据写入发送缓冲区
设置命令存放器
启动SJA1000发送
完毕
图发送子程序流程图
报文接收子程序
接收子程序负责节点报文的接收以及其它情况处理。
接收子程序比发送子程序要复杂一些,因为在处理接收报文的过程中,同时要对诸如总线脱离、错误报警、接收溢出等情况进展处理。
SJA1000报文的接收主要有两种方式:
中断接收方式和查询接收方式,两种接收方式编程的思路根本一样,如果对通信的实时性要求不是很强,一般采用查询接收方式。
接收数据子程序首先要读SR和IR,判断工作状态及中断类型并做相应处理,假设RXFIFO有数据,应判断帧类型并做相应处理,假设数据正确那么送至CPU的内部存储器。
具体流程如下图
图4.4接收子程序流程图
第5章系统实验数据及分析
系统要求CAN总线参数为:
晶振频率为24MHz,,总线的速度为20kb/s,最大的传输距离为3000m,双滤波接收数据。
根据上述参数计算总线定时器0和定时器1得控制字,计算过程如下:
由总线的速度为20kb/s得
因为晶振频率为24MHz,所以
s
s
s
得总线定时器0各控制字位
7
6
5
4
3
2
1
0
0
1
0
1
1
1
0
1
即BTR0=5DH
得总线定时器1各控制字位
7
6
5
4
3
2
1
0
Sam
0
0
1
0
1
1
1
1
即BTR1=2FH
第6章课程设计总结
本文设计的基于CAN总线的主从机通信系统,可实现主机与从机之间的数据通信。
系统设计的关键局部是CAN总线通信接口适配卡的设计,其任务是将PC的数据和控制参数迅速传送给给定的网络节点,同时将CAN网络节点数据送到PC做进一步处理。
其功能主要由MAX232接口芯片、AT89C51单片机、SJA1000CAN总线控制器、发送隔离6N137及82C250完成。
节点与上位机之间的数据通信稳定可靠,可以通过现场设置模块修改节点参数。
系统中只有2根线与外部相连,并且内部集成了错误探测和管理模块。
CAN总线通过CAN收发器接口芯片82C250的两个输出端CANH和CANL与物理总线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。
这就保证不会在出现在RS-485网络中的现象,即当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。
而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“死锁〞状态。
而且,CAN具有的完善的通信协议可由CAN控制器芯片及其接口芯片来实现,从而大大降低系统开发难度,缩短了开发周期,这些是仅有电气协议的RS-485所无法比较的。
实验说明了节点的实用性与可靠性开发过程中提到的技术方案和实现方法可以在汽车内部系统与各个检测和执行机构间的数据通信设计中推广应用。
附录程序清单
MODEQU00H;模式存放器
CMREQU01H;命令存放器
SREQU02H;状态存放器
IREQU03H;中断存放器
IEREQU04H;中断使能存放器
BTR0EQU06H;总线定时存放器0
BTR1EQU07H;总线定时存放器1
OCREQU08H;输出控制存放器
ALCEQU0BH;仲裁丧失捕捉存放器
ECCEQU0CH;错误代码捕捉存放器
TXERREQU0FH;发送错误计数器
ACR0EQU10H;验收代码存放器0
ACR1EQU11H;验收代码存放器1
ACR2EQU12H;验收代码存放器2
ACR3EQU13H;验收代码存放器3
AMR0EQU14H;验收屏蔽存放器0
AMR1EQU15H;验收屏蔽存放器1
AMR2EQU16H;验收屏蔽存放器2
AMR3EQU17H;验收屏蔽存放器3
FINEQU10H;发送/接收帧信息
ID1EQU11H;发送/接收缓冲区之标示符一
ID2EQU12H;发送/接收缓冲区之标示符二
DATA1EQU13H;发送/接收数据首址
RBSAEQU1EH;接收缓冲器起始地址
CDREQU1FH;时钟分频存放器
;---------------READERCOS1.0--------------------------
ORG4000H
JMPSTART
ORG4080H
;--------------------------------主程序-----------------------------------
START:
MOVDPH,#0D3H;CAN1初始化(CAN1片选为
;LCS2:
0D300H)
MOVR0,#0AAH;验收代码为AAH
LCALLINITCAN
MOVDPH,#0D4H;CAN2初始化(CAN2片选为
;LCS3:
0D400H)
MOVR0,#0BBH;验收代码为BBH
LCALLINITCAN
;-----------------------------------------------------------------
MOVR0,#20H;20H-27H赋初值
MOVR1,#00H
MOVDPTR,#TXDATA
SS1:
MOVA,R1
MOVCA,@A+DPTR
MOV@R0,A
INCR0
INCR1
CJNER1,#08,SS1
;-------------------------CAN1发送1帧数据------------------
LOOP:
MOVDPH,#0D3H
MOVR0,#20H
LCALLSEND;发送20H为首址的1帧数据(前三
;控制字节为:
08H、BBH、FFH,由程序给出〕
LCALLDELAY;调用延时子程序
;-------------------------CAN2接收1帧数据------------------------
MOVDPH,#0D4H
MOVR0,#30H
LCALLRECV;调用接收数据子程序
NOP;设断点处
HALT:
JMPLOOP
TXDATA:
DB0AAH,0BBH,0CCH,0D4H;要发送的一帧数据,用户可改写
DB0E5H,0F6H,97H,18H
;----------------------------初始化子程序-------------------------------
INITCAN:
;DPH、R0为入口参数
MOVDPL,#MOD;模式存放器,选择双验收滤波器模
;式,进入复位模式
MOVA,#09H
MOVX@DPTR,A
MOVDPL,#CDR;时钟分频器,选择PeliCAN模式,
MOVA,#88H;关闭CLKOUT输出
MOVX@DPTR,A
MOVDPL,#IER;中断使能存放器,开溢出、错误、
MOVA,#0DH;接收中断
MOVX@DPTR,A
MOVDPL,#BTR0;总线定时存放器0
MOVA,#03H
MOVX@DPTR,A
MOVDPL,#BTR1;总线定时存放器1,6MHz晶振,
MOVA,#0FFH;波特率30Kbps
MOVX@DPTR,A
MOVXA,@DPTR
MOVDPL,#OCR;输出控制存放器,
;选择正常输出模式
MOVA,#0AAH
MOVX@DPTR,A
MOVDPL,#ACR0;验收代码存放器ACR0
MOVA,R0
MOVX@DPTR,A
INCDPTR;验收代码存放器ACR1
MOVA,#0FFH
MOVX@DPTR,A
INCDPTR;验收代码存放器ACR2
MOVX@DPTR,A
INCDPTR;验收代码存放器ACR3
MOVX@DPTR,A
MOVDPL,#AMR0;验收屏蔽存放器AMR0
MOVA,#00H
MOVX@DPTR,A
INCDPTR;验收屏蔽存放器AMR1
MOVA,#0FFH
MOVX@DPTR,A
INCDPTR;验收屏蔽存放器AMR2
MOVX@DPTR,A
INCDPTR;验收屏蔽存放器AMR3
MOVX@DPTR,A
MOVDPL,#RBSA;接收缓冲器起始地址为0
MOVA,#00H
MOVX@DPTR,A
MOVDPL,#TXERR;去除发送错误计数器
MOVX@DPTR,A
MOVDPL,#ECC;去除错误代码捕捉存放器
MOVX@DPTR,A
MOVDPL,#MOD;双验收滤波器模式,返回工作模式
MOVA,#08H
MOVX@DPTR,A
RET
;--------------------------发送数据子程序------------------------
SEND:
;DPH、R0为入口参数
MOVDPL,#FIN;SJA1000发送缓存区首址
MOVA,#08H
MOVX@DPTR,A
INCDPL
MOVA,#0BBH
MOVX@DPTR,A
INCDPL
MOVA,#0FFH
MOVX@DPTR,A
INCDPL
MOVR2,#08H
SEND1:
MOVA,@R0;R0为发送数据首址
MOVX@DPTR,A
INCR0
INCDPL