柴文峰,丁学明
(上海理工大学 光电信息与计算机工程学院,上海 200093)
基于STM32单片机CAN通信控制网络设计
柴文峰,丁学明
(上海理工大学 光电信息与计算机工程学院,上海 200093)
通过分析点对点通信方式控制网络的缺陷及总线的发展状况,利用CAN总线的特点和优势,设计了基于广播方式通信控制网络。采用C#编写上位机界面做控制器,智能节点(下位机)作为执行器,根据CANKingdom应用层协议,制定节点间相互通信规则,将发送的控制命令以帧的形式进行打包,设计节点控制算法执行相应功能。文中设计的基于广播式CAN通信网络实现了对40个节点的数据通信和现场实时监控功能。
CAN总线;通信协议;上位机界面;实时监控
点对点方式通信的缺陷是只有两个设备之间进行信息交换,只有一个设备能接受到信息。 电子技术的发展使得电控系统中电子设备日益增多,这些电子设备之间大多数要求相互通信,简单的点对点式通信使得电控系统电气连接线长度和接头数增加,降低了电控系统的稳定性和可维护性。CAN总线是现场总线的一种,最早是由德国博士公司设计用来解决汽车通信问题[1]。CAN采用基于报文的通信方式,不同信息以“广播”的形式发送给所有节点。 节点本身决定对报文是否做进一步处理。新节点可以随时方便的加入现有的系统,不需要对所有节点进行重新编程来识别新的节点[2]。本文利用CAN总线的这一特点,设计出基于STM32单片机CAN通信控制网络。
CAN总线通信网络主要由智能节点,双绞线,上位机组成。上位机是用来显示节点状态,以及发送实时命令。双绞线是数据传输的通道,能抑制共模干扰。节点由连接在CAN总线上的步进电机、直流电机、灯、电表以及相关电路组成。CAN总线通信网络结构如图1所示。
图1 CAN总线通信网络结构
本文采用内嵌CAN控制器的STM3210x系列单片机,节点硬件设计避免外接CAN控制器。简化外围电路,减少系统内部噪声,另一方面CAN总线采用非破坏性总线仲裁机制,多节点同时发送数据,优先级高的节点先发送数据,减少了总线仲裁冲突时间,在多负载情况下也不至于网络瘫痪[3]。系统具有较强的稳定性。CAN总线中的数据,以数据帧的形式进行传输,当发送的校验码与接收的校验码相同时,数据才能发送成功,否则重新发送,出错率低。
智能节点主要由传感器,信号调理电路,微控制器,CAN收发器,以及外围电路等构成。其节点结构框图如图2所示。
图2 节点结构框图
CAN总线最多可连接110个智能节点,节点数由驱动电路决定。CAN总线在不关闭总线的情况下,可实现任意节点的连接或者拆除。可根据被测对象的物理特性,改变测试节点前段传感器类型和信号调理电路便可以使用不同类型的物理量的测试。根据被测对象的物理特性,设计信号调理电路的放大倍数和滤波特性,然后将采集的信号发送给微处理器,A/D转换,并将转换的数据发给微处理器内的CAN控制器,在CAN控制器的作用下将采集到的数据发给CAN总线。
CAN表达一个信号,使用的是两条差分信号线。简洁的物理层决定了CAN需要一个复杂的协议[4]。
CAN总线上的数据主要以帧的形式进行通信的。在原始数据段的前面加上传输的起始标签,片选标签,控制标签,在数据段的末尾加上CRC校验标签,应答标签和传输结束标签。这些内容以特定的格式打包好,便可用一个通道表达各种信号。这个数据包被传送到其他设备,只要按这些设备的格式去解读,便可读出原来数据。这个数据包称为CAN的数据帧主要形式。CAN的数据帧的格式如表1所示。
表1 CAN数据帧结构
CAN规定了5种类型的帧[5]。数据帧是用于发送单元向接受单元传输数据的帧,遥控帧用于接受单元向具有相同ID的发送单元请求数据的帧,错误帧用于检查错误时向其他单元通知错误的帧,过载帧用于接收单元通知其尚未做好接收准备的帧,帧间隔用于将数据帧和遥控帧与前面帧分离开来的帧[6]。
节点的软件设计主要包括3个部分CAN节点初始化程序,报文发送程序,报文接受程序。本文中系统采用结构化程序设计,使其具有较好的模块性和可移植性,可较方便的编程重组,应用到不同的环境[7-8]。
3.1 初始化程序
初始化程序设置主要包括工作方式的设置,接受滤波方式的设置,接受屏蔽寄存器设置,接受代寄存器的设置,波特率参数的设置和中断寄存器的设置。考虑系统中40个节点进行通信,设置低波特率以保证节点间通信正常。波特率设置
CANbps=Fpclk/bpr*(seg1+seg2+sjw)
本文设计取Fpclk bpr seg1 seg2 sjw分别为36M9781。波特率值设置为250 kHz。
3.2 报文的发送
程序初始化完毕后,将报文的几个重要成员 定义一个结构体内。然后将报文的帧类型,,发送报文的格式,控制段的长度及数据段的内容按照协议规范进行函数打包。发送缓冲器不为空时执行别的程序,发送缓冲器为空时,调用库函数CAN_Transmit()将打包好的报文发送到CAN通信网络中。当多个报文同时发送时,CAN总线仲裁机制会依据帧ID对应位进行仲裁,显性位优先发送,隐性位进入发送等待。发送请方式即可用中断方式,也可用查询方式。发送程序的算法设计如图3所示。
图3 底层报文发送程序算法设计
3.3 报文的接收
报文的接受是CAN控制器依据议的规范自身进行的,当接受相应标志位置位,进入接受中断程序。接受缓冲器不为空时执行别的程序,接受缓冲器为空时,调用CAN_Recieve(CAN1CAN_FIFO0,&RxMesaages)函数进行接收。接受的报文被放在RXBuffer中。然后进行CRC校验,判断接受是否成功。接受成功时,当帧的ID与需要处理该帧数据的CAN节点地址相同时,根据报文的内容,执行该节点动作。接受报文的程序算法设计,如图4所示。
接受程序即可采用查询方式接受,也可采用中断的方式接受。采用查询方式接受,主要通过不断查询相关寄存器的状态来实现帧的接受。采用中断方式接受,当接受相应标志位置位,进入接受中断程序,准确度高,本文采用中断接受方式。
图4 底层报文接受程序算法设计
3.4 上位机界面程序设计
本文用C#语言编写上位机界面,用CAN卡连接上位机和下位机通信,实现上位机与节点间数据通信以及对节点状态实时监控[9-13]。上位机界面设计主要包括系统设置和查询入库两个模块。
系统设置包括参数上传设置,节点管理设置,CAN参数设置。上传参数设置,用来更新和存储下位机节点数据。节点管理设置用来更新保存节点状态。CAN参数设置用来设置端口号及其波特率[14-15]。
查询入库完成上位机与下位机之间通信,将采集到得节点状态信息保存在数据库中,并在上位机上显示。启动软件后,系统会自动查询下位机节点的状态[16],将查询的结果在上位机上显示。查询入库控制算法主流程图如图5所示。
图5 查询入库模块主流程图
采用多线程查询方式,通过不同路径来查询节点状态,提高查询速率。多线程查询算法设计如图6所示。
图6 多线程查询算法流程图
上位机界面主要实现对10个步进电机控制,10个直流电机控制,10个LED(开关量)控制,10电表控制及对这40个节点的状态显示。通讯正常显示绿灯,通讯错误显示红灯,上位机界面,如图7所示。
图7 上位机界面
程序启动后,系统进入查询主界面,自动运行查询入库模块,该模块通过CAN卡将CAN总线各个节点的状态信息处理存储在数据库中,并将各个节点的状态在上位机上显示。采用多线程查询方式能实时准确显示控制节点的状态信息及迅速的发送控制命令。点击节点控制任务栏步进电机控制,直流电机控制,电表控制,LED控制,弹出图7~图10窗口然后对应节点进行控制。
图8 步进电机控制窗口
图9 直流电机控制窗口
图10 电表控制窗口
图11 LED控制窗口
本文实现基于广播方式CAN总线通信控制网络络,实现对连接在CAN总线上40个节点实时控制及状态监控。CAN报文不包含地址信息,是否接受报文
由接受节点决定,因此本文设计的CAN通信网络具有很好的拓展性,可拓展应用于工业控制、工程机械、安防监控等领域。
[1] 张培仁.CAN总线设计与分布式控制[M].北京:清华大学出版社,2011.
[2] 刘火良,杨森.STM32库开发实战指南[M].北京:机械工业出版社,2013.
[3] 周立功.项目驱动:CAN-bus现场总线基础教程[M].北京:北京航空航天大学出版社,2012.
[4] 龙志强.CAN总线技术与应用系统设计[M].北京:机械工业出版社,2013.
[5] 牛跃听,周立功,穆希辉,等.CAN总线应用层协议实例解析[M].北京:北京航空航天大学出版社,2014.
[6] 张培仁,杜洪亮.CAN现场总线监控系统原理和应用设计[M].合肥:中国科学技术大学出版社,2011.
[7] 耿肇英,周真真,耿燚.C#应用程序设计教程[M].2版.北京:人民邮电出版社,2010.
[8] 张立.C#程序设计编程经典[M].北京:清华大学出版社,2008.
[9] 杨春杰,王曙光,亢红波.CAN总线技术[M].北京:北京航空航天大学出版社,2010.
[10] 王黎明,夏立,邵英,等.CAN现场总线系统的设计与应用[M].北京:电子工业出版社,2008.
[11] 杜尚丰,曹晓钟,徐津,等.CAN总线测控技术及应用[M].北京:电子工业出版社,2007.
[12] 杨建义.基于Visual Basic与RS232串行通信的温度监测系统[J].电子测试,2007(12):47-50.
[13] 姜拓,张剑平.基于C#的数据采集系统上位机软件设计与实现[J].电子测试,2009(9):58-61.
[14] 刘师良,李长青.基于CAN总线的煤矿监控系统工作站的研究[J].工矿自动化,2009(1):66-69.
[15] 王坚峰,张任,严海.基于CAN总线的温室环境控制系统[J].轻工机械,2009,27(1):69-72.
[16] 王岩,张福恩.基于CAN总线的智能测控节点的设计[J].电子器件,2000,23(4):267-270.
Design of CAN Communication Control Network Based On STM32 MCU
CHAI Wenfeng,DING Xueming
(School of Optical-Electrical and Computer Engineering,University of Shanghai for Science and Technology,Shanghai 20093, China)
Through analyzing the defects of the point-to-point communication mode control network and the development of the field bus and taking the advantages of the CAN bus and its characteristic designed the communication control network based on the broadcast mode.Using the C# to prepare the PC interface (the controller), Intelligent node (lower computer) as actuator communication ,based on the CANKingdom application layer protocol,made the node communication rules, then send the control command to the frame in the form of packaging design and design node control algorithm executes the corresponding function. The design of a broadcast based CAN communication network achieve the 40 nodes of the data communication and real-time monitoring of the scene in this paper.
CAN bus; communication protocol; pc interface; real-time monitoring
2016- 04- 10
柴文峰(1990-),男,硕士研究生。研究方向:CAN通信网络设计。丁学明(1971-),男,副教授。研究方向:电机控制等。
10.16180/j.cnki.issn1007-7820.2017.03.039
TN915.04;TP368.1
A
1007-7820(2017)03-142-04