• 7.79 MB
  • 2022-04-22 13:42:41 发布

基于CAN总线的汽车电器网络设计_学习can总线宝典.doc

  • 69页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'基于CAN总线的汽车电器网络设计摘要随着社会的发展,汽车逐渐成为人们生活中不可缺少的交通工具。电子装置在汽车上的使用使汽车的驾驶更加舒适安全。为了满足人们对于汽车性能越来越高的要求,汽车上装备的电子装置、控制单元也在不断增加,传统的线束已远远不能满足复杂的控制系统要求。汽车CAN总线技术的引入给汽车电子控制技术带来了新的飞跃。CAN总线技术不仅满足了车身控制的功能要求,而且可以降低成本、简化车身冗余线束。本文提出了一种基于CAN总线的汽车电器网络的设计方案。设计中采用了ATmega128作为主控制器,CAN模块电路主要采用了CAN总线控制器SJA1000、总线驱动器PCA82C250以及高速光耦6N137,通过ATmega128控制工作在PeliCAN模式下的SJA1000实现各ECU单元之间的通信。文中完成了系统软件开发,并在CAN2.0B通信协议以及车用CAN协议(SAEJ1939)的基础上制定了基于车身控制模块的应用层协议;同时,为保证系统能够稳定、可靠地工作,文中针对系统工作中可能出现的干扰因素进行了分析,并进行了软硬件的抗干扰设计。通过联机调试,验证了整个系统通信的可靠性,该网络能够较好地达到车内总线对于信号传输的实时性与稳定性的要求。关键词:CAN总线;控制网络;电子控制单元;数据采集;数据传输 天津工业大学2011届本科生毕业设计(论文)第一章绪论1.1课题背景现代汽车中所使用的电子控制系统和通讯系统越来越多,如发动机电控系统、防抱死系统(ABS)、自动巡航系统(ACC)和车载多媒体系统,这些系统之间,系统和汽车显示仪表之间,系统和汽车故障诊断系统之间均需要进行数据交换,如此巨大的数据交换量,如仍然采用传统数据交换的方法,用导线进行点对点连接的传输方式将是复杂的工程,据统计,如果一个中级轿车需要线束插头300个以上,插针总数1800~2200个,线束总长超过1.5~2.0km,装配复杂而且故障率很高。传统的线束已远远不能满足复杂的控制系统要求。CAN总线应运而生,CAN总线能够以较低的成本、高级的时实处理能力在强电磁干扰环境下高安全工作[1]。1.2当前国内外汽车CAN总线的研究情况早在20世纪80年代初,Bosch(博世)公司开发出面向汽车的CAN(ControlAreaNetwork)通信协议。与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。由于其良好的性能及独特的设计,CAN总线越来越受到人们的重视。它在汽车领域上的应用是最广泛的,世界上一些著名的汽车制造厂商,如BENZ(奔驰)、BMW(宝马)、PORSCHE(保时捷)、ROLLS-ROYCE(劳斯莱斯)和JAGUAR(美洲豹)等都采用了CAN总线来实现汽车内部控制系统与各检测和执行机构间的数据通信[2]-[3]。目前,国外的汽车总线技术已经成熟,并且已经成为现代汽车的标准技术,汽车制造业发达的国家基本都在汽车制造工程中应用CAN总线技术[4]-[7]。CAN总线作为汽车制造装配的高级核心技术,国外汽车制造商与研发机构对我国是采取的是封锁政策,即使在中国合资的国外引进品牌,也是列入国产化部件外,国外CAN总线进口到中国价格相当昂贵,在高新技术上制约着我国汽车制造业的发展[8]。我国总线技术处于试验和起步阶段,绝大部分的汽车还没有采用自主研发的汽车总线设计。但CAN总线技术已经开始引起国内一些汽车研发部门的关注,如中国汽车技术研究中心、清华大学、同济大学等单位在CAN控制局域网络方面开展了研究,并取得很多富有成效的结果[9]-[13]。1.3研究汽车CAN总线网络的目的和意义由于传统线束通信已经不能满足汽车控制网络的数据传输量,而CAN总线网络以低成本、高可靠性和极大的灵活性将逐渐取代传统的并行的数据传输网络。67 天津工业大学2011届本科生毕业设计(论文)本研究的意义在于简化现代汽车车身中日益复杂的电子控制设备之间的连线,废除汽车上传统的主电缆线束系统,有效的增强系统的可靠性及降低系统的综合成本,提高汽车的系统化、智能化程度,并且为汽车性能的高档次提供技术平台,形成新产品和技术储备。1.4课题主要内容本课题研究了基于CAN总线的汽车通信系统的设计问题,实现了汽车电器控制单元(ECU)的直接数据传输。本课题的主要研究内容为:(1)参考通用CAN2.0B协议和车用CAN协议(SAEJ1939),制定自己的应用层协议;(2)汽车电器控制网络的模块设计;(3)CAN总线控制系统的硬件电路设计;(4)CAN总线控制系统的软件电路设计;(5)软硬件联机调试;(6)对当前工作的总结及对以后工作的展望。67 天津工业大学2011届本科生毕业设计(论文)第二章CAN总线通信原理本章主要研究了CAN通信原理,分别对CAN总线协议的性能特点、CAN节点的分层结构、数据帧结构、远程帧结构、出错帧结构、超载帧结构进行了详细分析,并且在CAN2.0B协议的基础上制定了相应的应用层协议的帧信息。2.1引言CAN总线是国际标准的网络控制器,是串行通信协议,一般是使用在汽车电子行业,随着技术的发展,已经开始使用在各个领域,医疗、航海、工业自动化、工控设备等等领域。本课题也是基于CAN总线的一个新的课题。它的出现使得分布式控制系统的各个节点之间的实时、稳定的数据传输得到了保障。CAN总线是德国BOSCH公司在80年代的时候,为解决汽车中存在的众多问题而设计,它工作于多主从方式,网络中的节点是根据优先级来向总线竞争发送数据的,采用的是CSMA/CD(载波侦听多路访问/冲突检测),无损结构逐位仲裁技术,废除了站节点地址编码,而使用对通信数据进行编码,使得每个节点可以接收相同的数据。这样构成的系统通信实时性强,冗余性好,系统灵活性高。与之相比,以往采用RS485结构的系统,通信方式不灵活,底层驱动需要自己编写,可靠性差。由于采用了许多新技术及独特的设计,如总线自动关闭输出的功能,完善的通信协议,降低了开发的难度,缩短开发的周期等,是以前的RS485系统无法比拟的[14]。2.2CAN总线协议的性能特点控制器局域网(ControllerAreaNet)简称CAN总线,是德国BOSCH公司于80年代初为解决现代汽车中众多的电控模块(ECU)之间的数据交换而开发的一种串行通信协议[2]-[3]。CAN总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。CAN总线上的任意节点可在任意时刻主动地向网络上其它节点发送信息而不分主次,因此可在各节点之间实现自由通信。CAN总线协议废除了传统的站地址编码,而代之以对通信数据块进行编码,数据块的标识码可由11位或29位二进制数组成,这样就可使网络内的节点个数在理论上不受限制。CAN总线具有很高的网络安全性、通讯可靠性和实时性,而且简单实用,网络成本低,特别适用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。具体来说其主要特点有:(1)67 天津工业大学2011届本科生毕业设计(论文)采用通讯数据块编码,可实现多主工作方式,数据收发方式灵活,可实现点对点、一点对多点及全局广播等多种传输方式;(2)采用非破坏性基于优先权的总线仲裁技术,具有暂时错误和永久性故障节点的判别及故障节点的自动脱离功能,使系统其他节点的通信不受影响;(3)CAN节点在错误严重的情况下,具有自动关闭总线的功能,切断它与总线的联系,以使总线上其它操作不受影响;(4)采用统一的标准和规范,使各设备之间具有较好的互操作性和互换性,系统的通用性好;(5)通讯介质可采用双绞线,无特殊要求;现场布线和安装简单,易于维护,经济性好。只有2根线与外部相连,且内部含有错误探测和管理模块;(6)网络上的节点信息可分成不同的优先级,可以满足不同的实时要求;(7)CAN总线通信格式采用短帧格式,每一帧的有效字节数为8个(CAN技术规范2.0A),数据传输时间短,受干扰的概率低,重新发送的时间短;(8)采用非破坏性总线仲裁技术。当两个节点同时向网络上传送数据时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响地继续传输数据,有效避免了总线冲突;(9)直接通信距离最大可达10km(速率5kb/s以下),最高通信速率可达1Mb/s(此时距离最长为40m);(10)CAN总线采用CRC检验并可提供相应的错误处理功能,保证了数据通信的可靠性。图2-1CAN总线网络拓扑结构按照总线的技术规范与总线的电气特性,一般最多支持128个节点,在差分总线的两端必须接一个匹配电阻。各个节点之间无需匹配电阻,而且分支最好越短越好。与其他总线相比,CAN总线具有通信速率高,实现容易,性价比高的,并且已经实现国际标准的总线,应用于各个领域、航天、工业、机器人、数控机床、医疗器械,具有广泛的运用前景[15]-[18]。2.3CAN节点的分层结构CAN总线是由不同层次构成,CAN2.0A包括目标层、传输层和物理层。CAN2.0B67 天津工业大学2011届本科生毕业设计(论文)包括数据链路层与物理层,数据链路层包括逻辑链路控制和媒体访问控制两层;物理层包括物理信号,物理媒体附属装置,媒体相关接口。CAN2.0A节点的分层结构如下图2-2所示。应用层目标层--报文滤波--报文和状态处理传输层--故障界定--出错检测和信令--报文确认--应答--仲裁--报文分帧--传输速率与定时物理层--信号电平与位表示--传输媒体图2-2CAN2.0A节点的分层结构CAN2.0A技术规范,定义了传输层以及与CAN协议有关的外层,目标层的功能是确定被接收的报文实际是否被使用,以及通过过滤器屏蔽器对报文的滤波,确定报文是否可以被接收进来。当报文接收过程中出现了错误,报文就会置位相应的状态标志位。设计人员可以根据这些位来判断是什么情况组成的这个错误。传输层主要是报文的故障界定、检错、确认、应答、仲裁、位定时等等。传输层确定新的一帧数据的发送,确定总线是不是开发或者是不是可以开始接收数据了。传输层是不存在修改的灵活性的。物理层定义了实际数据发送,包括物理层定义信号时如何发送的,用什么样的电平表示高电平,什么电平表示低电平,可以采用双绞线或者是光电缆等进行数据的发送。对这个物理层没有具体定义,用户可以根据自己的需要进行修改[3]。2.3报文传送及其帧类型在数据发送与接收的过程中,报文的发送器就是发出报文的单元。在总线空闲或该单元失去仲裁场之前为发送器。若总线处于空闲状态,并且节点并非处于报文发送状态,则该单元称为接收器。报文发送器与接收器的有效时点是不同的。对发送器,一旦总线空闲,报文立刻发送,直到报文结束。如果出现错误,总线就会发送错误帧,停止数据的发送,等67 天津工业大学2011届本科生毕业设计(论文)总线空闲状态下,数据又开始重新发送这一帧数据,按照优先级的高低来发送数据,这样可以保证系统的数据的正确性,对于接收器来说,如果在接收过程中未出现错误,则数据有效,如果出现错误,那么总线会重新发送数据给接收器,CAN总线会自动把暂时性错误与永久性错误区分开来。这样就不会因为某个节点的错误导致系统的崩溃。帧起始、仲裁场、控制场、数据场和CRC序列都是通过对每一位进行填充来编码的。当数据中有五个连续地相同的电平的时候,总线就会在第六个位电平处插入相反的电平,主要是为了能够使信号保持同步。数据帧或远程帧的CRC界定符,应答场和帧结束的形式一般是比较固定,无需进行位填充。出错帧和超载帧也是采用同样的格式,也不需要位填充。报文中的位流按照非归零(NRZ-NON-Return-to-Zero)码方法编码,这意味着一个完整位电平要么是“显性”,要么是“隐性”的。报文数据一般发送的话,是按四种不同的帧来表示与控制的。数据帧主要是从发送器到接收器发送数据。远程帧主要发送具有相同标识符的数据帧。出错帧的功能是检测总线的错误,一旦发现错误,就会发出错误帧。超载帧主要用于为当前与后续的数据帧与远程帧之间添加附加的延时[10]。2.3.1数据帧数据帧是由帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结束组成的。组成结构如图2-3所示。图2-3数据帧的组成帧起始标志一帧新的数据的开始,它是由一个单独的“显性”位(0)组成,不需要用户在程序中体现,由控制芯片自动完成,发送时,总线必须处于空闲状态,并且所有的站必须与首先开始发送的站的帧起始的前沿同步。仲裁场由标识符和远程发送请求位组成。仲裁场的组成框图如图2-4所示。图2-4仲裁场组成67 天津工业大学2011届本科生毕业设计(论文)仲裁场包含标识符ID(标准为11bits),对应其优先级。每个站在发送仲裁场时,将发送位与线路电平比较,若相同则发送;若不同则得知优先级低而退出仲裁,不再发送。系统响应时间与站点数无关,只取决于安排的优先权。RTR位,在数据帧中,是“显性”电平,而RTR位,在远程帧中是“隐形”电平[10]。1.控制场控制场一般由6位构成,如图2-5所示。图2-5控制场组成控制场是由数据长度码和保留位组成。数据长度码表示数据发送的数目。长度码一般是4位,如表2-1所示,其中:d代表“显性”,r代表“隐性”。表2-1数据长度码中,数据字节数目编码字节数目数据长度码DLC3DLC2DLC1DLC00dddd1dddr2ddrd3ddrr4drdd5drdr6drrd7drrr8rddd数据发送的字节数一般都是0~8个字节,不能使用其他数值。2.数据场数据帧中被发送的数据构成了数据场,它可包括从0至8个字节,一个字节一般包括8位,高有效位先发送。3.CRC场CRC场包括CRC序列,后随CRC界定符,CRC场组成如图2-6所示67 天津工业大学2011届本科生毕业设计(论文)图2-6CRC场组成1.应答场应答场为两位,包含应答间隙和应答界定符。应答场的组成如图2-7所示。图2-7应答场组成当接收器接收到报文,接收器就会在应答间隙期间向发送器发送“显性”的位以示应答。应答场长度为2位,包含应答间隙和应答界定符。2.3.2远程帧远程帧如图2-8所示,远程帧与数据帧的区别就是没有数据场。当总线某个节点请求其它节点发送数据的时候,该节点就会给具有相同标识符的目标节点发送远程帧,目标节点接收到总线发来的远程帧后,就会把数据发送给请求节点。一般远程帧是由6个不同的位场组成的。但是与数据帧不同的是,远程帧的RTR位是“隐性”的。DLC是相对远程帧独立的,这个数值对应于与数据帧的长度。图2-8远程帧的组成2.3.3出错帧出错帧是检测总线出错的一个信号标志,由两个不同场构成。第一场由来自不同节点的错误标志叠加,第二个场为错误界定符。CAN协议采用CRC检验并提供相应的错误处理功能,保证数据通信的可靠性。67 天津工业大学2011届本科生毕业设计(论文)图2-9出错帧组成错误标志的形式有两种:(1)活动错误标志;(2)认可错误标志。一般由6个连续的“显性”位组成一个活动错误标志,6个连续的“隐性”位组成一个认可错误标志。在每个CAN控制器的内部都有两个错误计数器:发送错误计数器和接收错误计数器。按错误计数器数值的不同,CAN总线上的节点可以分为3种错误状态,分别是错误活动状态、错误认可状态和总线关闭状态。上电复位后,两个错误计数器的数值都为0,表示节点处于正常活动状态,可正常地进行数据通信,检测到错误时,发送活动错误标志。当错误计数器中的值超过127时,节点进入错误认定状态。处于错误状态的节点仍然可以与总线通信,但出错后,总线会发送错误认可标志,并且在开始发送数据之前,会插入一段附加的时间。当错误计数器和接收计数器里面的值大于或等于127时,节点的状态就从错误认可转变为错误活动状态。若发送错误计数器的值超过255之后,节点就会进入关闭状态,既不能发送数据,也不能接收数据。当软件执行操作模式请求命令,并等待总线释放序列(11位连续隐性位)后,节点就会从总线关闭状态重新回到总线错误活动状态[3]。2.3.4超载帧超载帧一般由2个位场组成:超载标志和超载界定符。超载帧组成结构如图2-10所示图2-10超载帧组成在CAN总线系统的某个节点处理接收到的数据的过程中,由于接收到的数据需要经过一段时间的处理,但是第二帧数据可能会在数据处理的时候就会到达,这样将导致数据出错,数据丢失,因此,接收数据的节点可以发送超载帧,用于对第二次数据帧到来的时间进行延时,发送数据的节点接收到超载帧就会延时下一帧数据的发送。第二个发送超载的条件是间歇场检出一个“显性”67 天津工业大学2011届本科生毕业设计(论文)位,后一个超载条件引起的超载帧在检测到“显性”位的后一位开始发送,在很多情况下,为延迟下一次数据帧或远程帧,均可产生这两种超载帧[3]。2.4基于CAN2.0B应用层协议的制定波特率的确定可根据通信内容的多少确定,通常采用5Kbps—1Mbps。本设计当前研究的车内信息量较少、实时性要求不高,故定波特率为20Kbps。汽车电子控制系统各个控制器节点的信息我们从多个方面进行设定,譬如名称、英文名称、信号走向、信号类型、发送类型、出发方式等。(1)信号类型:状态(AI)、受控(AO)、状态且受控(DO)、命令(DI);(2)取得方式:周期方式、请求方式、请求且周期、被动;(3)优先级:1一7;(4)发送类型:被远程帧请求才发送的帧、被告错误信息的帧、周期发送的帧、事件触发的帧、主动发送的帧。这里以主站给从站1发送的轮询信号为例。主站需要从站的信息时,主站就给相应的从站发送轮询信号,这些信息可以在一个数据帧中表示。这个数据帧可以命名为“MOSI”。首先,对数据帧的标识符进行设置,其中有优先级、地址(SA)、数据长度码(DLC)等相关位。标识符是一个数据帧中最重要的信息,节点之间能否通讯主要和标识符位设置的是否合理,例如优先级、地址等位有很大关系。把相关的数据参数按照位的形式填充到数据场中,不过数据参数要考虑精度、信号取得方式、优先级等方面。然后我们把数据帧打包从主站CAN单元发送到总线上,从站单元通过CAN控制器的接收滤波器可以收到它所需要的信息帧。然后将采集到的信息发回给主站。我们将从站1发回的数据命名为“MISO”。下面就是MOSI和MISO一个打包后的数据帧。名称:MOSI(主站给从站1发送的轮询信号)优先级:1地址:0x00DLC:0x04字节:1-数据源地址0x00;2-目标地址0x01;3-数据类型;4-保留。名称:MISO(从站1给主站返回的数据信号)优先级:2地址:0x01DLC:0x04字节:1-数据源地址0x01;2-目标地址0x00;3-温度整数部分;4-温度小数部分。67 天津工业大学2011届本科生毕业设计(论文)2.5本章小结本章介绍了CAN总线技术在汽车控制系统中的特点和优势,分析了CAN总线系统的结构原理和通信方式以及CAN总线的通信协议。并给出了自己基于CAN2.0B和车用CAN协议(SAEJ1939)制定的应用层协议,为后续的硬件选型和软件设计提供了参考。67 天津工业大学2011届本科生毕业设计(论文)第三章系统整体结构设计本章设计了CAN总线控制系统的整体结构,并且对功能模块进行了详细的分析。3.1系统整体框图本系统的硬件构架由五大部分组成,如图3-1所示,这五大部分可以实现主站处理单元、车内温度采集单元、车外温度采集单元、汽车发动机转速和油箱液位采集单元、汽车车灯和车窗控制单元直接的数据传输,其中,主站处理单元和从站处理单元的处理器都采用ATMega128作为系统控制器。整个网络通过总线拓扑的形式形成互联。在本系统中各个单元的信号将通过CAN网络传入主站处理单元中,在主站内得到处理后再发送到相关单元执行。温度、车速、液位等信号将通过CAN网络及时地传送到主站处理单元中;同时,用户通过主站CPU外接的控制按键,将车窗开关、灯光开关、转向灯开关等的控制信号传入主站CPU,再通过CAN网络传入从站的电控单元。主站处理单元将车内需要显示的信号通过外接的12864液晶显示出来。图3-1汽车CAN总线网络整体框图3.2系统ECU框图本课题的控制系统为低速CAN,速度为100Kbps,主要完成ECU单元67 天津工业大学2011届本科生毕业设计(论文)之间的数据传递,由于汽车电器数量较多,要简化车身模块数量,降低硬件成本,提高控制系统可靠性,需要根据各电器位置及功能对汽车电子单元(ECU)模块进行合理划分。本设计将电子单元(ECU)划分成6个模块,即CPU、传感器、显示器、CAN控制器、光电隔离、CAN驱动器。如图3-2所示:图3-2系统子节点框图系统节点以ATmega128作为控制核心,CAN控制器选用SJA1000,为了防止干扰,CAN控制器与CAN驱动器间采用光电隔离。3.3CAN控制器SJA10003.3.1芯片SJA1000概述SJA1000是一种独立的CAN控制器,主要用于移动目标和一般工业环境中的区域网络控制。它是Philips半导体公司PCA82C200CAN控制器(BasicCAN)的替代产品,而且它增加了一种新的操作模式——PeliCAN,这种模式支持具有很多新特性的CAN2.0B协议[18]。SJA1000的基本特性如下:●引脚与PCA82C200独立CAN控制器兼容;●电气参数与PCA82C200独立CAN控制器兼容;●具有PCA82C200模式;●有64字节的扩展接收缓冲区,先进先出(FIFO);●支持CAN2.0A和CAN2.0B协议;●支持11位和29位标识码;●通信位速率可达1Mbps;●包含PeliCAN模式的扩展功能;●24MHz时钟频率;●可与不同的微处理器进行连接;67 天津工业大学2011届本科生毕业设计(论文)●可编程的CAN输出驱动器配置;●温度适应范围大(-40℃~+125℃)[18]。3.3.2SJA1000的内部结构以及在系统中的位置SJA1000的内部结构如图3-3所示,CAN控制器在现场系统中的位置和所起的作用如图3-4和3-5所示[18]。图3-3SJA1000的内部结构方框图图3-4CAN控制器SJA1000在系统中的位置67 天津工业大学2011届本科生毕业设计(论文)图3-5CAN控制器SJA1000的模块结构3.3.3CAN控制器SJA1000的几个控制模块①接口管理逻辑接口管理逻辑(IML)解释来自CPU的命令,控制CAN寄存器的寻址,向主控制器(CPU)提供中断信息和状态信息。②发送缓冲器发送缓冲器(TXB)是CPU和BSP(位流处理器)之间的接口。它能够存储要通过CAN网络发送的一条完整报文。缓冲器长13字节,由CPU写入、BSP读出。③接收缓冲器接收缓冲器(RXB,RXFIFO)是接收滤波器和CPU之间的接口,用来存储从CAN总线上接收并被确认的信息。接收缓冲器(RXB,13个字节)作为接收FIFO(RXFIFO,长64字节)的一个窗口,可被CPU访问。CPU在此FIFO的支持下,可以在处理一条报文的同时接收其他报文。④验收滤波器验收滤波器(ACF)接收到的标识码与自己的内容相比较,以决定是否接收这条报文。在验收测试通过后,这条完整的报文就被保存在RXFIFO中。⑤位流处理器位流处理器(BSP)是一个在发送缓冲器、RXFIFO和CAN总线之间控制数据流的队列(序列)发生器。它还执行总线上的错误检测、仲裁、填充和错误处理。⑥位时序逻辑67 天津工业大学2011届本科生毕业设计(论文)位时序逻辑(BTL)监视串行的CAN总线和位时序。它是在一条报文开头,总线传输出现从隐性到显性时同步于CAN总线上的位流(硬同步),并且在其后接收一条报文的传输过程中再同步(软同步)。BTL还提供了可编程的时间段来补偿传播延时、相位偏移(例如,由于振荡器漂移)和定义采样点和每一位的采样次数。⑦错误管理逻辑错误管理逻辑(EML)负责限制传输层模块的错误。它接收来自BSP的出错报告,然后把有关错误统计告诉BSP(位流处理器)和IML(接口管理逻辑)。3.4CAN总线驱动器PCA82C2503.4.1CAN总线驱动器PCA82C250概述82C250是CAN控制器与物理总线之间的接口,它最初是为汽车中的高速应用(达1Mbps)而设计的。器件可以提供对总线的差动发送和接收功能。PCA82C250的主要特性如下[19]:●与ISO11898标准完全兼容;●高速率(最高可达1Mbps);●具有抗汽车环境下的瞬间干扰,保护总线能力;●采用斜率控制,降低射频干扰;●过热保护;●总线与电源及地之间的短路保护;●低电流待机模式;●未上电节点不会干扰总线;●总线至少可连接110个节点。3.4.2PCA82C250结构框图及基本功能描述PCA82C250的内部结构及引脚功能如图3-6和表3-1所示。图3-6PCA82C250的内部结构功能图67 天津工业大学2011届本科生毕业设计(论文)表3-1PCA82C250的引脚功能标记引脚功能描述TXD1发送数据输入GND2接地Vcc3电源RXD4接收数据输出Vref5参考电压输出CANL6低电平CAN电压输入/输出CANH7高电平CAN电压输入/输出Rs8斜率电阻输入PCA82C250驱动电路内部具有限流电路,可防止发送输出级对电源、地或负载短路损坏输出级。若结温超过大约16℃,则两个发送器输出端极限电流将减小,由于发送器是功耗的主要部分,因而限制了芯片的温升,器件的所有其他部分将继续工作。PCA82C250采用双绞线差分驱动,有助于抑制汽车等恶劣电气环境下的瞬变干扰。引脚8(Rs)用于选定PCA82C250的工作模式。有3种不同的工作模式可供选择:高速、斜率控制和待机,如表3-2所列。表3-2引脚Rs用法Rs提供条件工作模式Rs上的电压或电流VRs>0.75Vcc待机模式|IRs|<10μA10μA#include"PliCAN.H"#include#include"DS18B20.H"#include"1602.h"//SJA100数据地址端口宏定义#defineCAN_AD_PORTPORTA#defineCAN_AD_PINPINA#defineCAN_AD_DDRDDRA//SJA100使能控制端口宏定义#defineCAN_CS_PORTPORTB#defineCAN_CS_PINPINB#defineCAN_CS_DDRDDRB//SJA1000使能控制管脚位宏定义#defineCAN_CS_BIT6//SJA100读写控制端口宏定义#defineCAN_W_R_A_PORTPORTG#defineCAN_W_R_A_PINPING#defineCAN_W_R_A_DDRDDRG//SJA1000读写控制管脚位宏定义#defineCAN_WR_BIT0#defineCAN_RD_BIT1#defineCAN_ALE_BIT2#defineucharunsignedcharexternunsignedintTemperature;unsignedcharCanMode[14];unsignedcharTransBuffer[10];unsignedcharRxBuffer[11];//用来保存接收数据unsignedcharLength_Data;//用来保存接收到的数据长度unsignedcharRevFlag;#defineFALSE0#defineTRUE167 天津工业大学2011届本科生毕业设计(论文)#pragmainterrupt_handlerINT1_Sev:3//CS控制voidCS_Set(charx){if(x==0)CAN_CS_PORT&=~BIT(CAN_CS_BIT);elseCAN_CS_PORT|=BIT(CAN_CS_BIT);}//WR控制voidWR_Set(charx){if(x==0)CAN_W_R_A_PORT&=~BIT(CAN_WR_BIT);elseCAN_W_R_A_PORT|=BIT(CAN_WR_BIT);}//RD控制voidRD_Set(charx){if(x==0)CAN_W_R_A_PORT&=~BIT(CAN_RD_BIT);elseCAN_W_R_A_PORT|=BIT(CAN_RD_BIT);}//ALE控制voidALE_Set(charx){if(x==0)CAN_W_R_A_PORT&=~BIT(CAN_ALE_BIT);elseCAN_W_R_A_PORT|=BIT(CAN_ALE_BIT);}/*/*16M晶振时钟*//*微秒级延时1~65535us*/staticvoidDelay_us(unsignedintus){unsignedinti;i=us/2;i--;asm("nop");asm("nop");for(;i!=0;i--)67 天津工业大学2011届本科生毕业设计(论文){asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");}}/*16M晶振时钟*//*毫秒级延时1~65535ms*/staticvoidDelay_Ms(unsignedintt){unsignedintm=t/2;for(;m!=0;m--)Delay_us(1000);}//ATMEGA128端口初始化voidPort_Init(){CAN_CS_DDR|=BIT(CAN_CS_BIT);//控制SJA1000CSIO设为输出CAN_W_R_A_DDR|=BIT(CAN_WR_BIT);//控制读写信号IO设为输出CAN_W_R_A_DDR|=BIT(CAN_RD_BIT);CAN_W_R_A_DDR|=BIT(CAN_ALE_BIT);EICRA=0x00;//active-lowlevelorfallingedge??EICRB=0x00;//noinfluenceEIMSK|=BIT(INT1);//外部中断1使能默认为低电平触发SREG=0X80;//开全局总中断}//写SJA1000寄存器函数voidWrite_SJA1000(unsignedintaddr,unsignedchardata){NOP();CAN_AD_DDR=0XFF;//数据口设为输出CAN_AD_PORT=addr;//输出数据的地址ALE_Set(0);RD_Set(1);WR_Set(1);CS_Set(1);NOP();ALE_Set(1);NOP();CAN_AD_PORT=addr;//再次输出数据的地址确保一致67 天津工业大学2011届本科生毕业设计(论文)NOP();ALE_Set(0);CS_Set(0);NOP();WR_Set(0);NOP();NOP();CAN_AD_PORT=data;//输出数据NOP();WR_Set(1);CAN_AD_PORT=data;//再次输出数据CS_Set(1);NOP();NOP();}//读SJA1000寄存器函数unsignedcharRead_SJA1000(unsignedintaddr){unsignedchardata;NOP();ALE_Set(0);RD_Set(1);WR_Set(1);CS_Set(1);CAN_AD_DDR=0XFF;//数据口设为输出CAN_AD_PORT=addr;//输出数据的地址NOP();ALE_Set(1);NOP();CAN_AD_PORT=addr;//再次输出数据的地址确保一致NOP();ALE_Set(0);NOP();CS_Set(0);NOP();RD_Set(0);NOP();NOP();CAN_AD_DDR=0X00;//数据口设为输入CAN_AD_PORT=0xff;//上拉NOP();67 天津工业大学2011届本科生毕业设计(论文)data=CAN_AD_PIN;NOP();RD_Set(1);CS_Set(1);NOP();returndata;}//SJA1000初始化voidCAN_Init(){unsignedchari_temp=0,j_temp=0;CLI();do{Write_SJA1000(MODE,0X01);}while(!(Read_SJA1000(MODE)&0X01));Write_SJA1000(CDR,0XC8);//PeliCAN模式,禁能CLOCKOUT引脚Write_SJA1000(AMR0,0XFF);//设置验收屏蔽位Write_SJA1000(AMR1,0X00);Write_SJA1000(AMR2,0XFF);Write_SJA1000(AMR3,0X00);Write_SJA1000(ACR1,0X00);Write_SJA1000(ACR3,0x01);Write_SJA1000(BTR0,0X7F);Write_SJA1000(BTR1,0XFF);//16M晶振下波特率为20Kbit/sWrite_SJA1000(OCR,0X1A);//TX1悬空,TX0推挽正常输出do{Write_SJA1000(MODE,0X00);}while((Read_SJA1000(MODE)&0x01));//双滤波方式,正常工作模式Write_SJA1000(TXID2,0X00);//配置发送缓冲区ID3Write_SJA1000(IER,0X01);//配置SJA1000中断SEI();}voidCAN_Send(){unsignedchara_temp=0;unsignedcharSR_temp,i;NOP();for(i=2;i<6;i++){67 天津工业大学2011届本科生毕业设计(论文)CLI();do{a_temp=Read_SJA1000(SR);}while(!(a_temp&0x04));TransBuffer[0]=0x04;TransBuffer[1]=0x00;TransBuffer[2]=0x01;TransBuffer[3]=0x00;TransBuffer[4]=i;TransBuffer[5]=0x03;TransBuffer[6]=0x04;Write_SJA1000(TXSFF,TransBuffer[0]);//标准帧,数据长度为4个字节Write_SJA1000(TXID1,TransBuffer[1]);Write_SJA1000(TXID2,TransBuffer[2]);Write_SJA1000(TXDATA1,TransBuffer[3]);Write_SJA1000(TXDATA2,TransBuffer[4]);Write_SJA1000(TXDATA3,TransBuffer[5]);Write_SJA1000(TXDATA4,TransBuffer[6]);Write_SJA1000(CMR,0x01);//发送请求命令while(!(Read_SJA1000(SR)&0x08))//检测SR.3位,判断发送是否完成SEI();//开中断Delay_Ms(1000);}}voidCAN_Receive(){RxBuffer[0]=Read_SJA1000(RXSFF);Length_Data=(RxBuffer[0])&0x0f;RxBuffer[1]=Read_SJA1000(RXID1);RxBuffer[2]=Read_SJA1000(RXID2);RxBuffer[3]=Read_SJA1000(RXDATA1);RxBuffer[4]=Read_SJA1000(RXDATA2);RxBuffer[5]=Read_SJA1000(RXDATA3);RxBuffer[6]=Read_SJA1000(RXDATA4);Write_SJA1000(CMR,0x04);}//******************************************************************//输入:dat//输出:无67 天津工业大学2011届本科生毕业设计(论文)//描述:在1602上显示温度值//******************************************************************voidDisplay_Temp1(){if(RxBuffer[4]==0x00){Display_Double_Num((RxBuffer[3]-1),5,RxBuffer[5]);Display_Num((RxBuffer[3]-1),7,RxBuffer[6]);}}//外部中断1服务函数voidINT1_Sev(){inti;Write_SJA1000(IER,0X00);/**************处理函数******************/CAN_Receive();Display_Temp1();Write_SJA1000(IER,0X01);}1.3CAN_Master_Main.c#include"SJA1000.h"#include"PliCAN.H"#include"uart0.h"#include"uart.h"#include"DS18B20.H"#include"1602.h"#include"12864.h"unsignedintTemperature=0;//保存温度值//定义字符chartext_1[]={"汽车CAN_BUS系统"};chartext_2[]={"天津工业大学"};chartext_3[]={"作者:蒋志斌"};chartext_4[]={"指导老师:陈奕梅"};chartext_5[]={"1号站:.℃"};chartext_6[]={"2号站:.℃"};chartext_7[]={"3号站:转/分"};chartext_8[]={"4号站:.L"};/*/*16M晶振时钟*//*微秒级延时1~65535us*/staticvoidDelay_us(unsignedintus)67 天津工业大学2011届本科生毕业设计(论文){unsignedinti;i=us/2;i--;asm("nop");asm("nop");for(;i!=0;i--){asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");}}/*16M晶振时钟*//*毫秒级延时1~65535ms*/staticvoidDelay_Ms(unsignedintt){unsignedintm=t/2;for(;m!=0;m--)Delay_us(1000);}//******************************************************************//输入:无//输出:无//描述:ATmega128,GPIO初始化,设置GPIO输入/输出方向及初始化//******************************************************************staticvoidGpio_Init(){DDRC=0xff;DDRF=0xff;PORTF=0x00;DDRE=0xff;PORTE|=BIT(3);PORTC=0X00;PORTE&=~BIT(3);PORTE|=BIT(4);PORTC=0XFF;PORTE&=~BIT(4);PORTC=0X00;}voidSys_Init(){67 天津工业大学2011届本科生毕业设计(论文)inti;Gpio_Init();//IO初始化Port_Init();uart_init();//串行口初始化CAN_Init();//CAN初始化Delay_Ms(10);LCM_Init();//LCM初始化//液晶初始化Ds18b20_Init();Temperature=225;//显示初始化Display_String(0X80,text_1);Display_String(0X91,text_2);Display_String(0X88,text_3);Display_String(0X98,text_4);for(i=0;i<10;i++)Delay_Ms(1000);Display_String(0X80,text_5);Display_String(0X90,text_6);Display_String(0X88,text_7);Display_String(0X98,text_8);}voidmain(){inti;Sys_Init();while(1){CAN_Send();}}67 天津工业大学2011届本科生毕业设计(论文)附录3系统电路原理图67 天津工业大学2011届本科生毕业设计(论文)谢辞大学四年,匆匆而过,四年的求学生涯即将画上句号,在这里要真心感谢我的指导老师陈奕梅教授一直以来的悉心指导和帮助,使我能顺利完成毕业设计实物制作和论文写作。陈老师严谨求实,一丝不苟的学术风范使我获益颇多,也是我以后道路上的一笔珍贵财富。同时也要感谢郭文成老师、郭利进老师、沈振乾老师,在我毕业设计制作过程当中给予我很大的帮助。最后感谢四年以来教授过我知识的任课老师们,你们的谆谆教诲只能铭记于心,成为在以后的学习工作中的动力,不管以后遇到什么困难,我会继续努力奋斗!67'