基于CAN总线通信协议的设计与实现.doc
《基于CAN总线通信协议的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于CAN总线通信协议的设计与实现.doc(209页珍藏版)》请在三一文库上搜索。
1、基于CAN总线通信协议的设计与实现1 前言控制器局域网(CANController Area Network)属于现场总线(Fieldbus)的范畴,是众多的属于现场总线标准之一,它适用于工业控制系统,具有通信速率高、可靠性强、连接方便、性能价格比高等诸多特点。它是一种有效支持分布式控制或实时控制的串行通信网络,以其短报文帧及CSMA/CD-AMP(带有信息优先权及冲突检测的载波监听多路访问)的MAC(媒介访问控制)方式而倍受工业自动化领域中设备互连的厚爱。CAN的应用范围遍及从高速网络到低成本的多线路网络,它可以应用于汽车系统、机械、技术设备和工业自动化里几乎任何类型的数据通信。CAN具有如
2、一下优点:1)使用简单方便。许多CAN控制器实现了CAN物理层及数据链路层的大部分功能,用户只须对CAN控制器进行初始化和对CAN总线上的数据进行收发操作即可实现通信;2)高可靠性。CAN上的最大通信速率可达1Mbps,CAN总线是多主节点,各节点通过总线仲裁获得总线控制权。完善的错误处理机制保证了高噪声干扰环境下数据传送的安全可靠;3)系统可扩展性能好。CAN总线是基于发送报文的编码,而不是对CAN控制节点进行编码,故增添或删除CAN节点不会对系统造成太大的影响。CAN总线以报文为单位进行信息传送,它支持4种不同类型的报文帧:数据帧、远程帧、超载帧和错误帧。报文中包含信息标识符ID,它标志了
3、报文的优先权。CAN总线上各个节点都可主动发送,总线上的报文采用标识符ID进行仲裁,ID值越小,优先级越高。具有最高优先权报文的节点赢得总线使用权,而其它节点自动停比发送。在总线再次空闲后,这些节点将自动重发原报文。网络中的所有节点都可由ID来自动决定是否接收该报文。每个节点都有ID寄存器和屏蔽寄存器接收到的报文只有与该屏蔽的功能相同时,该节点才开始正式接收报文,否则它将不理睬ID后面的报文。这使CAN系统非常灵活,可任意扩展或改变网络组成。C8051F系列单片机是集成的混合信号片上系统SOC(System on chip),具有与MCS-51内核及指令集完全兼容的微控制器,除具有标准8051
4、的数字外设部件之外,片内还集成数据采集和控制系统中常用的模拟部件和其它数字外设及功能部件。正是由于其体积小、集成度高、功能多、配置容易、使用方便等特点,已被广泛应用于智能仪表、数据采集、自动化控制等领域。因此本文采用C8051F120设计与实现CAN总线通信协议,充分发挥其体积小、可靠性高的特点。C8051F120是完全集成的混合信号片上系统MCU芯片,具有64个数字I/O引脚(100脚TQFP封装)。2 数据传输格式的制定在CAN2.0规范中规定,每次收发最多只能传送8字节.这可以满足大多数工业领域中控制命令、工控状态和测试数据的一般要求;但实际应用中,往往出现传送多于8字节的要求,此时应通
5、过报文的拆卸和拼接技术予以实现。本文在CAN2.0A的基础上,定义了简单的传输格式,完成了单帧数据和多帧数据准确快捷的传输。信息传递格式如表一所示:其中,各位的含义如下:FF:0表示为标准格式,1表示为扩展格式;RTR:0表示为数据帧,1表示为远程帧;DLC.X:数据长度代码位(08);ID.X:信息标识符位:ID.28ID.26为信息功能标识 ID.25ID.21为接收任务标识 ID.20ID.18为接收节点地址标识X :保留位,默认为0,不能对保留位进行写操作;DATAO:数据场的第一个字节,本协议中用来表明数据的属性;DATA0.7DATAO.5为发送节点地址标识;DATA0.4DATA
6、O.1为数据功能标识 DATA0.0 0为扩展位,0 表明数据长度小于8不用扩展,1 表示数据长度大于8需要扩展DATA1作传递次数索引。DATA1: DATAO.0为0时,传递数据;DATAO.0为1时,为数据传递次数的索引。本文设计的信息优先级从高到低依次为:信息功能标识、任务功能标识和目标节点地址标识。信息功能标识设在ID的最高几位,通过3位的功能代码可以区分某些情况的8种基本功能:这些功能可以为节点状态控制、节点保护、紧急情况通报以及有时间标记的信息等;接收任务标识表明本帧数据的任务属性,容量为32;目标节点地址指示本次数据的目的地址,容量为8。DATA0.0在本协议中作为标志位,用来
7、区别单帧传输和多帧传输,解决了大于8字节的字符串的传输问题。当标志位为1时,表示传送的是多帧数据;为0时表明是单帧数据。这样克服了CAN 只能传输小于等于8字节数据的缺点,实现了大于8字节的数据的传输。为了识别多帧传输中可能会出现的重帧和丢帧现象,本协议规定数据场第一字节作为多帧数据传输次序的索引。按照本协议制定的格式传输数据时,单帧最多传输7字节的实际数据:当数据流长度大于7字节时,就要分成多帧传送。3 应用层协议设计在CANV2.0规范标准中,只规定了ISO参考模型的物理层和数据链路层,没有规定媒体的连接单元以及驻留媒体,也没有规定应用层。物理层负责譬如物理信号传输、译码、位时序和位同步等
8、功能,而数据链路层负责总线仲裁、信息分段以及数据安全、数据确认、错误检测、信号传输和错误控制的功能。实际上,即使在执行一些非常简单的基于CAN的分布式系统时。除了基本的两层服务之外,还要求或希望有更多功能,如发送长于8字节的字符串、响应或确定数据传送、标识符分配、网络启动或监控节点。由于这些附加的功能直接支持应用过程,所以它可以被认作“应用层”。如果正确执行,则应用层以及相应的应用层接口(子协议)为通讯和应用过程提供了一个清晰定义的分界以便把它们区分开来。在一些利用简单的通信协议就可以满足要求的情况下,采用复杂的协议会造成资源的浪费,而且,使用起来也很不方便,反而限制了CAN的灵活性。所以在一
9、些情况下制定适合要求的通信协议,对CAN的开发和使用至关重要。本文根据实际系统设计的需要,在2.0A技术规范的基础上制定了CAN应用层通信协议。CAN应用层协议主要负责建立CPU与底层之间的桥梁,它主要由四部分组成:节点的开关机制、数据的收发机制、错误处理机制和中断管理机制五部分组成。四种机制互相联系、互相制约,共同维护系统的运转。限于篇幅本文主要介绍关键的数据收发机制。3.1 数据发送机制发送机制主要实现将CPU要发送的数据接过来,并整理为符合应用层协议规定的帧格式,将拆卸好的小包(数据帧)顺序放入循环队列中等待发送,并负责管理和维护发送循环队列的止常运转。在定时器定时中断中定期对循环队列进
10、行扫描,如果发现队列中有数据等待发送,则调用发送函数将数据发送到CAN总线。在底层开辟了一个临时缓冲区用于暂时存放等待发送的小包,临时缓冲区采用循环队列的存储结构,对数据实行先入先出的管理模式。循环队列是一个42*11的二维数组,用来暂时安置CPU即将发送的数据,数据被顺序安排在循环队列中等待发送。每增加一帧数据,循环队列的尾指针加1;每成功发送完一帧数据,循环队列的头指针减1。当循环队列中没有数据时,队列的状态为空,否则指示为不空;若循环队列的头指针和尾指针重合而队列又处于不空的状态,此时队列为满的状态。当队列处于满的状态时,禁止向队列再写入数据,否则容易导致数据的覆盖或丢失。队列中数据遵循
11、先入先出的原则,CPU将数据从队列尾部装入,向CAN总线发送数据时则从队列头部将数据读走。发送循环队列的曾理单位为帧,每次操作都是11个字节为单位。在发送机制运转前,首先对发送循环队列初始化,将循环队列的头指针、尾指针赋值为零,将已占用的空间也赋值为零。CAN发送机制主要由两大模块组成:打小包模块和帧发送模块。当CPU有数据需要发送时,调用打小包函数,要求给出待发送数据的存放地址。打小包函数将会按照本协议规定的格式将发送节点地址、接收节点地址、信息类型、任务标识、数据标识等参数整理为CAN数据链路层ID的格式,将数据组装成符合应用层协议所规定的数据帧(小包),实现对长度大于7字节的数据的打小包
12、处理,按照所填加索引号的顺序放到发送循环队列中等待发送。打小包函数的流程图如图1所示:3.2 数据接收机制CAN接收机制负责将数据从CAN总线上接收下来,按照数据源节点的地址将其还原为发送前的格式,准确无误的传递给上层,并负责为上层提供接口函数。在CPU将数据取走以后,清空相应的数组。在底层开辟了一个临时缓冲区用于暂时存放从CAN总线上接收下的数据,临时缓冲区采用二维数组的格式,容量为4*3*64。第一维的容量为4,分别指示发送节点的地址;第二维容量为3,作为数据的扩展缓存,指示可连续存放来自于同一节点的包的数目;第三维的容量为64,用来存放经过整理以后的数据。一般来说,开辟一个二维的空间就可
13、以使协议周转,但是,在实际系统中可能会出现CPU还未能将整理完毕的数据取走此时又接到来自于同一节点的新的数据,这样就可能导致新的数据覆盖掉原来的数据,造成数据的丢失。为避免这种潜在地危险,因此开辟了三维空间,在最坏的情况下,每个节点都可同时容纳来自于同一节点连续发送的3包数据,大大降低了数据丢失的可能性。接收数据流程如图二所示。图 二: 数据发送流程5 总结本文创新点:CAN总线以其卓越的特性、极高的可靠性和独特的设计,在工业过程监控设备的互联方面得到广泛的应用,受到工业界的广泛重视,并被公认为是最有前途的现场总线之一。作为通用、有效、可靠及经济的平台,CA N协议也已经广泛地受到了欢迎。由于
14、CAN2.0规范固有的局限性,客观上要求用户建立高层协议对CAN进行完善。本文所设计的CAN总线应用层协议已经投入使用,具有简单、灵活、移植方便等特点。CAN总线在家庭智能化控制系统中的应用研究时间:2010-09-22 12:44:15 来源:现代电子技术 作者:程月平 袁 勇O 引言 家庭智能控制系统的主要功能集中在家庭安全报警、电话或电脑远程控制、红外遥控、自动抄表控制、灯光和湿度控制等方面。根据智能终端设备传输数据和功能的不同可以把它分成两类子网,一类是传输数据以数据量小、速率低的家庭自动化控制设备;另一类是传输多媒体信息、(视频、音频信号),信号量大、速率快,如视频会议、音频点播等。
15、家庭智能终端设备可以采用总线结构组建成有线子网和无线子网,因各设备分布在家中不同的地方,对于组建成有线子网布线比较复杂,但是如果采用PLC与CAN总线构建成网络,将降低成本。 CAN(Controller Area Network,控制器局域网)是德国Bosch公司在20世纪80年代初为汽车检测控制而开发的一种串行数据通讯协议,它是一种多主机总线,通讯介质可以是双绞线、同轴电缆或光导纤维,通讯速率为1Mbs。CAN总线具有卓越的性能,极高的可靠性和独特的设计,广泛应用于工业自动化、交通工具、医疗仪器以及建筑、环境控制等众多部门。1 家庭智能化控制系统的组成 家庭智能化控制系统是电视、洗衣机、空
16、调及水表、电表、燃气表等设备的指挥通信和信息管理的核心,主要功能是与远程控制系统进行数传通信,接收各种控制口令,完成对相应设备的实时控制。 控制系统中凡具有嵌入式微处理器或微计算机的单体均通过CAN总线相互连接。组成分布式局部网,实现数据交换和信息资源共享。这种设计具有以下优点:减少了通信端口、连接电缆;抗干扰能力强;配置灵活、系统扩展和升级方便;调试简单,检修方便。 由CAN总线组成的家庭智能化控制系统原理如图1所示。2 PLC与CAN总线的连接 现以GE FANUC系列90 PLC为例,给出一个PLC与CAN总线的连接方案。 GE系列90 PLC都带有经转换的RS 232串行通讯口,编程计
17、算机通过此串口与PLC进行通讯和编程。RS 232标准电平采用负逻辑,规定+3+15V之间的任意电平为逻辑“0”电平,-3-15V之间的任意电平为逻辑“1”电平。而CAN信号则使用差分电压传送,两条信号线称为“CAN _H”和“CAM_L”,静态时均为25 V左右,此时的状态表示为逻辑“1”,也可以叫做“隐性”;用CAN_H比CAN_L高表示逻辑“0”,称为“显性”。显性时,通常电压值为:CAN_H=35V,CAN_L=15V。 RS 232串口的帧格式为:1位起始位,8位数据位,1位可编程的第9位(此位为发送和接收的地址数据位),1位停止位。而CAN的数据帧格式为:帧信息+ID+数据(可分为
18、标准帧和扩展帧两种格式)。因此,设计时就需要有一个微控制器来实现电平和帧格式等的转换,其转换方式如图2所示。 用单片机AT89C52作为微处理器;用SJAl000作为CAN微控制器,SJAl000中集成了CAN协议的物理层和数据链路层功能,可被动局面对通信数据的帧处理;高速光电隔离用6N137实现,其作用是防止串入信号干扰;MAX232用来完成RS 232电平到微控制器接口芯片TTL电平的转换。具体的硬件接口电路参见SJAl000的资料,但有以下几点需要注意: (1)CAN总线两端接有一个120 的电阻,其作用是匹配总线阻抗,提高数据通信的抗干扰性及可靠性。但实际上只需保证CAN网络中“CAN
19、_H”和“CAN_L”之间的跨接电阻为60 即可。 (2)SJAl000的20引脚RXl在不使用时可接地,配合CDR6的置位可使总线长度大大增加。 (3)引脚TX0,TXl的接法决定了串行输出的电平。具体关系可参考输出控制寄存器OCR的设置。 (4)AT82C250的RS引脚与地间接有1个斜率电阻。电阻大小可根据总线通信速度作适当调整,一般在16140 k之间。 (5)MAX232外围需要4个电解电容C1,C2,C3,C4,这些电容也是内部电源转换所需电容,其取值均为1F25 V,宜选用钽电容并且位置应用量靠近芯片,电源Vcc和地之间要接1个01F的去耦电容。 在微处理控制下,RS 232和C
20、AN进行数据交换时,采用串口接收和CAN中断方式可提高工作效率。SJAl000的初始化在复位模式下才可以进行,主要包括工作方式的设置、时钟分频和验收滤波寄存器的设置、波特率参数的设置以及中断允许寄存器的设置等。其主程序流程图如图3所示。 数据能否准确传递还取决于波特率和流量控制,这也是软件设计时不可忽略的地方。因此接下来主要介绍CAN波特率的设置、串口波特率的自动检测、串口数据流量控制。 CAN协议中的要素之一是波特率。可以设置位周期中的位采样点位置和采样次数,以使可以自由地优化应用网络性能,但在优化过程中,要注意位定时参数基准参考振荡器的容差和系统中不同信号传播延迟之间的关系。 系统的位速率
21、fbit表示每单位时间传输数据位的量,即波特率fbit=1tbit。额定的位定时由3个互不重叠的段SYNC_SEG,TSEGl和TSEG2组成,这3个时间段分别是tSYNC_SEG,tTSEGl和tTSEG2。所以,额定位周期tbit是3个时间段的和:tbit=tSYNC_SEG+tTSEGl+tTSEG2。位周期中这些段都用整数个基本时间单位来表示。该时间单位叫时间份额TQ,时间份额的持续时间是CAN系统时钟的一个周期tSCL,可从振荡器时钟周期tCLK取得。通过编程预分频因数(波特率预设值BRP)可以调整CAN系统时钟,即tSCL=BRP2tCLK=2BPRCLK。 对CAN位定时计算的另
22、一个很重要的时间段是同步跳转宽度(SJW),持续时间是tSJW。SJW段并不是位周期的一段,只是定义了在重同步事件中被增长或缩短的位周期的最大TQ数量。此外,CAN协议还允许用户指定位采样模式(SAM),分别是单次采样和三次采样模式(在3个采样结果中选出1个)。在单次采样模式中,采样点在TESG1段的末端。而三次采样模式比单次采样多取两个采样点,它们在TSEGl段末端的前面,之间相差一个TQ。上面所提到的BPR,SJW,SAM,TESGl,TESG2都可由用户通过CAN控制器的内装中寄存器BTR0和BTRl来定义。设置好BTR0和BTRl后,实际传输的波特率范围为:最大=1(tbit-tSJW
23、),最小=1(tbit+tSJW)。 检测转换装置的串口波特率,首先可对主机的接收波特率(以9600 bs为例)进行设定,并在终端发送一个特定的字符(以回车符为例),这样,主机根据接收到的字符信息就可以确定转换装置的通信波特率。回车符的ASCII值是0DH,在不同波特率下接收到的值如表1所列。 数据在两个串口之间的传输时,常常会出现丢失数据的现象。由于单片机缓冲区有限,如接收数据时缓冲区已满,那么此时继续发送来的数据就会丢失。而流控制能有效地解决该问题,当接收端数据处理不过来时,流控制系统就会发出“不再接收”的信号,而使发送端停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CAN 总线 通信协议 设计 实现
链接地址:https://www.31doc.com/p-5020497.html