2 硬件平台设计
温室测控系统的硬件平台主要由多个CAN智能节点构成,如图2所示。本系统节点采用总线型拓扑结构,两芯电缆(CANH和CANL)双绞线连接。主要由微控制器MC68S08QG8,CAN通信控制器MCP2515和CAN收发器TJA1050组成。本文中微控制器MC68S08QQ8与控制器MCP2515是通过SPI口连接,测控节点通过微控制器MC68S08QG8的IIC口来连接的。智能节点的个数是由温室内外所测控的环境要素来决定的,但是任意智能节点均可以像以太网节点那样直接挂接在CAN总线网络上,即在不牺牲可靠性的前提下进一步扩展现场测控节点的数量。
[page]
2.1 芯片介绍
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 Ω的终端电阻,可以在阻抗不连续时消除通信线路中产生的信号发射。
[page]
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所示。
[page]
为了提高系统的实时性,报文接收模块采用中断接受方式。该模块包括主程序和接受中断服务程序两部分组成,主程序必须在中断控制报文接受之前使能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节点之间温度测试。测试结果表明:本设计传输网络结构简单、可靠性高。另外该测控模块也可以运用在锅炉控制、楼宇控制等各种工业现场测控系统中,实用性强、应用范围广。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』