丁忠林,刘尧猛,于秀丽
(天津科技大学 计算机科学与信息工程学院,天津 300222)
现场总线控制系统 FCS(Fieldbus Control System)是一种非常典型的实现分布式网络控制的总线结构。它将工业控制现场大量的传感器、电子控制单元和执行机构等装置互连,实现高准确性、快实时性的控制。CAN(Controller Area Network)总线属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的多主串行总线,能将挂接在其上作为网络节点的智能设备连接成网络系统,并进一步构成自动化系统,实现控制的目的。CAN 总线通信具有速度快 (最高可达1 Mb/s)、传输距离长(最远可达10 km)和干扰小等特点,被认为是最有前途的现场总线之一,被广泛应用于交通工具、智能楼宇、医疗仪器和工业现场控制等领域中[1]。
CAN总线网络的拓扑结构是多个智能装置节点分别连接在总线上构成局域网,进行信息传递用以实现实时控制。设备控制器连接到CAN总线主要是通过CAN控制器和CAN驱动器。CAN控制器主要分为两大类:一类直接集成在微控制器(MCU)上,即用于控制的 MCU本身具有用于CAN总线通信的模块;另一类则是独立可编程CAN控制器芯片。前者不需另外扩展CAN口,集成度较高,但价格较昂贵;后者配置灵活,MCU的选择范围不受限制,独立的CAN控制器功能也更加完善。CAN总线驱动器提供了CAN总线控制器与物理总线之间的接口,是影响系统网络性能的关键因素之一[2]。本文设计了以AT91RM9200微处理器为核心、以MCP2510为CAN控制器和以PCA82C250为总线驱动器的CAN通信节点,并应用于电梯控制系统中,提高了系统实时响应和抗干扰能力。
电梯控制系统的结构示意图如图1所示。对于一个单梯系统,主要包括外呼控制器、内选控制器和主控制器。外呼控制器分布于大楼各层电梯间内,主要负责收集和向主控制器传送乘客目的楼层的方向 (上行或下行)信息,还负责显示目的楼层方向和当前电梯所在楼层等信息。内选控制器位于电梯轿厢内,主要负责收集和向主控制器传送乘客目的楼层号(要去第几层)信息,还负责显示轿厢内所有乘客的目的楼层号和当前电梯所在楼层等信息。主控制器汇总接收到的外呼、内选控制器的信息,依据规则进行逻辑调度以控制电机实现轿厢运行接送乘客,同时发送电梯运行信息给各外呼、内选控制器去显示,此外,主控制器还兼有其他的扩展功能。外呼控制器、内选控制器和主控制器通过CAN总线进行信息传递,它把三者连成网络实现了单部电梯系统整体控制。在该控制系统中,外呼控制器、内选控制器和主控制器是分别作为节点挂接到CAN总线上的。单部电梯的内部系统结构图如图1所示。
与传统RS-485总线“主从”的工作方式相比,CAN总线采用“多主”的工作方式,把各个控制器看成网络中平等自治的节点,相互协调完成总的控制任务,而且这样的结构也有利于提高系统的稳定性。在CAN控制器的“多主”的工作方式中,网络中的各节点都可根据总线访问优先权 (取决于报文标识符)采用无损结构的逐位仲裁方式竞争向总线发送数据,CAN协议废除了站地址编码而对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这些特点使得CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高了系统的可靠性和灵活性。采取“多主”的工作方式,各个网络节点能根据本身的状态是否发生变化来自主判断是否发送信息,这样与RS-485只能以主站轮询的方式进行通信相比,可以有效地减轻网络负载,减小网络时延,增加系统的实时性[3-4]。
对于目前建筑物中比较常见的由多个电梯组成的多梯系统,由于要求其能够在调度的性能上实现快速、高效、稳定、节能,因此大多嵌入了一些优化的电梯群控调度算法用以实现复杂控制。这就要求在各电梯独立运行的基础上设置一个群控器用于综合信息结合群控算法实现群组控制。可以采用CAN总线将各单梯的主控制器与另外的群组控制器及监控设备等相连组成更高一级的CAN网络来实现。如图1中的外部群控CAN总线。
主控制器CAN节点硬件上主要包括MCU、CAN控制器和CAN驱动器,CAN通信节点硬件电路原理图如图2所示。其由AT91RM9200通过SPI串行外设接口连接CAN控制器MCP2510进行数据传输,MCP2510负责将数据再通过光电耦合器6N137连接到CAN驱动器PCA82C250,最后挂在CAN网络上与其他CAN通信节点进行通信。
针对智能电梯控制系统,除了基本的运动逻辑控制和CAN节点网络通信外,还有很多智能功能模块,如视频监控、指纹识别、语音报警和嵌入智能调度算法等,因此要嵌入操作系统进行多任务实时控制,这就对MCU性能提出了较高的需求,采用双51单片机分别进行逻辑控制和CAN节点通信已经不能满足要求。MCU选取ATMEL公司生产的32 bit ARM处理器 AT91RM9200,它是一款性能优良的微处理器,在180 MHz频率下运算速度高达200 MIPS;存储器容量大,SRAM为 16 KB,ROM为128 KB,还可以另外通过配置外部总线接口扩展多种类型的存储器,如 SDRAM、静态存储器、Burst Flash、无缝连接的 CompactFlash、SmartMedia及 NAND Flash等,适合于对性能和价格要求苛刻的嵌入式设计。AT91RM9200是一款工业级MCU,对于工业控制非常适合,不但性能卓越,而且价格相对低廉,其集成度也很高,几乎包含了嵌入式应用领域内的各种主流接口,特别是AT91RM9200本身含有用于CAN总线通信的SPI串口通信单元,其4路SPI接口可以并行连接4路CAN网络,很适合进行多层次电梯控制的CAN网络构建。图1的电梯控制结构为单梯控制和群组控制2层CAN网络结构。
MCP2510是Microchip公司推出的具有SPI接口的独立CAN控制器。它完全支持CAN V2.0B技术规范,通信速率最高可达1 Mb/s,内含3个发送缓冲器、2个接收缓冲器、6个 29 bit验收滤波寄存器和2个 29 bit验收屏蔽寄存器[2]。其SPI接口时钟频率最高可达10MHz,可满足1个SPI主机接口扩展多路CAN总线接口的需要[3]。
CAN驱动器选择PHILIPS公司的PCA82C250,其完全符合ISO-11898标准,用以完成对物理总线差动发送和接收的功能。PCA82C250集成了CAN协议物理层的部分功能,是CAN控制器和物理总线之间的接口。它主要实现了差分电信号的转换,同时具有抗共模干扰、电磁干扰、射频干扰的电气保护功能以及防止电池和地之间发生短路过热保护等功能。PCA82C250可以连接110个节点,满足CAN总线5 kb/s~1 Mb/s高速率通信的要求[5]。
为了增强CAN总线节点的抗干扰能力,在CAN控制器MCP2510与CAN驱动器PCA82C250之间加入了光电耦合器6N137进行隔离。为了进一步提高节点的稳定性和安全性,PCA82C250的CANH和CANL与地之间并联2个30 pF的电容来滤除总线上高频干扰;CAN总线接入端与地之间分别反接1个二级管,可以在总线电压发生瞬变干扰时起保护作用。
电梯主控器的软件设计主要分为驱动程序和应用程序两部分。主控制器主要有CAN总线、以太网、RS232、数字量输入输出和人机接口5个模块。在主控制器MCU上添加实时操作系统ARMlinux可以有效地进行多任务调度,满足智能电梯多功能模块实时的需求。在驱动程序方面,重点对AT91RM9200的相关功能寄存器、外围器件MCP2510的工作方式和通信方式及其寄存器进行配置,然后编写调试各模块驱动程序;在应用程序方面,将在深入研究电梯工作原理的基础上,结合嵌入式系统应用程序的设计方法,编写电梯控制系统的基本逻辑程序和智能模块应用程序。
在整个电梯控制系统的设计中,CAN总线起着进行网络通信的作用。这里着重介绍主控制器的CAN总线模块的节点软件设计。
从图2可以看出,MCU对CAN控制器MCP2510的控制是通过SPI串口来完成的,MCU向CAN控制器MCP2510写SPI命令,可以对其进行初始化配置,读写报文帧。
下面先介绍一下针对MCP2510定义的一些较重要SPI控制命令,如表 1所示[4]。
表1 SPI控制命令
CAN节点通信模块软件设计的流程图如图3所示,主要包括节点初始化、报文发送和报文接收3个部分。
图3 CAN节点软件流程图
(1)节点初始化
节点的初始化包括AT91RM9200的SPI初始化和MCP2510的初始化。SPI初始化包括PIO口配置、时钟配置、中断配置、工作模式配置和MCP2510片选分配;MCP2510的初始化包括对各个控制寄存器的初值和波特率的设定,根据已经设定好的节点标志为两个接收缓冲区配置屏蔽寄存器和滤波寄存器。
(2)报文发送
报文的发送是在MCU的控制下通过SPI口对MCP2510进行操作完成的。节点MCU将要发送的数据按照CAN通信的帧定义进行封装,调用SPI写控制命令将数据写入MCP2510指定地址起始的发送缓冲区寄存器中(TXBn,n=1、2、3),然后调用 SPI位修改控制命令将MCP2510相应的发送缓冲控制寄存器TXBnCTRL的TXREQ位置1,启动发送过程。发送结束后TXREQ位自动清零。返回等待继续发送或接收CAN报文帧。
(3)报文接收
报文的接收也是在MCU的控制下通过SPI口对MCP2510进行操作完成的。首先,节点MCU查询标识位t(初始t=0,表示 MCP2510没有收到符合本节点屏蔽滤波的有效报文帧)以检测MCP2510是否接收到来自CAN总线的报文帧,如果t=0,返回继续检测;如果t=1,则表示MCP2510已经收到符合本节点屏蔽滤波的有效报文帧。由t=0变为t=1是因为如果MCP2510的某一缓冲区 RXBm(m=1,2)收到有效报文帧后,MCP2510的中断标志寄存器CANINTF的相应位RXmIF会自动置1,产生相应的中断,进入中断处理程序,则MCU开始调用SPI读控制命令将此时已经存放在接收缓冲区的CAN报文帧读到MCU的内存中。待确定接收完毕后,清零引起中断的中断标志位RXmIF。返回等待继续接收或发送CAN报文帧。
(4)中断处理程序
MCP2515收到CAN报文帧后,产生中断并将INT引脚置低。AT91RM9200响应外部中断,并调用与外部中断相对应的中断处理例程。
本文利用CAN总线通信具有速度快、传输距离长和干扰小的特点,介绍了实现电梯控制系统各组成控制器的通信问题,详细叙述了如何从硬件和软件两方面实现CAN总线的节点设计。可以看出,在复杂系统设计中用CAN总线解决通信问题是不错的选择,其有很好的推广价值。
[1]邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,1996.
[2]饶运涛,王进宏.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.
[3]Microchip 公 司.MCP2510,stand-alone CAN controller with SPI interface[Z].2003.
[4]杨如峰,赵国军,郑尚透.CAN控制器MCP2510在电梯召唤系统中的应用[J].机电设备,2005,26(6):38-40.
[5]李貌,秦霆镐,闫世晓.MCP2510在CAN总线系统智能节点的应用[J].微计算机信息,2005(7):37-39.