电子设计大赛水温控制系统报告讲解Word文档格式.docx
- 文档编号:16343144
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:20
- 大小:156.99KB
电子设计大赛水温控制系统报告讲解Word文档格式.docx
《电子设计大赛水温控制系统报告讲解Word文档格式.docx》由会员分享,可在线阅读,更多相关《电子设计大赛水温控制系统报告讲解Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
直接用GP品牌的9v电池,然后接通过三端稳压芯片7805稳压成5伏直流电源提供给单片机系统使用,右边接两个5伏电源的滤波电容,并且接上电阻和绿色的LED组成5伏电源的工作指示电路。
方案二:
通过变压器,将220v的市电转换成5v左右的直流电。
由于需要给继电器提供稳定的5V电压,而方案一中导致电池的过度损耗,无法稳定带动继电器持续工作,所以我们选用能够提供更加稳定5v电源的方案二。
2.温度检测电路的方案选择:
方案一:
用普通半导体温度传感器作为敏感元件,再结合电压放大器和AD转换器将感应到的温度数值转换为数字量存储在某一单元内。
但由于该方案所需元件较多,且电路较繁,调试起来较复杂,所以舍之不用。
方案二:
使用数字温度传感器DS18B20检测温度,内含AD转换器,因此线路连接十分简单,它无需其他外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简单,它能够达到0.5℃的固有分辨率,使用读取温度暂存寄存器的方法还能达到0.0625℃以上精度,应用方便。
这样的电路主要工作量就集中到了单片机软件编程上,故我们选用该方案。
3.显示电路的方案选择:
方案:
使用数码管显示,通过数码管显示被测温度和设定温度。
该方案程序简单,数码管为并联状态,方便测试。
4加热方案的选择:
使用电热炉进行加热,控制电炉的功率即可控制加热速度,当水温过高时,关掉电炉即可,但考虑到电炉成本较高,且精度不好控制,故不选用。
固态继电器控制加热器工作,固态继电器使用非常简单,而且没有触点,无需外加光耦,自身就可以实现电气隔离,还可以频繁动作。
通过控制固态继电器的开,断时间比来达到控制加热器功率的目的,适合功率不大,简易水温控制系统,我们选择用几个水泥电阻作为加热器,简单实用。
故我们使用方案二。
5控制方法选择方案:
采用普通的控制方法,即随着水温的变化调节温度,但局限性太小,由于水温变化快,且惯性大,不易控制精度,故采用普通控制方法显得力不从心。
通过继电器控制加热电路的通断,继电器由单片机控制,当温度高于设定温度时单片机控制继电器断开,停止加热,自动通断,所以我们选择方案二。
硬件电路设计
对题目进行深入的分析和思考,可以将整个系统分为以下几个部分:
单片机最小系统,测温电路,功率电路,继电器控制指示电路,显示电路,系统框图如下:
给单片机提供5v稳定电压
一.测温电路
测温电路是使用DS18b20数字式温度传感器,它无需其他的外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简单。
它能够达到0.5
的固有分辨率,使用读取温度的暂存寄存器的方法还能达到0.0625
以上的精度。
DS18B20温度传感器只有三根外引线:
单线数据传输总线端口DQ,外供电源线VDD,共用地线GND。
外部供电方式(VDD接+5V,且数据传输总线接10k的上拉电阻,其接口电路如图2.1所示。
图2.1温度传感器接口
二.功率电路
本系统要控制水泥电阻加热,固态继电器控制加热器工作,固态继电器使用非常简单,而且没有触点,无需外加光耦,自身就可以实现电气隔离,还可以频繁动作。
通过控制固态继电器的开、断时间比来达到控制加热器功率的目的,适合功率不大,简易水温控制系统。
三.控制.键盘.显示电路
这部分实际上是一个单片机最小系统的基本电路,选用STC89C52,足够满足系统的要求。
键盘用三个按键即可,通过按键分别实现所设定温度的复位、加减操作。
在显示方面选用数码管显示模块。
单片机的输出控制锁存器,锁存器一个控制数码管的选通,另一个控制数码管的显示.
四.部分整体硬件电路:
软件程序设计
1.程序流程
单片机控制程序如下:
#include<
reg52.h>
#include<
stdio.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitds=P2^2;
//温度传感器信号线
sbitdula=P2^6;
//数码管段选线
sbitwela=P2^7;
//数码管位选线
sbitbeep=P2^3;
//蜂鸣器
sbitjidianqia=P1^0;
uintyuzhi=0;
uinttemp;
floatf_temp;
uintwarn_l1;
uintwarn_l2;
uintwarn_h1;
uintwarn_h2;
uintwarn_h3;
sbitkey1=P3^4;
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitkey4=P3^7;
unsignedcharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0xbf,0x86,
0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xef};
//不带小数点的编码
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voiddsreset(void)//18B20复位,初始化函数
uinti;
ds=0;
i=103;
while(i>
0)i--;
ds=1;
i=4;
bittempreadbit(void)//读1位函数
bitdat;
i++;
//i++起延时作用
dat=ds;
i=8;
while(i>
return(dat);
uchartempread(void)//读1个字节
uchari,j,dat;
dat=0;
for(i=1;
i<
=8;
i++)
{
j=tempreadbit();
dat=(j<
<
7)|(dat>
>
1);
//读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
voidtempwritebyte(uchardat)//向18B20写一个字节数据
ucharj;
bittestb;
for(j=1;
j<
j++)
testb=dat&
0x01;
dat=dat>
1;
if(testb)//写1
i++;
else
//写0
voidtempchange(void)//DS18B20开始获取温度并转换
dsreset();
delay
(1);
tempwritebyte(0xcc);
//写跳过读ROM指令
tempwritebyte(0x44);
//写温度转换指令
uintget_temp()//读取寄存器中存储的温度数据
uchara,b;
tempwritebyte(0xbe);
a=tempread();
//读低8位
b=tempread();
//读高8位
temp=b;
temp<
//两个字节组合为1个字
temp=temp|a;
f_temp=temp*0.0625;
//温度在寄存器中为12位分辨率位0.0625°
temp=f_temp*10+0.5;
//乘以10表示小数点后面只取1位,加0.5是四舍五入
f_temp=f_temp+0.05;
returntemp;
//temp是整型
uintkeyscan()
if(key1==0)
delay(3);
if(key1==0)
{
yuzhi=60;
while(!
key1);
//等待按键释放
}
if(key2==0)
if(key2==0)
yuzhi++;
key2);
if(key3==0)
if(key3==0)
yuzhi--;
key3);
returnyuzhi;
////////////////////显示程序//////////////////////////
voiddisplay(ucharnum,uchardat)
uchari;
dula=0;
P0=table[dat];
dula=1;
wela=0;
i=0XFF;
i=i&
(~((0X01)<
(num)));
P0=i;
wela=1;
voiddis_temp(uintt)
i=t/100;
display(0,i);
i=t%100/10;
display(1,i+10);
i=t%100%10;
display(2,i);
voidxianshi(uintyuzhi)
{
i=yuzhi/10;
display(4,i);
i=yuzhi%10;
display(5,i);
//////////////////////////////////////////////
voidwarn(uints,ucharled)//蜂鸣器报警声音,s控制音调
i=s;
beep=1;
while(i--)
dis_temp(get_temp()+13);
}
i=s;
voiddeal(uintt)
uintwarn_l2=(yuzhi*10-7);
uintwarn_h1=(yuzhi*10+13);
uintwarn_h2=(yuzhi*10+3);
uintwarn_h3=(yuzhi*10-27);
uintwarn_h4=(yuzhi*10+23);
if(t<
=60)
if((t>
warn_l2)&
&
(t<
=warn_h1))
P1=0XFE;
elseif((t>
warn_h2)&
=warn_l2))
P1=0XFC;
warn_h3)&
=warn_h2))
{
P1=0xF8;
elseif(t<
=warn_h3)
P1=0xf0;
elseif(t>
warn_h4)
beep=0;
P1=0XFF;
i=40;
if(t>
61)
if((t>
P1=0XF0;
P1=0xF0;
voidinit_com(void)
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFd;
TL1=0xFd;
TR1=1;
voidcomm(char*parr)
do
SBUF=*parr++;
//发送数据
while(!
TI);
//等待发送完成标志为1
TI=0;
//标志清零
}while(*parr);
//保持循环直到字符为'
\0'
voidmain()
ucharbuff[4],i;
init_com();
while
(1)
keyscan();
tempchange();
for(i=10;
i>
i--)
xianshi(yuzhi);
deal(temp);
sprintf(buff,"
%f"
f_temp);
comm(buff);
2.控制方法
在控制温度方面,我们经过反复的调试与修改源程序,不断改变水泥电阻的加热及断电时间比,使整个系统不断趋于题设要求。
测试结果及结果分析
一、静态温度测量
测量方式:
断开系统的加热装置,装入一定温度的水,保持环境温度和其他测量条件不变,利用标准的温度计测量水温,与系统给出的温度相比较。
由于在这种条件下,与测温速度相比,水温下降较慢,在测量中可认为是一个静态过程,因此可以测出系统的静态温度测量结果。
测量仪器:
DM6801热电偶式数字温度计。
测量结果:
如表4.1所示。
表4.1测量结果数据
标定温度/℃
57.1
58.7
60.1
61.9
63.4
65
测量温度/℃
57.3
59.4
60.5
62.4
63.9
65.4
误差/℃
0.2
0.7
0.4
0.5
二动态温控测量
接上系统的加热装置,装入500mL室温的水,设定控温温度。
记录调节时间、超调温度、稳态温度波动幅度等。
测量条件:
环境温度24.2℃。
如表4.2所示。
在此仅以数值的方式给出测量结果,略去升温曲线图。
调节时间按温度进入设定温度±
0.5℃范围时计算。
表4.2测量结果数据
设定温度/℃
60
70
静态误差/℃
0.3
0.6
三.温度从50℃到70℃的测试:
测试数据如下:
超调量
调节时间
稳态误差
0.5℃
10min
0.45
数码管显示温度与实测温度折线图:
四.结果分析
由以上测量可见,系统性能基本上可达到所要求的指标。
使用手册
接通电源后,加热装置默认为开启状态。
打开单片机电源开关,指示灯亮。
此时单片机上的数码管开始显示当时温度。
设定温度默认为60度。
单片机上一共有四个按键,从左到右分别为复位键、温度初始化键、温度控制温度+1键,温度控制温度-1键。
使用时只需调整到自己想要的温度即可。
当实际温度小于设定温度是,正常加热。
当实际温度接近设定温度是,通过继电器自身档位调节,可实现达到并维持设定温度的要求。
当实际温度大于设定温度是,蜂鸣器警报响起。
本加热装置可在误差允许范围内精确调节并维持水温。
需特别注意的是,由于装置采用220V电源加热,且实验中加热装置所达到的温度较高。
接通电源后,切忌触摸装置任何部位,谨防触电。
同时应避免水洒溅导致电路烧毁。
温馨提示,小心烫伤。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子设计 大赛 水温 控制系统 报告 讲解