一种基于CAN总线的通信系统设计与实现
摘 要: 本文设计了应用于分布式控制结构的CAN总线通信系统,采用总线型拓扑结构以及分布式控制思想,在CAN控制器的链路层网络协议基础上,设计了应用层协议和传输层协议,实现批量数据透明块传输及自动错误重传,提高了数据通信的可靠性。系统已应用于微量元素检测仪器开发,运行结果表明,该通信系统工作稳定、实时性好、执行效率高。
关键词:CAN总线;总线型拓扑结构;应用层协议
控制器局域网(CAN:Controller Area Network)总线,是德国BOSCH公司首先应用于汽车内部的一种串行数据通信协议,是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维,通信速率可达1Mbps[1],由于结构简单、通信质量好,在国内外已经得到较广泛的应用,已成为工业采集领域中首选的现场总线之一。
从OSI网络模型角度出发,现场总线网络一般只实现了第1层(物理层)、第2层(数据链路层)、第7层(应用层)。而CAN现场总线仅仅定义了第1层、第2层,这两层完全由硬件实现,无需再为此开发相应软件或固件。由此,为网络中每一个有效设备提供一组有用的服务与协议,CAN应用层设计至关重要,甚至影响整个CAN通信效率的高低。在CAN应用层设计中,CANopen协议是一个通用的、开放的、标准的CAN应用层协议。在CANopen协议基础上,确定自己的产品所需要的功能,然后选择最适合自己的硬件系统。开发周期相对较长,后期验证也需要较长的时间,对协议的不同理解造成的开发的兼容性差[2]。鉴于本分析仪器硬件特点以及各模块通信的易可行性,CANopen协议相对复杂,为此设计了专门用于本仪器系统的专用CAN应用层协议。
本文设计系统采用单主方式工作,PC机作为主控,其它五个模块为从节点,主控和从节点之间通过USB-CAN板卡实现通信。从节点采用Cortex-M4为内核的
STM32F407VGT6作为主控制器,其内置CAN总线控制器,使得该节点体积小、功耗低、抗干扰性能好。
1 系统总体设计方案
该分析仪器基于分布式测量控制的思想,按照仪器各模块功能和物理位置将功能分散到主控及五个从模块。整体系统的功能由这六个子模块协同完成,这些模块均挂接在CAN通信总线上,从模块通过USB-CAN板卡作为桥梁与主控通信,通过Can控制网络连接起来构
成一个分布式处理仪器系统。
主控通过USB-CAN板卡作为桥梁与从模块进行通信。各个从模块之间也需要通信,由于某些命令需要某两个模块同步协调完成,除了CAN信号线外,还需要在某些从模块之间添加几根同步信号线,用来进行时间同步指示和数据的传送。图示系统网络总体结构。
图1 系统网络总体结构
Fig.1 System Network Architecture
2 网络拓扑结构
网络的拓扑结构是指网络中节点的互连形式,是影响网络性能的主要因素。最常用的CAN网络拓扑结构是总线型拓扑与星型拓扑。
星型结构中,网络中的每一个节点通过一个中央设备连接在一起,各节点将数据发送到中央设备,再由中央设备将数据转发到目标节点。星型网络中任何单根电缆只连接两个设备(如一个节点和一个集线器),各节点相互独立。
在星型网络中,中央设备故障会导致整个网络的瘫痪。另外,星型结构所需的线缆和配置明显多于总线型网络,但其总长度与总线型网络一样受波特率、节点数量等因素制约[3]。
在本分析仪器系统中,各节点之间都存在通信的可能,与星型网络的节点独立性原则相违背。总线型网络相对于星型网络,网络布线更简单,工作量更少。因此,本系统采用总线型网络拓扑结构设计,也可采用优化的总线型结构——菊花链型网络。
3 网络设计
本系统CAN-bus网络采用总线拓扑结构,在网络中有六个CAN-bus节点。在总线的两个终端各安装一个120欧姆终端电阻。在同一CAN-bus通信网络中所有CAN节点的通信波特率必须一致,同时计算得出的CAN通信波特率也仅是适合一个具体数值范围内的通信波特率,即意味着标称通信速率为100kbps的CAN节点一般能够与通信速率为90kbps~110kbps的CAN节点正常通信。在该网络中,CAN总线使用速率1Mbps,在实际连接时,使用屏蔽双绞线,且要求网络中的分支线小于3m,最大干线长度小于40m。
图2中示出CAN收发器是驱动CAN控制器和物理总线间的接口,总线的差动发送能力和对CAN控制器的差动接收能力都由其提供,具有抗恶劣环境的瞬间干扰、保护总线的能力,而且即使在某一节点掉电也不会影响总线。
基于CAN总线的通信系统设计
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)