井下通讯控制系统CAN总线的设计与实现
2014-09-26王珊珊党向婷
王珊珊,党向婷,李 晨
(西安工业大学 北方信息工程学院 电子信息系,陕西 西安 710025)
CAN-bus(Controller Area Network)即控制器局域网,是国际上应用最广泛的现场总线之一。CAN-bus是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达到10 km时,CAN-bus仍可提供高达5 kbps的数据传输速率。由于CAN串行通讯总线具有这些特性,它很自然地在汽车、制造业以及航空工业中受到广泛应用。
1 CAN总线系统智能节点硬件电路设计
主控制器是井下通讯控制系统的核心部分。它首先是一个集中控制台,通过人工操作和自动控制命令输出,对连接到本系统的被控设备下达控制命令,确保被控设备按指定的工作方式安全运行。主控制器的设计中采用32位嵌入式处理器 LPC2292[1]为控制器的CPU,它具有高达 60 MHz的主频、极低的功耗和丰富的内部功能(两路CAN2.0B控制器),成为控制器的首选处理器。主控制器和CAN总线智能节点的硬件电路图如图1所示。
图1 CAN总线智能节点硬件电路图Fig.1 Hardware circuit of intelligent node of CAN-bus
从图1中可以看出,LPC2292的RD2,即CAN总线接收器输入端通过JP200控制,当JP200打到1档位,RD2经过100 kΩ的电阻和Rs端口相连,100K控制其斜率;LPC2292的TD2,即CAN发送器输出和SN65HVD230的CAN控制器发送数据输入端相连,进行数据交换。LPC2292的D21管脚,即外部存储器数据线21和SN65HVD230的CAN总线接收数据输出端相连,进行数据交换。
CAN总线收发器采用德州仪器公司生产的SN65HVD230。该芯片可用于较高干扰环境下,在不同的速率下均有良好的差分收发能力,最高速率可达1 Mb/s。SN65HVD230的引脚功能如表1所示。
表1 SN65HVD230的引脚功能表Tab.1 Pin-function table of SN65HVD23
CAN总线收发器[2]SN65HVD230具有高速、斜率和等待3种不同的工作模式。它的工作模式通过8引脚Rs来实现。从图1中可以看出,Rs管脚通过JP201选择不同的工作模式。当JP201打倒1档位时,Rs管脚通过100 kΩ的电阻接地,该器件进入斜率控制模式,这种模式是为了降低因为电平的快速上升而引起的射频干扰。当JP201打倒2档位时,Rs管脚接3.3 V的逻辑高电平,该器件进入等待模式,处于待机状态,系统只接收由主控制器发送过来的消息,收发器的发送功能处于关断状态。
2 CAN总线智能节点的软件设计
CAN的底层驱动文件[3]主要是定义了用户可以直接使用或修改的初始化CAN控制器函数InitCAN、发送数据函数CANSendData和CAN中断服务程序。
2.1 初始化CAN控制器
CAN控制器初始化函数主要用来实现CAN工作时的参数设置,如果CAN控制器不经过初始化是不能够进行工作。这些初始化的内容包括,硬件使能CAN、设置CAN报警界限、设置总线波特率、设置中断工作方式、设置CAN验收过滤器工作方式、设置CAN控制器的工作模式等。下列程序清单和图2描述了初始化CAN控制器的全过程。
图2 初始化CAN控制器的流程图Fig.2 Flow chart of initialization of the CAN controller
1)HwEnCAN()函数用于硬件使能CAN控制器。它的入口参数是CAN通道号,其值应小于微处理器所含有的最大CAN模块的数目CAN_MAX_NUM,设置为2,没有出口函数,该函数用于将掉电的CAN控制器模块重新上电。
2)SoftRstCAN()函数用于软件复位CAN控制器。它的入口参数是CAN通道号,其值应小于微处理器所含有的最大CAN模块的数目CAN_MAX_NUM,设置为2。如果出口函数等于0,成功进入工作模式;如果出口函数不等于0,进入工作模式失败。该函数通过清零CAN模式寄存器的RM位(第0位)来使CAN进入工作状态。
3)regCANEWL为CAN出错警告界限寄存器。CANEWL寄存器设定一个Tx或Rx出错阈值,可用于产生中断。该寄存器可随时读取,但只能在CANMOD的RM位为1时写入。
2.2 CAN发送数据
CANSendData()函数用于将数据发送到CAN总线。在用户将数据经过打包后变成符合CAN发送帧格式[4]的数据后,可以调用本函数进行数据的发送。这个过程比较复杂,具体的流程图见图3所示。
首先,通过CAN状态寄存器(CANSR)的TBS位来判断数据缓存区是否空闲。如果缓存区没有空闲,则返回“失败”。如果空闲,继续通过CANSR的TS位判断CAN有没有在发送状态,并且通过CANSR的TBS位判断CAN发送缓冲区是否锁定。如果满足条件,则发送帧信息。接下来,选择发送到Tx缓冲区的内容,向CAN发送缓冲区Tx写入发送数据。然后通过status判断是否写入成功。如果写入失败,返回 “失败”。如果写入成功,继续判断CAN是否属于睡眠模式。如CAN属于睡眠模式,则退出睡眠模式;如不属于睡眠模式,继续下一步。紧接着CAN控制器正常工作,启动发送命令。判断发送数据属于哪一种模式。最后成功发送数据到CAN总线。
图3 CAN发送数据流程图Fig.3 Flow chart of the CAN sending data
在使用发送函数时有一点必须要注意,因为在启动发送数据的命令后,CAN控制器[5]要将缓冲区内的数据发送完毕后,才会将该帧数据是否发送成功的状态返回。如果在函数里一直等待数据发送完毕,会使整个微处理器的性能下降,所以为了避免这种情况,该函数在启动发送后会立即返回。如果要得到成功发送的事件,需要配合发送中断或利用查询TCS(根据CAN通道的不同,分别为状态寄存器CANSR的第3、11和19位)状态位的方法来处理。
每个CAN控制器可产生3种中断请求:接收、发送和“其他状态”。发送中断是3个Tx缓冲区发送中断“或”的结果。每个控制器的各个接收和发送中断请求在向量中断控制器(VIC)中分配有不同的通路并拥有各自的中断服务程序,这里就不加以详细的说明了。
3 结束语
由于一个主控制器要控制多个智能设备的工作,当多个智能设备同时向主控制器发送数据时,容易产生总线冲突。因此在急停系统与主控制器的通信方面,将CAN总线应用层的全双工方式改为半双工方式。
主动式体现为在全双工模式下[6],采用主控制器请求数据为主,智能设备主动送上传输数据为辅(要求主控制器确认)的方式。开始设想为这样主控制器既可以控制信息的传输,又不必不断地请求智能设备的变化数据,但却忽视了全双工方式使得通信双方能在同一时刻进行发送和接收的操作,会降低数据传输的可靠性。虽然半双工方式不能使主控制器和智能设备双方同时收发数据,并且传输数据的处理速度比较低,但是却可以大大提高数据传输的可靠性 。
[1]周立功等.ARM微控制器基础与实战[M].北京:北京航空航天大学出版社,2003.
[2]CAN-bus现场总线基础方案-通讯片[R].广州:广州周立功单片机发展有限公司,2004.
[3]邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版,2002.
[4]徐钊,郑红党,刘玉东.基于CAN总线的煤矿监测监控系统研究[J].中国矿业大学学报,2004,33(4):421-423.
XU Xiang,DAI Ben-qi.Research of coal-mine monitoring and measurement system base on CAN field bus[J].Journal of China University of Mining&Technology,2004,33(4):421-423.
[5]詹林.煤矿井下隔爆开关CAN总线接入的设计及实现[J].煤矿机械,2006,27(1):100-102.
ZHAN Ling.The design and realization of application of CAN bus in comprehensive protector switch of underground mine[J].Coal Mine Machinery,2006,27(1):100-102.
[6]吴彤峰,吴志强,李壮.基于CAN总线的挖掘机数据采集系统设计[J].广西工学院学报,2010,21(2):60-64.
WU Tong-feng,WU Zhi-qiang,LI Zhuang.The design of CAN-bus of excvavtor in data acquisition system[J].Journal of Guangxi University of Technology,2010,21(2):60-64.