CAN

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

6.5CAN总线设计实例CAN总线是德国BOSCH公司从80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,CAN总线由于其采用了许多新技术及独特的设计,与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。CAN总线被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如,发动机管理系统、变速箱控制器、仪表装备、电子主干系统中均嵌入CAN控制装置,CAN总线因其技术背景和来源于工业现场总线和计算机局域网这样非常成熟的技术,现已成为汽车总线的主流技术和标准。6.5.1CAN总线的性能特点CAN总线是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率可达1MBPS,CAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。其特点可概括为:(1)CAN是目前为止唯一具有国际标准且成本较低的现场总线;(2)CAN废除了传统总线的站地址编码,对通信数据块进行编码,为多主方式工作,不分主从,通信方式灵活,通过报文标识符通信,可使不同的节点同时接收到相同的数据,无需站地址等节点信息。(3)CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级别低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传送数据,从而大大地节省了总线冲突仲裁时间。尤其是在网路负载很重的情况下也不会出现网络瘫痪情况。(4)CAN只需通过报文滤波即可实现点对点、一点对多点即全局广播等方式传送接收数据,无需专门的“调度”。(5)CAN的直线通信距离最远可达10KM(速率5Kbps以下);通信速率最高可达1Mbps(此时通信距离最长为40m);(6)CAN上的节点数最多可达110个;(7)CAN采用短帧结构,单帧最大长度仅150位,传输时间短,从而保证了通信的实时性,受干扰概率低;(8)CAN的每帧信息都有CRC校验以及其他检测措施,降低了数据出错率,保证了数据通信的可靠性;(9)CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响;(10)CAN的通信介质可使用双绞线作为传输介质,价格低廉,可靠性强。6.5.2CAN总线控制系统的硬件设计本设计利用CAN总线通信协议建立汽车控制系统的局域网(对于汽车其他设备可以按照同样道理设计而成,只需要多加几个通信的节点),控制的设备有:远光灯、近光灯、仪表盘、转向灯,通过CAN总线实现上述设备的控制。CAN总线挂载设备示意图如图6-1所示。图6-1CAN设备示意图MCU的选择本设计选用AT89C51单片机作为灯光控制节点MCU。P89C51单片机是一个8位高性能微控制器。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。如图6-2所示:图6-2P89C51单片机硬件连接示意图车身控制系统MCUCan总线收发器Can总线收发器MCU开关开关车灯1车灯1CAN通讯控制器本设计采用SAJ1000独立CAN控制器。PHILIPS公司的PCA82C200是符合CAN2.0A协议的总线控制器,SJA1000是它的替代产品,它是应用于汽车和一般工业环境的独立CAN总线控制器。具有完成CAN通信协议所要求的全部特性。经过简单总线连接的SJA1000可完成CAN总线的物理和数据链路层的所有功能。其硬件与软件设计和PCA82C200的基本CAN模式(BesicCAN)兼容。同时,新增加的增强CAN模式(PeliCAN)还可支持CAN2.0B协议。SJA1000工作模块主要是由设计系统的控制核心本文中使用单片机,SJA1000芯片内部有接收模块。当有数据传输,发送到缓冲区,经过现场总线协议。将其转换成报文形式,现场总线接收。现场总线在发送给核心模块,经过验收滤波,并且屏蔽掉噪声,发送回单片机。现场总线控制器SJA1000芯片有24个管脚它有自己晶振AD0到AD7与单片机的数据相连。通过这数据通道传输数据,进行数据的读写操作如图6-3:123456ABCD654321DCBATitleNumberRevisionSizeBDate:28-May-2010SheetofFile:C:\ProgramFiles\DesignExplorer99SE\Examples\CircuitSimulation\PREVIO~2.DDBDrawnBy:AD0AD1AD2AD3AD4AD5AD6CSAD7ALERDWRINTCLKOUTRSTTX0RX0TX1RX1MODEVDD1VSS1VDD2VSS2VDD3XTAL1XATL2VSS323242526272812436516717131419201122818211215910SJA1000DB0DB1DB2DB3DB5DB4DB6DB7+5VC90.1uY212MC1015pC1115p/CSSJAALE/RDSJA/WRSJA/INT0SJAC121uR145.1k+5VTXSJARXSJAR16390R15390图6-3现场总线控制器SJA1000电路原理图现场总线控制器SJA1000芯片采用片外12MHz晶振,片选/CS端与单片机的P2.7引脚直接相连,当CS接到低电平时,MCU可对SJA1000进行写操作。6.5.3软件设计实现要求:系统的软件设计是本节的核心内容,主要包括单片机的初始化,SJA1000的初始化,接收数据,发送数据和报文的传输,具体包括如下:1.使用单个现场总线总线硬件电路板实现其自收发功能,即现场总线节点自收发报文;2.可以与其它CAN总线电路通讯,每发送一帧CAN消息,绿色信号灯闪烁,每接收一帧CAN信息,红色信号灯闪烁。3.通过CAN总线系统控制CAN总线上的各个节点。6.4.1系统初始化流程始设置化程序如下:一硬件复位,二上电复位,三软件复位就是在程序运行过程给SJA1000传输一个复位式请求信号.在复位期SJA1000需要初始化设置的寄存器有:SJA1000控制型寄存器CR或模式型寄存器MOD、中断使能型寄存器IER、总线定时型的寄存器BTR,屏蔽寄型存器AMR、时钟分频寄型存器CDR、接受代码型寄存器ACR、输出控制型寄存器OCR(确定TX0、TX1引脚的驱动方式)等.由于这些寄存器只能在SJAl000复位期时候进行写访问,必须保证系统是在复位状态.SJA1000的初始设置化程序设计主要是处理SJA1000寄存器输入相应的处理信息,从而确定SJA1000工作的方式.SJA1000的初始化程序设计的流程图如图5-1。开始图5-1初始化程序设计的流程图6.5代码流程部分程序设计如下:#includereg52.h#includeintrins.h#includedefine.h/////////////////////////////////////////////////函数:inter0_key(外部中断INT0)//说明:INT0按键为计数按键//每按下一次键,计数值加一//入口:按键中断//返回:按键加一///////////////////////////////////////////////voidinter0_key(void)interrupt0{EA=0;//关闭中断Txd_data++;//计数结果增1,即待发送的数据增1TXD_flag=1;//发送数据标志位置位,即重新发送数据以更新数码管的显示数值EA=1;//重新开启中断}/////////////////////////////////////////////////函数:inter1_can_rxd(外部中断INT1)//说明:接收数据函数,在中断服务程序中调用//入口:无//返回:无///////////////////////////////////////////////voidinter1_can_rxd(void)interrupt2{ucharstate;EA=0;//关CPU中断IE1=0;//由于是中断INT1是电平触发方式,所以需要软件将INT1的中断请求标志IE0清零state=IR;//IR为SJA1000的中断寄存器if(state&0x01)//若IR.0=1--接收中断{//接收数据帧RX_buffer[0]=RBSR;RX_buffer[1]=RBSR1;RX_buffer[2]=RBSR2;RX_buffer[3]=RBSR3;RX_buffer[4]=RBSR4;RX_buffer[5]=RBSR5;RX_buffer[6]=RBSR6;RX_buffer[7]=RBSR7;RX_buffer[8]=RBSR8;RX_buffer[9]=RBSR9;RX_buffer[10]=RBSR10;RX_buffer[11]=RBSR11;RX_buffer[12]=RBSR12;RXD_flag=1;//接收标志置位,以便进入接收处理程序CMR=0X04;//CMR.2=1--接收完毕,释放接收缓冲器state=ALC;//释放仲裁随时捕捉寄存器(读该寄存器即可)state=ECC;//释放错误代码捕捉寄存器(读该寄存器即可)}IER=0x01;//IER.0=1--接收中断使能EA=1;//重新开启CPU中断}/////////////////////////////////////////////////函数:main//说明:主函数//入口:无//返回:无///////////////////////////////////////////////voidmain(void){init_mcu();init_sja1000();while(1){rxd_deal();//接收处理程序txd_deal();//发送处理程序led_show(0,Txd_data);//数码管1-2显示发送数据子程序led_show(1,Rxd_data+3);//数码管3-4显示接收数据子程序}}/////////////////////////////////////////////////函数:init_mcu//说明:单片机I/O口初始化//主要是各中断寄存器的初始化//入口:无//返回:无///////////////////////////////////////////////voidinit_mcu(void){SJA_RST=1;//CAN总线复位管脚复位无效SJA_CS=0;//CAN总线片选有效EX1=1;//开MCU外部中断INT1IT1=0;//MCU外部中断INT1设置为电平触发,该中断口连接CAN总线接收中断口IT0=1;//MCU外部中断INT0设置为下降沿触发EX0=1;//开MCU外部中断INT0EA=1;//开MCU总中断SJA_CS=1;//CAN总线片选无效,使得对数据总线的操作不会影响SJA1000。}/////////////////////////////////////////////////函数:init_sja1000//说明:独立CAN控制器SJA1000的初始化//入口:无//返回:无///////////////////////////////////////////////voidinit_sja1000(void){ucharstate;ucharACRR[4];ucharAMRR[4];//接收代码寄存器ACRR[0]=0x11;ACRR[1]=0x22;ACRR[2]=0x3

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功