基于CAN智能节点和MC68S08QG8微控制器实现温室测控系统的设计
elecfans 2023-03-17

(Controller Area Network)总线又称为控制局域网,是一种多主方式串行通信协议,能有效地支持具有很高安全等级的分布实时控制。由于CAN总线具有造价低、通信速度快、可靠性高、实时性强等突出优点,在汽车行业、工业、家用电器及等领域应用广泛。

温室控制技术是农业现代化的重要内容,在目前的温室系统中主要是靠总线来组成控制网络,将采集到的数据和信息传送到主控机中。其通信速率、节点连接数目都受到一定的限制。

本文提出了以CAN总线构成现场控制网络。CAN总线的通信速率最高可达1 Mbps/40 m,挂接的设备可达110个。另外信号的传输采用短帧结构,这样传输时间短,受干扰的概率低。并且一旦网络中某个节点故障时,该节点具有自动关闭输出功能,以主动切断该节点与总线的联系,使网络上其他节点及通信不受影响,具有较强的抗干扰能力,降低了恶劣环境对于温室系统的影响,提高了系统的实时性、可靠性和扩充性。

1、 系统总体设计

温室测控系统采用分布式多主方式进行通信。系统主要由主控上位机、CAN总线和多个智能测控模块组成(注意:各个智能测控模块之间存在强烈的相互关系)。通过对温室内外,特别是温室内部各种影响作物生长的要素用相应智能传感器进行,然后通过CAN总线传送给主控上位机,上位机进行数据打印、分析和处理、参数设置并且控制有关设备等工作,从而实现对温室要素的调控,保证了作物生长所需的环境。系统上任何节点均可在任意时刻主动向其他节点发出信息,支持点对点、一点对多点和全局广播方式接受和发送数据。图1是温室测控系统总体设计图。

2、 硬件平台设计

温室测控系统的硬件平台主要由多个CAN智能节点构成,如图2所示。本系统节点采用总线型拓扑结构,两芯(CANH和CANL)双绞线连接。主要由微控制器MC68S08QG8,CAN通信控制器MCP2515和CANTJA1050组成。本文中微控制器MC68S08QQ8与控制器MCP2515是通过S口连接,测控节点通过微控制器MC68S08QG8的IIC口来连接的。智能节点的个数是由温室内外所测控的环境要素来决定的,但是任意智能节点均可以像节点那样直接挂接在CAN总线网络上,即在不牺牲可靠性的前提下进一步扩展现场测控节点的数量。

2.1 芯片介绍

选择一款合适的是系统稳定的重要保障。综合功耗、性能和价格等各种因素的考虑,本系统采用Freescale公司的MC68S08QG8(以下简称为QG8)作为系统控制信号采集的芯片。MC68S08QG8采用高性能、低功耗HCS08飞思卡尔8位微控制器为内核,是一款集成度高、结构紧凑、功能丰富、适用于各种场合的低价位单片机。MC68S08QG8除了提供Freescale丰富的外围与HCS08内核卓越性能的多功能组合外,还包括更长的寿命(即使工作电压低至1.8 V,也能发挥最大效能)、业界领先的Flash技术、3个通信接口(SCI、SPI和IIC)以及创新的开发支持等其他系列单片机不可比拟的优势。

智能节点中CAN控制器完成了CAN协议中数据链路层和物理层的所有功能,保证通信质量。本系统选用了一种独立的CAN协议控制器——公司的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以及主机输入/从机输出数据线SO,分别于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个引脚EF是参考电压,输出可以空置。第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和CANIN.MER将被置位,产生发送错误状态,同时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节点之间温度测试。测试结果表明:本设计传输网络结构简单、可靠性高。另外该测控模块也可以运用在锅炉控制、楼宇控制等各种工业现场测控系统中,实用性强、应用范围广。


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 【7.24 深圳】2025国际AI+IoT生态发展大会/2025全球 MCU及嵌入式技术论坛


  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • 基于C51单片机实现汽车座椅自动控制系统的软硬件设计

    引言 随着人们生活水平的提高,对汽车座椅的舒适性要求也越来越高,要求对汽车座椅地调节能够更加简单、方便、快捷。目前,汽车座椅位置的调节多采用基于手动调节方式的机械和电动控制两种方式。汽车座椅位置的调节...

    07-02
  • MCS51单片机程序设计时堆栈的计算方法解析

    用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己...

    07-02
  • 51单片机定时器工作原理及用法

    TMOD : 控制定时器的工作方式。8个bit,高四位 bit 控制 T1,、低四位 bit 控制 T0。因为定时器有4种工作方式;TMOD = 0x00(工作方式0),TMOD = 0x01(工作方式0),TMOD = 0x02(工作方式2),TMOD = 0x03(工作方式3)。...

    07-02
  • 51单片机学习单片机之路总结

    学习单片机有一学期了,现在也由51转到STM32了。一直想对51的学习做一个总结。也希望对别人有一些启发。也给后学者提供一些建议。当然本文是我对自己学习过程的总结,若有不对的地方,还请高手指出。 我想,再看本...

    07-02
  • hot51增强型单片机开发板原理图

    功能要求: 一):绿灯25s倒计时,绿灯过度红灯有5s黄灯时间,红灯25s后直接跳绿灯。 二):按键按下模拟闯红灯输入,产生5s蜂鸣器鸣叫。 开发环境: 软件:Keil uVision4 硬件:HOT51增强型单片机开发板 程序代码:...

    07-01
  • 51单片机的延时子程序

    延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念、机器周期和指令周期的区别和联系...

    07-01
  • 什么是Flash盘?Flash盘的结构是什么样的?

    Flash是大家常使用的存储之一,对于Flash,大家或多或少有所了解。上篇文章中,小编对Flash闪存的类型有所介绍。为继续增进大家对Flash的认识,本文将对Flash盘、Flash盘结构以及Flash读写操作予以介绍。如果你对本...

    07-01
  • 深谈嵌入式系统,嵌入式系统是如何组成的?

    嵌入式系统在生活中有诸多应用,大家对于嵌入式系统或多或少有所耳闻。在前两篇文章中,小编对嵌入式系统进行过详细介绍。为继续增进大家对嵌入式系统的认识,本文将对嵌入式系统的组成加以说明。如果你对嵌入式系...

    06-27
  • 嵌入式系统秘籍共享,最全嵌入式系统解析

    嵌入式系统的应用十分广泛,因此越来越多的人学习嵌入式系统。由此,在学习嵌入式系统之前,我们应当对嵌入式系统具备一些认识。所以在本文余下部分,小编将对嵌入式系统进行全面解析。如果你对嵌入式系统具有兴趣...

    06-27
  • 51单片机超声波测距程序详解

    51单片机超声波测距程序详解 超声波四通道测距:超声波测距实现分为三大块: 其一是12864带字库的液晶驱动程序: 代码如下: /////////////////12864驱动程序/////////////////////////// //1写数据 void WriteDat...

    06-25
  • 51系列单片机的引脚图

    51系列单片机的引脚图 端子介绍 l P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 l P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 l P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。 l P3.0~P3.7 P2口8...

    06-25
  • 51单片机串口通信需要加超时中断吗?

    接收数据时,超过一定时间就算出错. 这个超时的时间是单片机自己算出的吗?超时的时间是由编程序的人定的,他定多长就多长从一段程序开始 实现电脑向 单片机发送一些数据,单片机返回Iget +数据 #include #define u...

    06-25
下载排行榜
更多
评测报告
更多
广告