基于AT89C51型单片机的CAN总线智能节点设计文档良心出品_第1页
基于AT89C51型单片机的CAN总线智能节点设计文档良心出品_第2页
基于AT89C51型单片机的CAN总线智能节点设计文档良心出品_第3页
基于AT89C51型单片机的CAN总线智能节点设计文档良心出品_第4页
基于AT89C51型单片机的CAN总线智能节点设计文档良心出品_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于AT89C51型单片机的CAN总线智能节点设计2021-02-20嵌入式在线收藏|打印介绍CAN限制器局域网总线的特点,给出 CAN总线系统智能节点电路原理及用 C51 语言编写的开发程序,方便使用者学习和掌握.1引言CANController Area Network是限制器局域网,主要用于各种设备检测及限制的现场总线.CAN总线是德国BOSCH公司20世纪80年代初为解决汽车中众多限制与测试仪器间的数据交换而开发的串行数据通信协议.这是一种多主总线,无论是在高速网络还是在低本钱的节点系统,应用都很广泛.由于采用了许多新技术及独特的设计,与一般的通信总线相比,CAN总线的数据通信具有突出

2、的可靠性、实时性和灵活性,其主要特点如下:通信方式灵活,可以多主方式工作,网络上任意一个节点均可以在任意时刻主动向网络上的其他节点发送信息,不分主从. CAN节点只需对报文的标识符滤波即可实现点对点、点对多点及全局播送方式发送和接收数据,其节点可分成不同的优先级,节点的优先级可通过报文标识符进行设置,优先级高的数据最多可在 134ds内传输,可以满足不同的实时要求. CAN总线通信格式采用短帧格式,每帧字节数量多为8个字节,可满足一般工业领域中限制命令、工作状态及测试数据的要求,同时,8个字节不会占用总线时间过长,保证了通信的实时性.采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息出现冲

3、突时,优先级低的节点会主动退出数据发送,而优先级高的节点可不受影响地继续传输数据,大大节省了总线冲突仲裁时间,在网络重载的情况下也不会出现网络瘫痪.直接通信距离最大可达 10 km 速率在5 kb/s以下,最高通信速率可达 1 Mb/s 此 时距离最长为40 m;节点数可达110个,通信介质可以是双绞线、同轴电缆或光导纤维. CAN总线采用CRC检验并可提供相应的错误处理功能,保证数据通信的可靠性,其节点在错误严重的情况下具有自动关闭输出功能,使总线上其他节点的操作不受影响.2 CAN总线系统结构由于CAN总线采用多主方式工作,所以具有与DCS分布式限制系统不一样的拓扑结构.其限制系统由计算机

4、和智能节点组成,如图1所示.该系统最大的特点是所有的节点都能以 平等的地位挂接在总线上.1个总线节点通常至少包括 3局部:限制节点任务的单片机、总线限制器及总线驱动器.本文主要介绍CAN总线智能节点的简单设计.智能节点由 89C51型单片机、SJA1000型总线限制器、82C250型总线驱动器及 PC构成.在实际应用中可以 连接不同的传感器件,完成数据的采集和传输.智能书点1暂能节点2图I CAN总线系统结构3硬件电路设计笔者设计的CAN总线系统智能节点采用 Intel公司的AT89C51型单片机作为节点的微 处理器.AT89C51具有64KB的寻址空间.本身不带CAN限制器,所以要实现与 C

5、AN总线 之间的通信需外加 CAN限制器和CAN驱动器.在本设计中采用SJAl000型CAN总线通信限制器和AT82C250型总线驱动器.CAN总线系统智能节点硬件电路如图2所示.从图2可以看出,硬件电路主要由 AT89c51、SJAl000、AT82C250、6N137型高速光电耦合器和 MAX202型电平转换器件组成.AT89C51负责SJAl000的初始化,限制 SJAl000实现数据的接收和发送等通信任务.MAX202用于TTL电平与RS232电平的相互转换,可以将接收的数据显示在PC上.SJAl000 的 ADO-AD7 连接到 AT89C51 的 P0 口,CS 连接到 AT89C

6、51 的 P2.7.P2.7 为 0 时,CPU片外存储器地址可选中 SJA1000 , CPU通过这些地址可对 SJA1000执行相应的读/写操作.接ATSJA1000的RD、WR、ALE分别与 AT89C51的相应引脚相连,SJA1000的INT89C51的INTl , AT89C51也可通过中断方式访问 SJA1000 .SJA1000+12VVCC +12VVCC3M 口 "VDD39m39.0I FoOnFVPL12To门皿 mmolz 1-4567 E T TwadmadadadadadralgwALMRSTil RXORX1 CtlOUTVDD1 VDD2VDD3 V&

7、gt;04V5S1 VS52VSS3noIT115pFT VCC:OHJ24MHzX15咛AT82C250I-i-l OOnFVCC +12V3QpF=?4007 本 40076M137VCCVCCENOUTGYD-L-1-brW INOUT EN VCC mD0N13715pFD DCC TKHvrYC511 口47上门VCC1VCC139.06N137HD 59DQ册137390 口RXD就毛CPOUTGM)GN 口 IN OUTEK ?CC v口口N N u u 44- I I o o O1Z21212 c c c T T R L图2 CAN总线系统智能节点硬件电路为了增强总线节点的抗干

8、扰水平,SJA1000的TX0和RX0并不直接与82C250的TXD和RXD相接,而是通过6N137与AT82C250相接,这样,很好地实现了总线上各节点间 的电气隔离.不过,光耦电路用的2个电源VCC和VDD必须隔离.电源的完全隔离可采用小功率电源隔离模块实现.这虽然增加了接口电路的复杂性,但却提升了节点的稳定性和平安性.AT82C250与总线的接口也采取了一定的平安和抗干扰举措.AT82C250的CANH引脚和CANL引脚各自通过1只5 a的电阻器与总线相连,电 阻器可起到一定的限流作用,保护AT82C250免受过电流冲击.CANH和CANL与地之间并联了 2只30pF的小电容器,可以滤除

9、总线上的高频干扰并具有一定的防电磁辐射水平. 另外,在2条CAN总线输入端与地之间分别接了1个防雷击管,当2个输入端与地之间出现瞬变干扰时,防雷击管的放电起到一定的保护作用.AT82C250的RS引脚接1只斜率电阻器,其阻值的大小可根据总线通信速度适当调整,一般在16 kQ140 kQ之间.4软件设计4.1 网络通信规那么CAN总线为多主工作方式,网络上任一节点均可在任意时刻主动向网络上其他节点发 送信息而不分主从,通信方式灵活.为禁止总线冲突,CAN总线采用非破坏性总线仲裁技术,根据需要将各个节点设定为不同的优先级,并以标识符ID标定,其值越小,优先级越高.总线的节点之间可以进行实时相互通信

10、,当 1个节点需要接收另1个节点的数据时, 只需把其代码存放器的内容设置成和另1节点的标识符一致即可.如果对于标识符和其代码存放器的内容设置不一致,那么节点所发的数据不予理会.4.2 SJAl000的工作模式设置SJAl000有二种工作模式:复位模式和工作模式.在复位模式下可对接收代码、接收 屏蔽、总线时序存放器 O和1及输出限制存放器进行设置.一般在CAN初始化时完成对以上存放器的设置,当 CAN进入工作模式后,它们的值就不再变化.在工作模式下可进行数 据的发送和接收.特别要注意的是:当硬件复位或限制器掉线时会自动进入复位模式,这样就不能进行正常的 CAN通信,这就要求对复位位进行监控.当发

11、生硬件复位或限制器掉线 而进入复位模式时,要求把复位位置为0并进入工作模式,这样 CAN就能进行正常发送和接收.4.3 基于C语言的软件编程系统软件的设计思想是系统上电后首先对AT89C51和SJA1000进行初始化,以确定工作主频、波特率、输出特性等.其中任一智能节点可以利用查询方式通过SJA1000从CAN总线上获取所需的数据并把该数据传送到PC上显示,同时可以向总线上发送数据以供其他智能节点接收显示.以下是具体实现程序.#include <reg51.h>#incluck <intrins,h>include CAN_TOUWENJiANiT 包含相关存放工定义的

12、大文件 利始化SJR1000主限制线子事效 void Init_CAN(void) MODE=Od)l;COR=Oit88;IER=OxOD:AMR=OxFF;ACR=Ox(XXBTR(H)xO5;BTRI=OxFF;OCR=OxAA;TXERR=OxOO;ReiuLINSHI=ECC;MODE=Ox(»H主程序 void main(void) (SCON=0x50;PCONOxOO;TMOD=Ox21;TI4=0xM;THl=OxfdiTRlxl-EA=l;ES=l;Init_CANO; while(l)( TX.DATACANO; 发送孑程序REC_DATA_CANO ;&quo

13、t;接收于程序SERIALQ; /串行通体于程序I以上就是进行试验的程序,其中 reg51.h是为AT89C52主限制器专门编写的库函数, 它在Keil软件中是现成的, 只要用#include语句包括进来即可;intrins.h是为以后调用空函 数_nop_()作准备,它里面包括了类似于汇编语言的NOP语句;CAN_TOUWENJIAN.h 是头文件,用于对相关存放器的定义.Tx_DATA_CAN()函数用于向总线发送数据,REC_DATA_CAN()函数用于从总线接收数据,SERIAL()用于PC与智能节点间的相互通信.限于篇幅,发送子程序和接收子程序没有具体给出.5结束语在CAN总线的开发试验过程中,笔者掌握了CAN总线智能节点的设计,并在实践中进行了应用.通过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论