温湿度监测电路设计报告.docx
- 文档编号:5441167
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:33
- 大小:441.42KB
温湿度监测电路设计报告.docx
《温湿度监测电路设计报告.docx》由会员分享,可在线阅读,更多相关《温湿度监测电路设计报告.docx(33页珍藏版)》请在冰豆网上搜索。
温湿度监测电路设计报告
主从式温度监测警报与控制系统
摘要:
本文以AT89S52单片机为主控器构成一个多功能的主从式温度监测警报与控制系统。
在文中详尽分析所设计电路的原理、所编写单片机程序及部分主要电路元件功能,结合实际焊接调试的问题和解决方案,给出我们完整的课程设计。
关键词:
AT89S52单片机、DS13B02、PC串口通信、温度监测
引言
在各工业生产部门经常会遇到对温度进行监测和控制的需要,而用微机构成温度控制系统有很大的实用意义。
微机测温、控温便于实现生产过程的自动化,具有操作简单、精度高、可靠性好、测量范围广等特点,可实现远距离巡回检测、安全报警、温度显示与打印、信息存储、数据通讯等功能。
1.主从式温度监测警报与控制系统设计及主要功能部分
本温度监测警报与控制系统的整体电路图如图一示,以AT89S52单片机为主控器,借助DS18B20一线总线数字式传感器的功能,采用四位数码管来显示实时温度。
当时是温度高于设置值时,蜂鸣器将会发出警报。
图一、监测报警与控制系统整体电路图
1.1AT89S52单片机
采用AT89S52单片机来对电路实施控制是十分高效的。
通过对程序的编写,可以随时根据实际需要改变电子钟的功能,使其具有可拓展性。
AT89S52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB可在线编程闪存。
在本课程设计中使用到的AT89S52主要特性如下:
1)8K字节可擦写1000次的在线可编程ISP闪存
2)全静态工作:
0Hz~24MHz
3)256字节内部RAM
4)32条可编程I/O线
5)3个16位定时器/计数器
6)8个中断源
7)通过中断终止掉电方式
8)看门狗定时器
图二、AT89S52引脚图
1.2DS18B20一线总线数字式传感器
DS18B20“一线总线”数字化温度传感器是DALLAS最新单线数字温度传感器,DS18B20支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS1822的精度较差为±2°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!
性能价格比也非常出色!
DS1822与DS18B20软件兼容,是DS18B20的简化版本。
省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。
DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
1.2.1DS18B20的内部结构
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列如图三示:
图三、DS18B20的管脚排列
DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
图四、12位转化后得到的12位数据
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
图五、各温度对应的数字输出
1.2.2DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。
第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。
第六、七、八个字节用于内部计算。
第九个字节是冗余检验字节。
该字节各位的意义如下:
TMR1R011111
低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如下表所示:
(DS18B20出厂时被设置为12位)
图六、分辨率设置表
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
1.2.3DS1820使用中注意事项
DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。
(2)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。
当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
(3)连接DS1820的总线电缆是有长度限制的。
试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。
当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。
这种情况主要是由总线分布电容使信号波形产生畸变造成的。
因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
(4)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。
这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。
1.3MAX232芯片
MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。
MAX232芯片的引脚介绍如图七所示。
图七、MAX232引脚图
第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5v)。
MAX232芯片的主要有以下特点
1)符合所有的RS-232C技术标准
2)只需要单一+5V电源供电
3)片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-
4)功耗低,典型供电电流5mA
5)内部集成2个RS-232C驱动器
6)内部集成2个RS-232C接收器
7)高集成度,片外最低只需4个电容即可工作。
图八、MAX232引脚接法原理图
1.4四位数码管显示
该温度计的显示采用四位共阴动态数码管来动态显示。
最高一位用来显示“+”或者“-”摄氏温度,中间两位用来显示当前的温度数值的“十位”和“个位”,最后一位用来显示当前的温度数值的“小数点后一位”。
如下图十一所示(显示的是“+32.8摄氏度”)。
图九、数码管显示(环境温度为32.8℃)
1.5蜂鸣器发声
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。
本课程设计采用压电式蜂鸣器。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
有的压电式蜂鸣器外壳上还装有发光二极管。
多谐振荡器由晶体管或集成电路构成。
当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。
图十、蜂鸣器发声电路
由于驱动蜂鸣器需要较大的电流,而单片机89S52芯片所提供的电流并不足以驱动蜂鸣器,所以要通大电流三极管来驱动蜂鸣器。
如图十三所示,蜂鸣器一端接地,一端通过三极管接高电平。
利用AT89S52单片机芯片输出的信号,通过三极管来驱动蜂鸣器。
2单片机主程序
图十一、单片机主程序流程图
2.1程序运行流程说明
当给电路供电时首先是对单片机的串口通信以及定时器的初始化,以便程序能正确运行。
随后程序开始调用温度获取函数,从温度传感器中获取当前温度。
然后对当前温度进行判断,以便当当前的环境温度超过温度所设置的范围时,能够及时对其进行处理。
监测温度完后便将当前的温度值送入到主机中,同时将其显示到数码管中,将温度直观化,方便人们对温度的观察与处理。
如果需要更改温度的的上下限值,可以通过主机进行设置。
首先,先向从机发送“S”待主机出现提示后,根据提示输入所需要设置的温度值,点击发送后,设置就完成了。
输入的数值必须用两位数字来表示。
(如:
设置温度为1度时,则需输入“01”。
)
2.2程序模块说明
本单片机程序由温度获取模块(DS18B20Drive.c);数码管显示模块(NixieTubeDrive.c);
串口通信模块(RS232SerialPort.c);温度监测模块(TemperatureChec.c);主程序(main.c)五大部分组成。
以下部分程序为单片机的主程序:
#include
#include
#include"TypeDe.h"
sbitBEEP=P3^4;设置P3.4引脚为蜂鸣器的控制引脚
bitUGFlag;
uint8USE_C=0;
voidinitT0(void);
externbitBFlag;
externbitWFlag;
externfloatTemp_V;
externsint8max_temp,min_temp;
voidmain(void)
{
InitSerialP();初始化串口
initT0();初始化T0定时器
max_temp=85;设置初始默认温度上限值为85℃
min_temp=0;设置初始默认温度下限值为0℃
while
(1)
{
Temp_Chek();监测环境温度值是否超过温度设置范围
if(BFlag&WFlag)
BEEP=1;超过温度设置的上限值,蜂鸣器一直响
elseif(BFlag&!
WFlag)低于温度设置的下限值,蜂鸣器间断的响
BEEP=~BEEP;
elseBEEP=0;环境温度在设置范围内,蜂鸣器不鸣响
PC_Display();将当前温度值发送到主机PC
UGFlag=0;
while(!
UGFlag)
{
uint8i;
TemperatureUpdate();重新获取当前环境温度值
for(i=0;i<20;i++)
LED_display();数码管显示当前温度值
}
}
}
/*开启定时器每秒更新一次温度*/
voidinitT0(void)
{
TMOD|=0x01;//设置定时器T0为模式1
TH0=0x4c;//定时50ms
TL0=0x00;//
EA=1;//开总中断
ET0=1;//允许定时/计数器1中断
TR0=1;//启动定时/计数器1中断
}
voidSend_Temp_to_PC(void)interrupt2
{
TH0=0x4c;
TL0=0x00;
if(++USE_C==40)//每隔1秒更新一次当前温度值并发到PC
{
UGFlag=1;
USE_C=0;
}
}
附件:
(完整单片机程序)
所有的子程序
voidDelay10Us_f(uint8DT);
uint8Ds18b20Init_f(void);
voidDs18b20Write_Byte(uint8Cmd);
uint8Ds18b20Read_Byte(void);
uint16Ds18b20ReadTemp_f(void);
voidTemperatureUpdate(void);
voidLED_delay(uint8i);
voidLED_display();
voidInitSerialP(void);
voidSendByte_SP(uint8sbuf_Data);
uint8GetByte_SP(void);
voidSend_Data_SP(uint8*send_data,data_length);
voiddeal_Temp(void);
voidser_int(void);
voidPC_Dis_Temp(void);
voidPC_Display(void);
voidTemp_Warn(void);
voidTemp_Chek(void);
/**********************************************************************
***********************************************************************
程序名:
芯片DS18B20驱动程序
自身函数:
voidDelay10Us_f(uint16Count)
uint8Ds18b20Init_f(void)
voidDs18b20Write_Byte(uint8Cmd)
uint8Ds18b20Read_Byte(void)
uint16Ds18b20ReadTemp_f(void)
voidTemperatureUpdate(void)
全局变量:
uint16idataTempDat以十进制形式保存所获得温度值
uint8idataTemperature[4]保存温度值的数组.依次存放正负标志,温度值十位,个位,和小数位
引用的外部函数或变量:
无
功能:
对DS18B20进行初始化
对DS18B20进行数据读写的操作。
实现温度的获取。
***********************************************************************
***********************************************************************/
/*以下为DS18B20的驱动程序*/
#include
#include
#include"TypeDe.h"
/*定义芯片DS18B20的数据输入输出管脚*/
sbitIo_DS18B20_DQ=P3^6;
#defineDS18B20_DQ_HIGHIo_DS18B20_DQ=1
#defineDS18B20_DQ_LOWIo_DS18B20_DQ=0
#defineDS18B20_DQ_READIo_DS18B20_DQ
/*函数声明*/
voidDelay10Us_f(uint8DT);
uint8Ds18b20Init_f(void);
voidDs18b20Write_Byte(uint8Cmd);
uint8Ds18b20Read_Byte(void);
uint16Ds18b20ReadTemp_f(void);
voidTemperatureUpdate(void);
floatTemp_V;/*声明以十进制形式保存温度值的变量TempDat*/
uint8Temperature[4];/*声明保存温度值的数组.依次存放正负标志,温度值十位,个位,和小
数位*/
/*函数名:
Delay_10us*/
/*输入:
uint16Count(延时的时间大小)*/
/*输出:
无*/
/*功能:
延时10uS函数*/
voidDelay10Us_f(uint8DT)
{
while(--DT>0);
}
/*函数名:
Ds18b20Init_f*/
/*输入:
无*/
/*输出:
uint8Flag(复位成功与否标志)*/
/*功能:
初始化芯片DS18B20*/
uint8Ds18b20Init_f(void)
{
bitFlag;
DS18B20_DQ_HIGH;/*稍作延时*/
NOP;
DS18B20_DQ_LOW;//总线拉低
Delay10Us_f(50);//延时大于480us
NOP;
DS18B20_DQ_HIGH;//总线释放
Delay10Us_f(10);//等待DS18B02复位
Flag=DS18B20_DQ_READ;//如果Flag为0,则复位成功,否则复位失败
Delay10Us_f(15);
NOP;
NOP;
DS18B20_DQ_HIGH;
returnFlag;
}
/*函数名:
Ds18b20Write_Byte(uint8Cmd)*/
/*输入:
uint8Cmd(需要写入的命令)*/
/*输出:
无*/
/*功能:
对芯片DS18B20进行写命令*/
voidDs18b20Write_Byte(uint8Cmd)
{
uint8i;
for(i=8;i>0;i--)
{
DS18B20_DQ_LOW;//拉低总线,开始写时序
Delay10Us_f
(2);
DS18B20_DQ_READ=Cmd&0x01;//控制字的最低位先送到总线
Delay10Us_f(4);//稍作延时,让DS18B20读取总线上的数据
NOP;
NOP;
DS18B20_DQ_HIGH;//拉高总线,1bit写周期结束
Cmd>>=1;
}
}
/*函数名:
Ds18b20Read_Byte*/
/*输入:
无*/
/*输出:
ReadValue(从DS18B20读取的数据)*/
/*功能:
从DS18B20中读取一个字节的数据*/
uint8Ds18b20Read_Byte(void)
{
uint8ReadValue=0,i;
for(i=8;i>0;i--)
{
DS18B20_DQ_LOW;
ReadValue>>=1;
DS18B20_DQ_HIGH;
if(DS18B20_DQ_READ==1)
ReadValue|=0x80;
Delay10Us_f(3);
}
returnReadValue;
}
/*函数名:
Ds18b20ReadTemp_f*/
/*输入:
无*/
/*输出:
ReturnTemp(读取的温度值)*/
/*功能:
读取当前的温度数据(只保留一位小数)*/
uint16Ds18b20ReadTemp_f(void)
{
uint8TempH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温湿度 监测 电路设计 报告