简单温度控制系统设计报告材料.docx

上传人:b****7 文档编号:16470177 上传时间:2023-07-13 格式:DOCX 页数:13 大小:402.75KB
下载 相关 举报
简单温度控制系统设计报告材料.docx_第1页
第1页 / 共13页
简单温度控制系统设计报告材料.docx_第2页
第2页 / 共13页
简单温度控制系统设计报告材料.docx_第3页
第3页 / 共13页
简单温度控制系统设计报告材料.docx_第4页
第4页 / 共13页
简单温度控制系统设计报告材料.docx_第5页
第5页 / 共13页
简单温度控制系统设计报告材料.docx_第6页
第6页 / 共13页
简单温度控制系统设计报告材料.docx_第7页
第7页 / 共13页
简单温度控制系统设计报告材料.docx_第8页
第8页 / 共13页
简单温度控制系统设计报告材料.docx_第9页
第9页 / 共13页
简单温度控制系统设计报告材料.docx_第10页
第10页 / 共13页
简单温度控制系统设计报告材料.docx_第11页
第11页 / 共13页
简单温度控制系统设计报告材料.docx_第12页
第12页 / 共13页
简单温度控制系统设计报告材料.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

简单温度控制系统设计报告材料.docx

《简单温度控制系统设计报告材料.docx》由会员分享,可在线阅读,更多相关《简单温度控制系统设计报告材料.docx(13页珍藏版)》请在冰点文库上搜索。

简单温度控制系统设计报告材料.docx

简单温度控制系统设计报告材料

计算机控制系统实践课程设计报告

 

 

设计题目:

《基于AT89C52RC的温度控制系统》

指导老师:

报告人:

学号:

报告日期:

摘要

本报告中所述温度控制系统,是基于AT89C52RC控制器的闭环温度控制系统。

控制系统通过数字温度传感器DS18B20采集水温传递给控制器。

经过控制器对数据的分析与处理,实现对继电器的控制,从而实现对加热器的启动与停止。

通过对温度控制系统的设计,我们掌握了对一个简单闭环系统的设计。

并实际动手完成了这一过程,使得自己对知识的学习从理论过渡到了实际应用之中。

一、系统设计方案:

图1系统方案结构图

1.1传感器DS18B20:

DS18B20数字温度计提供9-12位摄氏温度测量而且有一个由高低电平触发的可编程的不因断电而改变的报警功能。

DS18B20由一个单线接收或发送信息,因此处理器和DS18B20之间只由一根数据线连接。

它的测量范围是-55℃~125℃,并且在-10℃~85℃之间,精度为±5℃。

除此之外,DS18B20可以从单数据线上汲取能量,除去了对外部电源的需求。

DS18B20常用的封装有SOIC、T0-9以及不锈钢密封封装。

因本系统需测量水温,故选择不锈钢密封封装的DS18B20。

图2DS18B20外围电路图

1.2驱动芯片ULN2003

因51单片机灌/拉电流比较小(大约在20mA左右),本项目所选用继电器为SRD-05VDC-SL-C其线圈的电流大约是72mA。

所以在单片机管脚与继电器线圈之间需加入一个驱动芯片。

为此,本项目选用集成芯片ULN2003作为继电器的驱动芯片。

ULN2003是一个单片高电压、高电流的达林顿晶体管阵列集成电路。

它是由7对NPN达林顿管组成的,它的高电压输出特性和阴极箝位二极管可以转换感应负载。

单个达林顿对的集电极电流是500mA。

达林顿管并联可以承受更大的电流。

此电路主要应用于继电器驱动器,字锤驱动器,灯驱动器,显示驱动器(LED气体放电),线路驱动器和逻辑缓冲器。

ULN2003的每对达林顿管都有一个2.7kΩ串联电阻,可以直接和TTL或5VCMOS装置

图3达林顿管的内部电路

在温度控制系统中ULN2003用来驱动继电器的线圈,其外围电路如图4:

图4ULN2003与继电器外围电路

1.3继电器SRD-05VDC-SL-C

本项目从硬件功能上分,可以分为一次回路和二次回路。

一次回路的主要设备就是加热器。

二次回路即单片机控制回路。

这是一个典型的弱点控制强电系统。

我们用单片机发出的控制信号作为一次回路开关的操作信号。

实现这一过渡的器件就是继电器。

根据单片机参数以及一次回路电流、电压的大小,我们选择了SRD-05VDC-SL-C继电器。

该继电器线圈的供电电压是直流5v电压,拥有一个单刀双掷开关。

我们将开节点接在火线上,控制加热启动与停止。

继电器如图5

图5SRD-05VDC-SL-C继电器实物图

 

二、程序设计

2.1程序系统框图的设计

图6程序流程图

系统上电后,进行设备初始化,包括继电器、指示灯、中断初始化。

然后系统进入循环,控制器命令DS18B20不断采集温度信息,并进行处理。

最后利用中断进行判断,中断采用16位非自动重装计数,计时间隔3ms。

当温度小于30℃时进行加热,当温度大于30℃时停止加热。

 

总结

通过此次对于温度控制系统的设计,使我了解了设计闭环控制系统的大致流程。

通过对系统所需器件的选型、焊接与调试,使自己的实际动手能力得到了锻炼。

此外,通过对控制系统的设计还锻炼了我们的编程能力,以及使用软件绘制电路原理图的能力。

在制作过程中,我们也遇到了一些问题,通过查找资料,小组讨论以及小组答疑的形式这些问题也都得到了解决。

在老师的耐心指导下,通过我们的共同努力,最终完成了这个项目。

温度控制系统的设计让我们能有机会把自己学过的东西应用于实际之中,解决实际问题,这让我们受益匪浅。

 

附录1温度控制系统电路原理图

附录2AT89C52RC程序

#include"reg52.h"

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitrelay=P2^0;//继电器线圈

sbitds=P2^7;//DS18B20数据线

sbitledrun=P2^5;//加热指示灯

inttempValue1;

unsignedinttemp;

bitheat_flag=0;

ucharcodeth0=(65535-3000)/256;

ucharcodetl0=(65535-3000)%256;

voiddelay(unsignedinti)

{

unsignedintj;

while(i--)

{

for(j=0;j<125;j++);

}

}

voiddsInit()

{

unsignedinti;

ds=0;

i=100;

while(i>0)i--;

ds=1;

i=4;

while(i>0)i--;

}

voiddsWait()

{

unsignedinti;

while(ds);

while(~ds);

i=4;

while(i>0)i--;

}

bitreadBit()

{

unsignedinti;

bitb;

ds=0;

i++;

ds=1;

i++;

i++;

b=ds;

i=8;

while(i>0)i--;

returnb;

}

unsignedcharreadByte()

{

unsignedinti;

unsignedcharj,dat;

dat=0;

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

{

j=readBit();

dat=(j<<7)|(dat>>1);

}

returndat;

}

voidwriteByte(unsignedchardat)

{

unsignedinti;

unsignedcharj;

bitb;

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

{

b=dat&0x01;

dat>>=1;

if(b)

{

ds=0;

i++;i++;

ds=1;

i=8;

while(i>0)i--;

}

else

ds=0;

i=8;while(i>0)i--;

ds=1;

i++;

i++;

}

}

voidsendChangeCmd()

{

dsInit();

dsWait();

delay

(1);

writeByte(0xcc);

writeByte(0x44);

}

voidsendReadCmd()

{

EA=0;

dsInit();

dsWait();

delay

(1);

writeByte(0xcc);

writeByte(0xbe);

EA=1;

}

intgetTmpValue()

{

unsignedinttmpvalue;

intvalue;

floatt;

unsignedcharlow,high;

EA=0;

sendReadCmd();

low=readByte();

high=readByte();

tmpvalue=high;

tmpvalue<<=8;

tmpvalue|=low;

value=tmpvalue;

t=value*0.0625;

value=t*100+(value>0?

0.5:

-0.5);

returnvalue;

EA=1;

}

 

voidInit_timer0()

{

TMOD=0x01;

TH0=th0;

TL0=tl0;

EA=1;

ET0=1;

TR0=1;

}

voidtimer0()interrupt1

{

TR0=0;

if(heat_flag==1)

{

relay=1;

Ledrun=1;

}

else

{

relay=0;

Ledrun=0;

}

TH0=th0;

TL0=tl0;

TR0=1;

}

voidmain()

{

ledrun=0;

relay=0;

Init_timer0();

while

(1)

{

sendChangeCmd();

tempValue1=getTmpValue();

temp=abs(tempValue1);

if(temp<3000)

heat_flag=1;

else

heat_flag=0;

}

}

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2