CAN(Controller Area Network) 总线又称控制局域网络,最早由BOSCH 公司推出,用于汽车内部测量与执行部件之间的数据通信,已被为几种最有前途的现场总线之一 .CAN 总线采用短帧结构.非仲裁技术,具有传输速度快.可靠性高.结构简单.实时性和抗干扰能力较强等诸多优点 ,可以满足控制系统安全性.可靠性.快捷性的要求,但收发器驱动能力的使它不适合远距离数据传输及远程控制.而以太网技术成熟.通信速度快.软硬件产品丰富和外围技术支持全面,可以进行远距离通信,因此将以太网和CAN 总线进行互联,能够有效解决分布式控制系统中现场总线和上层信息管理层的互联问题,可以方便地将现场总线控制系统为基于以太网的分布式控制系统,既能满足控制网络的实时性,又能满足控制系统的分布性,极大地促进了信息从节点设备到管理层的集成.文中设计了基于,能够方便地实现以太网与现有CAN 总线网络的直接数据互联,从而达到通过上位机进行总线数据远程.总线 系统硬件设计
本设计的硬件电主要由单片机电.双通道CAN 总线接口电.以太网接口电.EEPROM 电.POE 电等电组成.主控芯片电是将CAN 协议数据包与UDP / TCP 协议数据包进行转换,并负责对以太网接口芯片和CAN 接口芯片进行控制;CAN 通信接口电主要用于采集现场仪表的数据和与主控芯片电之间的数据传递;以太网通信接口电主要负责主控芯片电与以太网之间的数据传输;EEPROM电实现CAN 总线初始化参数的写入与读取功能.
工作原理如下:当以太网接口芯片收到以太网数据后,触发单片机的中断,单片机调用中断响应程序把数据从以太网接口芯片的数据缓冲区存储到自己的内存空间,然后将数据转换成CAN 格式再通过CAN 接口芯片转发到CAN 总线网络;当CAN 总线上的节点设备需要将数据发送到以太网,就会通过CAN 总线接口芯片向单片机发出中断信号,单片机响应中断将来自CAN 总线的数据存入相应的内存空间,然后将数据拷贝至以太网接口芯片的发送缓冲区转发数据,最后由以太网接口芯片通过RJ45 插座发至以太网.
主控芯片选择的是Silicon Labs 公司的单片机C8051F340,采用12V 直流电源供电或采用以太网48V供电,使用内部看门狗单元及内部晶体振荡器.
C8051F340 是一款完全集成的混合信号片上系统型MCU ,其高速8051 微控制器内核具有流水线% 的指令执行时间为一个或两个系统时钟周期,速率最高可达48MIPS;片内调试电提供全速.非侵入式的在线系统调试(不需仿真器),使得调试更加方便,比使用仿真芯片.目标仿真头和仿真插座的仿真系统具有更优越的性能;USB 控制器支持8 个端点通道,集成收发器并具有1 KB 的USB 缓存;具有一个10 位的单端/ 差分ADC,转换速率可达200ksps,并带有模拟多复用器,数字外设方面具有16 位可编程计数器/定时器阵列,具有5 个捕捉比较模块,同时具有4 个通用16 位计时器/ 定时器和40 个耐5V 电压的端口I/O;存储器方面具有4352Byte 的数据RAM 和64KB 的FLASH 存储器;内部高速振荡器出厂时已经较准为12MHz±1. 5% ,时钟恢复电允许内部振荡器与4 倍时钟乘配合,提供全速方式USB 时钟源;具有片内上电复位.时钟丢失检测器和VDD 器,电原理图见图1.
.NXP 公司TJA1050 用做CAN 总线收发器.为了提高CAN 总线电的可靠性,在设计中采用双冗余的CAN总线结构,具体设计为:在各节点设备之间布下两条基于CAN 的系统通信总线,即用两套CAN 总线控制电分别连接到两CAN 总线通上,正常情况下在两条总线上传送相同的通信数据,当一条总线出现故障时通信数据仍然可以通过另一条正常的总线传输,不影响节点设备的正常通信,然后对故障总线重新初始化使其恢复正常投入使用,这样即使一条通信通道出现故障也不会影响整个系统的数据传输;同时考虑工业应用,在CAN 总线控制器和CAN 总线收发器之间进行隔离.
在电中将SJA1000 的AD0 ~ AD7 直接与主控芯片的低8 位地址/ 数据复用总线相连,MODE 引脚与+5V 相连使得SJA1000 工作于Intel 模式[4] , 两SJA1000 的中断输出信号分别连接至C8051F340 的端口P0. 2 和P0. 7,使得CAN 通信可以采用中断或查询两种方式工作,其中双冗余CAN 总线MHz,复位信号采用软件复位,详细电原理图见图2.
在以太网接口电中选用Silicon Labs 公司的CP2200 作为以太网控制器,采用HanRun 公司的内部集成以太网隔离变压器.灯和RJ45 插座的HR911175A 与以太网接口.CP2200 是Silicon Labs 公司推出的一款主流的8 位总线控制的以太网驱动芯片,其外围电非常简单,集成了IEEE 802. 3 以太网访问控制器( MAC ).10 BASE – T 物理层(PHY) ,完全兼容100/1000 BASE-T 网络,具有自动极性检测和纠正功能,可以自适应地工作在全双工或半双工模式,具有接收数据包中断和网络中断功能.CP2200 内部带有2K 字节的专用发送缓冲RAM和4KB 接收FIFO 缓冲RAM ,同时还具有8K 字节的内部非易失性Flash 存储器,用于存储用户.Web服务器内容,它的最后6 个存储单元是工厂预编程的唯一48 位MAC 地址 ,不需外部EEPROM .此芯片8 位并行总线接口支持Intel 和Motorola 总线 个以上端口I/ O 引脚的主处理器或微处理器增加以太网通信功能,可以使用复用或非复用方式寻址,在非复用模式下数据传输率超过30Mbps,可以直接连接LED 表示网络“连接”.“活动”状态.
在电中CP2200 采用数据地址复用模式,晶体频率为20M,CP2200 的TX.RX 引脚连接到RJ45 插座的收发针脚,同时将信号LINK.ACK 也连接到后者的LED 控制针脚上,详细电原理图见图3.
该电的作用是实现CAN 总线初始化参数的写入与读取功能, 设计中选用了512KB 的EEPROM24C512 芯片.详细电原理图见图4.
以太网供电电分别采用TI 公司的电源管理器芯片TPS 2383 和电源接口芯片TPS 2370,这2 款芯片完全符合以太网供电标准IEEE 802. 3af,利用这2 款芯片即可通过1 条标准的以太网线缆就实现同时传输电能和数据.
本设计的软件主要分为三部分: CAN-以太网协议转换程序.CAN 通信程序和以太网通信程序.软件整体的设计思为:当CAN 总线节点设备需要向以太网发送数据时,首先通过CAN 通信程序读取CAN 总线节点设备产生的CAN 协议数据包,并将其存储在CAN 总线接口发送缓冲区中,然后调用CAN-以太网协议转换程序将CAN 协议数据包解析并重新封装成TCP 或UDP 数据包,最后调用以太网通信程序将数据发送到以太网;要将数据通过以太网发送给一个CAN节点设备时,首先通过调用以太网通信程序将以太网传输层上的TCP 或UDP 数据包存储到以太网接口的发送缓冲区,然后调用以太网-CAN 协议转换程序将TCP 或UDP 数据包解析并封装成CAN 协议数据包,之后再调用CAN 通信程序将CAN 接口发送缓冲区中的数据发送到CAN 总线 CAN 通信程序
CAN 通信程序主要包括以下几部分:SJA1000 初始化程序.读写SJA1000 内部寄存器程序.CAN 数据发送程序.CAN 数据接收程序.CAN 总线冗余控制程序.
SJA1000 的初始化程序主要作用是设定总线上所有节点的地址.所有总线上节点设备的波特率.设置控制器的工作模式.设置中断寄存器.命令寄存器等相关的芯片寄存器 .CAN 数据发送程序的功能是当发送CAN 协议数据包给节点设备时,调用CAN 数据发送程序,通过将数据写入SJA1000 的数据发送寄存器中来实现数据发送.CAN 数据接收程序的功能是当SJA1000 接收到数据时,向单片机发出中断请求,单片机响应中断后调用CAN 数据接收程序读取SJA1000的内部寄存器程序,将其数据接收缓冲区中接收到的数据读取到单片机的相应存储空间内.
CAN 总线冗余控制程序的基本设计思为:在上电初始化时同时激活两个总线控制器的中断,在节点设备向上位机发送数据的情况下,单片机通过两CAN 总线向上位机发送相同内容的数据来实现冗余效果.在节点设备接收通信数据的情况下,当两个总线控制器同时接收到来自上位机的报文时,将分别通过不同的中断端口向单片机发出中断请求,单片机在响应先到达的中断请求信号后进入中断服务程序关闭中断,并在对数据进行处理完成后,清除中断并在一段延时后再打开所有中断,这样就可以屏蔽后到的另一个CAN 控制器中断信号.如果一CAN 总线接口电出现故障,那么它就不会产生中断信号,单片机只能接收到另一正常CAN 总线控制器的中断信号,从而通过正常的CAN 总线接收数据,这样就可以实现双通道冗余的目的;在节点设备与上位机之间完成数据发送和接收后,节点设备会通过两CAN 总线次的频率交替向上位机发送“心跳”信号,并接收上位机回传的响应信息,如果一CAN 总线状态异常,不能正常发送“心跳”信号,则节点设备的单片机就不会收到响应信息,从而无法对错误计数器进行清零,当错误计数器的值累加到设定值时,单片机就会对异常的CAN 总线接口电复位,重行初始化使其恢复正常,双通道CAN 总线 CAN / 以太网协议转换程序
CAN/ 以太网协议转换程序的大致流程如下:在系统接收到数据后会先对数据的数据类型进行判断,如果接收到的数据是以太网数据,就会依次去掉IP 头.TCP 或UDP 头和应用层头 ,然后将解析后的数据封装为CAN 报文格式,并存人CAN 接口电发送缓冲区,由CAN 接口电发往CAN 总线中相应的节点设备.如果接收到的数据是CAN 协议报文,便解析出数据部分,然后将报文数据部分封装成的应用层格式并存入以太网接口发送缓冲区,最后将数据封装成以太网帧格式后通过以太网接口电发往至以太网.
以太网数据的发送和接收程序:由于主控芯片C8051F340 的处理速度以及内部集成的资源有限,不可能集成所有的TCP/ IP 协议,因此需要对TCP/ IP 协议进行适当的剪裁后才能使用 .在本设计中的协议栈主要包括IP 协议.ICMP 协议.TCP 协议.ARP 协议 .
基本流程为在CP2200 芯片从以太网接收到有效数据后,单片机会调用相关程序将该数据包从CP2200 的接收缓冲区读取,然后判断该数据帧是IP 数据包还是ARP 数据 ,如果判断为接收到的是IP 数据包时,那么就继续判断是UDP 数据包还是ICMP 数据包,如果是UDP 数据包,就根据UDP 数据包首部的读取结果来处理相应数据,完成CAN 协议数据的提取并将其存储到相应的数据缓冲区,从而实现以太网数据的解码;如果判断结果是ICMP 数据包那么就处理该数据包并进一步处理IP 数据包;如果接收到的是ARP 数据,就判断其是ARP 请求还是ARP 应答并根据结果进行相应的处理,如果该数据帧既不是IP 数据包又不是ARP数据,那么就将该数据视为无效数据而抛弃,并初始化数据接收缓冲区.