基于CAN总线的轮询通信系统设计
2019-08-13王高高王伟伟
王高高 王伟伟
摘 要:针对传统CAN总线通信系统基于仲裁发送机制所存在的通信通道易堵塞、实时性、可靠性差问题,设计了CAN总线节点轮询通信系统。系统CAN总线通信机制为采用主从控制下的节点轮询方式。最后,通过实验完成了CAN轮询通信测试,结果表明,CAN通信实时性高,整机运行稳定、可靠。
关键词:CAN总线;节点轮询;STM32
中图分类号:TP393.1 文献标识码:A
Design of Polling Communication System Based on CAN Bus
WANG Gao-gao1 WANG wei-wei2
(1. Fengtai County Power Supply Co.,State Grid Anhui Electric Power Co.,Ltd.,Huainan,Anhui 232100,China;
2. The First Construction Co.,Ltd. of China Construction First Group,Hefei,Anhui 230031,China)
Abstract:Aiming at the problems of communication channel blockage,poor real-time and low reliability for traditional communication system of CAN bus based on arbitration transmission mechanism,a CAN bus node-polling communication system is designed. The communication mechanism of the system adopts node-polling of CAN bus under master-slave control. Finally,the CAN polling communication test is completed through the experiment. The results show that the CAN communication has a high real-time performance and the whole machine runs stably and reliably.
Key words:CAN bus;node polling;STM32
隨着社会经济发展,人们对多机通信的实时性、可靠性提出了更高的要求。相应的,总线通信技术也紧跟应用需求,得到了前所未有的发展[1,2]。
当前在多机通信领域,常用的控制方式为并行集中式和串行分布式两种架构,其中传统并行集中式通信系统为对主控制器引出多条并行式信号线,实现单个主控制器对多台从机运行的控制,这种控制模式通常存在信号线走线占体积大、整机同步性能差、易受干扰、扩展维护困难等一系列问题[3,4]。基于串行总线的多机通信系统,如CAN总线的应用,系统整体性能相对于并行集中式有很大的提升,通信线路少、整机结构简约、扩展能力强。然而,现行基于串行总线的多机同步通信、控制仍存在实时性、可靠性差等问题[5~7]。系统整机通信机制所存在的缺陷,严重阻碍了多机控制系统的发展与应用。针对上述多机通信技术层面与实际应用所存在的问题,本文给出了基于CAN总线的多机轮询控制系统,系统采用CAN总线实时通信算法,实现对多机运行的实时、同步控制。
1 系统架构
CAN总线轮询通信架构图如图1所示。
系统架构主要包括主节点,CAN总线,子节点。对系统进行调试时,上位机与主节点之间通过PL2303串口通信电路实现通信。
系统的总体功能为实现多机实时、可靠控制,系统的具体功能为:主节点接收上位机发来的控制命令,并通过CAN总线将控制命令发送至CAN网络;子节点接收到主节点发来的控制命令,并执行,子节点根据接受报文类型(为广播控制报文时),可回传响应报文;子节点能够通过反馈报文将本地微控制器运行信息反馈给主节点,主节点再将信息传输至上位机。
2 系统控制方法
2.1 CAN时钟同步、节点轮询方法
基本CAN总线通过优先级仲裁实现通信,当总线上有多个节点需要同时发送报文时,标识符小的报文能够赢得总线发送权,标识符较大的将竞争失败。在极端情况下,如果某个节点总是仲裁失败,那么会直接导致通信通道堵塞及发送大延迟[8~10]。
CAN总线时钟同步通信定义了Level1和Level2两个级别的时钟同步方式[11~14]。其中,在Level1模式下,各子节点收到主节点周期性发送至总线的参考消息后,重启本地时钟,使系统时间保持同步。
时钟同步下的节点轮询CAN通信系统网络中维护着一个系统信息调度矩阵,信息矩阵的每行内包括独占、仲裁和空置三种类型的窗口:所有的独占窗口都被分配给系统的节点,某个独占窗口只能对应一个CAN节点,该节点在这个独占窗口内发送报文时,不需要进行优先级仲裁,发送时,禁用报文重发功能;仲裁窗口为系统所有节点提供了一个平等竞争总线的平台,在这个窗口内,通过优先级仲裁的节点可以进行报文发送;空置窗口为备用拓展。
本文系统要求能够实现主节点对四个子节点的实时、同步控制,生成的信息矩阵共有两行,如图2所示。
以信息矩阵作为系统通信调度的根据,系统在通信时需要进行系统信息矩阵循环扫描、窗口定位、报文传输三个过程。矩阵的一行是一个基本扫描周期,在每个基本扫描周期的开始,主节点作为时钟参考点先发送一个全局广播参考消息。
合理的规划基本扫描周期的长度,基本扫描周期太短,在总轮询节点数不变的情况下,主节点频繁发送参考消息,导致总的轮询时间变长,会影响通信的实时性;基本扫描周期太长,参考消息发送次数太少,则有可能导致系统时钟失去同步。
考虑到标准数据帧的帧格式,帧间隔(3位)及CAN总线的位填充机制,按bit计算出标准数据帧单帧传输取整后的帧长Bl为(b为数据域字节数量):
一个通信窗口的时长Ts的取值范围为:
其中Tb为传输一个bit耗费的时长,Tc为一个基本扫描周期的时间长度。
对于数据域填充为8个字节的标准数据帧,若通信的波特率设为250 kbps时,那么一个通信窗口的时长至少应设为0.52 ms,结合CAN时钟同步通信规范和系统调度延时,将Ts设为4ms,Tc设为20 ms。
在每个基本扫描周期内,通过主节点参考消息实现系统时钟同步,主节点与子节点实现时钟同步的具体方式为:主节点发送参考消息后使能本地时钟TIMER2;各子节点接收到主节点发来的参考消息后,提取报文信息,解读其中包含的同步标志和行信息,然后使能本地定时器TIMER2。
系统实现时钟同步后,各个节点依次按照信息矩阵的分布进行通信,实现轮询。系统节点通信实现轮询的具体方法为各个节点依照本地定时器产生的时钟实时判断本节点是否已经进入自己的独占窗口,并严格控制它可进入发送状态的时长Ts,并且,在发送模式下,关闭自动重发功能。
如果节点未处于信息矩阵规定的发送时段内,则保持为报文接收模式。接收模式下,各个节点通过滤波器过滤的方式有选择性的接收CAN总线上的报文。因此,基于时钟同步下的节点轮询CAN通信遵从时域正交原则,各节点的报文发送都按信息矩阵的调度进行,实现了对CAN总线的时分多路复用。
系统主节点CAN通信程序框图如图3所示。在对系统所有节点时钟完成同步后,将各节点本地时钟设定为每1ms发生定时中断,中断处理函数对中断次数(counter)进行累加刷新。通过扫描counter来判断系统当前处于信息矩阵的哪个通信窗口,并对窗口的时长进行控制。
子节点CAN通信程序框图如图4所示(这里给出子节点1的)。
2.2 通信协议自定义
使用标识符长度为11位的标准数据帧足以满足系统数据传输的需要。本文系统CAN总线通信的实现需要进行应用层功能的个性化设置。
报文标识符bit分配如表1所示。将11个bit划分为3部分:占3个bit的功能位、占4个bit的发送节点编号和占4个bit的接收节点编号/特殊编号。标识符设定的原则是:11位的高7位不能均为1;各类型报文标识符唯一,不产生冲突;具有标识作用,即标识符具有指代功能。
功能位的具体内容设置如表2所示。
主节点给子节点发送的控制报文包括广播和点对点两种形式,广播通信时所有子节点均可接收主节点发送的报文,且子节点在收到報文后需做出应答,点对点通信为在某一时间段内主节点只和某个子节点进行通信(子节点无需应答)。
节点编号设置如表3所示。
节点编号设置须考虑到节点通信、控制的重要性及优先级要求,对各个节点依次进行编号和排序。特殊编号是各个子节点设置全局消息及广播控制滤波器的依据(这里需要用到0x00、0x01两个特殊编号,要实现多种方式的一点对多点的广播通信,可继续扩展特殊编号)。
数据域是整个报文最主要的构成之一,它包含报文所要传输的重要控制信息(最多存放8字节的信息)。按数据域所携带的数据内容,可将数据帧分为如下五种类型,如表4所示。
3 系统硬件
3.1 主/子节点微控制器电路
微控制器电路芯片使用基于Cortex-M3内核的32位单片机STM32F103ZET6,该单片机时钟频率高达72 MHz,多达11个定时器;支持嵌套矢量中断控制器(NVIC),可实现极短的中断处理延迟,最大限度的减少进入中断时系统的资源占用量,提高处理中断的速度;支持外部中断/事件控制器(EXTI),对应的边沿检测器可实现输入信号的上升沿、下降沿的检测。
3.2 PL2303串口通信电路
主节点与上位机之间使用一个PL2303串口通信电路来实现通信。PL2303芯片,兼容USB 2.0规范,支持串行全双工发送(TXD)和接收(RXD),传输的数据可为5~8个数据位,传输波特率范围75bps~6Mbps。使用串口通信电路能够将上位机发来的数据转换为标准的单片机TTL电平;又能将主节点发来的串行格式的数据转变为USB的信息流格式,发给上位机。
3.3 CAN通信电路
CAN收发器使用的是SN65HVD230,CAN通信电路图如图5所示。收发器的8号脚通过0Ω电阻接地,使收发器工作于全速状态。
4 系统软件
4.1 主节点软件
主节点软件使用MDK编写,程序框图如图6所示。
主节点软件功能设计为:同步系统时钟;在对系统进行上位机环境下的调试时,接收PC串口数据,提取数据中的控制信息,按照信息矩阵时序以报文的形式,将各个子节点的控制命令发送至CAN总线;接收子节点状态反馈及回传的命令执行确认报文,通过串口,以数据流的形式将接收到的子节点的信息发送至上位机。
4.2 子节点软件
子节点软件的首要功能是实现报文的接收,并根据接收到的报文类型,可选择给主节点回传一个响应报文(接收到广播报文时);子节点运行异常时,子节点按照信息矩阵调度要求,将状态以反馈报文的形式发给主节点。子节点程序框图如图7所示。
5 系统测试与结果分析
为了验证系统CAN节点轮询通信方法的实时性及可靠性,通过EmbededDebug软件实现系统在上位机环境下的运行测试。测试时,使用USB/CAN adapter替代主节点与4个子节点组成CAN网络,并将USB/CAN adapter连接至PC机,按照本文提出的CAN实时通信方法时序要求,设置报文信息和发送延时。实现对自定义CAN报文、时序在PC机环境下的收、发测试,从而实现各种数据的监控与比较。
按照信息矩阵调度要求,设定USB/CAN adapter在一个完整轮询周期内发送5次报文,软件的循环发送间隔设为16 ms,CAN通信波特率设为500Kbps,启用定时发送功能。EmbededDebug软件监测到的数據收、发状态如图8所示。
图8中标识符为0x10的报文为参考消息,参考消息中,Data0为时钟同步标志,Data1为信息矩阵行定位标志;标识符为0x111的报文为广播控制报文;标识符为0x212、0x213的报文为点对点控制报文;标识符为0x421~0x451的报文为响应报文。
数字示波器监测到CAN总线上的信号传输波形如图9、10所示(这里给出标识符为0x213及标识符为0x421的报文的波形)。
连续收发测试结果表明,系统通信正常、工作可靠,实现了CAN总线多个节点在上位机环境下以自定义报文的轮询通信,即整个系统具有传输实时性高、可靠性好、抗干扰能力强的特点,整机测试结果表明,系统达到了预期的设计目标。
6 结 论
基于CAN总线的轮询通信系统作为应对多机主从控制的理想选择,整机具有扩展方便、工作可靠、运行灵活等优点,克服了目前常用的并行集中式多机控制的缺陷、传统分布式串行总线控制的不足等问题,提高了多机通信的实时性和可靠性。
参考文献
[1] 王邦继,刘庆想,李相强,等. CAN总线应用层协议的研究与实现[J]. 计算机工程与应用,2011,47(20):14—16.
[2] 李晓静,张侃谕. 基于CAN总线的温室群控系统设计与实现[J]. 计算机工程,2010,36(1):245—247.
[3] XIA J,ZHANG C,BAI R,et al. Real-time and reliability analysis of time-triggered CAN-bus[J]. 中国航空学报:英文版,2013, 26(1):171—178.
[4] 刘涛. 基于CAN总线的多电机协调运动控制系统研究[J]. 机床与液压,2010,38(3):75—77.
[5] LUO X,LIU Y,YU Y,et al. Dynamic bus dispatching using multiple types of real-time information[J]. Transport Metrica B,2018(2):1—27.
[6] 吴杰长,苏攀,郝佳. TTCAN总线应用于船舶机舱自动化系统的实时性建模仿真及优化[J]. 中国造船,2015(1):203—209.
[7] 王宁,黄梅,马添翼,等. 基于CAN总线的微电网监控系统设计[J]. 电测与仪表,2011,48(5):37—40.
[8] 蒋俊祁. 基于嵌入式的分布式电源节能控制系统的设计与实现[J]. 现代电子技术,2017,40(6):88—92.
[9] 王宁,黄梅,马添翼,等. 基于CAN总线的微电网监控系统设计[J]. 电测与仪表,2011,48(5):37—40.
[10] 吴桂清. 基于STM32F207与CAN总线的车载监测系统设计[J]. 电源技术,2015,39(2):407—409.
[11] 刘向明,方建安. CAN总线网络的实时性研究和改进[J]. 现代电子技术,2011,34(22):46—49.
[12] 陈园,赵转萍. 基于CAN总线的航空电缆测试系统分布机研究[J]. 现代电子技术,2011,34(6):25—27.
[13] MARCHCHETTI M,STABILI D. Anomaly detection of CAN bus messages through analysis of ID sequences[C] Intelligent Vehicles Symposium. IEEE,2017:1577— 1583.
[14] 强明辉. 基于CAN总线多轴伺服控制系统的研究与应用[J]. 电气传动,2016,46(2):60—64.