接口/总线/驱动
CAN(Controller Area Network)总线又称为控制局域网,是一种多主方式串行通信协议,能有效地支持具有很高安全等级的分布实时控制。由于CAN总线具有造价低、通信速度快、可靠性高、实时性强等突出优点,在汽车行业、机械工业、家用电器及传感器等领域应用广泛。
温室控制技术是农业现代化的重要内容,在目前的温室系统中主要是靠RS-485总线来组成控制网络,将采集到的数据和信息传送到主控机中。其通信速率、节点连接数目都受到一定的限制。
本文提出了以CAN总线构成现场控制网络。CAN总线的通信速率最高可达1 Mbps/40 m,挂接的设备可达110个。另外信号的传输采用短帧结构,这样传输时间短,受干扰的概率低。并且一旦网络中某个节点故障时,该节点具有自动关闭输出功能,以主动切断该节点与总线的联系,使网络上其他节点及通信不受影响,具有较强的抗干扰能力,降低了恶劣环境对于温室系统的影响,提高了系统的实时性、可靠性和扩充性。
1、 系统总体设计
温室测控系统采用分布式多主方式进行通信。系统主要由主控上位机、CAN总线和多个智能测控模块组成(注意:各个智能测控模块之间存在强烈的相互关系)。通过对温室内外,特别是温室内部各种影响作物生长的要素用相应智能传感器进行测量,然后通过CAN总线传送给主控上位机,上位机进行数据打印、分析和处理、参数设置并且控制有关设备等工作,从而实现对温室要素的调控,保证了作物生长所需的环境。系统上任何节点均可在任意时刻主动向其他节点发出信息,支持点对点、一点对多点和全局广播方式接受和发送数据。图1是温室测控系统总体设计图。
2、 硬件平台设计
温室测控系统的硬件平台主要由多个CAN智能节点构成,如图2所示。本系统节点采用总线型拓扑结构,两芯电缆(CANH和CANL)双绞线连接。主要由微控制器MC68S08QG8,CAN通信控制器MCP2515和CAN收发器TJA1050组成。本文中微控制器MC68S08QQ8与控制器MCP2515是通过SPI口连接,测控节点通过微控制器MC68S08QG8的IIC口来连接的。智能节点的个数是由温室内外所测控的环境要素来决定的,但是任意智能节点均可以像以太网节点那样直接挂接在CAN总线网络上,即在不牺牲可靠性的前提下进一步扩展现场测控节点的数量。
2.1 芯片介绍
选择一款合适的MCU是系统稳定的重要保障。综合功耗、性能和价格等各种因素的考虑,本系统采用Freescale公司的MC68S08QG8(以下简称为QG8)作为系统控制信号采集的芯片。MC68S08QG8单片机采用高性能、低功耗HCS08飞思卡尔8位微控制器为内核,是一款集成度高、结构紧凑、功能丰富、适用于各种场合的低价位单片机。MC68S08QG8除了提供Freescale丰富的外围接口与HCS08内核卓越性能的多功能组合外,还包括更长的电池寿命(即使工作电压低至1.8 V,也能发挥最大效能)、业界领先的Flash技术、3个通信接口(SCI、SPI和IIC)以及创新的开发支持等其他系列单片机不可比拟的优势。
智能节点中CAN控制器完成了CAN协议中数据链路层和物理层的所有功能,保证通信质量。本系统选用了一种独立的CAN协议控制器——Microchip公司的MCP2515。MCP2515完全支持CAN V2.0B技术规范,MCP2515还包含3个发送缓冲器和2个接受缓冲器,减少了单片机的管理负担。与传统上使用的CAN控制器SJA1000相比较,它与MCU的连接是通过行业标准串行外设接口(SPI)来实现的,这样可以减少芯片使用的引脚,简化CAN总线的电路的连接,提高了系统稳定性。
CAN总线收发器提供CAN控制器与物理总线之间的接口,是影响CAN总线网络安全性、可靠性和电磁兼容性的主要因素。本系统采用Phlips公司的TJA1050作为总线收发器。TJA1050有两种工作模式:高速和待机,其中待机模式可以防止由于CAN控制器失控而造成的网络阻塞。并且在TJA1050中还设计了一个超时定时器,用以对TXD的低电压(此时CAN总线上为显性位)进行监视。该功能可以避免由于系统硬件或者软件故障而造成TXD端长时问为低电位时总线上所有其他节点也将无法通信的情况出现。这也是FJA1050与82C250相比较之后最大的改进地方。
2.2 智能节点硬件电路
智能节点最小系统硬件电路如图3所示,主要的连接有以下3个方面:
1)QG8的SPI接口使用4条信号线:主机输出低有效片选信号线 、主机输出线SPSCK、主机输出/从机输入数据线MOSI以及主机输入/从机输出数据线MISO,分别于MCP2515的、SCK、SI、SO引脚连接。QG8的与MCP2515的中断引脚相连,可以通过中断来提高系统实时性。
2)MCP2515的3个发送缓冲器TXBn请求发送引脚(4、5、6引脚)接到+5 V终端,两个接收缓冲器RXBn中断引脚(10、11引脚)空置。由于该测控系统对于环境的要求比较高,MCP2515的TxCAN和RxCAN并不是直接与SJA1050的TXD和RXD相连,而是通过6N137(高速光耦)后于SJA1050相连,这样很好地实现了总线上各CAN节点的电气隔离,进一步提高了该系统的抗干扰能力。不过需要特别注意的是,光耦部分电路的两个VCC、VDD必须完全隔离,否则采用光耦也就失去了意义。电源的完全隔离可采用小功率电掾隔离模块或带多5 V隔离输出地开关电源模块实现。虽然这部分增加了接口电路的复杂性,但是却提高了节点的稳定性和安全性,从而也提高了测控系统的性能。
3)TJA1050的第8个引脚VREF是参考电压,输出可以空置。第5个引脚决定芯片的工作模式(高速和待机两种模式),图中和地之间接47 kΩ的电阻进入高速模式(也是正常工作时的模式)。本系统在CANH和CANL总线输入端与地之间分别接了一个SA28A(瞬态抑制二极管),当两输入端与地之间出现瞬变干扰时,通过SA28A的放电可起到一定的保护作用。在CANH和CANL之间还接了一个120 Ω的终端电阻,可以在阻抗不连续时消除通信线路中产生的信号发射。
3、 软件设计
本系统的软件程序设计是在Freescale公司的集成开发环境——Freescale Codewarrior 5.1下完成的。该系统的软件由CAN控制器软件和应用层通信协议构成。
3.1 CAN总线驱动层软件实现
CAN控制器软件主要包括器件初始化、数据发送和接收。初始化工作主要是对QG8微处理器、SPI接口和MCP2515CAN控制器的初始化。其中微处理器初始化主要包括定时器、变量和外部中断的初始化。需要特别注意的是飞思卡尔单片机的定时器与其他单片机(如51系列单片机)不太一样,QG8微处理器的定时器是不能预置某个数值的,而且是只读的,因此必须要有辅助寄存器才能实现该定时器的功能,本文采用的是QG8微处理器的16位的定时器模块TPM:SPI接口的初始化主要包括对控制寄存器SPIC1和SPIC2、波特率寄存器SPIBR、状态寄存器SPIS、数据寄存器SPID的设置。MCP2515的初始化为复位MCP2515、寄存器配置。只有对MCP2515初始化后,进入了配置模式才能对相关的寄存器进行初始化,初始化工作完成后进入工作模式,进行报文发送。为了能使节点稳定的通信,CAN总线上所有的节点都必须有相同的波特率。对于振荡器时钟频率不同的器件,可以通过对波特率预分频比和每一个时间段中时间份额数量的设置来调整比特率。
QG8是通过使用标准SPI读/写命令对寄存器进行读/写操作。外部数据和命令式通过SI引脚在SCK时钟信号上升沿传送到器件中。MCP25 15在SCK下降沿通过SO引脚发送数据。本文采用状态查询方式发送报文。首先应该禁止CAN发送中断产生,以保证报文发送不被中断。为了启动报文发送,必须将相应缓冲器的TxBnCTRL TxREQ位置1,文中是通过调用RTS2515()请求发送来实现的。缓冲器中TxBnCTRL TxP《1:0》优先级最高的报文在总线空闲时首先被发送。如果发送成功将产生中断来通知接收,否则TxBnC TRL TxRR和CANINIF.MERRF将被置位,产生发送错误状态,同时INT引脚置位,产生中断请求。具体报文发送流程如图4所示。
为了提高系统的实时性,报文接收模块采用中断接受方式。该模块包括主程序和接受中断服务程序两部分组成,主程序必须在中断控制报文接受之前使能CAN的接受中断和微控制器QG8的全局中断。当报文发送完之后会产生一个中断通知来接收报文。首先应该看一下中断标志类型,如果是报文成功发送产生的中断,将报文读入滤波器中,否则产生报文出错标志,CANINTF.MERRF位被置1.将接收到报文的标示符字段与滤波寄存器中的值进行比较,如果两者匹配,将该报文载入相应的接受缓冲器,否则产生一个无效报文。如果缓冲器慢将会产生溢出错误,EFLG.RXOOVER位置1.报文接受成功且处理完毕后,MCU将清除中断标志,返回主程序以接受下一条报文。具体的流程图如图5所示。另外整个报文接受过程都可以在接受中断服务程序中完成,不需要与主程序发生交互作用。
3.2 CAN总线应用层软件实现
目前国内还没有CAN通讯的应用层协议标准,而国外现有流行的CANopen、DeviceNet和CANkingdom等应用层协议对于本系统的要求来说实现复杂会造成资源浪费。本文定义了一个简单的通信协议来完成系统所需求的功能。
该协议中采用29位(ID.28-ID.0)标识符的扩展帧格式,这些位的发送顺序是从ID.28到ID.0,最高7位ID.28~ID.22不能全是隐性1。每一个标识符对应一条信息,只有与自己标识符相同的信息才被接收端接收。标识符ID号的大小还决定了发送的优先级和等待时间,标识符越小的报文帧优先被发送。本协议中ID号位28~24的五位表示信息采集节点,包括各种传感器模块,ID号为23~18的四位表示显示节点,包括各种数据的显示和报警节点。ID号为19~14的六位为执行控制节点,包括CO2发生器、循环风扇等控制设备节点。ID15~13为信息类别,包块各种命令信息和状态信息等信息节点。ID12~ID0为预留。
4、 系统测试
为了测试本设计的性能,在实验室里进行了CAN总线节点之间的温度测试,如图6所示。在18点和19点(横坐标表示时间)之间进行了温度的测试,在18点钟到18点30分之间A和B节点一直显示实验室的室内温度(15~17℃之间),过半个小时后将B节点放入22℃的温水中,然后取出。从图中可以看到红色曲线(A节点温度曲线)一直是恒温状态(15~17℃之间),而白色曲线(B节点温度曲线)在18点30分钟温度升到22℃,随着温度传感器被取出,温度也在下降到15~17℃之间。
5、 结束语
本文根据目前温室系统存在的问题,提出了用CAN总线构成温室测控系统传输网络,并根据系统需要设计了简单的应用层通信协议和进行了CAN节点之间温度测试。测试结果表明:本设计传输网络结构简单、可靠性高。另外该测控模块也可以运用在锅炉控制、楼宇控制等各种工业现场测控系统中,实用性强、应用范围广。
责任编辑:gt
全部0条评论
快来发表一下你的评论吧 !