




免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第16章 基于rs-485总线的湿度检测系统第16章 基于rs-485总线的湿度检测系统本章主要内容包括:1 湿度传感器的介绍 rs-485总线通信 rs-485与rs-232转换接口 系统设计及实现第16章 基于rs-485的湿度检测系统湿度检测系统在仓储管理、生产制造、气象观测、科学研究以及日常生活中被广泛应用,利用计算机实现自动检测将大大简化检测过程,并节约大量人力物力资源。本章介绍利用单片机和计算机实现自动检测系统,它涉及到湿度数据的采集和数据的传输,为了能够实现远距离传输,该系统采用rs-485总线通信。16.1 概述图16.1 系统框图该系统中主要包括如下几个模块:环境湿度数据的提取、数据的传输、总线电平的转换和计算机软件。系统框图如图16.1所示。由于计算机没有rs-485接口,故必须把485电平转换为232电平,所以必须设计两种电平的转换接口。rs-485总线的通信原理和设计在第十二章中做了详细的介绍,因此这里不再赘述,直接给出设计电路和程序,该系统中用到的rs-485芯片为max485。湿度检测分机负责检测环境湿度并把湿度志传输给计算机。该模块中的重要部分为湿度传感器的控制,湿度传感器的种类很多,不同的传感器的传输总线和精度有所不同,该系统采用瑞士sensirion公司生产的具有iic总线接口的单片全校准数字式相对湿度和温度传感器sht11。16.2 湿度传感器sht11shtxx是瑞士sensirion公司生产的具有iic总线接口的单片全校准数字式相对湿度和温度传感器。该传感器采用独特的cmosens tm技术,具有数字式输出、免调试、免标定、免外围电路及全互换的特点。其外观如图16.2所示。图16.2 shtssxx外观图16.2.1 sht11的特点考虑到使用体积较小的传感器,本系统使用sht11传感器,sht11为八引脚(lcc封装)的传感器,该传感器体积小,在pcb图上占面积小,集温度和湿度传感器于一体,同时还具有如下特点: 将温湿度传感器、信号放大调理、a/d转换、iic总线接口全部集成于一芯片(cmosenstm技术); 可给出全校准相对湿度及温度值输出; 带有工业标准的iic总线数字输出接口; 具有露点值计算输出功能; 具有卓越的长期稳定性; 湿度值输出分辨率为14位,温度值输出分辨率为12位,并可编程为12位和8位; 小体积(7.655.08mm),可表面贴装; 具有可靠的crc数据传输校验功能; 片内装载的校准系数可保证100互换性; 电源电压范围为2.4-5.5; 低功耗,测量时电流为550,平均电流为28,休眠时电流为3。16.2.2 sht11的接口sht11有8个引脚,但它通过4条线与其它元件相连,分别是电源(gnd、vcc)和iic总线(sck和data),sht11的结构框图如图16.3所示。从图16.3可以看出,该传感器中含有放大电路和a/d转换电路,所以在应用时只需和处理器用iic连接,读出数据即可。下面是sht11的各引脚说明: 电源引脚:sht11的供电电压为2.45.5v。传感器上电后,要等待11ms 以越过“休眠”状态,在此期间无需发送任何指令。电源引脚(vdd,gnd)之间可增加一个100nf 的电容,用以去耦滤波。 串行时钟输入 (sck):sck 用于微处理器与sht11之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小sck 频率。 串行数据 (data):data 三态门用于数据的读取。data 在sck 时钟下降沿之后改变状态,并仅在sck 时钟上升沿有效。数据传输期间,在sck时钟高电平时,data必须保持稳定。为避免信号冲突,微处理器应驱动data 在低电平。需要一个外部的上拉电阻(例如:10k)将信号提拉至高电平。上拉电阻通常已包含在微处理器的i/o 电路中。注意:shtx11的串行接口虽然是iic总线,但在传感器信号的读取及电源损耗方面,都做了优化处理;但与标准iic接口不兼容,故一般应用处理器模仿iic总线。图16.3 sht11结构框图1发送命令sht11与处理器通信之前用一组“启动传输”时序,来表示数据传输的初始化。它包括:当sck 时钟高电平时data 翻转为低电平,紧接着sck 变为低电平,随后是在sck 时钟高电平时data 翻转为高电平,如图16.4所示。图16.4 启动传输时序图启动传输后,后续指令包括地址位和命令位,其中有三个地址位(目前只支持“000”)和五个命令位。这个地方给你改了。不过感觉好像不对。请检查。(荆刚)sht11 会以下述方式表示已正确地接收到指令:在第8个sck时钟的下降沿之后,将data下拉为低电平(ack 位)。在第9个sck 时钟的下降沿之后,释放data(恢复高电平),如图16.5所示。表16.1为sht11的所有命令集。图16.5sht11测量时序图表16.1sht11的命令集命令代码预留0000x温度测量00011湿度测量00101读状态寄存器00111写状态寄存器00110预留0101x-1110x软复位:复位接口、清空状态寄存器,下次命令前等待至少11ms11102测量时序在进行测量温度或湿度时,需要先启动传输,后续需要向传感器发送三位地址和命令(温度测量为00011;湿度测量为00101),控制器要等待测量结束。sht11 通过下拉data至低电平并进入空闲模式,表示测量的结束。控制器再次触发sck时钟前,必须等待这个“数据备妥”信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。当测量结束后,接着传输2个字节的测量数据和1个字节的crc-8校验。处理器需要通过下拉data为低电平,以确认每个字节。所有的数据从msb开始,右值有效(例如:对于12bit数据,从第5个sck时钟起算作msb;而对于8bit数据,首字节则无意义)。当使用crc-8校验时,用crc数据的确认位,表明通讯结束。如果不使用crc-8 校验,控制器可以在测量值lsb后,通过保持确认位ack高电平,来中止通讯。传输时序如图16.5所示。在测量和通讯结束后,sht11自动转入休眠模式。16.2.3 sht11的状态寄存器sth11中含有一个状态寄存器,某些高级功能可以通过状态寄存器实现。状态寄存器的各位的具体含义如表16.2。表16.2状态寄存器位类型说明默认值7预留06r低电压检测:0对应vcc2.47 1对应vcc95 %rh) 环境中,加热传感器可防止凝露,同时缩短其响应时间,提高测量精度。警告: 加热后较之加热前,sht11将显示温度值略有升高、相对湿度值稍有降低。注意:传感器的输出值和湿度之间不是完全的线性变换,所以在获得湿度值时一般按照如下公式计算得到的。其中:sorh为从传感器读出的数值,c1、c2和c3的取值如下表:表16.3湿度转换系数sorhc1c2c312bit-40.0405-2.810-68bit-40.648-7.210-416.3 系统的硬件电路设计湿度检测系统主要由湿度数据采集模块、传输电平转换接口和计算机处理软件组成,在本章中我们主要讨论前两部分的设计。为适应远距离传输的条件,该系统使用rs-485总线传输。16.3.1 rs-485和rs-232转换接口 图16.6max485结构和管脚图由于计算机上没有rs-485接口,故计算机不能直接连接485总线,但计算机上有rs-232接口,所以可以先把485电平转换为232电平,再传输到计算机上,由计算机处理。在该接口中用到max232、max485和6n137,下面分别介绍。1rs-485驱动芯片max485max485是由maxim公司生产的低功耗rs-485收发芯片,内部集成了一个驱动器和一个接收器。结构及管脚图如图16.6所示。max485有8个引脚,是半双工通信的启动芯片,各引脚意义如下: ro:接收器输出端。 :接收器输出使能端。0:允许接收器输出;1:禁止接收器输出。 de:驱动器输出使能端。0:禁止驱动器工作;1:允许驱动器工作。 di:驱动器输入端。 gnd:接地端。 a:接收器非反相输入和驱动器非反相输出端。 b:接收器反相输入和驱动器反相输出端。 vcc:电源端,电压范围4.75v-5.25v。从max485各引脚的功能可以看出,该芯片工作在半双工状态,接收使能端和传输使能端正好处于两个相反状态,所以在进行硬件连接时,可以把这两个引脚连到一个单片机输出引脚上。由于rs-232的原理和连接在其他章节中介绍了,故在此不再过多赘述。2光电隔离技术为了提高数据传输的可靠性,防止两种电平信号的相互干扰,在两种电平之间采用了光电隔离技术。为了达到完全隔离效果,两个子系统应该用两套相互独立的电源供电,因此在电路设计当中采用了电源的光电隔离模块:dc-dc模块,该模块可以产生两个相互独立的电源。为达到隔离效果,在传输数据的信号线之间采用光电耦合器,由于信号的传输要求光耦具有高速特性,所以该系统中采用了高速光耦6n137,其内部结构和引脚图如16.7所示。 图16.7 6n137内部结构图从6n137的结构图可以看出,该光耦是通过发光二极管的导通和截止来控制另一端的导通和截止,信号输入端为anode端和cathold端,信号输出端为ve端和vo 端,内部结构中由于有一个反相器,所以通常输出电平为输入电平的反向电平。表16.4为6n137的逻辑真值表。表16.46n137的真值表发光二极管ledve端vo端onhloffhhonlhofflhonncloffnch由于6n137内部采用高强度红外发光二极管和高速高增益的光敏检测集成电路,从而能够满足在数字传输中的高速变化的逻辑电平。6n137典型的应用电路如图16.8所示。图16.86n137应用典型电路该电路应用于单片机的通信系统中的隔离技术,所以单片机控制端和数据通信端应用了两套相互独立的电源,分别用vcc和+5v表示,这样可以有效抑制系统对通信的干扰,从而提高通信的质量和距离。3电路设计该电路的设计主要由三部分构成,分别为电源部分,rs-485通信部分和rs-232通信部分。在该通信接口中由于用到了光电隔离技术,所以在电路中必须要用两套相互独立的电源。为了减少设计的复杂度,电路中用到了一个带光电隔离的dc-dc模块,该模块在一个电源输入的情况下能够产生另一个独立的电源。图16.9为该部分的电路。图16.9通信接口的电源电路图16.10dc-dc电源模块连接图图16.9中把220v交流电通过整流桥和变压模块lm317变为直流5v电源,图16.10中利用dc-dc电源模块产生两套独立电源,它们都是直流的5v电源。在通信接口中,通信中信号电平的转换顺序为:rs-232电平转换为ttl电平,ttl电平再转换为rs-485电平,前一次转换过程应用max232芯片,电路图如图16.11。图16.11rs-232电平转换ttl电平电路图电路中,接头采用9针的针式插头,可以直接连接到计算机的串行接口上。max232后方的传输线td和rd上传输的信号为ttl电平信号。ttl电平信号到rs-485电平的转换是利用max485芯片实现的,电路如图16.12所示。图16.12ttl电平转换rs-485电平电路图在rs-485通信中为了减小干扰,在总线两端增加了120的电阻,所以在电路的设计中增加了一个跳线,用于接入120电阻。为了防止max232和max485之间的相互干扰,在两个芯片传输线之间用6n137进行了光电隔离。图16.13光电隔离电路16.3.2 湿度检测分机电路设计图16.14分机通信模块电路原理图湿度检测分机负责检测外部环境的湿度,并把检测结果实时的传输到计算机上。假设计算机可以管理多个环境的湿度检测,则在系统中存在多台分机,为了能够区分各个分机,在每个分机上分配一个地址。根据分机的功能,可将分机划分如下几个功能模块:电源模块、通信模块和湿度检测模块。电源的设计与通信接口中的电源设计是相同的,同样应用了光电隔离技术。通信模块仍然用max485实现,电路图如图16.14所示。在图16.14中,由于max485的发送控制端de和接收控制端re的控制电平正好相反,故把此两个引脚共同连到单片机上进行控制,空闲状态下保持max485为接收状态。单片机和湿度传感器的电路比较简单,只要对应连到单片机的i/o线即可,如图16.15所示。图16.15分机显示及检测电路在图16.15中,sw为拨码开关,用于设置检测分机的地址号。分机除了向上位机传送当前的湿度值外,还将检测到的湿度值用led数码管显示出来,同时电路中应用了串转并电路74164以减少单片机端口的数量。为了提高系统的可靠性,电路增加了看门狗电路,并用max813l实现。16.4 系统的软件设计该系统的软件设计包括上位机软件和单片机程序的设计,该章中不具体介绍上位机软件的设计,只说明上位机软件的功能。上位机软件除了存储、查询和设置等功能外,与单片机向关的功能就是与单片机的数据通信,上位机软件用循环的方式查询各检测分机的检测数据。整个通信工程必须有统一的通信协议。16.4.1 系统通信协议的设定为了单片机能够快速高效的处理上位机软件发送到命令,单片机程序和上位机软件都必须按照统一的通信协议进行数据和命令的传输,从而使单片机能够快速响应上位机软件的命令。图16.16为通信的帧的格式。起始字符帧头字节数帧标志帧数据校验值帧尾图16.16通信帧格式 起始字符:该部分用于指示通信的开始。由两字节组成,两个ffh; 帧头:一字节,用于说明通信帧的开始, 68h; 字节数:一字节,用于指示该帧中的字节数目,其中不包括起始字符、帧头、检验值和帧尾; 帧标志:一个字节,表示本帧数据是命令帧(a5h)还是数据帧(5ah),命令帧用于上位机软件向检测分机查询湿度值,数据帧用于检测分机向上位机传送。 帧数据:每帧要发送到数据; 校验值:一字节,该校验为和检验,即将帧头、字节数、帧标志和帧数据求和; 帧尾:一字节,fah。命令帧的帧标志为a5h,帧中的数据为一字节的分机地址。数据帧的帧标志为5ah,帧中的数据为分机地址号和湿度值。当上位机软件进行查询数据时,若收不到检测分机的数据帧,则在延时一段时间后再次查询检测分机,如此三次,若仍收不到数据帧,则断定该检测分机出现故障。16.4.2 单片机程序设计检测分机的单片机程序包括如下几个模块:显示模块程序、湿度检测模块程序和通信模块程序。程序总流程图如图16.17。图16.16单片机程序流程图1函数声明及变量定义为方便程序的编写,把部分常用的变量进行伪定义。#include #define uchar unsigned char#define uint unsigned int#define bool bit#define true 1#define false 0sbit sck =p34;/iic时钟信号sbit sal =p35;/ iic数据线sbit led_sck =p32;/ 显示部分串转并时钟线sbit led_sal =p33;/ 显示部分串转并数据线sbit wdi=p37;/喂狗脚sbit ctr_485=p10;/rs_485总线传输控制uchar code led_char16= 0xfa,0x48,0xf4,0xdc,0x4e,0x9e,0xbe,0xc8,0xfe,0xde,0x00;/09,0x00为数码管不显示任何数字uchar address;/分机地址号uchar idata data_buffer20;/接收缓冲区bool command_send;void start(void) /sht11启动子程序uchar readreg(void)/ 读状态寄存器void writereg(uchar regdata)/ 写状态寄存器void intsht11(void)/ 设置sht11湿度检测工作在8位状态,状态寄存器bit0=0uchar readdata(void)/ 获取补偿前的sht11的返回值int getrh(void)/ 获取补偿后的湿度值void led_display(uchar right,uchar left)/ led显示子程序void display(int rh)/ 湿度值显示子程序uchar receive_data(void)/接收字节子程序void send_data(uchar serial_data)/ 串口发送一个字节函数bit receive_one(uchar *s)/ 接收一帧数据子程序void rxd_int(void) interrupt 4/串口接收中断子程序void send_one(uchar *s)/ 串口发送一帧数据子程序void send_rh(uchar rh)/ 命令处理子程序uchar get_address(void)/ 获取地址号子程序void inital(void)/ 初始化化子程序2环境湿度值采集程序的设计sht11与单片机的接口为串行iic总线,但单片机at89c2051没有iic接口,所以必须用单片机的i/o线模拟sht11的时序来完成数据和命令的传输。发送命令sht11与处理器通信之前用一组“启动传输”时序,来表示数据传输的初始化。如图16.4。它包括:当sck 时钟高电平时data 翻转为低电平,紧接着sck 变为低电平,随后是在sck 时钟高电平时data 翻转为高电平。*sht11启动子程序*/void start(void) sck=1;/时钟信号变高电平 _nop_(); _nop_(); sal=0;/数据线变低电平 _nop_(); _nop_(); sck=0; _nop_(); _nop_(); sck=1; _nop_(); _nop_(); sal=1; _nop_(); _nop_(); sck=0;设置工作模式sht11的工作模式的设置是对其状态寄存器的写入状态字。状态寄存器的每一位的意义在表16.4中已详细说明。在该章中sht11工作在8位分辨率的湿度测量中,所以状态寄存器的最低位应为1,而系统默认为0,所以需要对状态寄存器进行执行写入操作,在写入之前必须先进行读出,以保证状态寄存器的其它位不被修改。/*读状态寄存器返回值:状态寄存器值*/uchar readreg(void) uchar i,reg; start();/启动传输命令 _nop_(); _nop_(); _nop_(); sal=0;/发送地址000 for (i=0;i3;i+) _nop_(); sck=0; _nop_(); sck=1; wdi=0;wdi=1;/清看门狗 /发送读状态寄存器命令码00111 for (i=0;i2;i+) _nop_(); sck=0; _nop_(); sck=1; sal=1; for (i=0;i3;i+) _nop_(); sck=0; _nop_(); sck=1; sal=0;/保持一个周期的0 _nop_(); sck=0; _nop_(); sck=1; reg=0;wdi=0;wdi=1;/清看门狗 /开始读取状态寄存器值 for (i=0;i8;i+) sck=0; _nop_(); sck=1; reg=reg1; if (sal) reg=reg|0x01; else reg=reg&0xfe; sal=1; return reg;/返回状态寄存器值/*写状态寄存器入口参数:状态寄存器的设置值*/void writereg(uchar regdata)uchar i; start();/启动传输命令 _nop_(); _nop_(); _nop_(); sal=0;/发送地址000 for (i=0;i3;i+) _nop_(); sck=0; _nop_(); sck=1; /发送写状态寄存器命令码00110 for (i=0;i2;i+) _nop_(); sck=0; _nop_(); sck=1; sal=1; for (i=0;i2;i+) _nop_(); sck=0; _nop_(); sck=1; sal=1;_nop_(); sck=0; _nop_(); sck=1; sal=0;/保持一个周期的0 _nop_(); sck=0; _nop_(); sck=1;wdi=0;wdi=1;/清看门狗 /开始发送状态寄存器值 for (i=0;i8;i+) sck=0; if (regdata&0x80)sal=1;elsesal=0;sck=1; regdata=regdata1; sal=0; _nop_(); sck=0; _nop_(); sck=1;sal=1;/*初始化sht11工作模式设置sht11湿度检测工作在8位状态,状态寄存器bit0=0*/void intsht11(void) uchar reg;/先读出状态寄存器的值reg=readreg();reg=reg&0xfe;/设置最低位为0 wdi=0;wdi=1;/清看门狗writereg(reg);/写入状态字获取湿度值湿度值的读取中,没有读取传输中的校验字节,由于应用到8bit模式,所以没有接收传输的第一字节。/*读补偿前的sht11的返回值返回值:湿度值*/uchar readdata(void) uchar i,rhdata; start();/启动传输命令 _nop_(); _nop_(); _nop_(); sal=0;/发送地址000 for (i=0;i3;i+) _nop_(); sck=0; _nop_(); sck=1; /发送读湿度测量命令码00101 for (i=0;i5;i+)if (i=2|i=4)sal=1;elsesal=0; _nop_(); sck=0; _nop_(); sck=1; /时钟保持一个周期的 _nop_(); sck=0; _nop_(); sck=1;sal=1;/等待转换完成while(sal)wdi=0;wdi=1;/清看门狗/开始读取,第一字节忽略for (i=0;i8;i+)sck=0;_nop_();sck=1;_nop_();sck=0;_nop_();sal=0;sck=1;_nop_();rhdata=0;for (i=0;i8;i+)/开始读取一个字节的数据sck=0;_nop_();sck=1;_nop_(); if (sal) rhdata=rhdata|0x01; else rhdata=rhdata&0xfe;sal=1;/不再接收crc检验字节return rhdata;/*获取补偿后的湿度值返回值:湿度值*/int getrh(void)double c1,c2,c3,rh;uchar rh1;rh1=readdata();/读取sht11返回值c1=-4;c2=0.648;c3=-0.00000076;rh=c1+c2*rh1+c3*rh1*rh1;/补偿后的湿度值return (int)(rh+0.5);/四舍五入取整3通信程序设计该系统中通信波特率为4800,用中断方式进行接收。/*接收字节子程序返回值:串口接收到的字节*/uchar receive_data(void)ri=0;while(!ri) wdi=0;wdi=1;/清看门狗ri=0;acc=sbuf;return acc;/* 串口发送一个字节函数入口参数: 待发送数据*/void send_data(uchar serial_data) ti=0;sbuf=serial_data;while(!ti)wdi=0;wdi=1;/清看门狗ti=0;/*接收一帧数据子程序入口参数:数组s,用于存储收到的数据返回值:若接收正确,返回真值;否则返回假*/bit receive_one(uchar *s)uchar cs=0x00,serial_data;uchar i;wdi=0;wdi=1;/清看门狗ri=0;serial_data=sbuf;if(serial_data!=0xf1)return 0;doserial_data=receive_data();while(serial_data=0xf1);if(serial_data!=0x68)return 0;cs+=0x68;s0=receive_data();/发送来的数据长度也存储,便于转发cs+=s0;wdi=0;wdi=1;/清看门狗for(i=1;i=*s;i+)wdi=0;wdi=1;/清看门狗*(s+i)=receive_data();cs+=*(s+i);if(cs!=receive_data()return 0;if(receive_data()!=0xfa)return 0;if(s2!=address)/判断是否是本检测分机地址号return 0;return 1;/*串口接收中断子程序功能: 接收来自pc机的数据包*/void rxd_int(void) interrupt 4 using 1if(ri)cy=receive_one(data_buffer);if(cy)command_send=true;/* 串口发送一帧数据子程序入口参数:待发送的数据帧,保存在数组s中*/void send_one(uchar *s)uchar cs=0x68;uchar i;wdi=0;wdi=1; ctr_485=1;send_data(0xf1);send_data(0xf1);send_data(0x68);send_data(s0);cs=cs+s0;for(i=1;i=s0;i+)wdi=0;wdi=1; send_data(si);cs=cs+si;send_data(cs);s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美容机构营销活动方案策划
- 吉林建筑动画方案设计公司
- 吐鲁番工程顶管施工方案
- 营销推广咨询报价方案
- 改造小型超市建筑方案设计
- 移动服务站营销模式方案
- 编写施工方案思路怎么写
- 抖音营销方案是什么
- 商业街年度营销活动方案
- 常州整合营销报价方案
- 《春江花月夜》省公开课金奖全国赛课一等奖微课获奖课件
- 人音版小学六年级上册音乐教案(本)
- 19S406建筑排水管道安装-塑料管道
- 《福建省泰宁县》参考课件
- DIP 焊锡外观教材
- 中国儿童青少年身体活动指南
- 加油站人员培训和安全意识教育
- 全国职业大赛(中职)ZZ006水利工程制图与应用赛项赛题库共计10套
- 变压器租赁协议书x
- 高压电气设备试验的基本知识
- 整理我的小书桌(课件)小学劳动二年级通用版
评论
0/150
提交评论