一、设计题目
SHT75温湿度检测系统
二、设计目的
在工业现场,特别是那些环境因素对生产过程影响比较大的车间,对现场环境因素的监测很重要,而随着工业自动化的迅速发展,工业以太网在工业中应用的普及,它能使用户对现场的一些环境因素实现一个远程的监测,突显其便利性和适时性。本系统就是基于SHT75温湿度传感器,利用工业以太网技术,实现对工业现场的温湿度的远程监测。
三、设计原理
在工业现场中使用温湿度传感器,为了达到远程监测的目的,就少不了与工业以太网或其它工业现场总线网络相连,本系统就利用工业以太网技术,由传感器SHT75采集工业现场的温湿度,经过CPU处理,通过工业以太网进行通信,实现上位机对现场环境温湿度的数据采集、监测。
本温湿度测量系统包含了微处理器(C8051F120)、存储器、传感器模块、网络通信接口、串口通信等重要组成部分。在该设计中,电源使用了以太网供电设备,该设备除了用于网口通信,还提供设计中所需要的电源。该电源经过电平转换,为微处理器、存储器、传感器模块等提供所需的+5V和+3.3V电压。微处理器C8051F120通过I/O口与传感器模块进行数据交换。温湿度测量系统的硬件框图如图1所示。
图1 温湿度测量系统框图
由proteus画出的原理图如下:
图2 原理图
四、流程图
主程序结构主要由CPU与SHT75之间的数据传递和传感器与上位机的数据传递并在上位机显示两部分组成。在数据传递部分,首先需要对CPU与SHT75对应I/O口以及相关寄存器的初始化,然后通过CPU发送命令启动数据的传输,之后,传感器开始进行信号的采集和数据的交换,CPU对数据进行处理,当进行完一次采集和传递后,再通过通信复位来循环工作;在上位机显示部分,只需找一入口地址,把CPU处理好的数据传给上位机,再通过EPA组态软件来对数据进行客观的显示。程序结构如图3所示。
图3 程序结构
在本系统数据传递过程中,主要经过的是启动传输、字节的读与写、状态寄存器的读与写、最终数据的读取和通信的复位几部分。
五、主要组成部分5.1单片机晶振电路:
单片机系统里都有晶振,如下图所示(左图为内部振荡方式,右图为外部振荡方式)在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。
图4 晶振电路
5.2单片机复位电路:
复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。
图5 Protues仿真的晶振及复位图
5.3 温湿度采集模块的内部设计5.3.1处理器C8051F120
C8051F120是美国Cygnal公司的一款控制芯片,它使用 Silicon Lab 的专利 CIP-51 微控制器内核,具有64个数字I/O 引脚、片内VDD 监视器、看门狗定时器和时钟振荡器,它使C8051F120器件成为真正能独立工作的片上系统;FLASH 存储器具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051固件;片内 JTAG 调试电路允许使用安装在最终应用系统上的产品 MCU 进行非侵入式(不占用片内资源)、全速、在系统调试,该调试系统支持观察和修改存储器和寄存器,支持断点、观察点、单步及运行和停机命令;它能在工业温度范围(-45℃到+85℃)处工作,这些完全满足在工业现场使用的要求。
微处理器部分的设计包含系统硬件的启动与复位、地址总线、数据总线的分配和定义、与外设传感器的连接等;系统由外部的22M钟振作为时钟源向CPU输入时钟信号;复位电路由10μF的电容、10K电阻组成低电平复位电路,该复位电路可实现上电低电平自动复位。
5.3.2 传感器模块
SHTxx 系列单芯片传感器是由瑞士Sensirion的一款含有已校准数字信号输出的温湿度复合传感器。传感器包括一个电容式聚合体测湿元件和一个能隙式测温元件,并与一个 14 位的 A/D 转换器以及串行接口电路在同一芯片上实现无缝连接。SHTxx采用串行接口,它的分辨率可以根据对现场的采集速率而进行调整,一般情况下默认的测量分辨率分别为 14bit(温度)、12bit(湿度),如果在高速采集中就可分别降至 12bit 和 8bit,对温度的量程范围:-40~123.8℃,湿度的量程范围:0~100%RH。它操作比较简单,只需用一组“ 启动传输”时序,就能实现传感器数据传输的初始化,同时,在测量和通讯结束后,SHTxx 会自动转入休眠模式,这大大的减少了功耗。我们选择的是SHT75,它的结构框图如图6所示。
图6 SHT75结构框图
SHT75与微处理器的连接,是通过C8051F120的两个I/O口来分别与传感器SHT10的SCK引脚和DATA引脚相连,来实现数据的交换;VDD与3.3V电压相连。为避免信号冲突,微处理器应驱动DATA 在低电平,所以还必须在I/O电路中,DATA引脚上加上一个上拉电阻将信号提拉至高电平,用一个10KΩ的电阻接至3.3V电压。原理图如图7所示
图7 温湿度传感器电路连接
5.3.3 网络通信接口
在设计中采用网络接口将温湿度传感器接入工业以太网,数据由以太网传递到上位机中,实现工业现场的设备和上位机的通信。网络隔离器采用的是HR61H50L,网卡芯片使用的是RTL8019AS。
RTL8019AS 是REALTEK公司的高度集成以太网控制器,它能够简单的解答即插即用 NE2000兼容适配器,这种适配器具有二重和功率下降特性。通过三电平控制特性,RTL8019AS是对网络设备 GREEN PC 理想的选择。全二重功能能够模拟传播和接收在双绞线到全二重以太网交换机。这个特性不仅使带宽从10到20MBPS,而且避免了由于以太网频道争夺特性导致的读出多路存取协议的问题。为了提供完全解决即插即用方案,RTL8019AS集成10BASET收发器,BNC,和AUI接口之间的自动检测功能。此外,8条IRQ 总线和16条基本地址总线为大资源情况下提供了宽松的环境。RTL8019AS用 16k字节SRAM 设计在单片芯片上,它的设计不仅提供了更友好的功能,而且节省了 SRAM 存储资源。RTL8019AS的地址总线SA[7:0]与数据总线SD[7:0]分别与C8051F120的地址/数据总线相连。
5.4显示屏显示设计:5.4.1液晶显示原理:
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
5.4.2字符的显示:
用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
图8 液晶显示模块仿真图
六、总结
本方案使用瑞士SENSIRION公司生产的温湿度传感器SHT75进行温湿度实时监测,该传感器具有体积小、功耗低,使用电池供电可以长期稳定运行,防浸泡等特性,使其在高湿度条件下也可以正常工作,该实验对该器件进行仿真测试,所读取的温湿度数据用液晶屏刷新显示。
从这次的设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我们在这次设计中的最大收获。
#include <reg52.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h>
#define LCD_DB P0
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
#define uchar unsigned char
#define uint unsigned int
void LCD_init(void);
void LCD_write_command(uchar command);
void LCD_write_data(uchar dat);
void LCD_disp_char(uchar x,uchar y,uchardat);
voidLCD_disp_str(uchar x,uchar y,uchar *str);
void delay_n10us(uint n);
void LCD_init(void)
{
delay_n10us(10);
LCD_write_command(0x38);//设置8位格式,2行,5x7
delay_n10us(10);
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
delay_n10us(10);
LCD_write_command(0x06);//设定输入方式,增量不移位
delay_n10us(10);
LCD_write_command(0x01);//清除屏幕显示
delay_n10us(100); //延时清屏,延时函数,延时约n个10us
}
void LCD_write_command(uchar dat)
{
delay_n10us(10);
LCD_RS=0; //指令
LCD_RW=0; //写入
LCD_E=1; //允许
LCD_DB=dat;
delay_n10us(10); //实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
LCD_E=0;
delay_n10us(10); //实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
}
void LCD_write_data(uchar dat)
{
delay_n10us(10);
LCD_RS=1; //数据
LCD_RW=0; //写入
LCD_E=1; //允许
LCD_DB=dat;
delay_n10us(10);
LCD_E=0;
delay_n10us(10);
}
void LCD_disp_char(uchar x,uchar y,uchardat)
{
uchar address;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
LCD_write_data(dat);
}
void LCD_disp_str(uchar x,uchar y,uchar*str)
{
uchar address;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
while(*str!='\0')
{
LCD_write_data(*str);
str++;
限于篇幅,后续程序在附件中下载
51hei下载地址:
温湿度检测.docx
(20.04 KB, 下载次数: 52)
|