DIY编程器网

标题: 新型电动汽车锂电池管理系统的研究与实现 — CAN 总线设计 [打印本页]

作者: admin    时间: 2015-4-27 22:52
标题: 新型电动汽车锂电池管理系统的研究与实现 — CAN 总线设计
5.1 CAN总线简介
          控制器局部网(Control Area Network,CAN)是德国Bosch公司为现代汽车应用开发的一种多主机局部网络,CAN总线最初为解决汽车中众多的控制与测试仪器之间的数据交换而开发的。CAN卓越的特性、极高的可靠性和独特的设计,特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已在工业上得到广泛的应用,被公认为最有前途的现场总线之一。
       
        CAN总线是一种串行数据通信协议,通信介质可以是双绞线、同轴电缆或光导纤维,通信速率可达1Mbps.CAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。采用这种方法的优点可使网络内的节点个数在理论上不受限制,数据块的标识码可由11位或29位二进制数组成,因此可以定义211或229个不同的数据块,这种按数据块编码的方式,可以非常灵活地控制节点的通信对象和通信来源,比如使不同的节点同时接受到相同的数据,这一点在分布式控制系统中非常有用。数据段长度最多为8个字节,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。同时,8个字节不会占用总线时间过长,从而保证了通信的实时性。CAN协议采用CRC检验并可提供相应的错误处理功能,保证了数据通信的可靠性。CAN具有下列主要特性:
           

         
        正因为CAN总线有着如此卓越的特性,它现已成为汽车车体通信的标准。
       
        5.2 CAN总线通信的基本原理
          5.2.1 CAN总线的位数值表示
          CAN总线用“显性”(Dominant)和“隐性”(Recessive)两个互补的逻辑值表示“0”和“1”。当在总线上出现同时发送显性和隐性位时,其结果是总线数值为显性(即“0”和“1”的结果为“0”)。如图5.1所示,VCAN-H和VCAN-L为CAN总线收发器与总线之间的两接口引脚,信号是以两线之间的“差分”电压形式出现。
       
        隐性:VCAN_H和VCAN_L均被固定为平均电压电平2.5V,VDIFF近似为0.在总线空闲或“隐性”位期间,发送“隐性”状态。
       
        显性:VCAN_H和VCAN_L为大于阈值的差分电压。VCAN_H大约为3.5V,而VCAN_L大约为2.5V.在报文冲突的时候,显性位的优先级高于隐性位,也就是逻辑“0”优先于逻辑“1”,这是CAN总线冲突处理机制的基础。
         
       
       
         
       
        5.2.2 CAN的分层结构
          根据ISO/OSI参考模型,CAN被分为以下不同层次:
           
          (1)物理层(Physical Layer)物理层是将ECU连接至总线的电路实现,它由三部分组成:

         
        (2)数据链路层(Data Link Layer)包含以下两个子层:

         
        CAN的ISO/OSI参考模型的层结构如图5.2所示。
         
       
       
         
       
        5.3 CAN系统的硬件结构
       
        CAN系统结构如图5.3:
         
         
       
        CAN系统中有两类节点:一类由CAN接口卡和PC机组成,CAN接口卡可以是PCI卡、ISA卡,也可接在PC机的并行口上;另一类由单片机、CAN控制器、CAN收发器组成。这里主要介绍单片机节点,在每个节点上,单片机主要用于系统的计算及信息处理功能;CAN控制器主要用于系统的通信;CAN收发器主要用于增强系统的驱动能力。系统的发送过程是:单片机将外围设备或其它节点传送过来的信息处理后,按CAN规范规定的格式将其写入CAN控制器的发送缓冲区,并启动发送命令,把数据发送到CAN总线上;接受过程是:CAN控制器从CAN总线上自动接受数据,并经过滤后存入CAN接受缓冲区,且向单片机发出中断请求,此时单片机可从CAN接受缓冲区读取要接受的数据。
       
        CAN总线在设计时应注意一点:总线两端各有一个120Ω的电阻,这对于匹配总线阻抗起相当重要的作用。否则,数据通信的抗干扰性及可靠性大大降低,甚至无法通信。管理系统中共有9块测量板,一个中央处理模块,一个显示模块,一个SOC估计模块,一个与整车通讯模块,一个专家诊断模块。所以CAN总线上共有14个节点。他们的连接如图5.4所示:
         
       
       
        在系统中,CAN节点的CAN控制器采用SJA1000, SJA1000是一种独立的CAN控制器,主要用于移动目标和一般工业环境中的区域网络控制。SJA1000具有两种操作模式:
           

           
          SJA1000的模块结构如图5.5所示。
         
         
       
        SJA1000是CAN总线接口电路的核心,主要完成CAN的通讯协议,CAN收发器采用PCA82C250,它的主要功能是提高CAN总线的保护和驱动功能,它们之间通过6N137光藕进行隔离,节点结构如图5.6.
         
       
       
         
       
        5.4 CAN系统的软件设计
          CAN总线的软件设计主要是3个部分:初始化、发送与接收数据、检错机制,下面分别加以介绍。
         
       
        5.4.1初始化
          SJA1000在上电硬件复位之后,必须对其进行软件初始化之后才可以进行数据通讯,初始化过程主要在其复位模式下配置时钟分频寄存器CDR、总线定时寄存器BTR0和BTR1、验收代码寄存器ACR、验收屏蔽寄存器AMR及输出控制寄存器OCR等,实现对总线的速率、验收屏蔽码、输出引脚驱动方式、总线模式及时钟分频进行定义。
       
        为了可靠收发数据,SJA1000的工作频率不能低于单片机的频率。系统中,单片机80C552的晶体振荡器频率为12MHz,而SJA1000的晶振频率为16MHz. SJA1000的通讯波特率由BTR0、BTR1、晶振等参数共同决定。表5.1列出了一组推荐的BTR0、BTR1值,标注*符号的值是由CiA协会推荐的标准值。
           
         
           
         
       
        总线上的14个节点数据接收发送的主要关系是:9块测量板向总线上发送所测量的各单电池电压温度信息,同时接受中央处理模块发出的均衡信号;SOC估计单元向总线上发送SOC等相关信息,同时接收中央处理模块的各参数信息;专家诊断模块要向显示模块发送诊断的相关信息,同时接收总线上各模块发出的信息;中央处理单元既要向总线上发送总电压、总电流和环境温度,同时接收测量板的均衡信息;显示控制模块和与整车通讯模块接收各个模块发送到总线上的数据,同时与整车通讯模块还将数据传给整车。数据流图如图5.7:
       
       
       
        对应上面的数据流图,我们定义了CAN控制器的验收码寄存器(ACR)和验收屏蔽寄存器(AMR)。定义的原则是:各个节点模块只接收与自己有关的数据而屏蔽其它数据。譬如9块测量板之间发送到总线上的数据应该是互不相关的,而且它们的数据量很大,所以必须两两加以屏蔽。我们采取的是BasicCAN模式,由于显示控制模块和与整车通讯模块所接收的数据完全一样,所以这俩个节点的验收码寄存器(ACR)和验收屏蔽寄存器(AMR)可以设计的相同。具体各节点的ACR和AMR的定义如表5.2:
          5.4.2发送与接收数据
       
       
         
       
        在本系统中,每一个模块的CAN发送都采用查询方式来控制,接收采用中断方式来控制,这里最好把CAN中断优先级设为高优先级。发送时,CPU检查SJA1000状态寄存器中“发送缓冲器状态”标志(TBS),若发送缓冲器处于“释放”状态,则CPU将发送的信息传送到SJA1000的发送缓冲器,然后将命令寄存器里的“发送请求”标志(TR)置位,启动发送,发送期间,TBS处于“锁定”状态,此时CPU不能访问发送缓冲器;发送成功结束时,TBS处于“释放”状态,这时CPU就可以访问发送缓冲器,进行下一次发送操作。接收时,当SJA1000已接收一条信息,并且这条信息已通过验收滤波器且已放在接收FIFO中,那么SJA1000会产生一个接收中断,CPU立刻起作用,将接收到的信息存到信息暂存器,然后对SJA1000的命令寄存器的“释放接收缓冲器”标志(RR)置位,这样一次中断接收就算完成。接收和发送数据的流程图如图5.8.
           
          5.4.3检错机制
          SJA1000的BasicCAN模式提供了完善的检错机制,它提供了8个中断源,除了发送中断、接收中断和唤醒中断外,其余5个都是通信过程中出现的各种意外状态的反映。当接收FIFO满了,但还在接收其它信息,这时SJA1000就会置位状态寄存器中的数据溢出状态位,并产生一个数据溢出中断通知CPU数据溢出。当本节点与其它节点总线竞争失败丢失仲裁权时,SJA1000将会立即产生一个仲裁丢失中断,并且当前丢失仲裁的具体位号将被捕捉进仲裁丢失捕捉寄存器,这样便于我们分析总线竞争的情况。
       
        当发送或接收数据时,发生任何一种错误,比如位错、格式错、填充错等情况,SJA1000将会立即产生总线错误中断,同时当前错误的位置被捕捉入错误代码捕捉寄存器,通过读取寄存器值并查表可知道当前错误发生的情况。SJA1000还定义了发送错误计数器和接收错误计数器,当错误产生时,根据不同类型错误的严重性,计数器加相应的值。根据错误计数器的值,定义了错误的三种状态:当错误计数器的值在0-127之间为错误激活状态;当计数器的值在127-255之间为错误消极状态;当计数器的值高于255则处于总线关闭状态。同时SJA1000定义一个错误报警限额寄存器,默认为96,当上述任意两个计数器的值超过限额寄存器的值时,SJA1000状态寄存器的错误状态位将置位;当计数器的值超过255时,状态寄存器的总线状态位将置位,总线关闭,本节点模块自动脱离CAN总线。当错误状态位或总线状态位发生变化时,SJA1000将立即产生错误警告中断,以便CPU采取相应的处理措施。当CAN控制器在错误消极状态处变化则产生错误消极中断。这种做法是合理的,因为一个节点模块如果经常出错,就应该自动脱离总线,免得干扰其它节点的正常通信,这也是CAN总线的一个突出优点。
       
        在节点处于总线关闭状态脱离总线时,SJA1000将置位复位请求位进入复位状态,如果没有CPU的干预来清除复位请求位,则节点将一直处于总线关闭状态。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2