CAN总线数据通讯功能设计
2022-07-08高碧松
高碧松
(冠捷显示科技(厦门)有限公司 福建省厦门市 361111)
CAN(Controller Area Ntework)即控制器局域网络,最初是由德国的BOSCH公司为汽车监测、控制系统而设计的。现代汽车越来越多采用电子装置控制,如发动机的定时、注油控制、加速、刹车、自动泊车、倒车雷达及复杂的制动防抱死系统(ABS)等。这些电子装置的控制需实时检测及交换大量的数据,仅使用传统点对点的连接方式来实现子系统之间的随机通信,不但繁琐、昂贵,且难以解决问题。采用CAN总线上述问题就能得以很好的解决。因为CAN总线为多主站总线,各节点可在任意时刻向网络上的其他节点发送信息,不分主次,通信灵活;采用短帧结构,数据传输时间短,最大传输数率可达1Mbps(通信距离小于40m)。CAN总线技术由于高性能、高可靠性及其独特的设计备受人们的重视,经过十几年的发展,该技术已成为所有车载电子控制系统互联、互通的标准,广泛应用于汽车电子监测系统。本文就CAN总线通信接口的硬件和软件设计分别进行介绍。
1 方案的实现
电路主要由四个部分构成:微控制器、独立CAN通信控制器、CAN总线收发器、高速光耦。如图1所示。
图1:控制器与收发器的连接图示例
微控制器负责CAN通信控制器的初始化。CAN通信控制器有发送和接收两端,它能够同时读写总线,这个功能对于错误检测与总线仲裁都很重要,因此通过控制CAN通信控制器实现数据的接收和发送通讯任务。
CAN通信控制器要通过CAN总线收发器上的线驱动器和总线接口进行总线的读写,总线是通过典型的双绞线传输差分电压信号,处理CAN总线两端的节点应设置跨接在两根双绞线间的终端匹配电阻。
常用的CAN总线分为:单线CAN、低速容错CAN、高速CAN。这三种总线的区别主要在物理层面上。而以传输介质和线的数量来论——单线CAN只有一条导线,低速容错CAN和高速CAN通过双绞线传输。
单线CAN常用的有MC33897系列的收发器。该系列收发器提供了在单线介质上,实现了以通信为目的物理层,该物理层使用载波监听多路存储/冲突检测操作。MC33897系列收发器,由12V的车载系统等宽范围的直流电源供电。它能正常工作的数据传输率范围是33.33kbps-83.33kbps。它具有高压唤醒特性,用于支持单片机或者其他逻辑需求。该设备有一个控制终端,它用于控制模块调整器进入睡眠状态。当总线上出现唤醒电压时,将重新激活控制线路,打开调节器和系统。
低速容错CAN常用TJA1054A收发器。该收发器用于控制协议和控制局域网之间的接口,其最开始的目的适配乘用车上的125kbps数据传输率的低速应用。该设备具备差分接收和传输的能力,且当发送或者接收传输出错的情况下,自动转换成单线传输。它的数据传输最高可达125kbps,总线上最多能挂载32个节点。
高速CAN常用TJA1040A收发器。该收发器的目标主要是用于数据传输速度达到1Mbps的高速应用。该设备具备差分接收和传输的能力,与ISO11891标准完全兼容。在同一高速CAN网段中,可同时挂载110个节点。
高速CAN同样可以使用低速CAN的波特率(单线CAN的波特率一般为33.3KHz),而且在实际应用中也不会有问题。但低速CAN使用高速CAN的波特率就会出现问题,这个问题不是纯粹由波特率引起的,而是由收发器引起的,因为在电平转换效率方面,低速CAN的收发器明显比高速CAN的收发器低。
CAN总线的这些物理特性直接反映在收发器上。无论是哪种CAN总线,经过收发器后与微控制器的接口(TXD和RXD引脚)都是一样的,这时的电平逻辑也会变得一致。现在有很多单片机内部集成了CAN模块,还有各种收发器可以方便的转换,CAN总线的应用更多地变成了上层协议的事情。
它们的位传输时序、位仲裁、错误、校验、帧结构等等(即所谓的数据链路层),数据链路层以上的诸如传送层、网络层、会话层、应用层等的协议,都是人为规定的,这些都不是它们的区别。如CAN报文帧的结构定义如图2所示。
图2:CAN报文帧结构
CAN收发器的首要功能是提供像ISO11898标准描述的CAN物理层。在TJA1041中该功能是用一些相应数量的模式fail-safe特性和诊断特性来完成,它增强了系统可靠性和高级电源管理功能。
Tx:传输数据输入。
Rx:从总线上读取的数据输出。
SETB:标准控制输入。
Err:错误和上电指示输出。
TJA1041能在五种模式下工作,每种模式都带有一种特性。由SETB和Err两个值的组合来决定。可以通过Err来访问诊断标识、可行性等来进行模式间的改变。其通信方式如图3- TJA1041T与主IC的连接示意图。
图3:TJA1041T与主IC的连接示意图
2 CAN数据通信接口的硬件设计
采用MC9S12DP256B作为系统中的CAN总线节点的微处理器,TJA1041A为标准的高速CAN收发器。
2.1 MC9S12DP256B
MC9S12DP256B属MC9S12D系列单片机。它是基于16位HCS12CPU及0.25nm制造工艺的高速、高性能5.0V FLASH微控制器。总线频率25MHz,有丰富的I/O模块和工业控制专用的通信模块,如:112PIN封装的有91个I/O口,通信模块有SCI、I2C、CAN、J1850,且片内有5个CAN模块等。
2.2 TJA1041A
TJA1041A是以ISO11898为标准的高速CAN收发器,同一网络中允许挂接110多个节点。当CAN总线传输距离不大于40m时,其数据传输率最高可达1Mbps;即使传输距离达到10km,CAN的数据传输率仍然可以达到50Kbps。包括CRC校验在内的五种错误类型及错误界定的检定特性也增强了总线的抗电磁干扰能力,这些特性使得CAN在实际应用中比RS232、USB及RS485的传输距离更远,实时控制更容易实现。
2.3 电路设计
完整的CAN总线设备由CAN控制器(MC9S12DP256)、总线收发器(TJA1041A)和相应的隔离电路(HCPL-2631)组成,如图4所示。发送数据时,MC9S12DP256通过TXD和STB发送数据及控制信号送到HCPL-2631(高速光耦合器,输入与输出之间的转换装置)进行电信号-光信号-电信号号转换并输送到TJA1041T。在总线收发器与CAN控制器之间引入HCPL-2631进行系统隔离,可以保护CAN控制器(即MCU)不受CAN总线上干扰信号的影响,在光耦两侧的电路互不干扰,实现两个节点的电气隔离,各自独立工作的目标。
图4:CAN控制器、光耦及收发器的硬件连接图
TJA1041T CAN收发器内部的CANH、CANL分别为开源、开漏输出形式。因为CANH、CANL内部的两个开源电路构成具备相减的功能,基于这个特性,来自外部的共模干扰可以被有效消除。因为CANH、CANL两者并不是理想对称,所以快速的上升沿出现,会在两条线中产生共模干扰。为了消除共模干扰在CAN总线上加ACT45R共模电感,这样的设计不但可以使信号线上的共模可以被滤除,而且还可以使信号线被抑制,产生的电磁干扰不会被往外发出。
因为高频信号波长较短,当该信号在传输线上传输时,容易在传输线的终端产生反射波,使得原信号被严重干扰。所以,为了达到传输线终端不形成反射波的目的,设计电路过程中,通常会考虑把终端电阻加在传输线末端。因此,在CANH和CANL的总线上分别加入一个60欧的电阻。
具体硬件控制操作如下:给测试设备提供12V电压,在常规模式下,通过MCU CAN模块通过TJA1041T收发器往总线上发送CANID为0x100的报文,那么CAN总线就开始它的通信。接着使用示波器测量CAN总线上超过20bit的信号。从波形图上,我们就可以看到差分信号线上,信号的显性和隐性位的电压时间;差分信号线对上的表示一个具体值时的显示方式等等。如图5所示。
图5:高速CAN差分信号波形图
3 CAN总线控制软件设计
3.1 CAN初始化操作
CAN总线使用前须创建CAN控制器所需要的软硬件资源,并进行引脚配置等。在CAN模块的初始化模式过程中,如果有发送或者接收数据正在进行中,那么这些操作不仅会马上被中止,同时还会丢失总线的同步,甚至还可能会违反CAN协议。因此,为了防止违反协议的严重后果在CAN总线系统中出现, TXCAN管脚将被MSCAN驱动,进入隐性状态。必须在设置CANCTL0寄存器的INITRQ位前,让MSCAN进入睡眠模式,也就是把SLPRQ设置为1,SLPAK设置为1。一旦停止MSCAN,用户仍然可以访问接口寄存器。CANCTL0、CANRFLG、CANRIER寄存器将被这种模式复位成默认值。因为MSCAN内部有着独立的时钟域,有特殊握手机制被INITRQ用来与所有时钟同步。
3.2 CAN报文的发送
MSCAN具有三重发送缓冲器,其发送顺序由本地优先级字段(PRIO)来决定。为了优化CAN总线的实时性能,系统允许多条报文在MSCAN三重发送缓冲器机制下被提前建立。在发送报文时,必须检查发送数据的准确性、总线时钟是否同步。如果上述两项都通过,可用的发送缓冲器就会被CPU所确定,它们由置位的发送器缓冲器(TXEx)被清零来表示。如果CPU确定的发送缓冲器是可以被使用的,那么必须把它写入CANTBSEL寄存器中,这样才能给该缓冲器设置一个指针。最终,才能使各自的缓冲器访问CANTXFG的内部地址空间。然后,这些数据内容、标识符和控制位将会被CPU保存到已经被CPU确定的、可以用的发送缓冲器中,并把相关的TXE标志位清零,同时把缓冲器设置为发送准备就绪状态。
最终,MSCAN把待发送的报文准备好,并把发送缓冲器地址赋给CANXFLG寄存器,用于触发发送中断,并且让缓冲器的内容被应用软件重新加载。当发送成功后,通过设置相关TXE标志,通知缓冲器成功发送。
3.3 CAN报文的接收
接收时,有效RxBG被写入报文,同时该报文会被检查:确认是否能够通过过滤器。如果有效报文能够被CAN控制器成功接收到,那么RxBG寄存器中的内容将被MSCAN转移到FIFO(报文缓冲器)。MSCAN模块收到的报文被保存在5级输入FIFO中,当EOF符号被接收到后,RXF标志就立即被设置,同时向CPU生成并发送一个接收中断。如果有多条报文已经在接收器FIFO中,那么一旦前景缓冲器中再被移入新报文,RXF标志立即就被设置。
用户的接收处理程序:收到的报文必须先从RxFG被读取,然后是RXF标志被复位,然后才是中断、释放前景缓冲器被确认。在某些情况下,系统将会把紧跟CAN帧的IFS字段后的新报文,接收到下一个可用RxBG寄存器中。
如果无效报文(错误标识符、发送错误等)一旦被MSCAN的RxGB接收到,下一条报文将会被接收并覆盖掉寄存器中的当前无效报文。而无效报文将不会被从RxGB寄存器转移到FIFO。
4 结束语
在这篇文章中,主要介绍了CAN总线通信的软件和硬件设计。在硬件方案设计中,采用MC9S12DP256型号的飞思卡尔单片机作为控制器,结合TJA1041A作为CAN总线独立的收发器,两者相互配合,构成嵌入式系统实时通信的智能节点,保证控制局域网络(CAN)工作的稳定性、可靠性和实时性;在硬件系统中的控制器和收发器之间的通信线路上进行了光电隔离,提高了系统的安全性和可靠性。该嵌入式系统能够在医疗、汽车、农业、工厂等许多场合应用,其应用范围广,推广价值高。