温度监测控制系统设计方案.docx
- 文档编号:26370245
- 上传时间:2023-06-18
- 格式:DOCX
- 页数:26
- 大小:207.53KB
温度监测控制系统设计方案.docx
《温度监测控制系统设计方案.docx》由会员分享,可在线阅读,更多相关《温度监测控制系统设计方案.docx(26页珍藏版)》请在冰豆网上搜索。
温度监测控制系统设计方案
温度监测控制系统设计方案
第一章总体设计方案
1.1计设要求
(1)基本范围-50℃-110℃
(2)精度误差小于0.5℃
(3)LED数码直读显示
(4)可以任意设定温度的上下限报警功能
1.2系统基本设计方案
方案一:
采用热电阻温度传感器。
热电阻是利用导体的电阻随温度变化的特性制成的测温元件。
现应用较多的有铂、铜、镍等热电阻。
其主要的特点为精度高、测量范围大、便于远距离测量。
铂的物理、化学性能极稳定,耐氧化能力强,易提纯,复制性好,工业性好,电阻率较高,因此,铂电阻用于工业检测中高精密测温和温度标准。
缺点是价格贵,温度系数小,受到磁场影响大,在还原介质中易被玷污变脆。
按IEC标准测温范围-200~650℃,XX电阻比W(100)=1.3850时,R0为100Ω和10Ω,其允许的测量误差A级为±(0.15℃+0.002|t|),B级为±(0.3℃+0.005|t|)。
铜电阻的温度系数比铂电阻大,价格低,也易于提纯和加工;但其电阻率小,在腐蚀性介质中使用稳定性差。
在工业中用于-50~180℃测温。
方案二:
采用DS18B20温度传感器,由于温度测量的普遍性,温度传感器的市场份额大大增加,居传感器首位。
数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
现在,新一代的DS18B20温度传感器体积更小、更经济、更灵活。
DS18B20温度传感器测量温度范围为-55℃~+125℃。
在-10℃~+85℃范围内,精度为±0.5℃。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
综合比较方案一与方案二,方案二更为适合于本设计系统对于模拟量输入的要求,比较其框图,方案二更具备硬件简单的突出优点,所以选择方案二作为信号的输入通道。
第二章DS1820单线数字温度传感器
2.1DS1820温度传感器介绍
本温度报警器采用美国DALLAS公司生产的单线数字温度传感器DS18B20(如图2.1),可以把温度信号直接转换成串行数字信号工微机处理,是模数转换器件,而且读DS18B20信息或写DS18B20信息仅需要单线接口,使用非常方便;其测温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃,可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;同时DS18B20在使用中不需要任何外围元件(仅需一个4.7K的上拉电阻),全部传感元件及转换电路集成在形如一只三极管的集成电路内,硬件电路十分简单。
图2.1:
2.1.1DS1820温度传感器特性
•独特的单线接口仅需一个端口引脚进行通讯
•简单的多点分布应用
•无需外部器件
•可通过数据线供电
•零待机功耗
•测温范围-55~+125℃,以0.5℃递增。
华氏器件-67~+2570F,以0.90F递增
•温度以9位数字量读出
•温度数字量转换时间200ms(典型值)
•用户可定义的非易失性温度报警设置
•报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件
•应用包括温度控制、工业系统、消费品、温度计或任何热感测系统
2.1.2DS1820供电的方法
DS1820供电的方法是从VDD引脚接入一个外部电源。
这样做的好处是I/O线上不需要加强上拉,而且总线控制器不用在温度转换期间总保持高电平。
这样在转换期间可以允许在单线总线上进行其他数据往来。
另外,在单线总线上可以挂任意多片DS1820,而且如果它们都使用外部电源的话,就可以先发一个SkipROM命令,再接一个ConvertT命令,让它们同时进行温度转换。
注意当加上外部电源时,GND引脚不能悬空。
温度高于100℃时,不推荐使用寄生电源,因为DS1820在这种温度下表现出的漏电流比较大,通讯可能无法进行。
在类似这种温度的情况下,强烈推荐使用DS1820的VDD引脚。
对于总线控制器不知道总线上的DS1820是用寄生电源还是用外部电源的情况,DS1820预备了一种信号指示电源的使用意图。
总线控制器发出一个SkipROM协议,然后发出读电源命令,这条命令发出后,控制器发出读时间隙,如果是寄生电源,DS1820在单线总线上发回“0”,如果是从VDD供电,则发回“1”,这样总线控制器就能够决定总线上是否有DS1820需要强上拉。
如果控制器接收到一个“0”,它就知道必须在温度转换期间给I/O线提供强上拉。
64位(激)光刻ROM每只DS1820都有一个唯一的长达64位的编码。
最前面8位是单线系列编码(DS1820的编码是19h)。
下面48位是一个唯一的序列号。
最后8位是以上56位的CRC码。
(见图5)64位ROM和ROM操作控制区允许DS1820做为单线制器件并按照详述于“单线总线系统”一节的单线协议工作。
只有建立了ROM操作协议,才能对DS1820进行控制操作。
这个协议用ROM操作协议流程图来描述(图6)。
单线总线控制器必须得天独厚提供5个ROM操作命令其中之一:
1)ReadROM,2)MatchROM,3)SearchRom,4)SkipROM,5)AlarmSearch。
成功进行一次ROM操作后,就可以对DS1820进行特定的操作,总线控制器可以发出六个存储器和控制操作命令中的任一个。
CRC发生器DS1820中有8位CRC存储在64位ROM的最高有效字节中。
总线控制器可以用64位ROM中的前56位计算出一个CRC值,再用这个和存储在DS1820中的值进行比较,以确定ROM数据是否被总线控制器接收无误。
CRC计算等式如下:
CRC=X8+X5+X4+1DS1820同样用上面的公式产生一个8位CRC值,把这个值提供给总线控制器用来校验传输的数据。
在任何使用CRC进行数据传输校验的情况下,总线控制器必须用上面的公式计算出一个CRC值,和存储在DS1820的64位ROM中的值或DS1820内部计算出的8位CRC值(当读暂存器时,做为第9个字节读出来)进行比较。
CRC值的比较以及是否进行下一步操作完全由总线控制器决定。
当在DS1820中存储的或由其计算的CRC值和总线控制器计算的值不相符时,DS1820内部并没有一个能阻止命令序列进行的电路。
2.1.3DS1820存储器
DS1820的存储器结构示于图8。
存储器由一个暂存RAM和一个存储高低温报警触发值TH和TL的非易失性电可擦除(E2)RAM组成。
当在单线总线上通讯时,暂存器帮助确保数据的完整性。
数据先被写入暂存器,这里的数据可被读回。
数据经过校验后,用一个拷贝暂存器命令会把数据传到非易性(E2)RAM中。
这一过程确保更改存储器时数据的完整性。
2.1.4报警搜索操作
DS1820完成一次温度转换后,就拿温度值和存储在TH和TL中的值进行比较。
因为这些寄存器是8位的,所以0.5℃位被忽略不计。
TH或TL的最高有效位直接对应16位温度寄存器的符号位。
如果测得的温度高于TH或低于TL,器件内部就会置位一个报警标识。
每进行一次测温就对这个标识进行一次更新。
当报警标识置位时,DS1820会对报警搜索命令有反应。
这样就允许许多DS1820并联在一起同时测温,如果某个地方的温度超过了限定值,报警的器件就会被立即识别出来并读取,而不用读未报警的器件。
2.1.5DS1820的协议
单线总线的空闲状态是高电平。
无论任何理由需要暂停某一执行过程时,如果还想恢复执行的话,总线必必须停留在空闲状态。
在恢复期间,如果单线总线处于非活动(高电平)状态,位与位间的恢复时间可以无限长。
如果总线停留在低电平超过480μs,总线上的所有器件都将被复位。
执行序列通过单线总线端口访问DS1820的协议如下:
•初始化
•ROM操作命令
•存储器操作命令
•执行/数据
2.1.6DS1820的说明
1)DS1820数字温度计以9位数字量的形式反映器件的温度值。
2)DS1820通过一个单线接口发送或接收信息,因此在中央微处理器DS1820之间仅需一条连接线(加上地线)。
用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。
3)因为每个DS1820都有一个独特的片序列号,所以多只DS1820可以同时连在一根单线总线上
2.1.7DS1820的工作时序:
(1)初始化(如下时序图)
1先将数据线置高电平1
2延时(该时间要求不是很严格,但要尽可能的短)
3数据线拉低到低电平0
4延时750us(该时间范围在480-960us)
5数据线拉到高电平1.
6延时等待。
如果初始化成功则在15-60ms内产生一个有DS18B20返回的低电平0,据该电平可以确定它的存在。
但不能一直等待,否则程序会进入死循环,所以要进行超时判断。
7若CPU读到数据线上的低电平0后,还要进行延时,其延时时间从发出算起(第5步的时间起)最少要480us
8将数据线再次拉高到高电平1后结束。
(2)DS18B20写数据(如下时序图):
1数据线先置低电平0.
2延时确定的时间为15us。
3按从低位到高位的顺序发送数据(一次只发送一位)。
4延时时间为45us
5将数据位拉到高电平1
6重复①-⑤步骤,直到发送完整个字节。
7最后将数据线拉高到1.
(3)DS18B20读数据(如下时序图):
1将数据线拉高到1.
2延时2us
3将数据线拉低到0
4延时6us
5将数据线拉高到1
6延时4us
7读数据线上的状态得到一个状态位,并进行数据处理
8延时30us
9重复①-⑦步骤,直至读取完一个字节
第三章系统组成及工作原理
3.1系统总体设计框图
温度计电路设计总体设计方框图如图3.1所示,控制器采用单片机STC89S52,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。
图3.1
3.1.1温度监测控制系统的电路如图3.1.2
图3.1.2:
温度监测控制系统的电路
3.2温度监控系统的功能和工作原理如下
3.2.1该温度监控系统包含以下功能:
1)显示周围环境的当前温度
当操作人员将该装置放在要测量的环境中,通过该系统自带的DS18B20温度传感器,可以实时检测到当前环境温度的变化,并且在数码管上现实当前的温度(范围-20°C~-120°C)。
2)报警和启动制冷制热系统
该装置设置了温度的上、下限值。
当环境的温度高于设置的上限值时,报警的警铃响起,同时自动启动制冷系统;如果当环境的温度低于设置的下限的温度值时,报警的警铃响起,同时自动启动制热系统。
(用二极管显示代替制冷、制热系统工作)
3)设置温度的上、下限值
根据用途不同,该系统可以做控制温度装置。
但环境的不同,人们对环境的温度也有不同的要求。
该装置温度的上、下限值可以通过按钮来自由设置。
(该装置温度的限值在0°C~120°C)
3.2.2系统的工作原理
当系统通电工作时,DS18B20温度传感器通过自身的检测,直接将温度转化成串行数字信号。
51单片机通过引脚P3.5将数据接收,然会通过引脚P2.0~P2.7将数据并行输出,经过74LS573锁存器驱动数码管显示检测到的温度。
当检测到的温度高于设置温度的上限值时,单片机的P3.6引脚输出电平蜂鸣器beef响起报警,警铃的声音频率稍慢,同时P3.2引脚输出电平二极管D1闪烁(这里代表启动了制冷装置)。
如果此时温度继续上升,并高出了设置温度上限的2度蜂鸣器响起报警的警铃音频率加快,且P3.3引脚也输出电平二极管D2和D1一起闪烁(这里代表启动了强制冷装置)。
当温度恢复设置的温度值内,蜂鸣器不响,报警解除;同时二极管不闪烁(制冷装置停止工作)。
如果当检测到的温度低于设置温度的下限值时,单片机的P3.6引脚输出电平beef蜂鸣器响起报警,警铃的声音频率稍慢,同时P3.0引脚输出电平二极管D3闪烁(这里代表启动了制热装置)。
如果此时温度继续下降,并低于了设置温度下限的2度蜂鸣器响起报警的警铃音频率加快,且P3.2引脚也输出电平二极管D4和D3一起闪烁(这里代表启动了强制热装置)。
当温度恢复设置的温度值内,蜂鸣器不响,报警解除;同时二极管不闪烁(制热装置停止工作)。
当按下S1时,P2.0输出高电平,二极管D5亮,51单片机通过P2.0,P2.0读出原先存储在24C02存储器里的下限值,并通过数码管显示。
此时可以通过S3加大温度下限的值,通过S4减小温度下限的值;当按下S2时,51单片机通过P2.0,P2.0读出原先存储在24C02存储器里的上限值,并通过数码管显示。
此时可以通过S3加大温度上限的值,通过S4减小温度上限的值。
在设置的过程中,如果设置的下限温度大于了上限的温度,或者设置的上限温度小于了下限温度,设置出错。
此时P3.6引脚输出电平蜂鸣器beef响起报警,且P2.2输出高电平二极管D7亮。
直至设置正确报警解除,二极管D7灭。
按下S5完成温度的限值设置,且把设置的温度存储在24C02存储器里。
第四章系统软件算法析
4.1主程序流程图
开始
初始化
有键盘按下
Y
N
DS18B20初始化
温度转换
温度显示
温度计算
S1按下
S2按下
S5按下
温度下限设置
温度上限设置
存入24C02
4.1.1按键扫描处理子程序
voidkeyzi()
{
uintd,g;
ucharww1,www1;
if(d>g)//判断高低温是否设置矛盾
{
led33=0;
beep=0;
}
else
{
led33=1;
beep=1;
}
if(key1==0)
{
delay(10);
if(key1==0);
while(!
key1);
ww1=read_add
(1);
d=ww1;
shezhi=d;
dis_temp(d);
led11=0;//设置灯闪等待,系统
diwen=1;
led22=1;
gaowen=0;
flag=1;
}
if(key2==0)
{
delay(10);
if(key2==0);
while(!
key2);
www1=read_add(3);
g=www1;
dis_temp(g);
led22=0;//设置灯闪等待,系统
gaowen=1;
led11=1;
diwen=0;
flag=1;
}
if(key5==0)
{
delay(10);
if(key5==0);
while(!
key5);
{
gaowen=0;
diwen=0;
led11=1;
led22=1;
beep=1;
led33=1;
flag=0;
}
}
if(diwen==1)
{
ww1=read_add
(1);
d=ww1;
shezhi=d;
dis_temp(shezhi);
if(key3==0)
{
delay(10);
if(key3==0);
while(!
key3);
shezhi=shezhi+1;
if(shezhi>=120)shezhi=120;
write_add(1,shezhi);
dis_temp(shezhi);
}
if(key4==0)
{
delay(10);
if(key4==0);
while(!
key4);
if(shezhi==0)
shezhi=0;
else
shezhi=shezhi-1;
//if(shezhi<=0)shezhi=0;
write_add(1,shezhi);
dis_temp(shezhi);
}
}
if(gaowen==1)
{
www1=read_add(3);
g=www1;
shezhi=g;
dis_temp(g);
if(key3==0)
{
delay(10);
if(key3==0);
while(!
key3);
shezhi=shezhi+1;
if(shezhi>=120)shezhi=120;
write_add(3,shezhi);
dis_temp(shezhi);
}
if(key4==0)
{
delay(10);
if(key4==0);
while(!
key4);
if(shezhi==0)
shezhi=0;
else
shezhi=shezhi-1;
//shezhi=shezhi-1;
write_add(3,shezhi);
dis_temp(shezhi);
}
}
}
4.1.218B20温度传感器初始化
voiddsreset(void)//18B20复位,初始化函数
{
uinti;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
4.1.3温度转换命令子程序子程序
voidtempchange(void)//DS18B20开始获取温度并转换
{
dsreset();
delay
(1);
tempwritebyte(0xcc);//写跳过读ROM指令
tempwritebyte(0x44);//写温度转换指令
}
***读1位函数
bittempreadbit(void)//读1位函数
{
uinti;
bitdat;
ds=0;i++;//i++起延时作用
ds=1;i++;i++;
dat=ds;
i=8;while(i>0)i--;
return(dat);
}
***读1位函数
uchartempread(void)//读1个字节
{
uchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
4.1.4读出温度子程序
intget_temp()//读取寄存器中存储的温度数据
{
uchara,b;
dsreset();
delay
(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread();//读低8位
b=tempread();//读高8位
temp=b;
b=b&0x0f8;//高五位符号位【重要】
temp<<=8;//两个字节组合为1个字
temp=temp|a;
if(b==0x0f8)//第11为开始为1是读的值为负值
{temp=~temp+1;//实际的负温度
LedOut[0]=0x40;//显示负号
}
f_temp=temp*0.0625;//温度在寄存器中为12位分辨率位0.0625°
temp=f_temp*10+0.5;//乘以10表示小数点后面只取1位,加0.5是四舍五入
f_temp=f_temp+0.05;
returntemp;//temp是整型
}
4.1.5显示数据刷新子程序
voiddis_temp(intt)
{
inti,LedNumVal;
LedNumVal=t;//把实际温度送到LedNumVal变量中
if(LedOut[0]==0x40)//第11为开始为1是读的值为负值
{
LedOut[0]==0x40;//显示负号
}
else
{LedOut[0]=table[LedNumVal/1000];}//百位
LedOut[1]=table[LedNumVal%1000/100];//十位
if(flag==1)
{
LedOut[2]=table[LedNumVal%100/10];//个位
}
else
{
LedOut[2]=table[LedNumVal%100/10+10];//个位+10为了显示小数点
}
LedOut[3]=table[LedNumVal%10];//为小数位
for(i=0;i<4;i++)
{
P0=LedOut[i];
switch(i)
{//138译码
case0:
LS138A=0;LS138B=0;LS138C=0;break;
case1:
LS138A=1;LS138B=0;LS138C=0;break;
case2:
LS138A=0;LS138B=1;LS138C=0;break;
case3:
LS138A=1;LS138B=1;LS138C=0;break;
}
delay(3);
}
}
4.1.6计算温度子程序
voiddeal(intw)
{
intd,t,ww,www;
t=w;
t=(t+1)/10;//加1是为了小数部分的遗漏,这样实际就提前0.1度开始工作
ww=read_add
(1);
www=read_add(3);
if((t>ww-2)&&(t<=ww))//大于25度小于27度
{
led1=~led1;//变闪
beep=0;
for(d=20;d>0;d--)
{
dis_temp(get_temp());
}
beep=1;
for(d=20;d>0;d--)
{
dis_temp(get_temp());
}
}
elseif(t<=ww-2)//小于25度
{
led1=~led1;//变闪
led2=~led2;//变闪
beep=0;
for(d=20;d>0;d--)
{
di
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 监测 控制系统 设计方案