基于单片机室内无线环境监控系统方案_第1页
基于单片机室内无线环境监控系统方案_第2页
基于单片机室内无线环境监控系统方案_第3页
基于单片机室内无线环境监控系统方案_第4页
基于单片机室内无线环境监控系统方案_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、. . . 本科毕业设计(论文)基于单片机的室无线环境监控系统37 / 43摘要我们知道温湿度是温室大棚种植里面关键的环境变量,因此对温度和湿度进行监控成为温室大棚种植的重要任务之一。本系统是以温室大棚种植为背景,设计一个基于STC12C560S2单片机的温室无线环境监控系统,可以远程监控温度和湿度。温湿度传感器DHT21采集到室的温度和湿度后,通过单总线将数据发送给上位机进行处理。单片机把处理好的数据经过SPI接口传输给无线收发模块NRF905。无线模块将数据进行打包,加上CRC检验码后,放入发送数据寄存器。系统等待NRF905启动发送模式,然后把温室度的数据和接收端的地址一起发送出去。下位

2、机的NRF905无线模块不断地检测空中的电磁波。当接收到与自身的地址相配的地址后,模块开始接收到数据。对数据进行解包,去除CRC检验码后,无线模块把数据存储在数据接收寄存器。下位机通过SPI接口读取数据,将温度和湿度显示在液晶屏上,同时判断是否需要启动报警。系统采用C语言进行编程,同时可以通过按键对温度和湿度的报警围进行设定。关键字:单片机,无线收发模块,温湿度传感器,室环境AbstractWe know that temperature and humidity are key environmental variables sin greenhouses planting,therefor

3、e to monitor temperature and humidity become one of the important tasks of greenhouses planting.This system is based on background of greenhouses planting.Designing a wireless environment monitoring system in greenhouse based on STC12C560S2 microcontroller. This system can remotely monitor and contr

4、ol temperature and humidity.After temperature and humidity sensors DHT21 have collected the indoor temperature and humidity, the data is sent to the mastermachine for processing through the single bus. MCU processesthe data and then transmit to NRF905 wireless transceiver module through SPI interfac

5、e.After packaging data and adding the check code into thedata,wireless module puts the data into register. The system wait for NRF905 starting delivery mode, and then the data of greenhouse and address is sent together to the receiving end.TheNRF905 wireless module of slave machine continuously dete

6、cts the electromagnetic waves in the air.When receiving matching address, the module began to receive data. To unpack the data after removing CRC check code, the wireless module stores the data in the data receive register. Slaver machine reads data from the SPI interface,and then displays the tempe

7、rature and humidity on the LCD screen, and judges whether to start the alarm at the same time.System uses the C language to program, and can be set alarm range of temperature and humiditythrough the button.Key words:Single chip microcomputer, Wireless transceiver module, Temperature and humidity sen

8、sor, Indoor environment目录1 绪论11.1 课题研究的背景和意义11.2 我国温室种植的发展与研究现状11.3 论文研究的主要容22 室无线环境监控系统总体方案32.1 系统设计的基本思想32.2 系统总体架构32.3 系统软件开发环境53 系统器件方案选择63.1 单片机选型63.2 温湿度传感器的选择73.3 无线收发模块选择83.4 液晶显示屏与稳压器件的选择94 硬件设计104.1 温湿度传感器的电路设计104.2 无线模块电路设计104.3 无线模块的工作方式114.4 液晶显示电路125 系统软件设置145.1 软件设计的总体架构145.2 温湿度传感器程序

9、设计165.3 无线模块程序设计205.4.1 无线模块寄存器配置225.4.2 发送程序设计245.4.3 接收数据程序设计255.4.4 数据显示程序设计275.4.5 报警电路程序设计29结论 30参考文献31致321 绪论1.1 课题研究的背景和意义温室大棚是一项重要的农业基础设施,通过温室给农作物提供适宜的湿度、水分、温度、空气、光照等生长条件,使农作物不受外界天气变化和季节变化的影响。这样不但能提高农作物的产量,而且可以生产反季节的产品。因此提高温室大棚种植技术,生产管理等方面具有重要意义。本文重点研究温室大棚的温湿度远程无线监控方面,旨在提高自动化生产水平,减少人力物力的投入,提

10、高温室大棚的产量1。近年来,温室大棚已经逐渐发展到较高的水平,正在往自动化、智能化与网络化的方向发展,为了达到提高温室的环境监控能力的目的。而环境监控是为了对复杂的环境中使用的设备的运行状态进行监测,同时搭配各种环境因素进行监测诊断,从而决定采用何种控制策略和管理决策,以达到更好的经济效益2。现有的监测系统大多数使用现场布线的方式,安装工作量较大而且成本较高。这种系统的覆盖围比较小,而且线路长期工作容易被腐蚀或者老化,引发漏电等安全隐患,局限性明显3。将无线通信技术运用在监控方面,可以很好地解决现场布线方式的缺陷。无线技术很多优势,比如实时、低成本和便利等,可以说将无线通信技术应用到温室大棚里

11、面,有助于改进环境监控技术,降低系统成本,提高自动化水平。1.2 我国温室种植的发展与研究现状我国人口基数大,还是个农业大国,农业的发展受到很大的重视。传统的耕作方式已经满足不了社会的需求,因此要将现代化的技术运用到传统农业中,提高生产力,提高农产品的产量。这是目前的重点研究方向。而加强温室大棚的管理和控制也是目前研究的重要领域。传统的总线方式系统有很大的局限性,难以适应社会的发展。采用无线通信技术,可以远程数据采集监控,适应未来发展的需求。近年来我国开展了许多对温室的无线传感器和网络技术相结合的探索,取得了一些成就。大学的毛罕平教授等开发了一个温室的全自动环境控制系统,可以很好地实现对环境因

12、素的综合控制,而且在我国温室环境监控中成功推广。在蔬菜高科技推广中心,建造了智能温室两栋,每栋占地一千平方米,每公顷的费用一千二百万元,智能温室主要控制因素有水分、湿度、温度、光照、肥料,并且使用各种小型机械完成施肥、覆膜、松土等功能,达到了国际领先水平。总的来说,国目前的温室控制技术还不成熟,还处在探索和发展的阶段。智能化、自动化程度相比于国外同类产品有一定的差距,需要进一步加强研究力度,才能取得长远的发展4。1.3 论文研究的主要容针对温室大棚种植需要对温度和湿度进行监控的需要,使用STC12C560S2单片机和NRF905无线收发模块,设计集合无线传输、数据处理、液晶显示和声光报警为一体

13、的无线环境监控系统。本文将从以下几个方面进行研究:(1) 如何通过程序控制温湿度传感器DHT21,并采集到室的温度和湿度。(2) SPI通信协议。(3) 使用NRF905无线收发模块对采集的数据进行发送与接收。(4) STC12C560S2单片机如何通过程序协调各个模块有序工作。2 室无线环境监控系统总体方案2.1 系统设计的基本思想本系统的处理和控制所采用的核心器件都是STC12C560S2单片机,该单片机是STC生产的单时钟/机械周期的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机。它的指令代码完全兼容传统的51单片机,但是速度快8-12倍。部集成了8路高速10位A/D转换模块,

14、2路PWM,I/O口的资源丰富,因此被广泛地应用于各个领域5。系统的组成分为两个部分:数据采集与发送部分和数据接收与显示部分。数据采集由温湿度传感器DHT21负责。这是一款单总线数字传感器,精度高,抗干扰能力强。单片机可以通过一个与DHT21连接的I/O口读取传感器采集到的40位数据,其中前16位是湿度数据,中间16位为温度数据,后8位作为校验码。上位机通过SPI接口将温度和湿度数据传输给NRF905进行打包发送。数据采集与发射部分不断重复采集与发送数据这个过程。与下位机连接的NRF905处于等待接收状态,一旦接收到匹配的地址后,进行数据接收与解包,并通过SPI接口将数据传输给下位机进行处理。

15、下位机将数据显示在LCD1602上,并且检测温湿度是否超过设定围,以决定是否启动声光报警。数据接收与显示部分不断地重复上述过程。这样整个系统实现了对数据的采集、无线传输、接收与显示,可以实时地远程监控室的温度和湿度。监控围可达数百米。2.2 系统总体架构整个系统采用模块化的设计理念,其中上位机系统主要有温湿度传感器、无线发射模块和微处理器等主要模块组成,主要负责数据的采集与发送任务。下位机系统主要由无线接收模块、微处理器、液晶显示屏和报警装置等功能模块组成,用来实现数据的接收、显示与报警功能。系统的结构框图如图2.1所示:图2.1 系统总体结构框图系统的主要器件包括单片机微处理器、无线收发系统

16、和采集温室度的传感器。单片机在系统中的功能是数据处理和控制调度。它把温湿度传感器所采集到的数据信号经过处理之后,经过无线收发模块将数据发送出去。接收处理器控制无线模块进行数据接收,并且把接收到的数据通过液晶屏显示出来,同时判断是否要启动声光报警模块。其中传感器和无线收发模块是本系统的关键。传感器的精度与性能是整个系统的稳定性与可靠性的关键。因此,在温湿度传感器采集到准确的室环境参数的前提下,整个系统才能实现真正意义上的环境监控。无线收发模块是温湿度数据采集与处理显示的桥梁,是实现远程监控室环境参数的关键部分。从框图可以看出,传感器将采集到的数据传输给微处理器进行处理后,再发送给无线收发模块。无

17、线发射模块将数据打包后,发送匹配地址给接收模块。接收模块只有在检测到与自己的地址相匹配的地址后,才进行数据的接收与数据解包。单片机检测到NRF905已经成功接收到数据后,马上将数据读取出来,进行数据处理,判断温度与湿度是否在允许的围,以此决定是否要启动声光报警,同时将温度值与湿度值在液晶屏上面显示出来。温度和湿度的围可以直接通过按键进行设定,操作简单,使得整个系统更加人性化。2.3 系统软件开发环境本系统的软件开发选择的是keil software公司推出的Keil uVision4软件。它几乎支持所有8051核的单片机,集仿真与调试与一体。在整个项目的软件编写与程序调试过程中,该软件都能满足

18、,因为它集成了编辑器、编译器与仿真器。除此之外,该软件知道汇编和C语言编程,人机交互界面友好,容易学习。因此进行51单片机开发,该软件是首选6。在编程语言方面,本系统的程序设计选择C语言进行编写。汇编语言涉与到很多底层的驱动和寄存器读写,编写较为麻烦,而C语言结构性强、可读性强并且容易维护,所以选择C语言能够提供本系统的编程效率7。Keil uVision4的使用步骤如下:(1) 打开软件,在菜单栏选择“工程”后“新建工程”,选择对应的目标芯片,再配置一下软件。(2) 新建一个C语言源文件,保存到工程文件夹,在文件名后加.c。(3) 择左方框中的Target 1文件夹展开,选择Souece G

19、roup1点击鼠标右键,选择增加文件到组,把C语言源文件添加进去。(4) 编译项目并且生成可以烧录到单片机存储器部的HEX文件。STC12系列单片机的部已经固化了在线可编程系统即ISP,引导固件程序。通过ISP,用户可以很方面地把程序烧录到目标单片机部。通过ISP,将编译好的项目中的HEX文件下载到单片机中运行验证。值得注意的是,当单片机重新上电之后,它会首先运行部固化的ISP程序。当重新上电后,单片机检测P3.0引脚是否有有效的程序下载命令,如果有就好下载用户程序,如果没有则跳到单片机部的程序存储区,运行里面的用户程序。3 系统器件方案选择3.1 单片机选型51系列单片机以其成本低,功耗低,

20、能满足大多数工业控制和商业运用, 因此被广发运用于各个领域,包括科学研究,教育等多方面。本系统的控制与处理的核心是一款STC12C560S2单片机,它也是8051核的,可以兼容传统的51单片机指令集。随着社会的进步,对于技术的要求也越来越高。特别是对于微处理器,要求其能以更快的速度去处理更大的数据量,而且功耗要越来越低。因此,传统的8051单片机在速度、程序存储空间和功能上,逐渐难以满足这样的需求。一些国外的研究机构开始对传统的8051单片机进行改进。本系统所使用的STC12C560S2是一款由宏晶科技研制的增强型51单片机。这款单片机是单时钟/机械周期的,而传统的单片机是12个时钟/机械周期

21、的,所以STC12系列单片机运行速度更快,是传统的51单片机的8-12倍。而且该单片机增加了加密技术,能保护部分用户程序不被窃取。一般的工业应用,这款单片机都能满足使用要求。虽然功能更加强大了,但是单片机的体积并没发生改变,处理个别引脚的复用功能不同,其他的I/O口跟传统的51单片机完全兼容。它部集成了许多模块,包括复位电路,看门狗电路,PWM输出和A/D转化电路等。下面是该单片机的主要特性介绍8:(1) 是传统的51单片机的增强版,功能升级,不但支持先进的指令集,而且还兼容传统的8051单片机的一些指令集。除此之外,部还加入了硬件乘法和除法指令。(2) 单片机工作的频率围更大,最高可达35M

22、Hz。(3) 用户的应用程序存储空间为60KB。(4) 40个I/O口引脚,大多数都具有复用功能。而且可以设置I/O口的工作模式,比如准双向口/弱上拉输出、强推挽输出、高阻输入和开漏输出等。(5) 单片机集成了1280字节的RAM。(6) 比传统的51单片机多出一个16位的定时器,而且两路PCA也可以作为2个16位定时器用。(7) 具有可以编程的时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRTZ在P1.0输出时钟。(8) 7路外部中断I/O引脚,既兼容了传统51的下降沿中断,还具有支持上升沿触发的PCA模块。(9) 具有SPI引脚,支持在线编程功能。(10) 两个全双工的U

23、ART。P0口的作用主要有两个,一是用作地址或者是数据总线的低8位,另外就是当做普通的I/O口来使用。部不带弱上拉。P1口的复用功能较多,有ADC转换接口,SPI通讯接口等等。P2口可以作为普通的I/O口来使用,也可以作为高8位的地址指针。P3口有一些重要的复用功能,例如P3.0和P3.1可以作为串行通信的输入输出引脚,P2.3到P2.5引脚可以用作定时器与外部中断的输入端。P4.7是复位引脚。本系统使用的STC12C560S2单片机在上电复位后,各个端口为准双向模式。其中高电平为2V以上,低电平为0.8V以下。3.2 温湿度传感器的选择传感器是可以把外界的模拟量通过敏感元件和转换电路,得到可

24、以进行处理的电信号。它属于电子检测设备。从定义上来看,传感器是能够感受规定的被测量并且按照一定的规律转换成可用输出的信号的器件和装置。传感器在生活中随处可见,是自动化控制和智能领域的重要元件9。DHT21是奥松公司生产的一款温湿度传感器,属于电容式的。这款温湿度传感器不但功耗低而且传输距离远,还具有自动校准功能10。该传感器在使用时要注意两点:一让采样周期大于或者等于最小值才不至于引起错误;二是与单片机的I/O口连接的时候,在连接线小于20米的情况下,最后加一个5K的上拉电阻。DHT21可以同时测温度和湿度,是一款双用的数字温湿度传感器。它具有稳定性好,使用寿命长的优点。元件部集成了分别用来测

25、湿度和温度的模块,采集湿度的传感器是电容式的,而采集温度的器件是一个NTC测温元件。通过一条DATA线就可以与单片机连接,进行读写操作。从DHT21传输给单片机的数据为40位,其中前16位是湿度值,中间16位是温度值,后8位是校验码。也就是说,该传感器的湿度和温度的分辨率都是16位的。3.3 无线收发模块选择收发模块是本系统里面另一个重要的组成部分,它是实现系统的实时监控,无线传输,远程控制等功能的关键。系统的收发模块采用NRF905芯片搭建的一个电路。nRF905射频发射器芯片是由Nordic公司出品的一款低于1GHz无线芯片11。NRF905的工作频段有433MHz、868MHz和915M

26、Hz,而在我国使用的是433 MHz这一个免费的频段。如果不使用模块外部的声表滤波器,可以获得良好的通信效果。无线模块与单片机的通信是通过SPI接口来实现的,通过软件编程可以配置无线模块的通信频道、通信地址和输出功率。它的ShockBurstTM模式可以配置成自动处理发送和接收的数字包字头,增加CRC检验功能,使模块之间更加可靠地完成数据的发送与接收。另外,NRF905的功耗很低,如果以-10dBm的功率向外发送数据,它的工作电流为11mA,而当作接收端时,其工作电流为12.5mA。通过软件设置,可以让NRF905工作在不同模式,其中,空闲模式和掉电模式可以达到降低功耗的目的。NRF905的基

27、本特点如下12:(1) 可工作在433MHz的免费频段。还可以通过配置,使该模块工作在不同频段,达到多点通信和跳频通信的目的。(2) 传输速率高,可高达50kb/s。有效传输距离为300米。(3) 采用GFSK调制技术,抗干扰能力强,非常适合在工业控制场合。(4) 片集成了8位与16位的CRC校验硬件,单对多通信的地址控制。(5) 工作电压为1.9V-3.6V,待机模式下的工作电流仅为2.5A,可以实现超低功耗。(6) 不同模式的切换时间为650s。(7) 置SPI接口,通过编程设置通信地址。(8) 模块的接口间距为标准的2.54mm,方便安装连接。3.4 液晶显示屏与稳压器件的选择本系统通过

28、液晶屏直接实时显示温度和湿度给用户,这里采用一款1602字符型LCD显示屏。显示数据分为两行,每行16个字符。工作电压为4.5V-5.5V,工作电流为2mA。外围配置简单,价格较便宜,性价比高,因此被广泛的使用在工业设备和教学实验中。单片机、温湿度传感器、液晶显示等模块的供电为5V,而NRF905的供电电压为3.3V,所以需要对系统的供电电源进行降压后,再对无线模块进行供电。本系统选择的3.3V稳压芯片为AMS1117。在该芯片的输入、输出端加上退耦、滤波电容后就可以为无线模块提供稳定的3.3V电压。4 硬件设计4.1 温湿度传感器的电路设计温度传感器的供电电源为5V,当连接距离少于20米时,

29、DTH21的DATA引脚通过一个5K的上拉电阻与单片机进行连接。DHT21传感器的引脚特性如表4.1所示:表4.1DHT21传感器的引脚特性表管脚名称注释1VDD供电 3.3-5.5VDC2DATA串行数据,单总线3GND接地,电源负极4NC空脚在使用DHT21的过程中,要注意以下两点:(1) 如果器件工作在非规定的围,则在湿度的测量过程中可能会造成3%RH左右的短暂性的漂移信号。当返回到正常的工作环境后,器件可以慢慢恢复到校准状态。若传感器长时间工作在非规定的围,会加速器件的老化。(2) 为了使传感器测得的数据更加准确,应确保室稳定相对稳定,这样才能测出相对准确的湿度值。在器件的放置时,应该

30、使传感器远离发热量大的器件,同时保持传感器外壳良好痛风性。4.2 无线模块电路设计无线收发模块是本系统的一个很重要的模块,是两个单片机实现通信的桥梁。采用NRF905来设计,可以满足系统设计的需求。在使用该收发模块时,有以下几点需要特别说明:(1) 电源引脚的电压应为1.9V-3.6V。如果超过3.6V,会烧坏模块,所以一般采用3.3V的电源给模块进行供电。(2) 模块的13引脚与14引脚要跟整个系统的逻辑地相连接。(3) 如果单片机没有集成硬件SPI,可以使用一般的I/O口,模拟SPI的读写时序,从而实现SPI通信。(4) 如果使用的微处理器是51系列单片机,模块引脚与P0口相接,需要加10

31、K的上拉电阻,其他接口不需要。如果是与5V的单片机相连,最好加限流电阻,如果与3.3V的单片机,可以直接跟I/O口相连。4.3 无线模块的工作方式NRF905有四种不同的工作模式,分别为掉电模式、空闲模式、发送模式和接收模式。前两种是节电模式,后两种是正常模式。通过对TRX_CE、TX_EN和PWR_UP的设置来控制NRF905的工作模式。如表4.2所示:表4.2NRF905工作模式PWR_UPTX_ENTRX_CE工作模式0XX掉电和SPI编程1X0Standby和SPI编程101RX111TX无线模块工作在ShockBurst TM模式,为了降低功耗,使用模块片的先入先出堆栈区,将数据从单

32、片机以高速发送出去。因此,即使是低俗的单片机,数据发送速度也可以非常高。这样数据在空中停留的时间变短,增强了抗干扰能力,提高系统可靠性。由于条件限制,系统还得考虑功耗问题。在此模式下,模块的平均工作电流减少,降低了能耗。NRF905还会自动处理数据与CRC校验码。即发送数据时,自动加上数据与CRC检验码,在接收数据时,自动去掉数据与CRC校验码。数据在发送和接收完成的情况下,DR引脚都会被拉高。NRF905的节能模式分别是关机模式和掉电模式。当模块工作在掉电模式下的时候,电流很小,仅为2.5uA左右。当模块处于关机模式时,停止工作。系统不再进行接收或者发送数据,但是配置字中的数据将保存原来的状

33、态。当系统处于等待接收状态时,功耗会非常低。此时,模块上的晶振仍处于工作状态。这种工作模式可以节能,因为工作电流很小。模块从空闲模式转换到接收或者发送模式的时间很短,仅为650us13。4.4 液晶显示电路液晶显示屏的种类很多,不同的设计需要选择不同的产品。本系统对液晶屏的显示要求很低,所以选择LCD1602液晶屏。这款液晶屏共16个引脚,带背光接口。1602的各个引脚接口如表4.3所示:表4.31602的各个引脚接口表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据

34、6EN使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极1602的主要引脚介绍:LCD1602的电源和地引脚分别为VDD和VSS,只有当这两个引脚正确连接时,液晶才能正常工作。VL引脚是用来实现对比度调节功能的。通过电位器调整VL引脚的分压,可以改变液晶的对比度。当VL接地时,对比度最高,会造成看不清液晶屏上显示的字符。RS引脚是一个重要的引脚,控制寄存器的选择。不同的寄存器控制液晶不同的功能。当RS为高电平时选中数据寄存器。当RS为低电平时选中指令寄存器。R/W为读写选择引脚。该引脚为高电平时,是读操作;该引脚为低电平时,是写操作。EN引脚为液晶使能引脚,从高电

35、平变为低电平时,进行写入操作。D0-D7为数据引脚。LCD1602的这8位数据引脚是双向的,不但可以对1602写入数据,也可以读取1602上面的数据。读写功能由R/W引脚控制。BLA和BLK分别是背光调节的正极跟负极。由于STC12C560S2的I/O口的电流驱动能力有限,每个I/O口平均为20毫安,不足以驱动蜂鸣器进行发声报警。因此要采用三极管对I/O口的电流进行放大,然后再去驱动蜂鸣器。蜂鸣器分为有源蜂鸣器和无源蜂鸣器。只要给有源蜂鸣器两端加上何时的电压电流,它就会发出声音,因为它部集成了振荡源;而对于无源蜂鸣器,部没有振荡源,所以需要给它加上2K5KHz的方波才会发出响声。因为本系统只要

36、蜂鸣器发出警报声,因此采用有源蜂鸣器,这样电路更加简单。用于报警电路作为电流放大的三极管8050是非常常见的NPN型晶体三极管,在各种放大电路中经常看到它,应用围很广,主要用于功率放大、开关。该三极管的集电极最大电流为0.5A,直流电增益为1060,功耗为625毫瓦。5 系统软件设置5.1 软件设计的总体架构整个系统的程序设计采用模块化思想,将各个模块的功能编程独立的子函数,在主函数中调用各个子函数,从而实现本系统的功能。主要的模块功能包括:初始化程序、温湿度传感器采集温湿度程序、无线模块收发数据程序、液晶显示程序和蜂鸣器报警程序。其中,初始化程序分别包括:传感器初始化、LCD1602初始化和

37、NRF905初始化。无线收发模块程序包括:打包发送温湿度数据,接收温湿度数据并进行拆包。系统的上位机程序流程图如图5.1所示:图5.1上位机发送数据程序流程图由上面的流程图可以看出:当系统上电后,首先进行初始化操作,即初始化传感器和NRF905无线模块。然后单片机读取温湿度传感器的数据,将其存储起来。通过无线模块将数据进行打包,加上CRC检验码后,发送出去。如果数据还没发送完成,即DR引脚还没被置高,则继续执行发送程序。当发送完毕后,再读取下一次数据,接着发送出去。图5.2下位机接收数据流程图由下位机的流程图可以看出,当系统上电后,也是首先进行一系列初始化处理。其中包括1602液晶显示初始化,

38、NRF905初始化。当检测到匹配的地址后,NRF905开始接收数据,对数据进行解包,去除CRC检验码后把数据存储到寄存器。单片机读取NRF905上的数据,在液晶屏上显示出来。同时判断温湿度的围,如果超出设定的围,则蜂鸣器发出警报声。温湿度的围可以通过系统上的按键进行设定。5.2 温湿度传感器程序设计DHT21的供电电压为5V,当系统上电后,温湿度传感器会有1秒的不稳定状态,因此在系统中要通过延时等操作,跳过这个不稳定状态后再对DHT21进行读写操作。设计电路时,最后在电源与地间加上一个去耦滤波电容,使系统更加稳定。单片机与温湿度传感器是通过单总线进行通信的,通讯时间大约为5毫秒。40位传输数据

39、下面所示:数据格式=16位湿度数据+16位温度数据+8位检验和。其中,40位数据里面,高位在前,低位在后。后八位检验和由前面湿度的高8位加上低8位,再加上温度的高8位与低8位组成。如图5.3所示:图5.340位数据组成系统上电工作后,单片机给温湿度传感器发送指令,使DHT21从低功耗模式迅速切换到高速模式,给单片机传回一个应答信号。接着发送采集到的40bit数据给单片机进行处理。因为传感器传输两次数据给单片机有一定的时间间隔,当这个间隔时间比较长的时候,需要再采集一次数据才能获得最新、最准确的数据。当上位机不工作的时候,单片机与传感器直接的单总线处于高电平状态。两者开始通信的时候,单片机需要先

40、将总线拉低110毫秒,然后再释放。接着延时2040微秒后,单片机检测传感器发来的应答信号。两者的通讯时序图如图5.4所示:图5.4通讯时序图DHT21的应答信号是一个大约80微秒的低电平,然后再拉高总线约80微秒,接着系统将进入数据传输状态。时序图如图5.5所示:图5.5数据传输时序图经过80微秒后,开始传送数据位。每一位数据是由一段高电平和一段低电平组成。所有数据位的低电平维持的时间一样,大约为50微秒,代表数据位的开始。后面的高电平维持的时间长短决定该数据位是“1”还是“0”。其中,高电平维持时间长的为数据“1”,高电平维持时间短的为数据“0”。当传输完最后一位,DHT21将总线拉为低电平

41、,维持大约50微秒,再将总线释放。DHT21传感器采集湿度和温度的程序如下所示:/温湿度读取子函数void read_byte() uchar i,temp,delay; for(i=0;i<8;i+) delay=2; while(!DHT)&&delay+); /等待DHT变高电平 delay:防止死循环 delay_1us(30); /延时30us 如果还是高电平则为1 temp=0; if(DHT) temp=1; /高位先出 delay=2; while(DHT)&&delay+); if(delay=0) break;/超时读取就错误 comd

42、ata<<=1; comdata|=temp; /温湿度读取函数void read_rh() uchar delay,check,error=0; DHT=0; Delay_1ms(18);/ DHT=1; delay_1us(20); DHT=1; if(!DHT) delay=2; while(!DHT)&&delay+); delay=2; while(DHT)&&delay+); read_byte(); dht_date0=comdata; read_byte(); dht_date1=comdata; read_byte(); dht_d

43、ate2=comdata; read_byte(); dht_date3=comdata; check=comdata; DHT=1; if(check = (uchar)(dht_date0+dht_date1+dht_date2+dht_date4) humidity=dht_date0; humidity<<=8; humidity|=dht_date1; temperature=dht_date2; temperature<<=8; temperature|=dht_date3; 由温湿度读取函数可以看出,当进行数据采集时,通过程序将单总线拉低110毫秒,然后再

44、释放总线。经过2040微秒的等待时间后,单片机检测DHT21传感器的应答信号。在进行数据传输之前,传感器先给一个大约80微秒左右的低电平。之后再被传感器拉高大约80微秒。然后通过调用读取温湿度子函数,将采集到的数据存储到数组里面。当数据读取完毕后,进行检验码判断,如果两者相等,则读取数据正确。5.3 无线模块程序设计无线模块程序由两部分组成,分别是上位机发送数据与下位机接收数据。即上位机给下位机发送命令与地址。如果下位机应答,则上位机进入数据发送状态。当发送完成一次数据后,进入下一次的命令与地址的发送。下位机主要是等待上位机发送的地址和命令,当检测到跟自己地址匹配的地址后,进入数据接收模式。成

45、功接收完一次数据后,进入下一次数据的接收。无线模块与单片机之间的通信是通过SPI协议进行的,一般的I/O口可以通过软件模拟SPI的读写时序实现无线模块NRF905与STC12C560S2单片机的通信。本系统采用软件模拟SPI读写时序的方式。程序如下:/SPI读函数unsigned char SpiRead(void)unsigned char j;for (j=0;j<8;j+) DATA_BUF=DATA_BUF<<1;SCK=1;if (MISO) /读取最高位,保存至最末尾,通过左移位完成整个字节DATA_BUF|=BYTE_BIT0;elseDATA_BUF&

46、=BYTE_BIT0;SCK=0; return DATA_BUF;由SPI读函数可以看出,读取的数据将存储在变量DATA_BUF。将SCK置高后看,读取MISO上的数据,然后保存到DATA_BUF的最低位。读取完毕后将SCK拉低,把DATA_BUF上的数据全部往左移动一位,再进行下一次数据的读取。这样循环8次后,直到读完一个字节数据。读取数据时,总是高位在前,低位在后。/SPI写函数void SpiWrite(unsigned char send)unsigned char i;DATA_BUF=send;for (i=0;i<8;i+)if (DATA7) /总是发送最高位MOSI=

47、1;elseMOSI=0;SCK=1;DATA_BUF=DATA_BUF<<1;SCK=0;由SPI写函数可以看出,首先准备好需要发送的数据,通过参数send 传递给DATA_BUF变量。然后从最高位开始发送,判断DATA_BUF最高位的状态,如果为数字“1”,则把MOSI赋值为“1”;如果为数字“0”,则把MOSI赋值为“0”。将SCK拉高后,把DATA_BUF上的数据左移一位,再将SCK置低。这样循环8次,就把一个字节的数据通过MOSI发送出去了。5.4.1 无线模块寄存器配置在系统上电的时候,首先要进行一些的初始化操作,初始化SPI控制寄存器、初始化SPI接口和初始化NRF9

48、05。无线收发模块NRF905的SPI接口由五个寄存器控制。分别为:接收数据有效寄存器、发送有效数据寄存器、发送地址寄存器、RF配置寄存器和状态寄存器。状态寄存器的状态分为数据就绪和地址匹配两种状态。它的功能主要是用来确定系统是否进入准备阶段,主要判断数据是否准备好,地址是否匹配。RF配置寄存器的功能主要是配置收发的频率和输出功率等。发送地址寄存器的作用是存储目标寄存器的地址,字节的长度可以通过配置寄存器进行设置。发送有效寄存器是用来发送有效的ShockBurst数据包,而接收有效数据寄存器是用来接收有效的ShockBurst数据包。配置好NRF905部的五个控制SPI的寄存非常重要,因为这些

49、寄存器与数据的发送与接收相关。首先将无线模块进行初始化,设置工作模式为节电模式,然后通过SPI协议向NRF905无线模块部写配置信息。主要代码如下:/NRF905初始化void nRF905Init(void) CSN=1;/ Spi disableSCK=0;/ Spi clock line init lowDR=1;/ Init DR for inputAM=1;/ Init AM for inputCD=1;/ Init CD for inputPWR=1;/ nRF905 power onTRX_CE=0;/ Set nRF905 in standby modeTXEN=0;/ set

50、 radio in Rx mode/NRF905寄存器配置信息unsigned char idata RFConf11= 0x00, /配置命令/ 0x4c, /CH_NO,配置频段在430MHZ 0x0c, /输出功率为10db,不重发,节电为正常模式 0x44, /地址宽度设置,为4字节 0x20,0x20, /接收发送有效数据长度为32字节 0xCC,0xCC,0xCC,0xCC, /接收地址 0x58, /CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振;/初始化寄存器void Config905(void)uchar i;CSN=0;/ Spi enable for wri

51、te a spi commandSpiWrite(WC);/ Write config command写放配置命令for (i=0;i<11;i+)/ Write configration words 写放配置字 SpiWrite(RFConfi);CSN=1;/ Disable Spi由初始化函数可以看出,通过SPI配置NRF905,首先要讲SCN拉低,即SPI使能。通过调用SPI向NRF905写入WC指令,然后开始写入配置信息。利用for循环依次写入11个配置信息。最后再将SCN置高,关闭SPI接口的读写功能。5.4.2 发送程序设计发送程序是用来将上位机的温湿度传感器采集到的温湿度

52、经过打包与加CRC检验码后发送给下位机。发送过程是单片机控制NRF905无线模块进行的,单片机通过SPI将数据传输给无线模块。无线模块将数据放入发送数据寄存器,再发送出去,同时将接收端的地址一起发送出去。发送数据的程序代码如下:/设置发送状态void SetTxMode(void)TRX_CE=0;TXEN=1;Delay(3); / delay for mode change(>=650us)通过NRF905的TRX_CE 引脚和TXEN引脚控制无线模块的工作模式,当TRX_CE=0并且TXEN=1的时候,系统处于发射状态。状态的转换时间大约为650微秒。将数据进行打包发送和发送匹配地

53、址的程序代码如下: /发送数据void TxPacket(uchar *TxRxBuf)uchar i;CSN=0;/ Spi enable for write a spi commandSpiWrite(WTP);/ Write payload commandfor (i=0;i<1;i+) SpiWrite(TxRxBufi);/ Write 32 bytes Tx dataCSN=1;/ Spi disableDelay(1);CSN=0;/ Spi enable for write a spi commandSpiWrite(WTA);/ Write address comman

54、dfor (i=0;i<4;i+)/ Write 4 bytes addressSpiWrite(TxAddressi);CSN=1;/ Spi disableTRX_CE=1;/ Set TRX_CE high,start Tx data transmissionDelay(1);/ TRX_CE=0;/ Set TRX_CE low从上面的发送程序可以看出:首先拉低SCN,使能SPI,然后通过调后SPI写函数,向NRF905写入WTP命令,才能进行下一步数据的传输。然后通过for循环,调用SPI写函数,将发送数据写到发送数据寄存器。将SCN置高,然后再拉低,写入WTA命令,然后再利用for循环写入接收端的地址。然后将数据和地址发送出去,如果DR引脚被置高说明数据和地址被成功发送出去14。5.4.3 接收数据程序设计首先要初始化NRF9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论