温度计课程设计.docx
- 文档编号:16309563
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:33
- 大小:267.17KB
温度计课程设计.docx
《温度计课程设计.docx》由会员分享,可在线阅读,更多相关《温度计课程设计.docx(33页珍藏版)》请在冰点文库上搜索。
温度计课程设计
第一章绪论
测量控制的作用是从生产现场中获取各种参数,运用科学计算的方法,综合各种先进技术,使每个生产环节都能够得到有效的控制,不但保证了生产的规范化、提高产品质量、降低成本,还确保了生产安全。
所以,测量控制技术已经被广泛应用于炼油、化工、冶金、电力、电子、轻工和纺织等行业。
温度采集控制系统是在嵌入式系统设计的基础上发展起来的。
嵌入式系统虽然起源于微型计算机时代,但是微型计算机的体积、价位、可靠性,都无法满足广大对象对嵌入式系统的要求,因此,嵌入式系统必须走独立发展道路。
这条道路就是芯片化道路。
将计算机做在一个芯片上,从而开创了嵌入式系统独立发展的单片机时代。
单片机以其集成度高、运算速度快、体积小、运行可靠、价格低廉等优势,在过程控制、数据采集、机电一体化、智能化仪表、家用电器以及网络技术等方面得到了广泛的应用,特别是单片机嵌入式技术的开发与应用,标志着计算机发展史上又一个新的里程碑。
作为计算机两大发展方向之一的单片机,以面向对象的实时控制为己任,嵌入到如家用电器、汽车、机器人、仪器仪表等设备中,使其智能化。
目前国内外各大电气公司,大的半导体厂商正在不断的开发、使用单片机,使其无论在控制能力,减小体积,降低成本,还是开发环境的改善等方面,都得到空前迅速的发展。
温度检测控制系统在工业生产、科学研究和人们的生活领域中,得到了广泛应用。
在工业生产过程中,很多时候都需要对温度进行严格的监控,以使得生产能够顺利的进行,产品的质量才能够得到充分的保证。
使用自动温度控制系统可以对生产环境的温度进行自动控制,保证生产的自动化、智能化能够顺利、安全进行,从而提高企业的生产效率。
温度检测系统应用十分广阔。
第二章系统方案设计
2.1方案一
采用普通电阻式温度传感器,放大器,A/D转换器作为测量温度的电路。
采用两种不同材质的导体,如在某点互相连接在一起,对这个连接点加热,在它们不加热的部位就会出现电位差。
这个电位差的数值与不加热部位测量点的温度有关,和这两种导体的材质有关。
这种现象可以在很宽的温度范围内出现,如果精确测量这个电位差,再测出不加热部位的环境温度,就可以准确知道加热点的温度。
由于它必须有两种不同材质的导体,所以称之为“热电偶”。
不同材质做出的热电偶使用于不同的温度范围,它们的灵敏度也各不相同。
热电偶的灵敏度是指加热点温度变化1℃时,输出电位差的变化量。
对于大多数金属材料支撑的热电偶而言,这个数值大约在5~40微伏/℃之间。
热电偶传感器有自己的优点和缺陷,它灵敏度比较低,容易受到环境干扰信号的影响,也容易受到前置放大器温度漂移的影响,因此不适合测量微小的温度变化。
由于热电偶温度传感器的灵敏度与材料的粗细无关,用非常细的材料也能够做成温度传感器。
也由于制作热电偶的金属材料具有很好的延展性,这种细微的测温元件有极高的响应速度,可以测量快速变化的过程。
2.2方案二
采用数字可编程温度传感器作为温度检测元件。
数字可编程温度传感器可以直接读出被测温度值。
不需要将温度传感器的输出信号接到A/D转换器上,减少了系统的硬件电路的成本和整个系统的体积。
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小
它还有很多特性:
适应电压范围更宽,电压范围:
3.0~5.5V,寄生电源方式下可由数据线供;独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃;可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2.3方案论证
方案一硬件电路复杂,需要设计A/D转换电路,以及与其相关的编程,总体设计起来较困难,软件、硬件调试复杂,硬件成本较高。
而且器传感器有以下缺点:
它灵敏度比较低,容易受到环境干扰信号的影响,也容易受到前置放大器温度漂移的影响。
所以总体来说,方案一在硬件、软件上的成本都比较高,而且易受外部环境的影响,系统工作不稳定。
方案二由于采用的是具有一总线特点的温度传感器,所以电路连接简单;而且该传感器拥有强大的通信协议,同过几个简单的操作就可以实现传感器与单片机的交互,包括复位传感器、对传感器读写数据、对传感器写命令。
软件、硬件易于调试,制作成本较低。
也使得系统所测结果精度大大提高。
经过对这两种方案的比较,本设计决定采用方案二。
第3章硬件电路设计
3.1系统总体设计
本次设计采用采样值和键盘设定值进行比较运算的方法来简单精确地控制温度。
它的整体思想是先通过键盘输入设定温度的范围,保存在AT89S52的指定单元中,再利用温度传感器DS18B20进行信号的采集,送入单片机中,保存在采样值单元。
然后把采样值与设定值进行比较运算,得出控制量,从而调节继电器触发端的通断,来实现将温度控制在一定的范围内。
单片机控制系统是一个完整的智能化的集数据采集、显示、处理、控制于一体的系统。
由传感器、LED显示单片机及执行机构控制部分等组成。
系统结构框图如图3.1所示。
图3.1系统硬件结构框图
3.2各部分硬件电路设计
3.2.1时钟电路设计
时钟电路是用来产生AT89S52单片机工作时所必须的时钟信号,为保证工作方式的实现,AT89C52在唯一的时钟信号的控制下严格的按时序执行指令进行工作,时钟的频率影响单片机的速度和稳定性。
通常时钟由于两种形式:
内部时钟和外部时钟。
电路中的C1、C2的选择在30PF左右,但电容太小会影响振荡的频率、稳定性和快速性。
晶振频率为在1.2MHZ~12MHZ之间,频率越高单片机的速度就越快,但对存储器速度要求就高。
为了提高稳定性我们采用温度稳定性好的NPO电容,采用的晶振频率为12MHZ。
本次系统的时钟电路设计如图3.2所示。
图3.2时钟电路图
3.2.2系统复位电路
在图3.3中复位开关K被按下并松开,使
端获得低电平,RST端输出复位信号,单片机复位。
或由于(VCC加入并超过复位门限电压)引起系统正常复位。
图3.3复位电路图
3.2.3报警与控制电路设计
在微型计算机控制系统中,为了安全生产,对于一些重要的参数或系统部位,都设有紧急状态报警系统,以便提醒操作人员注意,或采取紧急措施。
其方法就是把计算机采集的数据或记过计算机进行数据处理、数字滤波,标度变换之后,与该参数上下限给定值进行比较,如果高于上限值(或低于下限值)则进行报警,否则就作为采样的正常值,进行显示和控制。
室内的温度高于设定的温度范围内时当P1.4输出低电平“0”时,三极管导通,压电蜂鸣器两端获得约+5V电压而鸣叫,发出报警声音。
温度高于设定上限温度是P1.4输出低电平,P1.0输出低电平,高温报警温度低于设定下限温度是P1.4输出低电平,P1.1输出低电平,低温报警。
图3.4报警与控制电路与单片机的连接
3.2.4LED显示电路设计
图3.5显示电路图
3.2.5温度检测电路设计
本次设计所采用的温度传感器为Dallas半导体公司的数字化温度传感器DS18B20,它是世界上第一片支持“一线总线”接口的温度传感器。
“一线器件”体积更小、适用电压更宽、更经济。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
DS18B20可以程序设定9-12位的分辨率,精度为±0.5℃。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线,当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。
图3.6DS18B20与AT89S52单片机的连接
DS18B20支持“一线总线”接口,测量温度范围为-55°C--+125°C,在-10--+85°C范围内,精度为±0.5°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
DS18B20产品的特点
(1)只要求一个端口即可实现通信。
(2)在DS18B20中的每个器件上都有独一无二的序列号。
(3)实际应用中不需要外部任何元器件即可实现测温。
(4)测量温度范围在-55°C- +125°C之间。
(5)数字温度计的分辨率用户可以从9位到12位选择。
(6)内部有温度上、下限设置。
3.2.6按键电路设计
键盘共有三个键,判断K3~K5键是否按下,可采用软件查询和中断的方法,当某个键按下时,低电平有效。
3个键K3~K5的功能定义如表所示。
K3~K5键的定义
按键
键名
功能
K2
功能转换键
此键按下,显示温度设定值,按键松开,显示当前温度
K3
加0.1键
设定温度值加0.1
K4
减0.1键
设置温度值减0.1
K3
加1键
设定温度值加1
K3
减1键
设置温度值减1
图3.7按键电路
第4章软件设计
4.1主程序方案
首先要根据系统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
本部分详细介绍了基于AT89S52单片机的多路温度采集控制系统的软件设计。
根据系统功能,可以将系统设计分为若干个子程序进行设计,如温度采集子程序,数据处理子程序、显示子程序、执行子程序。
采用KieluVision3集成编译环境和汇编语言来进行系统软件的设计。
本章从设计思路、软件系统框图出发,先介绍整体的思路后,再逐一分析各模块程序算法的实现,最终编写出满足任务需求的程序。
并对温度进行实时显示。
采用C语言编写代码,鉴于篇幅限制及DS18B20的应用已经规范和成熟,本文仅就主程序流程图和显示子程序流程图及其代码进行说明。
通过定时器T0P3.4口的定时来实现,在此不再赘述。
主程序流程图主程序通过调用温度采集子程序完成温度数据采集,然后调用温度转换子程序转换读取温度数据,调用显示子程序进行温度显示和判断温度数据。
主程序(见附录2)调用四个子程序,分别是温度采集程序、数码管显示程序、温度处理程序和数据存储程序。
温度采集程序:
对温度芯片送过来的数据进行处理,进行判断和显示。
数码管显示程序:
向数码的显示送数,控制系统的显示部分。
温度处理程序:
对采集到的温度和设置的上、下限进行比较,做出判断,向继电器输出。
数据存储程序:
对键盘的设置的数据进行存储。
图4.1系统流程图
4.2各个模块子程序的设计
4.2.1温度采集程序
温度采集子程序流程图如下:
图4.2温度采集子程序流程图
程序代码如下:
voiddsreset(void)//DS18b20复位,初始化函数
{
uinti;
ds=0;
i=103;//延时最短480us
while(i>0)i--;
ds=1;//等待16-60us,收到低电平一个约60-240us则复位成功
i=4;
while(i>0)i--;
}
bittempreadbit(void)//读1位数据函数
{
uinti;
bitdat;
ds=0;i++;
ds=1;i++;i++;//i++起到延时作用
dat=ds;
i=8;
while(i>0)i--;
return(dat);
}
uchartempread(void)//读1字节的数据函数
{
uinti,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1);
//读出的数据最低位在最前面,这样刚好一个字节在dat里
}
return(dat);
}
voidtempwritebyte(uchardat)//向DS18B20写一个字节的数据函数
{
uinti;
ucharj;
bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)//写1
{
ds=0;
i++;i++;
ds=1;
i=8;
while(i>0)
i--;
}
else//写0
{
ds=0;
i=8;
while(i>0)i--;
ds=1;
i++;i++;
}
}
}
voidtempchange(void)//DS18B20开始获取温度并转换
{
dsreset();
delay
(1);
tempwritebyte(0xcc);//写跳过读ROM指令
tempwritebyte(0x44);//写温度转换指令
}
uintget_temp()//读取寄存器中存储的温度数据
{
uchara,b;
dsreset();
delay
(1);
tempwritebyte(0xcc);//写跳过读ROM指令
tempwritebyte(0xbe);//写温度转换指令
a=tempread();//读低8位
b=tempread();//读高8位
temp=256*b+a;
f_temp=temp*0.0625;//温度在寄存器中为12位,分辨率为0.0625
temp=f_temp*10+0.5;//乘以10表示小数点后面只取一位
returntemp;//temp是整型
4.2.2温度处理程序
系统通过DS18B20采集到温度和设置的上、下限进行比较得出结果,进行报警。
voidhdidi()
{
beep=0;
led1=0;
delay(500);
beep=1;
led1=1;
delay(500);
}
voidldidi()
{
beep=0;
led2=0;
delay(50);
beep=1;
led2=1;
delay(50);
}
第5章系统调试
5.1测试环境及工具
测试温度:
0-100摄氏度。
(模拟不同温度值环境)
测试仪器及软件:
数字万用表,温度计0-100摄氏度。
5.2测试方法
使系统运行,观察系统硬件检测是否正常(包括单片机控制系统,键盘电路,显示电路,温度测试电路等)。
系统自带测试表格数据,观察显示数据是否相符合即可。
采用温度传感器和温度计同时测量水温变化情况,目测显示电路是否正常。
并记录温度值,与实际温度值比较,得出系统的温度指标。
5.3测试结果分析
自检正常,温度显示正常。
因为芯片是塑料封装,所以对温度的感应灵敏度不是相当高,需要一个很短的时间才能达到稳定。
结论
经过设计和实践,本设计已经完成了一个比较完整的温度检测预与报警系统。
它可以通过键盘输入温度上限、下限值,然后计算其上限和下限的中间值作为最适温度值。
不断的采集温度值,显示温度值,如果发现采集的温度值高于上限值就通过相应的提示灯亮。
如果采集的温度值低于下限值,那么也有相应的灯提示操作人员。
如果并没有超过上下限则不会报警。
致此本人设计基本完成了预期的目标,系统在温度采集、温度处理和键盘处理方面做的比较好,而在数据的存储和数码管的显示方面不够理想。
附录一:
仿真图
附录二:
系统原理图
附录三:
程序代码
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uintdat,bai,shi,ge,t,h1,h2,h3,l1,l2,l3,s1num;
ucharcodetable[]="Temperature";
sbitds=P2^0;
sbitled1=P1^0;//控制发光二极管
sbitled2=P1^1;//控制发光二极管
sbitbeep=P1^2;//定义蜂鸣器
uinttemp;//定义整型的温度数据
floatf_temp;//定义浮点型的温度数据
uinthigh=300;//定义温度的上限值
uintlow=200;//定义温度的上限值
sbitLcden=P2^6;//液晶使能端
sbitRs=P2^5;//数据命令选择端
sbits1=P3^0;
sbits4=P3^3;
sbits5=P3^4;
sbits2=P3^1;
sbits3=P3^2;
voiddelay(ucharz)//延时函数
{
uchara,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--);
}
voidwrite_com(ucharcom)//写命令函数
{
Rs=0;
P0=com;
delay(5);
Lcden=1;
delay(5);
Lcden=0;
}
voidwrite_fig(ucharfig)//写数据函数
{
Rs=1;
P0=fig;
delay(5);
Lcden=1;
delay(5);
Lcden=0;
}
voidinit1()//液晶显示初始化
{
uchari;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
write_com(0x01);
write_com(0x80);
for(i=0;i<11;i++)
{
write_fig(table[i]);
delay(5);
}
write_com(0x80+0x40);
write_fig('H');
write_fig('T');
//write_com(0x80+0x40+6);
//write_fig(0x2E);
write_com(0x80+0x40+9);
write_fig('L');
write_fig('T');
//write_com(0x80+0x40+13);
//write_fig(0x2E);
}
/*voidRefresh(add,t)//液晶显示刷新函数
{
bai=t/100;
shi=t%100/10;
ge=t%10;
h1=high/100;
h2=high%100/10;
h3=high%10;
l1=low/100;
l2=low%100/10;
l3=low%10;
write_com(0x80+12);
write_fig(0x30+bai);
write_fig(0x30+shi);
write_fig(0x2E);
write_fig(0x30+ge);
write_com(0x80+0x40+3);
write_fig(0x30+h1);
write_fig(0x30+h2);
write_fig(0x2E);
write_fig(0x30+h3);
write_com(0x80+0x40+12);
write_fig(0x30+l1);
write_fig(0x30+l2);
write_fig(0x2E);
write_fig(0x30+l3);
//write_fig(0xdf);
//write_fig('C');
}*/
voiddsreset(void)//DS18B20复位,初始化函数
{
uinti;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
bittempreadbit(void)//读1位数据函数
{
uinti;
bitdat;
ds=0;i++;
ds=1;i++;i++;//i++起到延时作用
dat=ds;
i=8;
while(i>0)i--;
return(dat);
}
uchartempread(void)//读1字节的数据函数
{
uinti,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1);
//读出的数据最低位在最前面,这样刚好一个字节在dat里
}
return(dat);
}
voidtempwritebyte(uchardat)//向DS18B20写一个字节的数据函数
{
uinti;
ucharj;
bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)//写1
{
ds=0;
i++;i++;
ds=1;
i=8;
while(i>0)
i--;
}
else//写0
{
ds=0;
i=8;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度计 课程设计