ds18b20温度检测控制

2023-06-21

第一篇:ds18b20温度检测控制

DS18B20温度传感器设计报告

传感器课程设计

专 业: 计算机控制技术

---数字温度计

年 级: 2011 级 姓 名: 樊 益 明

学 号: 20113042

指导教师: 刘 德 春

阿坝师专电子信息工程系

1. 引 言

1.1. 设计意义

在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持。其缺点如下:

● 硬件电路复杂; ● 软件调试复杂; ● 制作成本高。

本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125℃,最高分辨率可达0.0625℃。

DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的热点。

2 设计要求

2.1基本要求 1) 用LCD12232实现实时温度显示温度和自己的学号。 2) 采用LED数码管直接读显示。 2.2扩展功能

温度报警,能任意设定温度范围实现铃声报警;

33.1单片机89C52模块

单片机89C52是本设计中的控制核心,是一个40管脚的集成芯片构成。引脚部分:单片机引脚基本电路部分与普通设计无异,40脚接Vcc+5V,20脚接地。X1,X2两脚接12MHZ的晶振,可得单片机机器周期为1微秒。RST脚外延一个RST复位键,一端通过10K电阻接Vcc,一端通过10K电阻接地。AT89S52是一种低功耗、高性能的8位CMOS微控制器,具有8K的可编程Flash 存储器。使

资料准备 用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O 口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。P 0口接一个470的上拉电阻。P0口0~8脚接4位共阳数码管的段选,P2口0~4脚接4位共阳数码管的位选,P3.7接DS18B20采集信号。

3.2 DS18B20简介

DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 “一线总线”数字化温度传感器 同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、 DS1822 的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。3.3 温度传感器的工作原理

DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 DS18B20测温原理:低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值,即为所测温度。

3.4 DS18B20中的温度传感器对温度的测量

高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。

温度数据值格式

下表为12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125℃的数字输出为07D0H,

实际温度=07D0H*0.0625=2000*0.0625=125℃。

例如-55℃的数字输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作运算), 实际温度=370H*0.0625=880*0.0625=55℃。

可见其中低四位为小数位。

DS18B20温度与表示值对应表

3.5 DS18B20的内部结构

DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下:

DQ为数字信号输入/输出端;

GND为电源地;

VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

1) 64位的ROM 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

2) DS18B20温度传感器的存储器

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第

六、

七、八个字节用于内部计算。第九个字节是冗余检验字节。

3.6 DS18B20的时序

由于DS18B20采用的是单总线协议方式,即在一根数据线实现数据的双向传输,而对89C51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

1) DS18B20的复位时序

2)DS18B20的读时序

对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。

3) DS18B20的写时序

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

4系统框架设计如下图所示:

按照系统设计功能的要求数字温度计总体电路结构框图如下图所示

5硬件设计

温度计采用AT89C51单片机作为微处理器,温度计系统的外围接口电路由晶振、LCD显示电路、复位电路、温度检测电路、LCD驱动电路。

温度计的工作过程是:初始化其接收需要检测的温度,并一直处于检测状态,并将检测到的温度值读取,并转化为十进制数值,通过LCD显示出来,再显示温度,方便用户来读数使用记录数据。

温度计系统的的硬件电路图如下图所示。

DS18B20测温和学号显示

6系统程序的设计

6.1主程序

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。温度测量每1s进行一次。

主程序流程图如图4.1.1所示。

初始化调用显示子程序1s到?YN初次上电?N读出温度值温度计算处理显示数据刷新Y发温度转换开始命令

主程序流程图

6.2读出温度子程序

读出温度子程序的主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不进行温度数据的改写。

读出温度子程序流程图如图4.2所示。

发DS18B20复位信号发跳过ROM命令CRC校验正确?发读取温度命令Y移入温度暂存器读取操作,CRC校验YNN结束9字节完?

6.3温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间大约为750ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。 温度转换命令子程序图如图4.3所示。

发DS18B20复位uml发跳过ROM命令发温度转换开始命令

结束

6.4计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值的正负判断。

计算温度子程序流程图如图4.4所示。

开始计算小数位温度BCD值温度零下?N计算整数位温度BCD值Y置“+”标志温度值补码置“—”标志结束

6.5显示数据刷新子程序

显示数据刷新子程序主要是对显示缓冲器中得显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。

显示数据刷新子程序流程图如图4.5所示。

7 设计总结

本设计利用89S51芯片控制温度传感器DS18B52,再辅之以部分外围电路实现对环境温度的控制,性能稳定,精度较高,而且扩展性很强。由于DS18B20支持单总线协议,我们可以将多个DS18B52并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B52通信,占用较少的微处理器的端口就可以实现多点测温监控系统。

我们在老师的指导下完成了基于DS18B20的数字温度计的设计和制作。在进行实验的过程中,我们了解并熟悉DS18B20、AT89C2051以及74LS244的工作原理和性能。并且通过温度计的制作,我们将电子技能实训课堂上学到的知识进行运用,并在实际操作中发现问题,解决问题,更加增加对知识的认识和理解。

第二篇:基于AVR的DS18b20程序

//说明:单片机ATmega16的18B20程序。调这个18B20程序问题主要出现在延时部分,即单片机实际输出的延时与设定不符。//后面为别人精确延时,我用自己的单片机通过示波器重新测量实际延时。建议调延时用示波器先看看。我用的晶振12M,但延时根本就与理论不符。其中480us的延时要在480us与960us之间,选取550us比较合适,一般都这么选。 最后一句话:DS18B20的程序很多,模块基本相似,调不出来就是因为延时问题,示波器是必备工具,否则很盲目。

#include

#define uchar unsigned char

#define uchar unsigned char

#define uint unsigned int

//------------------------//

//.....18B20........

void init_1820(void)

{

int Flag_1820Error;

uchar i;

uint j=0;

PORTD|=(1<<7);//PORTC|=(1<<7);

PORTD&=~(1<<7);//PORTC&=~(1<<7);

for(i=0;i<8;i++)delay(180);//delay_60us();//480us以上

PORTD|=(1<<7);//PORTC|=(1<<7);

DDRD&=~(1<<7);//DDRC&=~(1<<7);//

delay(40);//delay_15us();//15~60us

delay(40);//delay_15us();

Flag_1820Error=0;

while(PIND&(1<<7)

{ delay(180);//delay_60us();

j++;

if(j>=18000){Flag_1820Error=1;break;}

}

DDRD|=(1<<7);//DDRC|=(1<<7);//PORTC7 is OUTPUT

PORTD|=(1<<7);//PORTC|=(1<<7);

for(i=0;i<4;i++)delay(180);//delay_60us(); //240us

}

/********************************/

/********************************/

void write_1820(uchar x)

{

uchar m;

for(m=0;m<8;m++)

{

if(x&(1<

{

PORTD&=~(1<<7);//PORTC&=~(1<<7);delay_5us(); //5usPORTD|=(1<<7);//PORTC|=(1<<7); //write"1"delay(40);//delay_15us(); //15~45usdelay(40);//delay_15us();delay(40);//delay_15us();

}

else

{

PORTD&=~(1<<7);//PORTC&=~(1<<7);delay_15us();//15us

delay(40);//delay_15us(); //write"0"delay(40); //delay_15us(); //15~45usdelay(40);//delay_15us();

PORTD|=(1<<7);//PORTC|=(1<<7);

}

PORTD|=(1<<7);// PORTC|=(1<<7);

}

/*******************************/

uchar read_1820(void)

{

uchar temp,k,n;

temp=0;

for(n=0;n<8;n++)

{

PORTD&=~(1<<7);//PORTC&=~(1<<7);

delay(13);//delay_5us();

PORTD|=(1<<7);//PORTC|=(1<<7);

delay(13);//delay_5us();

DDRD&=~(1<<7);//DDRC&=~(1<<7);//"PINC7 is INPUT"k=(PIND&(1<<7));//k=(PINC&(1<<7)); //读数据,从低位开始if(k)

temp|=(1<

else

temp&=~(1<

delay(40);//delay_15us();//45us

delay(40);//delay_15us(); delay(40);//delay_15us();

DDRD|=(1<<7);//DDRC|=(1<<7);//

}

return (temp);

}

/*************************************/

float read_temperature(void)

{

float temp;////////////

uchar teml=0,temh=0;

unsigned long t=0;

init_1820();//复位18b20write_1820(0xcc);// 发出转换命令write_1820(0x44);

//Delay_nms(100);

init_1820();

write_1820(0xcc);//发出读命令write_1820(0xbe);

teml=read_1820();//读数据byte1temh=read_1820();//byte2

t=temh;

t=t<<8; t=t|teml; temp=t*0.0625*260/286; return(temp); /*if(temh&0xf8)sign=0; else sign=1; if(sign==0){temh=255-temh;teml=255-teml;}temh=temh<<4;

temh|=(teml&0xf0)>>4;

}

//再在主程序中调用一下read_temperature(void),读取温度。 teml=teml&0x0f; teml=(teml*10)/16; tempval=temh;e[0]=tempval/100; tempval=temh;e[1]=(tempval/10)%10; tempval=temh;e[2]=tempval%10; tempval=teml;e[3]=tempval;*/

第三篇:2011基于18B20温度传感器论文

基于单片机18B20的温度计设计

摘要:文章主要介绍有关18B20温度传感器的应用及有关注意事项,经典接线原理图。 1. 引言:

温度传感器的种类众多,在应用与高精度、高可靠性的场合时DALLAS(达拉斯)公司生产的DS18B20温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。对于我们普通的电子爱好者来说,DS18B20的优势更是我们学习单片机技术和开发温度相关的小产品的不二选择。了解其工作原理和应用可以拓宽您对单片机开发的思路。

2. DS18B20的主要特征:  * 全数字温度转换及输出。  * 先进的单总线数据通信。  * 最高12位分辨率,精度可达土0.5摄氏度。  * 12位分辨率时的最大工作周期为750毫秒。  * 可选择寄生工作方式。  * 检测温度范围为–55°C ~+125°C (–67°F ~+257°F)  * 内置EEPROM,限温报警功能。  * 64位光刻ROM,内置产品序列号,方便多机挂接。  * 多样封装形式,适应不同硬件系统。 3. DS18B20引脚功能:

•GND 电压地 •DQ 单数据总线 •VDD 电源电压

4. DS18B20工作原理及应用:

DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是:

ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。

5. 控制器对18B20操作流程:

1、 复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。

2、 存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。

3、 控制器发送ROM指令:双方打完了招呼之后最要将进行交流了,ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指

定匹配芯片、跳跃ROM、芯片搜索、报警芯片搜索。ROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。诚然,单总线上可以同时挂接多个器件,并通过每个器件上所独有的ID号来区别,一般只挂接单个18B20芯片时可以跳过ROM指令(注意:此处指的跳过ROM指令并非不发送ROM指令,而是用特有的一条“跳过指令”)。ROM指令在下文有详细的介绍。

4、 控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、将RAM数据复制到EEPROM、温度转换、将EEPROM中的报警值复制到RAM、工作方式切换。存储器操作指令的功能是命令18B20作什么样的工作,是芯片控制的关键。

5、 执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。如执行温度转换指令则控制器(单片机)必须等待18B20执行其指令,一般转换时间为500uS。如执行数据读写指令则需要严格遵循18B20的读写时序来操作。数据的读写方法将有下文有详细介绍。 6. DS28B20芯片ROM指令表

Read ROM(读ROM)[33H] (方括号中的为16进制的命令字) Match ROM(指定匹配芯片)[55H] Skip ROM(跳跃ROM指令)[CCH] Search ROM(搜索芯片)[F0H] Alarm Search(报警芯片搜索)[ECH] 7. DS28B20芯片存储器操作指令表:

Write Scratchpad (向RAM中写数据)[4EH] Read Scratchpad (从RAM中读数据)[BEH] Copy Scratchpad (将RAM数据复制到EEPROM中)[48H] Convert T(温度转换)[44H] Recall EEPROM(将EEPROM中的报警值复制到RAM)[B8H] Read Power Supply(工作方式切换)[B4H] 8.写程序注意事项

DS18B20复位及应答关系

每一次通信之前必须进行复位,复位的时间、等待时间、回应时间应严格按时序编程。

DS18B20读写时间隙:

DS18B20的数据读写是通过时间隙处理位和命令字来确认信息交换的。 写时间隙:

写时间隙分为写“0”和写“1”,时序如图7。在写数据时间隙的前15uS总线需要是被控制器拉置低电平,而后则将是芯片对总线数据的采样时间,采样时间在15~60uS,采样时间内如果控制器将总线拉高则表示写“1”,如果控制器将总线拉低则表示写“0”。每一位的发送都应该有一个至少15uS的低电平起始位,随后的数据“0”或“1”应该在45uS内完成。整个位的发送时间应该保持在60~120uS,否则不能保证通信的正常。 读时间隙:

读时间隙时控制时的采样时间应该更加的精确才行,读时间隙时也是必须先由主机产生至少1uS的低电平,表示读时间的起始。随后在总线被释放后的15uS

中DS18B20会发送内部数据位,这时控制如果发现总线为高电平表示读出“1”,如果总线为低电平则表示读出数据“0”。每一位的读取之前都由控制器加一个起始信号。注意:必须在读间隙开始的15uS内读取数据位才可以保证通信的正确。 在通信时是以8位“0”或“1”为一个字节,字节的读或写是从高位开始的,即A7到A0.字节的读写顺序也是如图2自上而下的。

9.接线原理图:

本原理图采用四位数码管显示,低于100度时,首位不显示示例27.5,低于10度时示例为9.0,低于零度时示例为-3.7。

结束语:基于DS18B20温度测量温度准确,接线简单,易于控制,加以扩展可以应用到各种温度控制和监控场合。

参考文献:

DALLAS(达拉斯)公司生产的DS18B20温度传感器文献

程序:

#include

#define uchar unsigned char #define uint unsigned int

sbit sda=P1^7; sbit dian=P0^7;//小数点显示 uint tem;

uchar h; uchar code tabw[4]={0xf7,0xfb,0xfd,0xfe};//位选 uchar code tabs[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//数码管数据

//

0

4 5 6

8 9

- uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //查表显示小数位 ,1/16=0.0625,即当读出数据为3时,3*0.0625=0.1875,读出数据为3时对应1,查表显示1,为4时显2 uchar data temp[2]={0};//高位数据与低位数据暂存 uchar data display[5]={0};//显示缓存

void delay(uchar t)//t为1时延时小于5us { while(t--); } void delay1()//4us {} void delays(uchar m)//1ms { uchar i,j; for(i=0;i

for(j=0;j<110;j++); } void reset()//初始化 { uchar x=1; while(x) {

while(x)

{

sda=1;

sda=0;

delay(50);//延时500us以上

sda=1;

delay(5);//等待15us-60us

x=sda;

}

delay(45);

x=~sda; }

sda=1; } void write_s(uchar temp)//写入一个字节 { uchar i; for(i=0;i<8;i++) {

sda=1;

sda=0;

delay1();

sda=temp&0x01;

delay(6);

temp=temp/2; } sda=1; delay(1); } uchar read_s()//读出一个字节的数据 { uchar m=0,i; for(i=0;i<8;i++) {

sda=1;

m>>=1;

sda=0;

delay1();

sda=1;

delay1();

if(sda)

m=m|0x80;

delay(6); } sda=1; return m; } uint read_1820()//读出温度 { reset(); delay(200); write_s(0xcc);//发送命令

write_s(0x44);//发送转换命令

reset(); delay(1); write_s(0xcc);

write_s(0xbe); temp[0]=read_s(); temp[1]=read_s(); tem=temp[1]; tem<<=8; tem|=temp[0]; return tem; } void scan_led()//数据显示—数码管 { uchar i; for(i=0;i<4;i++) {

P0=tabs[display[i]];

P1=tabw[i];

delays(7);

if(i==1)

dian=0;

P1=tabw[i];

delays(2); } } void convert_t(uint tem)//温度转换{ uchar n=0; if(tem>6348) {

tem=65536-tem;

n=1; } display[4]=tem&0x0f; display[0]=ditab[display[4]];

display[4]=tem>>4;

display[3]=display[4]/100;

display[1]=display[4]%100;

display[2]=display[1]/10;

display[1]=display[1]%10; if(!display[3]) {

display[3]=0x0a; } if(!display[2])

display[2]=0x0a; if(n)

// 取百位数据暂存

// 取后两位数据暂存// 取十位数据暂存

{

n=0;

display[3]=0x0b; } } void main() { delay(0); delay(0); delay(0); P0=0xff; P1=0xff; for(h=0;h<4;h++)//初始化为零

{

display[h]=0; } reset(); write_s(0xcc); write_s(0x44); for(h=0;h<100;h++)//显示0保持

scan_led(); while(1) {

convert_t(read_1820());//读出并处理

scan_led();//显示温度

} }

第四篇:毕业设计(论文)-基于专用温度传感器的温度检测系统

摘 要 在现代工业领域温度检测系统是指用某种方式显示出当前的环境温度。传 统使用PTC或NTC电阻作为温度传感器的方式在使用过程中存在着很多不足之 处比如所采集温度的精度比较低、系统的可靠性差、设计难度较大、整体设计 成本较高等缺点已经无法满足现代工业生产中高精度温度控制的需求。而采用 专用温度传感器则可以在克服以上缺点很大程度上提高温度检测系统的性能。 本文阐述了一个基于专用温度传感器AD590的 高精度温度检测系统的设计

和实现过程。整个设计包括使用AD590的模拟温度采集传感器专用仪表放大 器AD620的信号处理系统由ADC0804构成的模数转换电路采用AT89C52组 成的单片机系统数码管显示系统和整机所需的供电系统。

关键字温度检测系统AD590AT89C52

Ⅰ Abstract The temperature check system in modern industry is that uses some special method to process and display the environmental temperature. Tradition uses PTC or NTC resistance to be using process to there be existing much defects as the temperature sensor way, supposes that what be detected the temperature has a bad accuracy, systematic reliability is bad, has much difficulties to design, and the cost of e ntire system is expensive. To use this method already unable satisfied modern industry produces the need being hit by the high-accuracy temperature under the control. Use the special temperature transducer could improve the systematic function of temperature detecting. This article elaborated the high-accuracy temperature having set forth a because of special temperature transducer AD590 checks the main body of a book systematically designing and realizing process. Entire design is included: Use the AD590 temperature transducer to detect the analog temperature, instrumentation amplifier AD620 signal process system, change the analog signal to digital signal circuit of ADC0804, the AT89C52 MUC system and the power system.

Key wordtemperature check systemAD590AT89C52

Ⅱ 目

录 摘 要.............................................................Ⅰ

Abstract............................................................Ⅱ 目 录.............................................................Ⅲ 1 绪论..............................................................1 1.1简介.......................................................... 2 1.2 温度控制系统的国内外现状......................................2 1.3 温度控制系统方案..............................................2 1.4 论文的主要任务和所做的工作....................................2 2设计方案以及论证.................................................. 4 2.2 温度传感部分..................................................4 2.3 A/D转换部分.................................................. 5 2.4数字显示部分.................................................. 6 3 电路设计......................................................... 8 3.1 硬件电路设计................................................. 8 3.1.1 温度采集电路............................................... 8 3.1.2 AD转换电路................................................. 8 3.1.3 单片机电路.................................................10 3.1.4 显示电路...................................................14 3.1.5 电源电路...................................................16 3.2 软件系统设计.................................................16 3.2.1 主程序设计.................................................16 3.2.2 AD转换程序.................................................17 3.2.3 温度采样...................................................18 3.2.4温度标度转换算法........................................... 19 3.3 特殊元器件介绍.............................................. 22 4 总结.............................................................24 参考文献.........................................................25 附录.............................................................26

1 绪论

1.1 简介 当代社会温度检测系统被广泛应用于社会生产、生活的各个领域。业、环境检测、医疗、家庭等多方面均有应用。同时单片机在电子产品中的应用 已经越来越广泛。

在很多电子产品中也将其用到温度检测和温度控制。目前温度测量系统种类 繁多功能参差不齐。有简单的应用于家庭的如空调电饭煲、太阳能热水器 电冰箱等家用电器的温度进行检测和控制。采用AT89C51单片机来对温度进行 控制不仅具有控制方便、组态简单和灵活性大等优点而且可以大幅度提高被 控温度的技术指标从而能够大大提高产品的质量和数量。单片机以其功能强、 体积小、可靠性高、造价低和开发周期短等优点为自动化和各个测控领域中广

在工 泛应用的器件在日常生活中成为必不可少的器件尤其是在日常生活中发挥的 作用也越来越大。因此单片机对温度的控制问题是一个日常生活中经常会遇到 的问题。

本论文以上述问题为出发点设计实现了温度实时测量、显示、控制系统。 以AD590为采集器AT89S51为处理器空调相应电路为执行器来完成设计任务 提出的温度控制要求。设计过程流畅所设计的电路单元较为合理。该设计在硬 件方案设计单元电路设计元器件选择等方面较有特色。 1.2 温度控制系统的国内外现状 通过网上查询、翻阅图书了解到目前国内外市场以单片机为核心的温度控制

系统很多而且方案灵活且应用面比较广可用于工业上的加热炉、热处理炉、 反应炉在生活当中的应用也比较广泛如热水器室温控制农业中的大棚温 度控制。以上出现的温度控制系统产品根据其系统组成、使用技术、功能特点、 技术指标。选出其中具有代表性的几种如下

1.虚拟仪器温室大棚温度测控系统在农业应用方面虚拟仪器温室大棚温度

测控系统是一种比较智能经济的方案适于大力推广改系统能够对大棚内的 温度进行采集然后再进行比较通过比较对大棚内的温度是否超过温度限制进 行分析如果超过温度限制温度报警系统将进行报警来通知管理人员大棚内 的温度超过限制大棚内的温控系统出现故障从而有利于农作物的生长提高 产量。本系统最大的优点是在一台电脑上可以监测到多个大棚内的温度情况从

而进行控制。该系统LabVIEW虚拟仪器编程通过对前面板的设置来显示温室大 棚内的温度并进行报警进而对大棚内温度进行控制。该系统有单片机温度

传感器串口通信和计算机组成。计算机主要是进行编程对温度进行显示、 报警和控制等温度传感器是对大棚内温度进行测量显示单片机是对温度传 感器进行编程去读温度传感器的温度值并把半温度值通过串口通信送入计算 机串口通信作用是把单片机送来的数据送到计算机里起到传输作用。 2.电烤箱温度控制系统

该方案采用美国TI公司生产的FLASH型超低功耗16位单片机MSP430F123 为核心器件通过热电偶检测系统温度用集成温度传感器AD590作为温度测量 器件利用该芯片内置的比较器完成高精度AD信号采样根据温度的变化情况 通过单片机编写闭环算法从而成功地实现了对温度的测量和自动控制功能。其 测温范围较低,大概在0-250之间具有精度高相应速度快等特点。 3.小型热水锅炉温度控制系统

该设计解决了北方冬季分散取暖采用人工定时烧水供热耗煤量大浪费人

力温度变化大的问题。设计方案硬件方面采用MCS-51系列8031单片机为核心 扩展程序存储器2732 AD590温度检测元件测量环境温度和供水温度ADC0809 进行模数转换同向驱动器740

7、光电耦合器及9103的功放完成对电机的控制。 软件方面建立了供暖系统的控制系统数学模型。本系统硬件电路简单,软件程序 易于实现。它可用于一台或多台小型取暖热水锅炉的温度控制,可使居室温度基 本恒定,节煤,节电,省人力。 1.3 温度控制系统方案 结合本设计的要求和技术指标通过对系统大致程序量的估计和系统工作速

度的估计考虑价格因素。选定AT89S51单片机作为系统的主要控制芯片8 位模数转换器AD0804采用AD509进行温度采集温度设定范围为-10℃~ 45℃ 通过温度采集系统对温度进行采集并作A/D转换再传输给单片机。以空调 机为执行器件通过单片机程序完成对室内温度的控制。 1.4 论文的主要任务和所做的工作 本论文主要是完成一种低成本、低价格、功能齐全、及温度测量、温度显示、 温度控制于一体的单片机温度控制系统的理论设计。包括硬件电路和主要的软件 设计。

研究的关键问题是室温的精确测量温度采集器AD590温度控制电路设 计单片机与A/D转换电路、显示电路以及软件设计。

根据本设计所要完成的任务本论文完成了如下工作 1介绍了研究和设计的背景和意义调查并综述了当前温度控系统市场的国内外 现状

2 提出了符合设计要求的高精度温度控制系统方案并阐述了其工作原理。 3 完成了硬件电路的设计它包括温度采集系统电路包含89S51单片机模数 转换器ADC0804等芯片的接口电路通过AD590实现的温度控制采集电路; 键盘接口和LED显示电路。

4 基本完成了软件部分设计它包括主程序流程图A/D转换子程序显示子程 序主程序清单。 2设计方案以及论证

2.1设计方案 经过查阅国内外相关资料现代工业控制的温度采集系统虽然传感器种类不 同但总体框架比较类似。通过仔细比较绘制出整体框架图如下

2.2 温度传感部分 方案1 基于PTC或NTC电阻的设计

热敏电阻是开发早、种类多、发展较成熟的敏感元器件。热敏电阻由

半导体陶瓷材料组成 利用温度引起电阻变化。若电子和空穴的浓度分别 为n、p迁移率分别为μn、μp则半导体的电导为

σ=qnμn+pμp

因为n、p、μn、μp都是依赖温度T的函数所以电导是温度的函数 因此可由测量电导而推算出温度的高低并能做出电阻-温度特性曲线这 就是半导体热敏电阻的工作原理

热敏电阻包括正温度系数PTC和负温度系数NTC热敏电阻以 及临界温度热敏电阻CTR。

使用热敏电阻设计而成的温度检测系统利用“惠更斯”电桥提取出 温度的变化然后通过高共模抑制比的仪表放大器将信号放大把模拟信 号信号送入模数转换电路进行模拟到数字信号的转变从而将信号送入单 片机进行处理最终由数码管显示出当前的温度值。整体框图如下 但热敏电阻精度、重复性、可靠性较差不适用于检测小于1 ℃的信号而

且线性度很差不能直接用于A/D转换应该用硬件或软件对其进行线性化补偿。

方案2

采用集成温度传感器如常用的AD590和LM35。

AD590是电流型温度传感器。这种器件是以电流作为输出量指示温度其典 型的电流温度敏感度是1μA/K.它是二端器件使用非常方便作为一种高阻电 流源他不需要严格考虑传输线上的电压信号损失噪声干扰问题因此特别适合 作为远距测量或控制用。另外AD590也特别适用于多点温度测量系统而不必 考虑选择开关或CMOS多路转换开关所引起的附加电阻造成的误差。

由于采用了一种独特的电路结构并利用最新的薄膜电阻激光微调技术校 准使得AD590具有很高的精度。并且应用电路简单便于设计。

方案选择选择方案2。理由电路简单稳定可靠无需调试与A/D连接 方便。 2.3 A/D转换部分 模/数转化器是一种将连续的模拟量转化成离散的数字量的一种电路或器件 模拟信号转换为数字信号一般需要经过采样保持和量化编码两个过程。针对不同

的采样对象有不同的A/D转换器ADC可供选择其中有通用的也有专用的。 有些ADC还包含有其他功能在选择ADC器件时需要考虑多种因素除了关键参 数、分辨率和转换速度以外还应考虑其他因素如静态与动态精度、数据接口 类型、控制接口与定时、采样保持性能、基本要求、校准能力、通道数量、功耗、 使用环境要求、封装形式以及与软件有关的问题。ADC按功能划分可分为直接 转换和非直接转换两大类其中非直接转换又有逐次分级转换、积分式转换等类 型。

A/D转换器在实际应用时除了要设计适当的采样/保持电路、基准电路和

多路模拟开关等电路外还应根据实际选择的具体芯片进行模拟信号极性转换等 的设计。

方案1采用分级式转换器这种转换器采用两步或多步进行分辨率的闪烁 式转换进而快速地完成“模拟-数字”信号饿转换同时可以实现较高的分辨 率。例如在利用两步分级完成n位转换的过程中首先完成m位的粗转换然后 使用精度至少为m位的数/模转换器ADC将此结果转换达到1/2的精度并且与 输入信号比较。对此信号用一个k位转换器k+m<=n转换最后将两个输出结 果合并。

方案2采用积分型A/D装换器如ICL7135等。双积分型A/D转换器转换 精度高但是转换速度不太快若用于温度测量不能及时地反应当前温度值 而且多数双击分型A/D转换器其输出端多不是而二进制码而是直接驱动数码管 的。所以若直接将其输出端接I/O接口会给软件设计带来极大的不方便。 方案3采用逐次逼近式转换器对于这种转换方式通常是用一个比较输 入信号与作为基准的n位DAC输出进行比较并进行n次1位转换。这种方法类 似于天平上用二进制砝码称量物质。采用逐次逼近寄存器输入信号仅与最高位 MSB比较确定DAC的最高位DAC满量程的一半。确定后结果0或1 被锁存同时加到DAC上以决定DAC的输出0或1/2。

逐次逼近式A/D转换器如ADC080

4、AD574等其特点是转换速度快精 度也比较高输出为二进制码直接接I/O口软件设计方便。由于ADC0804 设计时考虑到若干种模/数转换技术的优点所以该芯片非常适合于过程控制、 微控制器输入通道的结合口电路、智能仪器和机床控制等应用场合并且价格低 廉降低设计成本。

方案选择选择方案3。理由用ADC0804采样速度快配合温度传感器应 用方便价格低廉降低设计成本。 2.4 数字显示部分 通常用的LED显示器有7段或8段“米”字段之分。这种显示器有共阳极和

共阴极两种。共阴极LED显示器的发光二极管的阴极连接在一起通常此公共阴 极接地。当某个发光二极管的阳极为高电平时发光二极管点亮相应的段被显 示。同样共阳极LED显示器的工作原理也一样。 方案1采用静态显示方式。在这种方式下各位LED显示器的共阳极或 共阴极连接在一起并接地或电源正每位的段选线分别与一8位的锁存器 输出相连各个LED的显示字符一旦确定相应锁存器的输出将维持不变直到 显示另一个字符为止正因为如此静态显示器的亮度都较高。若用I/O口接口 这需要占用N*8位I/O口LED显示器的个数N。这样的话如果显示器的个数 较多那使用的I/O接口就更多因此在显示位数较多的情况下一般都不用静 态显示。

方案2采用动态显示方式。当多位LED显示时通常将所有位的段选线相应 的并联在一起由一个8位I/O口控制形成段选线的多路复用。而各位的共阳 极或共阴极分别有相应的I/O口线控制实现各位的分时选通。其中段选线占用 一个8位I/O口而位选线占用N个I/O口N为LED显示器的个数。由于各 位的段选线并联段码的输出对各位来说都是相同的因此同一时刻如果各 位选线都处于选通状态的话那LED显示器将显示相同的字符。若要各位LED 能显示出与本为相同的字符就必须采用扫描显示方式即在某一时刻只让某 一位的位选线处于选通状态而其他各位的位选线处于关闭状态同时段选线 上输出相应位要显示字符的段码。

方案选择选择方案2。理由非常节约I/O口亮度高节约CPU的使用 率。 3 电路设计

3.1 硬件系统设计 3.1.1 温度采集电路

温度采集系统主要由AD590、AD620组成如图所示 选用温度传感器AD590AD590具有较高精度和重复性重复性优于0.1℃ 其良好的非线形可以保证优于0.1℃的测量精度利用其重复性较好的特点通

过非线形补偿可以达到0.1℃测量精度。由AD590采集到的温度信号通过AD620, 一款低功耗、高进度的仪表放大器进行线性放大在AD620的外部只需要通过 一只电阻即可将放大倍数从1-1000倍进行调整。在本电路系统中我们需要将 输出最大值和最小值调整在0-5V之间便于A/D进行转换以提高温度采集电 路的可靠性。

集成温度传感器的输出形式分为电压输出和电流输出两种。电压输出型的灵 敏度一般为10mV/K温度0℃时输出为0温度25℃时输出为2.982V。电流输 出型的灵敏度为1 μA/K。这样便于A/D转换器采集数据。 3.1.2 AD转换电路 在学习和实验过程当中对于AD转换芯片通常使用美国国家半导体公司

生产的AD0809芯片进行模拟信号到数字信号的转换。AD0809相关资料齐全 使用广泛但是对于本设计略显奢侈AD0809可以同时转换8路模拟输入但 本设计中只需要转换一路模拟输入。因此我放弃使用AD0809转而使用美国 国家半导体公司的同类产品AD0804一款与AD0809同类型的模数转换芯片。 在达到系统要求的同时降低了电路的成本减小了电路的体积简化了电路的 复杂程度。 用单片机控制ADC时多数采用查询和中断控制两种方式。查询法是在单片

机把启动命令送到ADC之后执行别的程序同时对ADC的状态进行查询以检 查ADC变换是否已经完成如查询到变换已结束则读入转换完毕的数据。中断 控制是在启动信号送到ADC之后单片机执行别的程序。当ADC转换结束并向单 片机发出中断请求信号时单片机响应此中断请求进入中断服务程序读入转 换数据并进行必要的数据处理然后返回到原程序。这种方法单片机无需进行 转换时间管理CPU效率高所以特别适合于变换时间较长的ADC。本设计采用 查询方式进行数据收集。由于ADC0804片内无时钟故运用8051提供的地址锁 存使能信号ALE经D触发器二分频后获得时钟。因为ALE信号的频率是单片机时 钟频率的1/6如果时钟频率为6MHz,则ALE信号的频率为1MHz经二分频后为 500kHz与AD0804时钟频率的典型值吻合。由于AD0804具有三态输出锁存器 故其数据输出引角可直接与单片机的总线相连。并将A/D的ALE和START脚连在 一起以实现在锁存通道地址的同时启动ADC0804转换。启动信号由单片机的写 信号和P2.7经或非门而产生。在读取转换结果时用单片机的读信号和P2.7 经或非门加工得到的正脉冲作为OE信号去打开三态输出锁存器。根据所选用的 是查询、中断、等待延时三种方式之一的条件去执行一条输入指令读取A/D 转换结果。

ADC0804是一个8位逐次逼近的A/D转换器。AD0804的转换时间为100μs。 在CPU启动A/D命令后便执行一个固定的延时程序延时时间应略大于A/D 的转换时间延时程序一结束便执行数据读入指令读取转换结果。本设计选 用Motorola公司的基准源TL431产生参考电压2.50V即一位数字量对应10mV 即1℃。所以用起来很方便。具体电路如下

3.1.3 单片机电路 单片微型计算机简称单片机。它在一块芯片上集成了各种功能部件中央处

理器CPU、随机存取存储器RAM、只读存储器ROM、定时器/计数器和各 种输入/输出I/O接口如并行I/O口、串行I/O口和A/D转换器等。它们 之间相互连结构成一个完整的微型计算机。

单片机的发展经历了四个阶段第一阶段19711974年主要是美国INTEL 公司从早先的第一台MCS-4微型计算机到后来功能较强的8位微处理器

Intel8008和FAIRCHILD公司的F8微处理器。这些微处理器虽说还不是单片机 但从此拉开了研制单片机的序幕。第二阶段19741978初级单片机阶段 以INTEL公司的MCS-48为代表。这个系列的单片机内集成有8位CPU并行I/O 口8位定时器/计数器寻址范围不大于4K且无串行口。第三阶段1978 1983高性能单片机阶段。在这一阶段的单片机普遍带有串行口多级中断处 理系统和16位定时器/计数器。片内ROMRAM容量加大且寻址范围可达64K 字节有的片内还带有A/D转换器接口。这类单片机有INTEL公司的MCS-51 MOTOROLA公司的6801和ZILOG公司的Z8等。其中MCS-51系列产品由于其优 良的性能价格比特别适合我国的国情MCS-51系列单片机有可能稳定相当一

段时期。现在国内的MCS-51热正在升温随着我国经济建设步伐的加大MCS-51 系列单片机必将在各个领域大显身手。第四阶段1983现在8位单片机巩 固发展及16位单片机推出阶段。此阶段主要特征是一方面发展16位单片机及专

用单片机另一方面不断完善高档8位单片机改善其结构以满足不同用户的 需要。

MCS-51系列属高档单片机近年来INTEL公司在提高该系列产品性能方面 做了不少工作相继推出了不少新产品8052/8752/80

32、低功耗的CHMOS工艺 芯片80C51/87C51/80C

31、具有高级语言编程的芯片8052AH-BASIC、高性能的 C252系列等。在本次设计中我们采用了MCS -51系列中的89C51来完成产品的CPU 的功能。

89C51是一种带4K字节闪烁可编程可擦除只读存储器FPEROM—Falsh Programmable and Erasable Read Only Memory的低电压高性能CMOS8位微 处理器俗称单片机。89C2051是一种带2K字节闪烁可编程可擦除只读存储器 的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL 高密度非易失存储器制造技术制造与工业标准的MCS-51指令集和输出管脚相 兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中ATMEL的89C51 是一种高效微控制器89C2051是它的一种精简版本。89C单片机为很多嵌入式 控制系统提供了一种灵活性高且价廉的方案。

89C51的主要特性有与MCS-51 兼容4K字节可编程闪烁存储器寿命

1000写/擦循环数据保留时间10年全静态工作0Hz-24Hz三级程序存储 器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个

中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路。 下面按其引脚功能分为四部分叙述这40条引脚的功能 1 主电源引脚VCC和GND VCC40脚接+5V电压。GND20脚接地。

2 外接晶体引脚XTAL1和XTAL2 XTAL1 和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器 ,就构成了内部

振荡方式。由于单片机内部有一个高增益反相放大器当外接晶振后就构成了 自激振荡器并产生振荡时钟脉冲。

3 控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP RST/VPD当振荡器运行时在此引脚上出现两个机器周期的高电平将使单 片机复位。在此引脚与VSS引脚之间连接一个约10KΩ的下拉电阻与VCC引 脚之间连接一个约10μF的电容可以保证可靠地复位。VCC掉电期间此引脚 可接上备用电源以保持内部RAM的数据不丢失。当VCC主电源下掉到低于 规定的电平而VPD在其规定的电压范围5土0.5V内VPD就向内部RAM 提供备用电源。ALE/PROG当访问外部存储器时ALE允许地址锁存的 输出用于锁存地址的低位字节。即使不访问外部存储器ALE端仍然以不变的 频率周期性地出现正脉冲信号此频率为振荡器频率的1/6。因此它可用作对 外输出的时钟或用于定时目的。然而要注意的是每当访问外部数据存储器时 将跳过一个ALE脉冲。ALE端可以驱动吸收或输出电流8个LS型的TTL 输入电路。对于EPROM型的单片机如8751在EPROM编程期间此引脚 用于输入编程脉冲PROG。PSEN此脚的输出是外部程序存储器的读选通 信号。在从外部程序存储器取令或常数期间每个机器周期两次PSEN有效。

但在此期间每当访问外部数据存储器时这两次有效的PSEN信号将不出现。PSEN同样可以驱动吸收或输出8个LS型的TTL输入。EA/VPP当EA端

保持高电平时访问内部程序存储器但在PC程序计数器值超过0FFFH对 8051/8751/80C51或1FFFH对3052时将自动转向执行外部程序存储器内 的程序。当EA保持低电平时则只访问外部程序存储器不管是否有内部程序 存储器。对于常用的8031来说无内部程序存储器所以EA脚必须常接地 这样才能只选择外部程序存储器。对于EPROM型的单片机如8751在EPROM 编程期间此引脚也用于施加21伏的编程电源VPP。 4 输入/输出I/0引脚P0、P

1、P

2、P3共32根 P0口39脚--32脚是双向8位三态I/O口在外接存储器时与地址总 线的低8位及数据总线复用能以吸收电流的方式驱动8个LS TTL负载。P1 口l脚--8脚是8位准双向I/O口。由于这种接口输出没有高阻状态输入 也不能锁存故不是真正的双向I/O口。能驱动吸收或输出电流4个LS TTL 负载。对80

52、8032 P1.0引脚的第二功能为T2定时/计数器的外部输入P1.1 引脚的第二功能为T2EX捕捉、重装触发即T2的外部控制端。对EPROM编

程和程序验证时它接收低8位地址。P2口21脚--28脚是8位准双向I/O 口。在访问外部存储器时它可以作为扩展电路高8位地址总线送出高8位地址。

在对EPROM编程和程序验证期间它接收高8位地址。P2可以驱动吸收或 输出电流4个LS TTL负载。P3口l0脚--17脚是8位准双向I/O口在 MCS-51中这8个引脚还用于专门功能是复用双功能口。P3能驱动吸收或 输出电流4个LS TTL负载。作为第一功能使用时就作为普通I/O口用功 能和操作方法与P1口相同。作为第二功能使用时各引脚的定义如表3.1所示。 值得强调的是P3口的每一条引脚均可独立定义为第一功能的输入输出或第二 功能。 P3口的第二功能定义 口线

引脚 第二功能 P3.0 10 RXD串行输入口 P3.1 11 TXD串行输入口 P3.2 12 INT0外部中断 0

P3.3 13 1 INT外部中断1 P3.4 14 T0 定时器0外部输入 P3.5 15 T1 定时器1外部输入

P3.6 16 WR外部数据存储器写脉冲

P3.7 17 RD外部数据存储器读脉冲

3.1.4 显示电路

显示电路采用锁存器74HC573和数码管组合的方式进行显示温度数值。 数码管是单片机应用电路中常用的显示器件。每个数码管由8个发光二极管组 成。数码管有共阴极和共阳极两种类型。共阴极数码管内部8个二极管的阴极被 连接在一起和引脚com相接在使用是引脚应接低电平当数码管其余的某个引 脚接高电平则相应的发光二极管被点亮。共阳极数码管com端应接高电平当 数码管其余的某个引脚接低电平则相应的发光二极管被点亮。在使用过冲当中 我们需要在每个数码管的每一位段选上串联电阻限制导通电流来保证发光二极 管不被烧坏。本设计中选用共阳极数码管。 a共阴数码管原理图 b共阳数码管原理图 1 2 3 4 5 6 7a b c d e f g8dp9GND a bf c g d e dp a bf c g d e VCC1 2 3 4 5 6 7a b c d e f g8dp dp9 c共阴数码管电路符号图 d共阳数码管电路符号图 锁存器

74HC573是一款高速低功耗TTL锁存器它能够锁存8位数据最高锁存17ns 变化的数据。本设计中使用一组I/O口用来传送数码管的段选同时使用该组 I/O口的高四位传送位选。这样一来可以大大提高I/O口的使用效率。同时 使用另外两个I/O口控制两个锁存器的锁存端是能段来控制锁存器的工作。 关于74HC573的锁存使用说明如下图

显示总体电路如下

3.1.5 电源电路

一个优秀系统中的电源电路极为重要电源的好坏可以直接影响整机的工 作。本设计中采用线性稳压系统提供信号处理电路所需的正负15V电压和单片 机、数字电路、数码管所需的5V电压。电源系统的设计原理是通过工频变压器 将市电220V 50Hz的交流电变为双13V 50Hz的低压交流电再通过全桥整流变 为脉动的正电压经过电容滤波、7

8、79系列线性稳压芯片稳压最终输出稳 定的+15V、-15V和+5V直流电压供系统相应电路模块使用。 电源部分电路图如下所示

3.2 软件系统设计 本系统的单片机程序使用C语言编写相比汇编语言C语言具有使用灵

活、移植性强、易于上手、方便使用、可完成高级功能等特点。 3.2.1 主程序设计 程序启动后首先清理系统内存然后进行采集并通过A/D转换后传输

到单片机再由单片机控制显示设备显示现在的温度然后系统进入待机状态 等待再次检测温度。

3.2.2 AD转换程序

89S51给出一个脉冲信号启动A/D转换后ADC0809对接受到的模拟信号进 行转换这个转换过程大约需要100μs,系统采用的是固定延时程序所以在预 先设定的延时后89S51直接从ADC0809中读取数据。

主程序开始 采集温度 查询温度 调A/D程序

调显示程序 要控制温度

键盘输入设定值 和设定值比较 启动加热/降温

温度采集和比较 与设定值相等

是 N 否 是

3.2.3 温度采样

采样子程序流程图如图所示。

A/D入口 启动

A/D转换 查询EOC 读取转换数据 压缩BCD码 作未压缩处理

整理好的十位和个位 分别存入某地址单元

子程序结果

3.2.4温度标度转换算法

A/D转换器输出的数码虽然代表参数值的大小但是并不代表有量纲的参数

值必须转换成有量纲的数值才能进行显示标度转换有线性转换和非线性转换 两种本设计使用的传感器线性好在测量的量程制内基本能与温度成线性关系。 温度标度转换程序TRAST目的是要把实际采样的二进制值转换的温度值

转换成BCD形式的温度值。对一般的线性仪表来说标度转换公式为 AX=0A+) AA0 mNN NN0 m 0X

式中0A为一次仪表的下限 Am为一次量程仪表的上限为实际测量值工程量为仪表下限所对应的数字量 Nm为仪表上限所应的数字量 NX为测量所得数字量。例如若某热处理仪表量程为200—800℃在某一时刻计算机采样得到的 二进制值U(K)=CDH则相应的温度值为 采样值起始地址送 R0 采样次数送R2 启动AD590 延时

A/D完成 所有采样结束 返回 Y N N AX=0A+) AA0 mNN NN0 m 0X=200+800-200255205=682℃

根据上述算法只要设定热电偶的量程则相应的温度转换子程序TARST

N0 很容易编写只要把这一算式变成程序将A/D转换后经数字滤波处理后的值代 入即可计算出真实的温度值。具体算法如图所示。 保护现场 R0←Am, R1 ←0A 计算 NX-N0 R0←Nm, R1 ←N0 计算 Am-0A 计算) AA0 m/NN0m R0←NX, R1 ←N0 计算 Nm-N0 计算) AA0 mNN NN0 m 0X

R2—0A AX=0A+) AA0 mNN NN0 m 0X

DATA←AX 返 回 3.3 特殊元器件介绍 温度传感器AD590 简介

AD590温度传感器是一种已经IC化的温度传感器它会将温度转换为电流 其规格如下

1、温度每增加1℃它会增加1μA输出电流

2、可测量范围为-55℃至150℃ 3 、供电电压范围为+4V至+30V AD590的输出电流值说明见表。

其输出电流是以绝对温度零度-273℃为基准温度每增加1℃它会增

加1μA输出电流因此在室温25℃时其输出电流Iout=273+25=298μA。 AD590温度与电流的关系 温度与电流的关系 摄氏温度 AD590电流 经10KΩ电压 0℃ 273.2 uA 2.732V 10℃ 283.2 uA 2.832 V 20℃ 293.2 uA 2.932 V 30℃ 303.2 uA 3.032 V 40℃ 313.2 uA 3.132 V 50℃ 323.2 uA 3.232 V 60℃ 333.2 uA 3.332 V 100℃ 373.2 uA 3.732 V 主要特性如下

1 流过器件的电流mA等于器件所处环境的热力学温度开尔文度 数

2AD590的测温范围为-55℃+150℃。

3AD590的电源电压范围为4V30V。电源电压可在4V6V范围变化 电流变化1mA相当于温度变化1℃。AD590可以承受44V正向电压和20V反向 电压因而器件反接也不会被损坏。 4输出电阻为710MΩ。

5精度高。AD590共有I、J、K、L、M五档其中M档精度最高在-55℃ +150℃范围内非线性误差为±0.3℃。 AD590测量热力学温度、摄氏温度、两点温度差、多点最低温度、多点平均

温度的具体电路广泛应用于不同的温度控制场合。由于AD590精度高、价格低、 不需辅助电源、线性好常用于测温和热电偶的冷端补 AD590实际应用电路举例 分析

1AD590的输出电流I=273+TμAT为摄氏温度因此测量的电压 V为273+TμA×10K=2.73+T/100V。为了将电压测量出来又务须使输出 电流I不分流出来我们使用电压跟随器其输出电压V2等于输入电压V。 2由于一般电源供应教多器件之后电源是带杂波的因此我们使用齐 纳二极管作为稳压组件再利用可变电阻分压其输出电压V1需调整至2.73V 3接下来我们使用差动放大器其输出Vo为100K/10K×V2-V1=T/10 如果现在为摄氏28℃输出电压为2.8V输出电压接AD转换器那么AD转换 输出的数字量就和摄氏温度成线形比例关系。

AD590测量热力学温度、摄氏温度、两点温度差、多点最低温度、多点平均

温度的具体电路广泛应用于不同的温度控制场合。由于AD590精度高、价格低、

不需辅助电源、线性好常用于测温和热电偶的冷端补偿。 4 总结 AT89C51单片机体积小重量轻抗干扰能力强对环境要求不高价格

低廉可靠性高灵活性好本文的温度控制系统只是单片机广泛应用于各行 各业中的一例。

设计实现了温度实时测量、显示。本设计温度控制电路具有较高的抗干扰性 实时性方案具有较高的测量精度温度控制实时性更高。在设计过程中首先 在老师的指导下熟悉了系统的工艺进行对象的分析按照要求确定方案。然后 进行硬件和软件的设计。通过设计使我掌握了微型机控制系统I/O接口的使用方 法模拟量输入/输出通道的设计常用显示程序的设计方法数据处理及线性 标度技术基本算法的设计思想。

在做毕业设计之前我对单片机的基本知识了解甚少而C语言虽是接触过 可是没有具体的设计和编辑过所以花了大量的时间去做准备工作。在老师的指 导和帮助下克服了一系列困难终于完成了本设计基于本人能力有限该设计 还有许多不足之处有待改进。

参考文献 [1]钱聪.电子线路分析与设计[M].西安:陕西人民出版社,2000. [2]谈文心,钱聪,宋云娴.模拟集成电路原理与应用[M].西安:西安交通大学出版 社,1994. [3]孙肖子

,邓建国,陈南钱聪.电子设计指南[M].西安:高等教育出版社,2006. [4]HAN Zhi-jun Liu Xin-min.DIGITAL TEMPERATURE SENSOR DS18B20 AND ITS APPLICATION [J]. Nanjing: Journal of Nanjing Institute of Technology(Natural Science Edition).2003 [5]SHEN Li-li,CHEN Zhong-rong. Design of Multi-Channel Test System of Measuring Temperature for Grain Storage Based on CPLD and DS18B20[J].Nanjing: Nanjing University of Information Science & Technology.2008 [6]You Guanjun Hu Yihua Liu Shenlong Zhao Tianxiang. THE CIRCUITRY OF AD590 IC TEMPERATURE SENSOR AND THE APPLICATION IN TEMPERATURE MEASUREMENT AND CONTROL[J].COLLEGE PHYSICAL EXPERIMENT,2000. [7]张国勋. 缩短ICL7135A/D采样程序时间的一种方法[J].电子技术应用 1993第一期. [8]高峰. 单片微型计算机与接口技术[M].北京:科学出版社2003 [9]刘伟,赵骏逸,黄勇. 一种基于C8051单片机的SOC型数据采录的设计与实现 [A].天津:天津市计算机协会单片机分会编 2003 [10]何立民. 单片机高级教程[M].北京:北京航空航天大学出版社,2000 [11]李元. 数字电路与逻辑设计[M].南京:南京大学出版社,1997 [12]苏丽萍. 电子技术基础[M].西安:西安电子科技大学,2006 [13]徐江海. 单片机实用教程[M]:机械工业出版社,2003 [14]谢文和. 传感器技术及其应用[M]:高等教育出版社,2004 [15]孟立凡,蓝金辉. 传感器原理与应用[M].电子工业出版社,2000 [16]江晓安. 模拟电子技术 第二版[M].西安:西安电子科技大学出版社,2004

附录 单片机应用程序 #include #define uchar unsigned char #define uint unsigned int sbit wela=P3^0; sbit dula=P3^1; sbit wr=P3^6; sbit rd=P3^7; sbit cs=P3^5; uchar num; uint a1,b1,c1; uchar table1[]= {0xff,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x86}; uchar table2[]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x86}; uchar table3[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x86}; void delay(uint z); uchar ad(); void display(uint,uint,uint); void main() { while(1) { switch(ad()) { case 0x00: a1=0,b1=0,b1=0; break; case 0x01: a1=0,b1=0,c1=3; break; case 0x02: a1=0,b1=0,c1=7; break; case 0x03: a1=0,b1=1,c1=1; break; case 0x04: a1=0,b1=1,c1=5; break; case 0x05: a1=0,b1=1,c1=9; break; case 0x06: a1=0,b1=2,c1=3; break; case 0x07: a1=0,b1=2,c1=7; break; case 0x08: a1=0,b1=3,c1=1; break; case 0x09: a1=0,b1=3,c1=5; break; case 0x0a: a1=0,b1=3,c1=9; break; case 0x0b: a1=0,b1=4,c1=2; break; case 0x0c: a1=0,b1=4,c1=6; break; case 0x0d: a1=0,b1=5,c1=0; break; case 0x0e: a1=0,b1=5,c1=4; break; case 0x0f: a1=0,b1=5,c1=8; break; case 0x10: a1=0,b1=6,c1=2; break; case 0x11: a1=0,b1=6,c1=6; break; case 0x12: a1=0,b1=7,c1=0; break; case 0x13: a1=0,b1=7,c1=4; break; case 0x14: a1=0,b1=7,c1=8; break; case 0x15: a1=0,b1=8,c1=2; break; case 0x16: a1=0,b1=8,c1=5; break; case 0x17: a1=0,b1=8,c1=9; break; case 0x18: a1=0,b1=9,c1=3; break; case 0x19: a1=0,b1=9,c1=7; break; case 0x1a: a1=1,b1=0,c1=1; break; case 0x1b: a1=1,b1=0,c1=5; break; case 0x1c: a1=1,b1=0,c1=9; break; case 0x1d: a1=1,b1=1,c1=3; break; case 0x1e: a1=1,b1=1,c1=7; break; case 0x1f: a1=1,b1=2,c1=1; break; case 0x20: a1=1,b1=2,c1=5; break; case 0x21: a1=1,b1=2,c1=8; break; case 0x22: a1=1,b1=3,c1=2; break; case 0x23: a1=1,b1=3,c1=6; break; case 0x24: a1=1,b1=4,c1=0; break; case 0x25: a1=1,b1=4,c1=4; break; case 0x26: a1=1,b1=4,c1=8; break; case 0x27: a1=1,b1=5,c1=2; break; case 0x28: a1=1,b1=5,c1=6; break; case 0x29: a1=1,b1=6,c1=0; break; case 0x2a: a1=1,b1=6,c1=4; break; case 0x2b: a1=1,b1=6,c1=8; break; case 0x2c: a1=1,b1=7,c1=2; break; case 0x2d: a1=1,b1=7,c1=5; break; case 0x2e: a1=1,b1=7,c1=9; break; case 0x2f: a1=1,b1=8,c1=3; break; case 0x30: a1=1,b1=8,c1=7; break; case 0x31: a1=1,b1=9,c1=1; break; case 0x32: a1=1,b1=9,c1=5; break; case 0x33: a1=1,b1=9,c1=9; break; case 0x34: a1=2,b1=0,c1=3; break; case 0x35: a1=2,b1=0,c1=7; break; case 0x36: a1=2,b1=1,c1=1; break; case 0x37: a1=2,b1=1,c1=4; break; case 0x38: a1=2,b1=1,c1=8; break; case 0x39: a1=2,b1=2,c1=2; break; case 0x3a: a1=2,b1=2,c1=6; break; case 0x3b: a1=2,b1=3,c1=0; break; case 0x3c: a1=2,b1=3,c1=4; break; case 0x3d: a1=2,b1=3,c1=8; break; case 0x3e: a1=2,b1=4,c1=2; break; case 0x3f: a1=2,b1=4,c1=6; break; case 0x40: a1=2,b1=5,c1=0; break; case 0x41: a1=2,b1=5,c1=3; break; case 0x42: a1=2,b1=5,c1=7; break; case 0x43: a1=2,b1=6,c1=1; break; case 0x44: a1=2,b1=6,c1=5; break; case 0x45: a1=2,b1=6,c1=9; break; case 0x46: a1=2,b1=7,c1=3; break; case 0x47: a1=2,b1=7,c1=7; break; case 0x48: a1=2,b1=8,c1=1; break; case 0x49: a1=2,b1=8,c1=5; break; case 0x4a: a1=2,b1=8,c1=9; break; case 0x4b: a1=2,b1=9,c1=3; break; case 0x4c: a1=2,b1=9,c1=6; break; case 0x4d: a1=3,b1=0,c1=0; break; case 0x4e: a1=3,b1=0,c1=4; break; case 0x4f: a1=3,b1=0,c1=8; break; case 0x50: a1=3,b1=1,c1=2; break; case 0x51: a1=3,b1=1,c1=6; break; case 0x52: a1=3,b1=2,c1=0; break; case 0x53: a1=3,b1=2,c1=4; break; case 0x54: a1=3,b1=2,c1=8; break; case 0x55: a1=3,b1=3,c1=2; break; case 0x56: a1=3,b1=3,c1=5; break; case 0x57: a1=3,b1=3,c1=9; break; case 0x58: a1=3,b1=4,c1=3; break; case 0x59: a1=3,b1=4,c1=7; break; case 0x5a: a1=3,b1=5,c1=1; break; case 0x5b: a1=3,b1=5,c1=5; break; case 0x5c: a1=3,b1=5,c1=9; break; case 0x5d: a1=3,b1=6,c1=3; break; case 0x5e: a1=3,b1=6,c1=7; break; case 0x5f: a1=3,b1=7,c1=1; break; case 0x60: a1=3,b1=7,c1=5; break; case 0x61: a1=3,b1=7,c1=8; break; case 0x62: a1=3,b1=8,c1=2; break; case 0x63: a1=3,b1=8,c1=6; break; case 0x64: a1=3,b1=9,c1=0; break; case 0x65: a1=3,b1=9,c1=4; break; case 0x66: a1=3,b1=9,c1=8; break; case 0x67: a1=4,b1=0,c1=2; break; case 0x68: a1=4,b1=0,c1=6; break; case 0x69: a1=4,b1=1,c1=0; break; case 0x6a: a1=4,b1=1,c1=4; break; case 0x6b: a1=4,b1=1,c1=8; break; case 0x6c: a1=4,b1=2,c1=1; break; case 0x6d: a1=4,b1=2,c1=5; break; case 0x6e: a1=4,b1=2,c1=9; break; case 0x6f: a1=4,b1=3,c1=3; break; case 0x70: a1=4,b1=3,c1=7; break; case 0x71: a1=4,b1=4,c1=1; break; case 0x72: a1=4,b1=4,c1=5; break; case 0x73: a1=4,b1=4,c1=9; break; case 0x74: a1=4,b1=5,c1=3; break; case 0x75: a1=4,b1=5,c1=7; break; case 0x76: a1=4,b1=6,c1=0; break; case 0x77: a1=4,b1=6,c1=4; break; case 0x78: a1=4,b1=6,c1=8; break; case 0x79: a1=4,b1=7,c1=2; break; case 0x7a: a1=4,b1=7,c1=6; break; case 0x7b: a1=4,b1=8,c1=0; break; case 0x7c: a1=4,b1=8,c1=4; break; case 0x7d: a1=4,b1=8,c1=8; break; case 0x7e: a1=4,b1=9,c1=2; break; case 0x7f: a1=4,b1=9,c1=6; break; case 0x80: a1=5,b1=0,c1=0; break; case 0x81: a1=5,b1=0,c1=3; break; case 0x82: a1=5,b1=0,c1=7; break; case 0x83: a1=5,b1=1,c1=1; break; case 0x84: a1=5,b1=1,c1=5; break; case 0x85: a1=5,b1=1,c1=9; break; case 0x86: a1=5,b1=2,c1=3; break; case 0x87: a1=5,b1=2,c1=7; break; case 0x88: a1=5,b1=3,c1=1; break; case 0x89: a1=5,b1=3,c1=5; break; case 0x8a: a1=5,b1=3,c1=9; break; case 0x8b: a1=5,b1=4,c1=3; break; case 0x8c: a1=5,b1=4,c1=6; break; case 0x8d: a1=5,b1=5,c1=0; break; case 0x8e: a1=5,b1=5,c1=4; break; case 0x8f: a1=5,b1=5,c1=8; break; case 0x90: a1=5,b1=6,c1=2; break; case 0x91: a1=5,b1=6,c1=6; break; case 0x92: a1=5,b1=7,c1=0; break; case 0x93: a1=5,b1=7,c1=4; break; case 0x94: a1=5,b1=7,c1=8; break; case 0x95: a1=5,b1=8,c1=2; break; case 0x96: a1=5,b1=8,c1=5; break; case 0x97: a1=5,b1=8,c1=9; break; case 0x98: a1=5,b1=9,c1=3; break; case 0x99: a1=5,b1=9,c1=7; break; case 0x9a: a1=6,b1=0,c1=1; break; case 0x9b: a1=6,b1=0,c1=5; break; case 0x9c: a1=6,b1=0,c1=9; break; case 0x9d: a1=6,b1=1,c1=3; break; case 0x9e: a1=6,b1=1,c1=7; break; case 0x9f: a1=6,b1=2,c1=1; break; case 0xa0: a1=6,b1=2,c1=5; break; case 0xa1: a1=6,b1=2,c1=8; break; case 0xa2: a1=6,b1=3,c1=2; break; case 0xa3: a1=6,b1=3,c1=6; break; case 0xa4: a1=6,b1=4,c1=0; break; case 0xa5: a1=6,b1=4,c1=4; break; case 0xa6: a1=6,b1=4,c1=8; break; case 0xa7: a1=6,b1=5,c1=2; break; //65.2 default: a1=7,b1=10,c1=10;break; } display(a1,b1,c1); } }

uchar ad() { cs=1; wr=1; cs=0; wr=0; delay(1); wr=1; cs=1; rd=1; delay(3); cs=0; rd=0; num=P1; delay(1); rd=1; cs=1; delay(50); return num; } void display(uint a,uint b,uint c) { P2=0x00; wela=1; P2=0x80; wela=0; P2=0xff; dula=1; P2=table1[a]; dula=0; delay(10); //第一位 P2=0x00; wela=1; P2=0x40; wela=0; P2=0xff; dula=1; P2=table2[b]; dula=0; delay(10); //第二位 P2=0x00; wela=1; P2=0x20; wela=0; P2=0xff; dula=1; P2=table3[c]; dula=0; delay(10); //第三位 P2=0x00; wela=1; P2=0x10; wela=0; P2=0xff; dula=1; P2=0xc6; dula=0; delay(10); //第四位 P2=0x00; wela=1; P2=0x00; wela=1; delay(10); } void delay(uint z) { uint t1,y; for(t1=z;t1>0;t1--) for(y=10;y>0;y--); }

第五篇:《温度控制器》实训报告

第周,星期,第节课学生姓名学号

一、实训目的:

检测温度控制器的好坏。

二、实训器材:

电冰箱1台、万用表1块、温度计1支、温度控制器1只、加工后的鳄 鱼夹子2只。

三、实训要求:

必须掌握温度控制器的安装位置和它的环温度。

四、实训过程:

1、把温度控制器设定在某一位置,连接好试验电路,放入冷冻室内。

2、开启冰箱,随着冷冻室内温度的降低,当万用表指示为∞时,说明温度控制器的触点已经断开,打开冰箱门,读出温度计指示为2℃,并做好记录。停开冰箱,冷冻室内温度逐渐上升,当万用表指示复为0Ω时,再读出温度计指示为10℃,并做好记录。

五、实训总结:

从上述实训中得知,该温度控制器能在2℃时关断电路,10℃时接通电路,完全符合冰箱温度控制的要求。

六、实训结果:

该温度控制器正常。

指导教师评语:

实训报告等级:指导教师签字:

年月日

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【ds18b20温度检测控制】相关文章:

ds18b20温度控制器06-16

ds18b20温度传感器06-17

ds18b20程序07-30

我写ds18b20总结06-02

ds18b20简单介绍06-02

ds18b20学习总结06-02

ds18b20资料及程序06-16

ds18b20详细中文资料06-21

ds18b20完整测试程序06-21

ds18b20课程设计报告06-21

上一篇:页面访问升级111nene下一篇:123ddesign实用详解