基于CAN总线的状态信息检测系统设计
2015-01-13陈飞谢建
陈 飞 谢 建
(中国人民解放军第二炮兵工程大学,西安 710025)
某大型机电设备信息检测仍采用传统的检测系统体制,即各检测点位传感器信息单独传输至上位机进行处理,一台设备包含几百个传感器,汇总至上位机的信号线就有几百甚至上千根,使得整个信息检测系统复杂臃肿、可靠性差、故障排除困难。而控制器局域网CAN(Controller Area Net)作为一种全数字化、全分散、全透明、标准化、规格化的串行现场总线技术,具有可靠性高、实时性好、灵活及价格低廉等优点[1]。利用其对该大型机电设备的信息检测系统进行改制,硬件上仅需对原有的各类传感器加装CAN通信接口。但是,对于多个节点同时上传报文的情况,CAN采用的是带优先权的非破坏性逐位仲裁机制来解决总线冲突,当总线上的节点数较多时,若继续采用一般的固定优先级方式进行报文的定时自动上传,将导致节点冲突频繁,低优先级报文传输延时大为延长,特别是在某节点检测到异常信号或发生故障时,很难在第一时间被发现和定位。为解决此类问题,笔者提出循环问答和重要信息优先权抢占相结合的信息调度机制。并依据实际设备的工作特点,设计基于CAN总线的状态信息检测系统,制定了应用于系统的CAN应用层协议。
1 系统总体设计①
基于CAN总线的状态信息检测系统组成如图1所示,包括监控主机、CAN通信接口和状态信息采集节点3部分。系统采用自带CAN总线接口的STM32F103C8T6微控制器作为下位机控制单元,完成采集数据的实时处理和应用层、数据链路层的工作,各节点采用CAN总线通信。监控计算机通过CAN网络适配器对各节点进行管理,接收并处理各点位传感器采集的数据[2]。
图1 状态信息检测系统组成
2 系统硬件
2.1 微处理器选择
选择STM32F103C8T6作为下位机节点主控制器。STM32F103C8T6是中等容量的STM32产品,具有体积小、功耗低及性价比高的特点,它基于ARM的Cortex-M3内核,工作频率72MHz,具有64KByte的系统内可编程Flash、20KByte的SRAM、37个可独立编程的I/O、2个16通道12位转换精度的ADC、1个CAN接口、2个DMA控制器(DMA1有7个通道,DMA2有5个通道)和3个16位通用定时器,完全可满足本设计需要和后续扩展的要求。其本身集成的bxCAN控制器,支持CAN2.0A和2.0B协议,位通信波特率可达1Mbit/s,支持11位标准帧格式和29位扩展帧格式的接收与发送,具备3个发送邮箱和2个接收FIFO,此外还有14个可编程的过滤器组,完全符合J1939规范[3]。
2.2 信号调理电路
常用的变送器输出量都是标准电流(4~20mA)或标准电压信号(0~10V)。设计中为简化电路,采用STM32F103C8T6的片内ADC进行模数转换,而其参考电压为3.3V,因此要先把变送器的输出信号转换为0.0~3.3V范围内的电压信号,再进行模数转换。
Linear公司的LT1793放大器输入阻抗大(1013Ω),输入偏置电流很低,一般为3pA,最大为10pA,具体电路如图2、3所示,其I/V转换电路和电压衰减电路精度高、线性程度好、结构简单。
2.3 CAN总线接口电路
上位机节点由PC机进行监控,涉及CAN协议和USB协议,设计中直接利用ZLG的USBCAN-2A接口卡作为网络适配器实现上位机与CAN总线的数据交换,因此这里仅需要对下位机节点的接口电路进行设计。图4为STM32的CAN控制器与物理总线之间的接口电路。
图2 I/V转换电路
图3 电压衰减电路
图4 CAN控制器与物理总线接口电路
在接口的CAN_H和CAN_L之间连接一个120Ω的电阻R4进行总线上的阻抗匹配,减小了因长距离传输所产生的反射波干扰强度。在CAN_H和CAN_L上各自串联一个5Ω的限流电阻,可保护收发器免受过流冲击,并通过一组上拉电阻R2、R7进行阻抗匹配,从而有效抑制反射波的干扰,保持总线稳定在较高阻抗时接收端收到的始终是隐性电平。另外,在CAN_H和CAN_L与地之间并联两个瞬态二极管D1、D2,可以提高接口抗瞬变干扰的能力。设计中选用双通道数字隔离器ADuM1201芯片来隔离SN65HVD与STM32F103C8T6的电源线和地线,采用两组电源模块负责供电,很好地避免了CAN收发器和控制器之间的互相干扰,相较于传统的光电隔离器,采用ADuM1201简化了电路设计,提高了传输性能,降低了系统功耗[4]。
3 应用层协议的制定
CAN网络通信协议仅解决了数据发送、接收及错误处理等底层硬件数据传输问题,对于应用层数据并没有规定相应的解析协议,应用层协议需要使用者自定。主要需确定帧格式、总线资源的分配及报文各位域功能定义等问题。
考虑到系统的扩展性,协议采用扩展帧格式进行报文传输。总线资源的分配是指总线上各节点和各传感器地址的分配。而位域的功能定义涉及异常报警指示、异常类型的确定及应答信息的标识等。根据系统要实现正常运行时网络负载的稳定性和节点检测的可控性、有序性,当有检测量超限、突变或掉线发生时,此类重要信息能够实时通知监控节点,笔者提出了循环问答和重要信息优先权抢占相结合的调度机制,并在此基础上制定了适合本系统的应用层协议。
根据图5所示的报文标识符分配规则,划分出3种类型的系统应用帧,包括上位机向检测节点发送的数据请求帧、检测节点向上位机发送的数据响应帧、检测节点向上位机发送的异常报警帧,异常位为0(显性)是异常报警帧,应答位为1(隐性)是数据响应帧,异常位为1、应答位为0是数据请求帧。3类报文的优先级为:异常报警帧最高,数据响应帧次之,数据请求帧最低。当存在总线竞争时,优先级高的报文获得总线使用权。
图5 报文标识符分配规则
4 系统软件
4.1 下位机软件
下位机软件设计和调试采用针对各种嵌入式处理器的软件开发工具Keil MDK。它集成了μUision集成开发环境和RealView编译器,同时包含了众多的案例模板和固件实例,支持多种调试接口(如UART、JTAG及JLINK等)[5]。ST公司提供了一个完整的STM32设备固件库,该固件库包含了STM32设备所有外设的底层驱动函数,设计中直接利用这些底层函数进行应用程序的编写,可大为减小开发难度,缩短开发周期。
下位机节点的主程序流程如图6所示,配置ADC工作于DMA(存储器直接存取)模式,在该模式下ADC在每次转换结束后申请一次DMA传输,DMA随后将该转换结果传输到指定目标地址。这样就避免了普通转换模式下,由ADC不断向CPU请求中断以通知CPU转换完成,从而ADC可以不受影响地进行连续的转换工作,同时也释放了CPU的工作空间。
图6 主程序流程
各检测节点都设置了CAN接收中断和异常报警中断,如图7、8所示。验收过滤器的配置在CAN控制器初始化时完成。当上位机向CAN总线发送远程帧请求数据服务时,CAN控制器只接收标识符与验收滤波器相匹配的数据请求帧,存入接收缓冲区,同时触发CAN接收中断服务程序,将ADC转换结果打包成响应请求的数据帧,上传至CAN总线,而在主程序中设置节点故障检测函数,当检测到某传感器采样结果超限或为零时,触发异常报警中断服务程序,再次对异常进行判定,而后上传超限或者掉线异常报警帧。
图7 CAN接收中断服务
图8 异常报警中断服务
4.2 上位机监控软件
为测试各节点的通信能力并进行后续的开发,采用VC++6.0设计上位机监控软件。由于利用了USBCAN-2A作为总线接口卡,程序中仅需包含设备的动态链接库就能实现接口库函数的直接调用。监控软件实现的功能主要有通信参数的设置、远程请求的发送及数据的处理和显示等。
软件有定点手动测试和轮询自动测试两种模式[6]。图9为上位机软件运行界面。
图9 上位机软件运行界面
5 结束语
阐述了基于CAN总线的某大型机电设备状态信息检测系统的设计过程。以集成CAN控制器的STM32F103C8T6芯片为核心,配合SN65HVD高性能CAN收发器和ADuM1201隔离器简化了电路的设计,提高了接口的稳定性,适用于各类典型传感器的CAN接口改制。按监控机轮询检测和节点异常抢占优先权报警的思路设计适用于系统的应用层协议,配合监控软件,实现了多传感器的在线监测和异常的远程实时定位。
[1] 饶运涛.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2007.
[2] 赵永刚,刘晓霏,张国义,等.基于CAN总线的分布式测量系统设计[J].航天制造技术,2013,(2):62~66.
[3] 李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008.
[4] 臧春华.综合电子系统设计与研究[M].北京:北京航空航天大学出版社,2009.
[5] 张河新,王晓辉,黄晓东.基于STM32和CAN总线的智能数据采集节点设计[J].化工自动化及仪表,2012,39(1):78~80.
[6] 刘锐宁.Visual C++编程宝典[M].北京:人民邮电出版社,2011.