多路CAN总线数据接收和编帧逻辑设计_第1页
多路CAN总线数据接收和编帧逻辑设计_第2页
多路CAN总线数据接收和编帧逻辑设计_第3页
多路CAN总线数据接收和编帧逻辑设计_第4页
多路CAN总线数据接收和编帧逻辑设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

0.引言汽车目前已不仅仅是一种交通工具,而且还承当着越来越多的功能。现代科技已经将网际网络、无线网络、个人通信电子装置、娱乐设备等整合到汽车内部,为乘客提供了前所未有的便利,而这一切的实现都有赖于汽车电子网络技术。汽车电子网络技术是现代汽车电子技术的重要组成局部,是现代汽车通信与控制的根底。随着电子技术、计算机技术等开展,一些汽车的电子装置已经占整车价值的三分之一,而且前一些高档车上的电子控制单元已达几十个,传感器有上百个,它们通过汽车电子网络来实现信息交换和功能控制[1]。绪论1.1本课题背景及研究意义现代汽车电子技术的开展大致经历了以下几个阶段:电子管时代:20世纪50年代,人们开始在汽车上安装电子管收音机,这是电子技术在汽车应用的雏形。1959年晶体管收音机问世后,很快在汽车上得到了应用。晶体管时代:20世纪60年代,汽车上应用了硅整流交流发电机和晶体管调节器,到60年代中期,利用晶体管的放大和开关原理,开始在汽车上采用晶体管电压调节器和晶体管点火装置。但电子技术更新的应用在汽车上是20世纪70年代以后,主要是为了解决汽车平安问题、节能和环保的三大问题。进入70年代后期,电子工业有了长足的开展,特别是在集成电路、大规模集成电路和超大规模集成电路技术的飞速开展,使得微控制器在汽车上得到广泛的应用,给汽车工业带来了跨时代的变革。集成电路时代:20世纪90年代,汽车电子进入了其开展的第三阶段,这是对汽车工业的开展最有价值、最有奉献的阶段。集成电路技术所取得的巨大成就使得汽车电子前进了一步,更加先进的微控制器的汽车具有智能,能进行控制决策。这样不仅在节能、排放和平安等方面提高了汽车的性能,同时也提高了汽车的舒适性。网络化综合技术时代:目前汽车技术已经开展到第四代,即包括电子技术、计算机技术、综合控制技术、智能传感器技术等先进汽车电子技术。以微控制器为核心的汽车电子控制单元已不再是通过传统的线束连接起来的,而是通过汽车电子网络系统连接起来的,实现了通信与网络化管理[2]。一些汽车专家认为,就像汽车电子技术在20世纪70年代引入集成电路、80年代引入微控制器一样,近十年来,数据总线技术的引入也将是汽车电子技术开展的一个里程碑。随着车用电气设备越来越多,从发动机控制到传动系统控制,从行驶、制动、转向系统控制到平安保证系统及仪表报警系统,从电源管理到为提高舒适性而作的各种努力,使汽车电气系统形成一个复杂的大系统,并且都集中在驾驶室控制。另外,随着近年来ITS的开展,以3G(GPS.GIS和GSM)为代表的新型电子通讯产品的出现,它对汽车的综合布线和信息的共享交互提出了更高的要求[3]。从布线角度分析,传统的电气系统大多采用点对点的单一通信方式,相互之间少有联系,这样必然造成庞大的布线系统。据统计,一辆采用传统布线方法的高档汽车中,其导线长度可达2000米,电气节点达1500个,而且,根据统计,该数字大约每十年增长1倍,从而加剧了粗大的线束与汽车有限的可用空间之间的矛盾。无论从材料本钱还是工作效率看,传统布线方法都将不能适应汽车的开展。从信息共享角度分析,现代典型的控制单元有电控燃油喷射系统、电控传动系统、防抱死制动系统(ABS)、防滑控制系统(ASD)、废气再循环控制、巡航系统和空调系统。为了满足各子系统的实时性要求,有必要对汽车公共数据实行共享,如发动机转速、车轮转速、油门踏板位置等。但每个控制单元对实时性的要求是因数据的更新速率和控制周期不同而不同的.这就要求其数据交换网是基于优先权竞争的模式,且本身具有较高的通信速率,CAN总线正是为满足这些要求而设计的。CAN总线是一种多主方式的串行通讯总线根本设计标准要求有高的位速率高抗电磁干扰性而且能够检测出产生的任何错误当信号。传输距离到达10Km时CAN-bus仍可提供高达5Kbps的数据传输速率[4]。由于CAN串行通讯总线具有这些特性它很自然地在汽车制造业以及航空工业中受到广泛应用。在汽车中ECU的设计,应该首先从平安的角度来考虑,所以对于关键控制局部如:汽车引擎、刹车装置、平安气囊等单元应该采用分散式高速CAN控制;而对于那些与平安无关的单元如:灯控单元、门控单元、座椅控制单元等出于本钱的考虑可以采用低速CAN与LIN混合的集中控制方式。所以中高档汽车上都采用高速CAN总线,低速CAN总线,lin总线相结合的方式构成了汽车总线网络。尽管现在以微机为核心的可编程数据采集与处理采集技术的开展方向得到了迅速的开展,而且组成一个数据采集系统只需要一块数据采集卡,把它插在微机的扩展槽内并辅以应用软件,就能实现数据采集功能,但这并不会对基于单片机为核心的数据采集系统产生影响。相较于数据采集板卡本钱和功能的限制,单片机具多功能、高效率、高性能、低电压、低功耗、低价格等优点,而双单片机又具有精度较高、转换速度快、能够对多点同时进行采集,因此能够开发出能满足实际应用要求的、电路结构简单的、可靠性高的数据采集系统。这就使得以单片机为核心的数据采集系统在许多领域得到了广泛的应用。本课题在数据记录的过程中完成数据的接收和编帧处理,将采集过后的数据进行剔除、编帧以对数据进行有效记录并节省记录存储空间,方便日后数据处理。1.2CAN总线开展现场总线是用于现场控制系统的、直接与所有受控(设备)节点相连的,全数字化、双工、多站点的串行通信网络。现场总线越来越多的应用于工业现场,完成现场自动化设备之间的多点数字通信,实现底层现场设备之间以及生产现场与外界的信息交换。控制器局域网CAN(ControllerAreaNetwork)是现场总线的一种,是在1986年的SAE(汽车工程人员协会)大会上由RoberBosch公司提出的。CAN具有卓越的性能和极高的可靠性,并被公认为几种最有前途的现场总线之一。CAN总线是德国Bosch公司80年代初为解决现代汽车中众多的控制与检测仪器之间的数据交换而开发的一种串行数据通信协议。CAN总线通信协议是在充分考虑工业现场环境的背景下制订的,它采用了国际标准化组织ISO制订的开放系统互连(OSI)模型中的三层,即物理层、数据层和应用层,是OSI的一种简化网络结构。CAN总线标准已被国际标准化组织制订为国际标准ISO11898。CAN总线是一种有效支持分布式控制和实时控制的串行数据通信协议,它是一种多主总线,网络上任意一个节点均可以在任意时刻主动地向网络上的其它节点发送信息,而不分主从,节点之间有优先级之分,因而通信方式灵活[5]。控制器局部网〔CAN-CONTROLLERAREANETWORK〕是为现代汽车应用领先推出的一种多主机局部网,由于其高性能、高可靠性、实时性等优点现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部门。控制器局部网将在我国迅速普及推广。随着计算机硬件、软件技术及集成电路技 术的迅速开展,工业控制系统已成为计算机技术应用领域中最具活力的一个分支,并取得了巨大进步。由于对系统可靠性和灵活性的高要求,工业控制系统的开展主要表现为:控制面向多元化,系统面向分散化,即负载分散、功能分散、危险分散和地域分散。分散式工业控制系统就是为适应这种需要而开展起来的。这类系统是以微型机为核心,将5C技术--COMPUTER〔计算机技术〕、CONTROL〔自动控制技术〕、COMMUNICATION〔通信技术〕、CRT〔显示技术〕和CHANGE〔转换技术〕紧密结合的产物。它在适应范围、可扩展性、可维护性以及抗故障能力等方面,较之分散型仪表控制系统和集中型计算机控制系统都具有明显的优越性。典型的分散式控制系统由现场设备、接口与计算设备以及通信设备组成。现场总线〔FIELDBUS〕能同时满足过程控制和制造业自动化的需要,因而现场总线已成为工业数据总线领域中最为活泼的一个领域[6]。现场总线的研究与应用已成为工业数据总线领域的热点。尽管目前对现场总线的研究尚未能提出一个完善的标准,但现场总线的高性能价格比将吸引众多工业控制系统采用。同时,正由于现场总线的标准尚未统一,也使得现场总线的应用得以不拘一格地发挥,并将为现场总线的完善提供更加丰富的依据。控制器局部网CAN〔CONTROLLERAERANETWORK〕正是在这种背景下应运而生的。由于CAN为愈来愈多不同领域采用和推广,导致要求各种应用领域通信报文的标准化。为此,1991年9月PHILIPSSEMICONDUCTORS制订并发布了CAN技术标准〔VERSION2.0〕。该技术标准包括A和B两局部。2.0A给出了曾在CAN技术标准版本1.2中定义的CAN报文格式,能提供11位地址;而2.0B给出了标准的和扩展的两种报文格式,提供29位地址[7]。此后,1993年11月ISO正式公布了道路交通运载工具--数字信息交换--高速通信控制器局部网〔CAN〕国际标准〔ISO11898〕,为控制器局部网标准化、标准化推广铺平了道路。1.3CAN总线的主要特点:CAN(ControllerAreaNetwork)总线,也称控制器局部网,属于现场总线的范畴,它是一种有效支持分布控制或实时控制的串行通信网络。由于采用了许多新技术及独特的设计,CAN总线与一般的通信总线相比,它的数据通信具有突出的可靠性、实时性和灵活性[8]。其特点如下:(1)多主控制在总线空闲时,所有的单元都可开始发送消息(多主控制)。最先访问总线的单元可获得发送权(CSMA/CA)。多个单元同时开始发送时,发送高优先级D消息的单元可获得发送权。(2)消息的发送在CAN协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(D)决定优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比拟。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元那么立刻停止发送而进行接收工作。(3)系统的柔软性与总线相连的单元没有类似于“地址〞的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。(4)通信速度根据整个网络的规模,可设定适合的通信速度。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,阻碍整个网络的通信。不同网络间那么可以有不同的通信速度。(5)远程数据请求可通过发送“请求帧〞请求其他单元发送数据。(6)错误检测功能·错误通知功能·错误恢复功能所有的单元都可以检测错误(错误检测功能)。检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。(7)故障封闭CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。(8)连接CAN总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,那么可连接的单元数减少。1.4课题所研究及解决的问题1.4.1设计任务本课题是某车控系统故障诊断网络记录器工程研究车载记录仪局部的子课题。该课题要求将车辆系统上多条〔2条~4条〕CAN网络数据接收并记录下来,记录过程中要对多条CAN总线数据进行编帧,即按规定格式存储,以方便后期数据处理。1.4.2工作内容1、熟悉C8051F06X单片机、SPARTENII系列FPGA的操作2、理解任务要求,在现有硬件单元的根底上实现数据接收控制和编帧逻辑。实现CAN总线数据接收,编帧,并将编帧后的数据存入FIFO中。设计可变帧结构,即帧结构不固定,随各路数据接收情况进行变长编帧,以节约存储空间。1.5本设计特点1.采用CAN总线作为数据传输协议,这是由于CAN总线所具有的高可靠性,实时性和灵活性等突出优点。2.在数据接收方面采用C8051F060单片机,这是因为它集成了CAN总线控制器,便于CAN数据的接收;高速、流水线结构的8051兼容的CIP-51内核〔可达25MIPS〕;以及外部通讯接口SPI这样就可以节省FPGA很多引脚。3.在主控制器选择方面,采用FPGA器件,利用FPGA的可重复编程的特点,对主控卡便于实现升级与维护,在设计过程中,大大节约了实验时间,降低了本钱,提高了工作效率,同时,FPGA器件丰富的资源,也为实现主控卡控制模块提供了保障。2.电路设计系统通过CAN总线驱动器将CAN电压信号转变为数字信号,在单片机内部CAN总线控制器的控制下对数据接收,之后存储在自定义的缓存器中。在FPGA给单片机外部中断时,单片机对数据进行剔除,即将无效的数据抹去,并通过SPI接口将数据传输给FPGA[9]。FPGA接收过数据之后,对数据加上结尾帧,并通过USB将数据存储到上位机中,以便对数据分析处理。由于芯片数量和时间的限制,仅做了一路CAN总线的数据接收编帧,而其他CAN总线接口电路以及定义都是与本路相似的。整个电路有1个CAN通信接口、1个USB接口以及主控电路FPGA组成。其原理框图如图2.1所示:图2.1整体电路原理框图2.1CAN接口电路CAN控制器采用新华龙的C8051F060〔速度达25MIPS〕单片机来实现,其内部集成一个CAN协议控制器,但不提供物理层驱动器,工作速率为1Mbps;在单片机中实现各个总线对应的CAN协议,使用光耦〔HCPL0600,速度为10MBit/s〕将CAN接口和内部电路进行隔离,使用TJA1050作为CAN接口的物理层驱动器,使用DCP020505将CAN接口和内部电路的电源和地进行隔离。CAN接口的示意框图如下图:图2.2CAN接口示意框图2.1.1CAN接口驱动电路设计图2.3接口驱动电路CAN收发器即总线驱动器是can控制器与物理总线之间的接口,可以提供对总线的差动发送和接受功能,can总线驱动器种类有82c250/251、tja1040、tja1050等多种,适用于不同场合。TJA1050是CAN协议控制器和物理总线之间的接口。它最初是应用在波特率范围在60K波特到1M波特的高速自动化应用中。TJA1050可以为总线提供不同的发送性能,为CAN控制器提供不同的接收性能。而且它与“ISO11898〞标准完全兼容。TJA1050有一个电流限制电路,保护发送器的输出级,使由正或负电源电压意外造成的短路不会对TJA1050造成损坏〔此时的功率消耗增加〕。TJA1050还有一个温度保护电路,当与发送器的连接点的温度超过大约165℃时,会断开与发送器的连接。因为发送器消耗了大局部的功率,所以这个集成电路的功率消耗和温度会较低。但是此时IC的其他功能仍继续工作。当引脚TXD变高〔电平〕,发送器由关闭状态复位[10]。当总线短路时,尤其需要这个温度保护电路。通过引脚S可以选择两种工作模式:高速模式或静音模式。高速模式就是普通的工作模式,将引脚S接地可以进入这种模式。如果引脚S没有连接,高速模式就是默认的的工作模式。在此选择引脚S接地,即工作在高速模式[11]。2.1.2光耦隔离电路设计由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。又由于光耦合器的输入端属于电流型工作的低阻元件,因而具有很强的共模抑制能力。所以,它在长线传输信息中作为终端隔离元件可以大大提高信噪比。在计算机数字通信及实时控制中作为信号隔离的接口器件,可以大大增加计算机工作的可靠性。光耦合器的主要优点是:信号单向传输,输入端与输出端完全实现了电气隔离隔离,输出信号对输入端无影响,抗干扰能力强,工作稳定,无触点,使用寿命长,传输效率高。光耦合器是70年代开展起来产新型器件,现已广泛用于电气绝缘、电平转换、级间耦合、驱动电路、开关电路、斩波器、多谐振荡器、信号隔离、级间隔离、脉冲放大电路、数字仪表、远距离信号传输、脉冲放大、固态继电器(SSR)、仪器仪表、通信设备及微机接口中。在单片开关电源中,利用线性光耦合器可构成光耦反应电路,通过调节控制端电流来改变占空比,到达精密稳压目的。图2.4光耦隔离电路可以看出VE是通过一10K电阻连接到5V电源上的,此时出入信号输出信号是相同的。即当输入高电平时,输出也为高电平;反之亦反。电路采用不同于单片机供电的电源模块进行电压匹配和电源隔离。图2.5电源隔离模块供电电路图2.2SPI接口电路设计SPI接口是Motorola首先提出的全双工三线同步串行外围接口,采用主从模式〔MasterSlave〕架构;支持多slave模式应用,一般仅支持单Master。

时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后〔MSBfirst〕;SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达Mbps的水平。为节约FPGA的I/O资源,FPGA与单片机的接口采用SPI总线,单片机的SPI总线的时钟频率最快可到达12.5MHz,能够满足1Mbps的数据采集要求;另外,二者可以设为双主机通信模式,方便数据和指令的交换,具体连接关系如下图。图2.6SPI接口电路系统上电后,单片机开始轮询访问各个CAN节点,并将接收到的数据存入其内部缓存,FPGA通过INT0中断发出采集指令给单片机,接到指令后,单片机通过SPI写入FPGA[12],FPGA将这些数据按预订的帧格式进行组包,写入其内部数据缓存,等待数据写入存储模块。2.3FPGA与上位机数据传输电路设计由于要进行数据观察,所以使用CY7C68013A芯片的典型电路设计,如图图2.7原理框图在与上位机通信中,USB接口起着至关重要的作用,本设计选用EZ-USBFX2系列的CY7C68013,实现了低功耗、低本钱、高集成度、高传输速率的任务要求[13]。FX2的独特体系结构使得在最小仅为56SSOP的空间内,数据的传输率可到达56Mbyte/s,是USB2.0允许的最大带宽。同时还集成了一个低本钱的8051微控制器。EZ-USBFX2中的智能SIE可以处理大局部USB1.1和USB2.0协议,使得微控制器可以专注于应用功能,从而减少了开发时间,确保了USB的兼容性。.通用可编程接口(GPIF)和主∕从端点FIFO(8位或16位数据总线〕为ATA,UTOPIA,EPP,PCMCIA和大多数的DSP∕微处理器等通用接口提供了简单的无缝连接在具体实现中,采用CY7C68013的通用可编程接口〔GPIF〕通信模式。通用编程接口〔GPIF〕是一个灵活的8位或16位的并行接口,它由一个用户可编程的状态机驱动。在不增加大量本钱的情况下,GPIF为EZ-USBFX2和许多外部设备提供了一个接口。它允许CY7C68013进行局部总线管理,同时处理多种协议,如ATA接口,打印机并行接口,UTOPIA等。GPIF有6条可编程控制输出线〔CTL〕,9条地址输出线和6条通用目的的准备输入线。数据线宽度可达8位或16位。GPIF作为内部的主控制器与端点数据缓冲区直接相连,并产生用户可以编程的控制信号与外部接口进行通信。GPIF的核心由一个可编程状态机构成,这个状态机可以产生5个控制信号CTL[4:0],8位地址输出GPIFADR[6:0],接收2个内部和2个来自外设的状态信号RDY[1:0],通过RDYx引脚采样外部信号并等待外部事件。用户通过编写波形描述符(WaveformDescriptions)控制状态机,CY7C68013最多允许编写4个波形描述符,通常情况下分别完成以下四种功能:写外设FIFO、读外设FIFO、单字节(或字)写和单字节(或字)读,用户还可以根据需要灵活设定。图2.8上位机电路2.4电源模块的设计电源模块的设计,也是整个主控卡设计过程中的关键环节,电源的稳定与否,直接影响着信号传输的可靠性,设计的电源模块必须能为主控卡各个芯片提供稳定的工作电压[14]。TPS703xx系列是TI公司专门为DSP、ASIC和FPGA等芯片供电而设计的LDO线性稳压器。它提供双路独立稳压输出,且具备电压监测复位〔SVS〕、手动复位、使能控制以及可编程上电顺序等功能,特别适用于DSP芯片的供电。TPS70351是新一代的集成电路稳压器,是一个自耗很低的微型片上系统(SoC),具有极低的自有噪音和较高的电源纹波抑制PSRR(Powersupplyripplerejection)。此外,其小封装尺寸以及电压监测和复位延迟等功能,使得DSP的供电设计变得更简单和方便,实际使用效果也不错,满足DSP和FPGA的供电要求。在该主控卡上,所用到的5V电压由背板直接提供,所需的3.3V和1.8V两种工作电压,用TPS70351电压转换芯片,将输入的VCC〔+5V〕电压转换为所需的3.3V和1.8V工作电压,其硬件连接图如下图。图2.9电源模块3.程序设计程序方面主要完成数据的接收后的数据压缩以及为数据加上标识、结尾。最终仅仅保存有效数据完成数据变长帧记录,并使得数据方便读取分析。首先,对数据结构加以分析说明,使得程序编写有指导方向和目的性【15】,其次,再次根底上综合考虑单片机及FPGA资源问题,编写其应用程序。3.1编帧分析当CAN控制器产生中断后,首先判断是否位数据接收成功所产生的中断,假设是那么会将ID号提取到变量“ID〞中,将IF2Data数据写到缓存“receive〞中图3.1缓存receive中的数据格式可以看出:数据并不是顺序排布的,这是因为CAN所发送的数据的格式所决定的,实际上接收与发送的数据是一致的[16]。如图3.2所示:图3.2数据传输过程的走向接收数据的同时会接收到ID号,根据ID号将帧标识对应位置‘1’。图3.3各ID号对应的帧标识位置每一个ID号对应着接收到的数据长度。表3.1各个ID号对应的数据长度ID号长度〔字节〕ID号长度〔字节〕ID号长度〔字节〕181618531874189318B218D6例如:当接收到数据的ID号位181时,CPU将标识的位5置‘1’,并将所就受到的数据写入相对应的数据帧。以此类推,如图3.4所示:图3.4一级缓存数据格式在FPGA向单片机发出中断以后,单片时机将一级缓存Ping〔Pong〕中的数据按照标识帧的格式压缩到二级缓存中。如图3.5〔假设标识帧为“XX000011〞〕:图3.5二级缓存中的数据格式在数据压缩过之后,单片时机用SPI以500KHz的频率发送出去。传输方式如图3.6所示:图3.6SPI数据发送时的数据/时钟时序图3.2单片机中程序设计3.2.1CAN控制模块初始化程序设计CAN模块的初始化可分为三局部:清空消息对象、初始化CAN接口存放器,启动CAN函数。1.清空消息对象:消息RAM中的内容不会受到硬件复位影响[17]。上电后,消息RAM中的内容是不明确的。〔ThedatastoredintheMessageRAMisnotaffectedbyahardwarereset.Afterpower-on,thecontentsoftheMessageRAMisundefined[18].〕如果不清空消息对象,在传输数据的时候可能产生错误。而硬件复位以后IFx接口存放器。CPU一写完命令请求存放器的消息号,报文就开始传输[18]。〔AmessagetransferisstartedassoonastheCPUhaswrittenthemessagenumbertotheCommandRequestRegister[18].〕根据以上说明可知必须清空消息对象以防止传输错误。图3.7消息对象清空函数2.初始化CAN接口存放器通过对存放器〔命令掩码存放器、掩码存放器、仲裁存放器以及消息控制存放器〕进行那个赋值对象进行以下设置:eq\o\ac(○,1)通过IFx改变IdentifierMask+Mdir+Mxtd到消息对象;eq\o\ac(○,2)将IFx赋给消息对象,清零IntPnd位;eq\o\ac(○,3)开始报文发送/接收;eq\o\ac(○,4)通过IFx改变0--3和4--7位;不使用扩展帧;eq\o\ac(○,5)消息号为1,2,3,4的消息对象是参与报文收发;eq\o\ac(○,6)采用标准帧;eq\o\ac(○,7)报文传输为接收;eq\o\ac(○,8)ID是用于报文滤波;eq\o\ac(○,9)传输方向不用于滤波;eq\o\ac(○,10)消息对象中相应的标识符不可禁止接收过滤的匹配;eq\o\ac(○,11)扩展标识符位〔IDE〕对接收过滤没有影响;eq\o\ac(○,12)消息号为1,2,3,4的消息对象组成FIFO,消息号为4的消息对象的栈底。注:将消息号〔1,2,3,4〕写给命令请求存放器时,CAN模块会自动将接口存放器的复位值写给消息对象[19]。3.启动CAN启动CAN的过程分为以下步骤:〔1〕开始初始化CAN,指定为速率为0x36C3;〔2〕由于要与发送CAN数据的配置一致[20];IF1进行一下配置:eq\o\ac(○,1)设置IF1为发送:对CANRAM写;eq\o\ac(○,2)IdentifierMask+Mdir+Mxtd不改变;eq\o\ac(○,3)Identifier+Dir+Xtd+MsgVal不改变;eq\o\ac(○,4)不清IntPnd位;eq\o\ac(○,5)开始报文发送/接收;eq\o\ac(○,6)通过IF改变0--3和4--7位。IF2进行一下配置:eq\o\ac(○,1)设置IF2为接收:对CANRAM读,读数据字节;eq\o\ac(○,2)IdentifierMask+Mdir+Mxtd不改变;eq\o\ac(○,3)Identifier+Dir+Xtd+MsgVal不改变;eq\o\ac(○,4)不清IntPnd位;eq\o\ac(○,5)开始报文发送/接收;eq\o\ac(○,6)将0--3,4--7字节传送到IF中。〔3〕关闭CAN初始化,使能CAN中断。3.2.2C8051F060中的缓存及标志位根据以上所述,接收到的数据最多为25〔1+6+3+4+3+2+6〕个字节,所以在C8051F060中共定义了Ping〔25字节〕、Pong〔25字节〕、Second_buffer〔25字节〕、Receive[0:3]〔8字节〕、Time〔7字节〕等8个缓存器;INT0_flg、buffer_flg、r1_flg、r2_flg、r3_flg、r4_flg、time_flg、can_flg等8个标志位。说明:Ping、Pong:一级缓存Second_buffer:二级缓存Receive:数据就收缓存Time:时间缓存INT0_flg:中断标志buffer_flgPing、Pong切换缓存r1_flg、r2_flg、r3_flg、r4_flg:Receive[0]、Receive[1]、Receive[2]、Receive[3]切换标志其中Receive[0]由最高优先级time_flg:授时标志can_flg:中断接收标志3.2.3C8051F060主函数设计图3.8C8051F060主函数在单片机内部开辟两个结构相同的一级缓存〔长度为25字节〕,用于存放来自CAN节点的数据,具体的存放格式如图3.4所示。其中第1字节为数据标识,用于说明该缓存中的数据是否有效,数据局部为车控CAN总线各个节点的数据。其中一个缓存用于接收来自CAN节点的数据,另一个缓存存放待发的数据,当接收到外部中断后,将待发的数据通过SPI接口发出,之后将缓存标志取反,两个缓存交替存储来自CAN总线的数据[21]。对于车控CAN总线,各个节点发送过来的数据都有标识〔标识用来说明是什么数据〕,当车控CAN单片机接收到来自节点数据后,首先根据标识将数据存入一级缓存中定义的相应位置,然后将标识与已有的标识或运算后存入缓存的第一个字节位置,这样就完成了一次CAN总线数据的接收[22]。为进一步简化FPGA的程序设计,在单片机中定义一个二级缓存〔大小与一级缓存一致〕,用于过滤一级缓存的无效数据。当单片机收到FPGA发来的外部中断后,首先判断当前哪个一级缓存的数据已经准备好,将一级缓存的第1个字节〔标识〕复制到二级缓存的第1个位置,通过判断该标识的哪些位是1,将对应的数据复制到二级缓存,从而完成数据的过滤,之后启动SPI接口,将二级缓存的数据发送给FPGA[23]。问题:1.在启动SPI接口发送数据时要将中断关掉,只能通过判断CAN的标志位来确定是否有数据收到。2.在执行SPI发数期间,CAN消息缓存中数据的还未取走,但可能新的数据又将到来,所以必须开辟多个消息缓存用于接收数据。3.2.4CAN中断函数设计图3.9C8051F060CAN中断函数在CAN中断处理函数中,主要实现以下功能:1.将ID号存储到“ID〞变量中。2.将接收到的数据存储到空闲的初级缓存“Receive〞中,并将相应的标志位至‘1’。其中,Receive[0]数组具有最高的优先。3.中断中CPU不监测CAN总线变化。3.3FPGA程序设计由于信号变换的不稳定性,所以在数据接收局部要有信号消抖局部。消抖以后即将数据就收并存入内部FIFO中[24]。3.3.1数据消抖图3.10消抖程序流程图消抖8个时钟周期,抹去抖动信号,使数据平滑。仿真结果如图3.11:图3.11消抖函数仿真结果3.3.2SPI接收数据主函数在FPGA中采用状态机对SPI数据流进行数据接收。首先,在复位以后每隔25ms向单片机发送一中断信号,准备开始接收数据[25]。其次,接收数据帧标识并计数。再者,就是接收数据并写帧尾。如图3.12所示:图3.12FPGA接受SPI数据总流程FPGA接受SPI数据的根本状态:图3.13接受SPI数据的根本状态:以下是模拟发送和FPGA将数据处理的结果:图3.14数据处理结果总预览图总共发送了三次数据MOSI发送的数据给别是03192A3B4C5D6E7F08、030102030405060708以及00。图3.15数据处理结果细节〔1〕此图显示了在接收完第一组数据〔03192A3B4C5D6E7F08〕数据之后所写的帧尾,即:帧标识〔03〕、帧计数〔000000〕、上电标识〔00〕及结尾〔EB90146F〕。图3.16数据处理结果细节〔2〕此图显示了在接收完第二组数据〔030102030405060708〕数据之后所写的帧尾,即:帧标识〔03〕、帧计数〔010000〕、上电标识〔00〕及结尾〔EB90146F〕。图3.17细节〔3〕此图显示了在接收完第三组数据〔00〕数据之后所写的帧尾,即:帧标识〔00〕、帧计数〔020000〕、上电标识〔00〕及结尾〔EB90146F〕。其中SCK是模拟的SPI时钟信号与之对应的是MOSI,ss_wrfifo是写FIFO标识,为低电平时写数据,data[7..0]是整理好的数据,ADDR是写FIFO的地址。3.3.3FPGA中FIFO的设计1.十位地址累加器:对‘c〔ss_wrfifo的非信号〕’进行累加,即ss_wrfifo的下降沿地址累加。并作为fifo_1k的写地址图3.18十位地址累加器2.容量为1千字节的FIFO图3.19FIFO是由FPGA内部的两片RAM〔1K×4b〕组成1K×8b的FIFO,ss_wrfifo上升沿开始写操作。4.结束语本课题是某车控系统故障诊断网络记录器工程研究车载记录仪局部的子课题,实现了将车辆系统上多条〔2条~4条〕CAN网络数据接收并记录下来,记录过程中要对多条CAN总线数据进行编帧,即按规定格式存储,以方便后期数据处理。总结全文,本文主要完成了以下工作:a)查阅了大量文献和资料,对CAN总线的历史、现状进行了归纳和了解,针对数据采集编帧的要求,进行了学习和认识。b)认真分析了系统需求,对系统开发的关键技术进行深入的了解。找出一些现实可行而且低本钱的解决方案。c)根据课题的实际要求,完成了整个数据采集系统的器件选择和硬件设计。由于各种因素的限制,系统仍有很大的开发空间,有待日后的继续改良和完善。比方可以采用无线通讯,进行远程通讯,这样大大减少了布线难度,增加通讯的可靠性。参考文献[1]李广弟.单片机根底[M].北京:北京航空航天大学出版社,1998.[2]马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天人学出版社,1999.[3]邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天人学出,1996.[4]马明建.数据采集与处理技术[M].北京:北京交通大学出版社,1998.[5]technologyUPDATE:HowtochooseaCANbusindustrialcontroller,UlrichLuetkeEntrup;AlanLowne《Controlengineering》,20233[6]何希才.传感器及其应用电路[M].北京:电子工业出版社,2001.[7]潘新民,王燕芳.微型计算机控制技术[M].北京:电子工

温馨提示

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

评论

0/150

提交评论