温度监控系统的设计
无需注册登录,支付后按照提示操作即可获取该资料.
随着"信息时代"的到来,作为获取信息的手段--传感器技术得到了显著的进步,其应用领域越来越广泛,对其要求越来越高,需求越来越迫切。传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握各类传感器的基本结构、工作原理及特性是非常重要的。
由于传感器能将各种物理量、化学量和生物量等信号转变为电信号,使得人们可以利用计算机实现自动测量、信息处理和自动控制,但是它们都不同程度地存在温漂和非线性等影响因素。传感器主要用于测量和控制系统,它的性能好坏直接影响系统的性能。因此,不仅必须掌握各类传感器的结构、原理及其性能指标,还必须懂得传感器经过适当的接口电路调整才能满足信号的处理、显示和控制的要求,而且只有通过对传感器应用实例的原理和智能传感器实例的分析了解,才能将传感器和信息通信和信息处理结合起来,适应传感器的生产、研制、开发和应用。另一方面,传感器的被测信号来自于各个应用领域,每个领域都为了改革生产力、提高工效和时效,各自都在开发研制适合应用的传感器,于是种类繁多的新型传感器及传感器系统不断涌现。温度传感器是其中重要的一类传感器。其发展速度之快,以及其应用之广,并且还有很大潜力。
为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本文利用单片机结合传感器技术而开发设计了这一温度监控系统。文中传感器理论单片机实际应用有机结合,详细地讲述了利用热敏电阻作为热敏传感器探测环境温度的过程,以及实现热电转换的原理过程。
本设计应用性比较强,设计系统可以作为生物培养液温度监控系统,如果稍微改装可以做热水器温度调节系统、实验室温度监控系统等等。课题主要任务是完成环境温度检测,利用单片机实现温度调节并通过计算机实施温度监控。设计后的系统具有操作方便,控制灵活等优点。
本设计系统包括温度传感器,A/D转换模块,输出控制模块,数据传输模块,温度显示模块和温度调节驱动电路六个部分。文中对每个部分功能、实现过程作了详细介绍。整个系统的核心是进行温度监控,完成了课题所有要求。
设计要求
控制要求
(1)生物繁殖培养液的温度要保证在适于细胞繁殖的温度内,这主要在控制程序设计中考虑。温度控制范围为15 ~25,升温、降温阶段的温度控制精度要求为0.5度,保温阶段温度控制精度为 0.5度 。
(2)微机自动调节 正常情况下,系统投入自动。
(3)模拟手动操作 当系统发生异常,投入手动操作。
(4)微机监控功能 显示当前被控量的设定值、实际值,控制量的输出。
受控对象的数学模型
生物繁殖的培养液主要用于生物的繁殖研究,而温度是影响生物繁殖的重要因素。本系统要求长时间监视培养液的温度,并对当前的温度进行控制。本控制对象为生物繁殖用培养液,采用继电器进行控制。
系统的硬件配置
单片机和系统总线
单片机:PIC16F877A(PIC16F877A为美国MICORCHIP公司生产的带A/D转换的8位单片机)。
显示系统:商用计算机。
用户内存:256M RAM。
系统总线:RS-232-C接口(又称 EIA RS-232-C)RS232 C有25条线,,分为5个功能组,包括4条数据线,11条控制线,3条定时线,7条备用线和未定义线。
操作系统:Windows 2000。
硬件电路板的制作
本设计中需要有2个继电器控制外围温度调节系统,2个LED用来提示串口数据指示,还有一个PIC16F877A单片机,一个Max232电平转换器,一个有源晶体振荡器及其外围电阻电容等。在确定电路的正确性,可行性之后,开始使用Protel对它进行布图。
Protel是一个很好用的电子制作工具,它还可以进行仿真。在画原理图的过程中,原理图中的元件库中可能找不到自己要找的元件,如PIC16F877A等,所以要自己画元件。在画原理图后,选择将元件自动编号,然后根据需要更改部分元件的编号。在定好元件编号后,使用TOOLS中的ERC进行检查,它会提示是否有编号相同的元件等错误。在ERC检查无误后,便可以开始封装了。同样,部分元件的封装在PCB库中找不到或者是有出入,如按键开关,2位拨码开关在PCB库中找不到,所以需要自己根据元件的实际大小和相应的原理图中引脚编号,做出正确的封装。
附 录1
(1)本设计使用的部分单片机程序如下:
#include <pic.h>
//*************************
void INIT()
{
ADCON1=0X07;
TRISC=0X80;
TRISB=0X00;
TRISD=0X00;
RD1=0;
RD0=0;
TRISA=0X0f;
TRISE=0X00;
}
//*************************
#include <pic.h>
#include "init.h"
#include "proc.h"
//*************************
unsigned char i;
unsigned int delay;
extern unsigned char a;
extern unsigned char temph;
extern unsigned char templ;
//***************************
void main()
{
//初始化
INIT();
for(delay=65536;delay>0;delay--) asm("clrwdt");
temph=0x35;
templ=0x30;
do
{
asm("clrwdt");
PROCDIANPIN();
RC0=0;
RC1=0;
}while(1);
}
#include <pic.h>
#include "tranpc.h"
//*********************
union adres
{
int y1;
unsigned char adre[2];
}adresult;
extern unsigned int delay;
unsigned int temp;
unsigned int y;
unsigned char receive;
unsigned char a;
extern unsigned char rxbuf[];
unsigned char temph;
unsigned char templ;
extern unsigned char i;
//******************************
void PROCDIANPIN()
{
ADCON0=0X89;
ADCON1=0X84;
ADIF=0;
ADGO=1;
for(delay=0x8ff;delay>0;delay--) asm("nop");
while(ADIF==0)
{
asm("clrwdt");
}
asm("clrwdt");
ADIF=0;
adresult.adre[0]=ADRESL;
adresult.adre[1]=ADRESH;
if((adresult.y1<=0x204)&&(adresult.y1>=0xD9))
{
temp=0x10;
for(
y=0x204;adresult.y1<=y;adresult.y1=adresult.y1+0x07)
{
temp++;
if(temp==0x1a) temp=0x20;
if(temp==0x2a) temp=0x30;
if(temp==0x3a) temp=0x40;
if(temp==0x4a) temp=0x50;
if(temp==0x5a) temp=0x60;
if(temp==0x6a) temp=0x70;
if(temp==0x7a) temp=0x80;
if(temp==0x8a) temp=0x90;
if(temp==0x9a) temp=0x100;
}
}
TXPC(temp);
RC0=1;
RXDATAS();
if(rxbuf[0]!=0)
{
if((rxbuf[0]==0x10)&&(rxbuf[1]==0xff)) receive=0xff;
else if(rxbuf[0]==0x20)
{
templ=rxbuf[1];
temph=rxbuf[2];