恒温箱设计.docx

上传人:b****4 文档编号:4142679 上传时间:2023-05-06 格式:DOCX 页数:27 大小:93.48KB
下载 相关 举报
恒温箱设计.docx_第1页
第1页 / 共27页
恒温箱设计.docx_第2页
第2页 / 共27页
恒温箱设计.docx_第3页
第3页 / 共27页
恒温箱设计.docx_第4页
第4页 / 共27页
恒温箱设计.docx_第5页
第5页 / 共27页
恒温箱设计.docx_第6页
第6页 / 共27页
恒温箱设计.docx_第7页
第7页 / 共27页
恒温箱设计.docx_第8页
第8页 / 共27页
恒温箱设计.docx_第9页
第9页 / 共27页
恒温箱设计.docx_第10页
第10页 / 共27页
恒温箱设计.docx_第11页
第11页 / 共27页
恒温箱设计.docx_第12页
第12页 / 共27页
恒温箱设计.docx_第13页
第13页 / 共27页
恒温箱设计.docx_第14页
第14页 / 共27页
恒温箱设计.docx_第15页
第15页 / 共27页
恒温箱设计.docx_第16页
第16页 / 共27页
恒温箱设计.docx_第17页
第17页 / 共27页
恒温箱设计.docx_第18页
第18页 / 共27页
恒温箱设计.docx_第19页
第19页 / 共27页
恒温箱设计.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

恒温箱设计.docx

《恒温箱设计.docx》由会员分享,可在线阅读,更多相关《恒温箱设计.docx(27页珍藏版)》请在冰点文库上搜索。

恒温箱设计.docx

恒温箱设计

设计成绩:

西南科技大学信息工程学院自动化系

《计算机控制系统》课程课外设计

设计题目:

恒温箱温度计算机控制系统设计

学院名称:

信息工程学院

专业班级:

学生姓名:

学生学号:

指导教师:

聂诗良

二〇一六年十二月

恒温箱温度计算机控制系统设计

摘要:

本设计的温度测量及加热控制系统以AT89S52单片机为核心部件,外加温度采集电路、按键及显示电路、加热控制电路和越限报警等电路。

采用单总线型数字式的温度传感器DS18B20,及按键控制温度和动态显示的方式,以容易控制的继电器作加热控制的开关器件。

本作品既可以对当前温度进行实时显示又可以对温度进行控制,以使达到用户需要的温度,并使其恒定在这一温度。

关键词:

单片机;恒温控制;DS18B20

The?

design?

of?

incubator?

temperature?

?

computer?

control?

system

Abstract:

?

The?

design?

of?

the?

temperature?

measurement?

and?

heating?

control?

systems?

to?

AT89S52?

microcontroller?

core?

component,?

plus?

the?

temperature?

acquisition?

circuit,?

keyboard?

and?

display?

circuit,?

heating?

circutal?

temperature?

sensor?

DS18B20,?

and?

the?

determinant?

of?

the?

keyboard?

and?

dynamic?

display?

in?

order?

to?

easily?

control?

the?

solid-state?

relays?

for?

heating?

control?

of?

the?

switching?

device.?

This?

works?

both?

on?

the?

current?

temperature?

in?

real-time?

display?

of?

temperature?

can?

be?

controlled?

in?

order?

to?

enable?

users?

to?

reach?

the?

required?

temperature,?

and?

make?

it?

constant?

at?

this?

temperature.?

Key?

words:

?

microcontroller;temperature?

control;DS18B20

《计算机控制系统》课程课外设计制作大作业内容及考核要求

1.课题名称:

恒温箱温度计算机控制系统设计

2.自制恒温箱要求

如图1所示,恒温箱采用木箱或纸箱(外形尺寸不大于30cm×30cm×30cm),内置白炽灯泡(功率不大于100W)用于加热。

或自选制冷板制冷。

交作品时,恒温箱外面贴上标签,标签上注明:

课题名称,学生姓名,专业班级,学号,指导教师姓名,学院名称。

3.控制系统功能与技术指标要求

(1)温度采集传感器采用热电阻或热电偶,或一体化数字温度传感器DS18B20。

(2)控制灯泡亮度或发热量,采用继电器开关控制或用可控硅平滑控制。

(3)采用单片机或PLC作为控制器。

(4)采用LED或LCD或PC机的液晶显示器作为显示器,同时显示给定温度和实际温度。

(5)采用自制按键或PC机的键盘作为温度给定值输入。

(6)恒温箱实际温度达到给定值时(误差要求±1℃)需声光提示,声音时延5秒后停止。

(7)恒温箱最高温度≤60℃。

(8)系统操作流程是:

1)确认系统各硬件连线就绪,无安全隐患;

2)系统上电;

3)设置温度给定值后,启动系统工作,系统进入温度自动控制工作状态。

4)系统工作完毕后,若不需系统工作,则可关闭系统电源,查看并确保系统无安全隐患后可离开。

4.考核要求

(1)本课题验收答辩时间地点:

第12周验收答辩(具体时间地点待定)。

(2)答辩资格需同时满足以下2个要求:

1)系统硬件和软件联调成功,可实现温度自动控制,提交系统实物(答辩后自己保管)。

2)提交设计报告(设计报告须独立完成,若发现两个报告有拷贝或抄袭的,将同时取消两个学生的考核成绩)。

(3)设计报告规范及要目

1)封面(含课题名称,学院名称,学生姓名,专业班级,学号,任课教师)

2)本课题设计制作要求

3)系统方案设计(或设计思想),含系统总体结构框图

4)硬件设计,含硬件选型和系统硬件电路原理详图或实际连线详图

5)软件设计,含软件功能设计、软件流程设计和单元程序清单

6)调试记录及结论,含硬件及软件单元调试和系统调试记录

7)心得体会(据个人实情独立撰写,发现抄袭拷贝者课程成绩计0分)

8)附件(含程序清单)

9)参考文献。

5.备注

1)若采用可控硅平滑控制灯泡发热量方案且答辩思路清楚,设计报告规范,本次作业成绩可在90分以上;采用继电器开关控制灯泡的成绩一般不超过90分;若采用其他方案有创意设计的,经考核老师确认,成绩也可在90分以上。

2)同学可自选题目,经过老师同意后,可代替本题目完成课外设计制作。

3)购买器件费用大致50元左右,原则上自理。

若确有经费困难,可报告老师协助解决。

特别注意用电安全!

小心用电!

1系统方案设计

系统整体框图如下图:

图1.系统原理总框图

上面的系统总体框图中,该系统中微控制器采用AT89C52单片机最小系统,温度显示采用LED显示模块、声光报警器模块、DS18B20温度采集模块、按键输入设定温度模块、继电器驱动模块。

2硬件设计

2.1温度检测电路?

本设计采用数字输出温度传感器DS18B20,该器件具有超小的体积、超低的硬件开销、抗干扰能力强,精度高,功耗低的特点,可直接输出9-12位的数字信号,通过单总线接口传输给单片机进行信号处理,最高12位分辨率时在-55℃?

~?

125℃温度范围内精确度可达到±0.5摄氏度,温度检测电路如图2所示。

图2.温度检测电路

2.2单片机的选择

系统采用STC公司的推出的新一代高速/低功耗/超强抗干扰的单片机

STC89C52作为主控芯片,STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有?

8K?

在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8?

位CPU?

和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

?

具有以下标准功能:

?

8k字节Flash,512字节RAM,?

32?

位I/O?

口线,看门狗定时器,内置4KB?

EEPROM,MAX810复位电路,3个16?

位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

另外?

STC89C52?

可降至0Hz?

静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU?

停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35MHz,6T/12T可选。

只有在外接时钟、电源和复位电路时才能工作,能使其正常工作的最小系统如图3所示。

图3.单片机最小系统

2.3显示电路模块

本设计要求采用LED或LCD或PC机的液晶显示器作为显示器,同时显示给定温度和实际温度。

方案一:

LED数码管显示

因为要求同时显示给定温度和实际温度,所以需使用两块四位数码管,同时选取两块74HC573作为数码管锁存器,采用动态显示,数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

图4.数码管连接原理图

方案二:

1602LCD液晶显示

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

图5.1602连接原理图

综合比较,因为液晶显示设计比较复杂而成本较高,且数码管也可以满足此设计要求,并且数码管便宜实惠,所以本次设计选择数码管作为显示模块。

2.4继电器驱动模块

本设计用单片机的一个I/O口来控制继电器的通断从而控制灯泡的亮灭,以此来达到控制温度的要求。

下图是继电器的连接仿真图:

图6.继电器仿真连线图

3软件设计

本设计采用单片机控制灯泡从而控制恒温箱,按下电源按钮后,默认设置温度为30度,可通过加减按钮来调节设置温度,在通电的一瞬间,单片机会将从DS18B20得到的温度与设定温度对比,如果此温度小于设定温度,则继电器通电,灯泡发亮,此时恒温箱内温度慢慢升高,当恒温箱温度大于等于设定温度时,继电器断电,灯泡熄灭,同时声光提示5秒,在整个控制过程中可以随时调整设定温度。

3.1温度设定模块程序

#include

#defineucharunsignedchar

#defineuintunsignedint

uinttemp;

ucharflag1;

uintsheding=30;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

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

voidkeyscan()

{

uchars1,s2;

if(S2==0)

{

while(S2==0);

sheding++;

}

if(S3==0)

{

while(S3==0);

sheding--;

}

s1=sheding/10;

s2=sheding%10;

dula=0;

P0=table[s1];

dula=1;

dula=0;

wela=0;

P0=0xfe;

wela=1;

wela=0;

delay(3);

dula=0;

P0=table[s2];

dula=1;

dula=0;

wela=0;

P0=0xfd;

wela=1;

wela=0;

delay

(1);

}

3.2温度读取及声光报警控制模块流程图及程序

流程图:

 

图7.系统流程图

程序:

voiddelay(uintz)//延时函数,单位ms

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voiddsreset(void)//DS18B20复位,初始化函数

{

uinti;

DS=0;

i=103;

while(i>0)i--;

DS=1;

i=4;

while(i>0)i--;

}

bittmpreadbit(void)//读一位数据函数

{

uinti;

bitdat;

DS=0;i++;//i++起延时作用

DS=1;i++;i++;

dat=DS;

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

return(dat);

}

uchartmpread(void)//读一个字节数据函数

{

uchari,j,dat;

dat=0;

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

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat);

}

voidtmpwritebyte(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

{

DS=0;//写0

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

DS=1;

i++;i++;

}

}

}

voidtmpchange(void)//DS18B20beginchange

{

dsreset();

delay

(1);

tmpwritebyte(0xcc);//addressalldriversonbus

tmpwritebyte(0x44);//initiatesasingletemperatureconversion

}

uinttmp()//getthetemperature

{

floattt;

uchara,b;

dsreset();

delay

(1);

tmpwritebyte(0xcc);

tmpwritebyte(0xbe);

a=tmpread();

b=tmpread();

temp=b;

temp<<=8;//twobytecomposeaintvariable

temp=temp|a;

tt=temp*0.0625;

temp=tt*10+0.5;

returntemp;

}

voiddisplay(uinttemp)//显示程序

{

ucharA1,A2,A2t,A3;

A1=temp/100;

A2t=temp%100;

A2=A2t/10;

A3=A2t%10;

dula=0;

P0=table[A1];//显示百位

dula=1;

dula=0;

wela=0;

P0=0xdf;

wela=1;

wela=0;

delay(3);

dula=0;

P0=table1[A2];//显示十位

dula=1;

dula=0;

wela=0;

P0=0xbf;

wela=1;

wela=0;

delay(3);

P0=table[A3];//显示个位

dula=1;

dula=0;

P0=0x7f;

wela=1;

wela=0;

delay(3);

}

voiddeal(uinta,b)//处理函数

{

uchari=5000;

a=a/10;

if(S4==1)

{

if(a==b)

{

jdq=0;

if(flag_s==0)

{

led=0;//led灯提示

beep=0;//蜂鸣器提示

while(i--)

{

keyscan();

display(tmp());

delay

(1);

}//用显示程序实现5s延时

led=1;

beep=1;

flag_s=1;

}

}

elseif(a

{

led=1;

jdq=1;

flag_s=0;

}

else

{

led=0;

jdq=0;

flag_s=0;

}

}

else

{

P1=0xff;

jdq=0;

flag_s=0;

}

}

voidmain()

{

uchara;

beep=1;

flag_s=0;

jdq=0;

do

{

tmpchange();

deal(temp,sheding);

for(a=10;a>0;a--)

{

display(tmp());

keyscan();

}

}while

(1);

}

4调试过程及结果分析

4.1?

软件调试?

软件调试首先是在keil编译器下进行,包括源程序编译及运行调试。

接着链接proteus进行硬件实时调试。

4.2硬件调试

原计划是按仿真焊接电路,但由于在焊接时不小心将电路板烧坏,所以后来使用开发板来完成设计,在调试过程中,因为火线和零线借口设计过于接近,导致短路过一次,后将两个接口改远,经测试可以使用,在调试过程中,恒温箱达到设定温度后灯泡熄灭,但由于箱子过小,灯泡熄灭后的余温还会使温度上升,过一会才能降到设定温度,这是本次设计的一个缺陷。

4.3?

结果分析?

能够达到基本的控制要求,即恒温箱实际温度达到给定值时,有声光提示,并且声音时延5秒后才停止。

5心得体会

在本次设计的过程中,遇到了很多大大小小的挫折,如在焊接电路板时由于不小心将板子烧坏,还有在通电时,发生短路,将宿舍都弄得跳闸了,实在是吓了我一跳,阿姨还和我说要是再跳闸就不给我们开电了,还好后来经过仔细排查,找除了是电路短路的原因,并改良了电路,终于勉强完成的本次实验。

实验完之后心情很复杂,因为在实验之初,我本来以为仿真通过不会出现很大的问题,但在实际中完全不是那么一回事,要考虑到各种实际问题,算是给了我一个教训,在选箱子的时候对于箱子的大小考虑的也不周全,导致箱子初次达到设定温度时会溢出一两度,使温度不能精确控制,这也是需要改良的部分,通过这次课程课外设计,使我了解到了一定不能眼高手低,要把理论和实践结合起来。

在设计的过程中查阅了很多资料,丰富了我的知识,希望在以后的学习生活中能够继续进步。

参考文献

[1]李伟.计算机控制系统(第二版)[M].北京:

清华大学出版社,2015.

[2]康华光.电子技术基础[M].北京:

高等教育出版社,2015

[3]姜志海黄玉清.单片机原理及应用[M].北京:

电子工业出版社,2013

附件

器件清单:

恒温箱器件清单

名称

型号

数量

开发板

QX-MCS51

1

电源底座

电源接口

2

温度传感器

DS18B20

1

继电器

蓝色5V

1

二极管

1N4148

1

三极管

8050

1

灯泡

100W

1

电源线

粗线

2

电源插头

二相

1

灯泡底座

匹配灯泡

1

导线

杜邦线

6

程序代码:

#include

#defineucharunsignedchar

#defineuintunsignedint

uinttemp;

ucharflag1;

uintsheding=30;

sbitDS=P2^2;

sbitdula=P2^6;

sbitwela=P2^7;

sbitbeep=P2^3;

sbitS2=P3^0;

sbitS3=P3^1;

sbitS4=P3^2;

sbitled=P1^0;

sbitjdq=P1^1;

bitflag_s;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsignedcharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef};

voiddelay(uintz)//延时函数,单位ms

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voiddsreset(void)//DS18B20复位,初始化函数

{

uinti;

DS=0;

i=103;

while(i>0)i--;

DS=1;

i=4;

while(i>0)i--;

}

bittmpreadbit(void)//读一位数据函数

{

uinti;

bitdat;

DS=0;i++;//i++起延时作用

DS=1;i++;i++;

dat=DS;

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

return(dat);

}

uchartmpread(void)//读一个字节数据函数

{

uchari,j,dat;

dat=0;

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

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat);

}

voidtmpwritebyte(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

{

DS=0;//写0

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

DS=1;

i++;i++;

}

}

}

voidtmpchange(void)//DS18B20beginchange

{

dsreset();

delay

(1);

tmpwritebyte(0xcc);//addressalldriversonbus

tmpwritebyte(0x44);//initiates

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

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

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

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