温度控制设计555Word格式.docx

上传人:b****7 文档编号:22002539 上传时间:2023-02-02 格式:DOCX 页数:23 大小:423.35KB
下载 相关 举报
温度控制设计555Word格式.docx_第1页
第1页 / 共23页
温度控制设计555Word格式.docx_第2页
第2页 / 共23页
温度控制设计555Word格式.docx_第3页
第3页 / 共23页
温度控制设计555Word格式.docx_第4页
第4页 / 共23页
温度控制设计555Word格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

温度控制设计555Word格式.docx

《温度控制设计555Word格式.docx》由会员分享,可在线阅读,更多相关《温度控制设计555Word格式.docx(23页珍藏版)》请在冰豆网上搜索。

温度控制设计555Word格式.docx

许多化学反应的工艺过程必须在适当的温度下才能正常进行;

炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油、柴油、煤油等产品。

没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。

因此,各行各业对温度控制的要求都越来越高。

可见,温度的测量和控制是非常重要的。

单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测和温度控制。

随着温度控制器应用范围的日益广泛和多样,各种适用于不同场合的智能温度控制器应运而生。

本设计的内容是温度测试控制系统,控制对象是温度。

温度控制在日常生活及工业领域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制。

而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。

本设计是对温度进行实时监测与控制,设计的温度控制系统实现了基本的温度控制功能:

当温度低于设定下限温度时,系统自动启动加热继电器加温,使温度上升。

当温度高于设定上限温度时,系统自动启动风扇降温,使温度下降。

当温度下降到上限温度以下时,停止降温。

温度在上下限温度之间时,执行机构不执行。

数码管显示即时温度,精度为正负0.5摄氏度。

第1章总体设计方案

本设计采用了DS18B20数字是温度传感器,将采集的温度信号直接通过传感器转化为数字信号传给单片机处理。

电路结构得到了很大的简化,否则使用模拟式温度传感器,采集信号后还需A/D转换器变模拟信号为数字信号才能供单片机处理。

本设计处理流程为:

DS18B20将采集的温度信号转化为数字信号保存在DS18B20的内部暂存器中,然后将暂存器中完整的数字信号通过单一数据传递线传给单片机处理。

单片机将接收的信号与给定的正常温度范围进行比较,若低于正常范围则输出一个信号让加热继电器动作,若高于正常范围则输出一个信号给直流电机进行降温处理。

1.1DS18B20历史简介

温度的测量是从金属(物质)的热胀冷缩开始。

水银温度计至今仍是各种温度测量的计量标准。

可是它的缺点是只能近距离观测,而且水银有毒,玻璃管易碎。

代替水银的有酒精温度计和金属簧片温度计,他们虽然没有毒性但精度很低。

不能满足工业要求,在工业生产和实验研究中为了配合远传仪表指示,出现了许多不同的温度检测方法,常用的有电阻式、热电偶式、PN结型等,原理都是基于温度的变化而引起其它物理量的变化。

随着大规模集成电路工艺的提高,出现了多种集成的数字化温度传感器,例如DS18B20数字式温度传感器。

1.2DS18B20性能简介

1)独特的单线接口仅需要一个端口引脚进行通信;

2)多个DS18B20可以并联在惟一的三线上,实现多点组网功能;

3)无须外部器件;

4)可通过数据线供电,电压范围为3.0~5.5V;

5)零待机功耗;

6)温度以3位数字显示;

7)用户可定义报警设置;

8)报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。

1.2.2DS18B20封装

本设计采用的是DS18B20的3脚PR-35封装,其中中间一个引脚是进行数据传递的。

另外两个引脚分别是地线引脚和电源引脚。

(1)DS18B20内部结构如下图1-1所示

图1-1DS18B20内部结构图

(2)64位光刻ROM。

开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。

其排序如下表1.1.3。

8b检验CRC48b序列号8b工厂代码(10H)

MSBLSBMSBLSBMSBLSB

表1-1

(3)非挥发的温度报警触发器TH和TL,可通过软件写入用户报警上下限值。

(4)高速暂存存储,可以设置DS18B20温度转换的精度。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM。

高速暂存RAM的结构为9字节的存储器,结构如表1-2所示。

头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

它的内部存储器结构和字节定义如图1.3所示。

低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式。

表1-2RAM的内部存储器

(5)告诉暂存存储,可以设置DS18B20温度转换的精度。

DS18B20出厂时该位被设置为0,用户可以去改动,其中R1和R0用来设置转换精度,用于设置分辨率。

其字节定义如下表1-3所示。

表1-3DS18B20字节定义

(6)其分辨率与温度转换的时间如表1-4所示,由此可见分辨率越高转换时间越长。

表1-4DS18B20温度转换时间表

(7)部分温度数值与二进制之间的对应关系如下表1-5所示。

表1-5部分温度对应表

(8)CRC的产生在64bROM的最高有效字节中存储有循环冗余校验码(CRC)。

主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作按协议进行。

操作协议为:

初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作令→处理数据。

1.3DS18B20的工作原理

1.3.1DS18B20工作时序

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:

1.每一次读写前都必须要对DS18B20进行复位;

2.复位成功后发送一条ROM指令;

3.最后发送RAM指令,这样才能对DS18B20进行预定的操作。

复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待15~60微秒左右后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

其工作时序包括初始化时序、写时序和读时序,具体工作方法如图1-2,1-3,1-4所示。

(1).初始化程序

图1-2DS18B20初始化时序

总线上的所有传输过程都是以初始化开始的,主机响应应答脉冲。

应答脉冲使主机知道,总线上有从机设备,且准备就绪。

主机输出低电平,保持低电平时间至少480us,以产生复位脉冲。

接着主机释放总线,4.7KΩ上拉电阻将总线拉高,延时15~60us并进入接收模式,以产生低电平应答脉冲,若为低电平,再延时480us。

(2).写时序

图1-3DS18B20写时序

写时序包括写0时序和写1时序。

所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢复时间,都是以总线拉低开始。

写1时序,主机输出低电平,延时2us,然后释放总线,延时60us。

写0时序,主机输出低电平,延时60us,然后释放总线,延时2us。

(3)读时序

图1-4DS18B20读时序

总线器件仅在主机发出读时序是,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。

所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。

每个读时序都由主机发起,至少拉低总线1us。

主机在读时序期间必须释放总线,并且在时序起始的15us之内采样总线状态。

主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取总线当前电平,然后延时50us。

1.3.2ROM操作命令

当主机收到DSl8B20的响应信号后,便可以发出ROM操作命令之一,这些命令如下表1-6ROM操作命令。

1.3.3DS18B20测温原理

每一片DSl8B20在其ROM中都存有其唯一的48位序列号,在出厂前已写入片内ROM中。

主机在进操作程序前必须用读ROM(33H)命令将该DSl8B20的序列号读出。

程序可以先跳过ROM,启动所有DSl8B20进行温度变换,之后通过匹配ROM,再逐一地读回每个DSl8B20的温度数据。

DS18B20的测温原理如图1-5所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为另外一个减法计数器的脉冲输表1-6ROM操作命令

入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的钟脉冲后进行计数,进而完成温度测量。

计数门的开启时间由高温度系数振荡器来决定,每次测量前,首将-55℃所对应的基数分别置入减法计数器和温度寄存器中,减法计数器和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到0时温度寄存器的值将加1,减法计数器的预置将从新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到另一个减法计数器计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

图1-5中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用修正法修正计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值。

另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作必须按协议进行。

初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

图1-5测温原理图

1.4DS18B20测温流程

测温流程如下图1-6所示。

图1-6DS18B20测温流程图

 

第2章单片机接口设计

2.1设计原则

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式,如图3.1所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

本设计采用电源供电方式,P2.7口接单线总线。

当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉启时间最大为10μs。

采用寄生电源供电方式是VDD和GND端均接地。

由于单线制只有一根线,因此发送接收口必须是三状态的。

主机控制DS18B20完成温度转换必须经过3个步骤:

1.初始化;

2.RO操作指令;

3.存储器操作指令。

2.2引脚连接

2.2.1晶振电路

单片机XIAL1和XIAL2分别接22PF的电容,中间并接12MHZ的晶振,为单片机提供工作周期。

具体电路图如下2-1所示。

图2-1晶振电路

2.2.2显示电路

采用AT89C51作CPU,其中P0端口和P2.0,P2.1,P2.2作温度显示输出口。

连接图如下2-2所示。

2.2.3低温加热电路

用P1.0作控制加热器的输出口,外接一个红色发光二极管做加热显示,并串接一个220欧的限流电阻。

通过控制Q2(三极管)的导通与截止来控制加热继电器的导通与关闭。

其连接图如下2-3所示。

图2-2显示电路

图2-3低温加热电路

2.2.4高温降热电路

用P1.1作控制电机工作的输出端口,其中P1.1外接一个黄色的二极管做降温显示,并通过一个电压跟踪运算放大器将驱动电机电路域单片机隔离。

具体连接如图2-4所示。

图2-4高温降热电路

2.2.5温度采集电路

用DS18B20中间一个引脚作数字式温度信号的输入口,将其接在单片机P2.7口上。

具体连接如图2-5所示。

图2-5温度采集电路

2.2.6复位电路

本设计采用上电自动复位。

其具体连接如图2-6所示。

图2-6复位电路

第3章系统整体设计

3.1系统硬件电路

硬件电路整体设计如图3-1所示。

图3-1整体连接图

3.2系统软件设计

3.2.1软件的选择

程序设计语言有三种:

机器语言,汇编语言,高级语言,其中前两种语言编程复杂,而高级语言编写既简单又容易理解,故本设计采用高级语言中的C语言编写程序。

本装置的软件包括主程序、读出温度子程序、复位电路子程序、延时电路子程序、以及有关DS18B20的程序(初始化子程序、写程序和读程序)、温度数据处理子程序、温度显示子程序。

3.2.2具体程序流程

A.主函数流程如下图3-2所示。

B.温度处理流程如下图3-3所示。

图3-2主函数流程

图3-3温度处理流程

3.2.3具体程序

如下:

//温度计读写程序源代码//

#include"

reg51.h"

intrins.h"

#definedmP0//以P0口作为LED段码输出口

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P2^7;

//以P2.7口作为温度传感器输入口

sbitw0=P2^0;

//数码管4

sbitw1=P2^1;

//数码管3

sbitw2=P2^2;

//数码管2

sbitw3=P2^3;

//数码管1

sbitled0=P1^0;

//加热驱动端

sbitled1=P1^1;

//降温驱动端

inttemp1=0;

//显示当前温度和设置温度的标志位为0时显示当前温度

uinth;

uinttemp;

ucharr;

ucharhigh=35,low=20;

ucharsign;

ucharq=0;

uchartt=0;

ucharscale;

ucharcodeditab[16]=

{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

ucharcodetable_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

uchartable_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

uchardatatemp_data[2]={0x00,0x00};

uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};

//延时电路程序//

voiddelay(uintt)

{

for(;

t>

0;

t--);

}

voidscan()

intj;

for(j=0;

j<

4;

j++)

switch(j)

case0:

dm=table_dm[display[0]];

w0=0;

delay(50);

w0=1;

//xiaoshu

case1:

dm=table_dm1[display[1]];

w1=0;

w1=1;

//gewei

case2:

dm=table_dm[display[2]];

w2=0;

w2=1;

//shiwei

case3:

dm=table_dm[display[3]];

w3=0;

w3=1;

//baiwei

//else{dm=table_dm[b3];

//复位电路程序/

ow_reset(void)

charpresence=1;

while(presence)

DQ=1;

_nop_();

DQ=0;

delay(6);

presence=DQ;

//presence=0

delay(45);

presence=~DQ;

//DS18B20写命令函数//

voidwrite_byte(ucharval)

uchari;

for(i=8;

i>

i--)

//5us

DQ=val&

0x01;

val=val/2;

delay

(1);

//DS18B20读1字节函数//

ucharread_byte(void)

ucharvalue=0;

value>

>

=1;

//4us

if(DQ)value|=0x80;

//66us

return(value);

//读出温度函数//

read_temp()

ow_reset();

delay(200);

write_byte(0xcc);

write_byte(0x44);

write_byte(0xbe);

temp_data[0]=read_byte();

temp_data[1]=read_byte();

temp=temp_data[1];

temp<

<

=8;

temp=temp|temp_data[0];

returntemp;

//温度数据处理函数//

work_temp(uinttem)

ucharn=0;

if(tem>

6348)//温度值正负判断

{tem=65536-tem;

n=1;

}//负温度求补码,标志位置1

display[4]=tem&

0x0f;

//取小数部分的值

display[0]=ditab[display[4]];

//存入小数部分显示值

display[4]=tem>

//取中间八位,即整数部分的值

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

//取百位数据暂存

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

//取后两位数据暂存

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

//取十位数据暂存

display[1]=display[1]%10;

//个位数据

r=display[1]+display[2]*10+display[3]*100;

if(r<

30)//低温加热

led0=1;

led1=0;

if((r>

=30)&

(r<

40))//在温度区间不动作

led0=0;

if(r>

=40)//高温降温

led1=1;

/////符号位显示判断/////

if(!

display[3])

display[3]=0x0a;

//最高位为0时不显示

display[2])

display[2]=0x0a;

//次高位为0时不显示

if(n){display[3]=0x0b;

}//负温度时最高位显示"

-"

//*********设置温度显示转换************//

voidxianshi(inthorl)

intn=0;

if(horl>

128)

horl=256-horl;

display[3]=horl/100;

display[3]=display[3]&

display[2]=horl%100/10;

display[1]=horl%10;

display[0]=0;

if(n)

display[3]=0x0b;

//负温度时最高位显示"

/****************主函数************************/

voidmain()

dm=0x00;

//初始化端口

led0=0;

for(h=0;

h<

h++)//开机显示"

0000"

display[h]=0;

//开机

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1