智能温控器作业.docx
《智能温控器作业.docx》由会员分享,可在线阅读,更多相关《智能温控器作业.docx(14页珍藏版)》请在冰豆网上搜索。
智能温控器作业
姓名:
马波
学号:
0902040146
专业:
测控0901
智能水温控制器
该产品以单片机和传感器为基础,实行了自动采集热水和冷水的温度信号,经过单片机的计算,输出客户需要得水温,总之,不管输入端水温如何变化,但输出的混合水温是恒定的(该产品可以解决用户在洗澡过程中所遇到水温不断变化的问题)。
产品介绍
此产品的有温度调控器、单片机、P100温度传感器、直流电动机、三通球阀组成,在混合水处有温度传感器检测混合后水温,然后将检测的信号输入的单片机,单片机将输入预定值与检测温度进行比较、计算,输出信号去调控阀门的两个输入口所开角度大小,从而决定了热水和冷水的比例,实现输出预定值。
(该图仅供参考,具体实物还在制作过程中)
注:
产品二是我们最近研究出来的产品,具体的成本还没有进行预算。
电路分析
此电路以AT89C52单片机为核心,由单片机完成对检测到的热水和冷水及出水口的混合水温度数据的采集、处理和控制,其中温度的采集由PT100完成.此阀门还要求随时能调节水温,并且能够显示预设温度,这都将由单机的软件与硬件组合后实现在后面给出详细解释。
1)温度输入:
温度的采集由PT100完成,因对温度要求精度高,所以此处采用PT100完成,为减小PT100的延时作用,我们将定制我们自己原件。
为减小误差同时将电阻的变化转换为电压的变化,此处采用文氏电桥的结构如图(3)(R1为PT100,R4为滑动变阻器)
由公式
Uo=Ui*((R1+△R)/(R1+△R+R2)-R3/(R3+R4))
可知电桥调零后此公式可变为
Uo=Ui*((R1+△R)/(R1+△R+R2)-0.5)
由公式
Rt=R0*(1+A*t+B*t*t)
A、B分别为常数(A=0.003908℃,B=0.0000005775℃)
Rt100电阻分度表为:
电阻
0
1
2
3
4
5
6
7
8
9
阻值
注:
因为我们做的是水温控制,所以此处我仅作0℃-100℃的电阻分度表
由上面的公式可知:
当Ui=5v、Rt=138.5欧姆时其理论输出值为:
Uo=5*(138.5/238.5-0.5)v
≈0.4036v
经十倍放大后:
(A为放大倍数)
U=Uo*A
=4.036v
即ADC0809的基准电压为4.036v,ADC0809通道选择有74LS373锁存的控制信号决定经延时130微妙后单片机从P0口读取温度信息。
等待调用。
2)脉冲时间测定:
脉冲时间测定模块中采用+5v对流量计供电,利用三态门决定将冷水流量计或热水流量计中的一个与单片机外部中断1引脚接通,使得单片机的外部中断1引脚接收到流量计送来矩形脉冲信号。
预先将单片机的工作方式定义为定时器1工作在方式1,工作方式为定时方式。
当一个三态门导通时外部中断1引脚等待低电平的出现,一旦出现低电平则进入定时状态,直到外部中断1引脚再次出现高电平时退出中断,并将定时的值返回给主程序。
其中三态门的通断由单片机的P1.0、P1.1控制。
3)温度显示:
温度显示模块由串行口RXD引脚提供串行数字信号,经74LS74转换成并行数据,经330欧姆的电阻限流后传输给7段数码管。
7段数码管的位选由单片机的P2.5、P2.6控制三极管完成。
通过对P2.5、P2.6赋以不同的数值使得三极管导通或者截止从而达到位选的目的。
4)温度调节:
因为随时都有可能去调节温度,所以就要求一旦有键按下单片机就必须立即无条件响应。
因此对于温度的调节采用最高级别的中断即外部中断0。
两个按钮点动开关的公共端接至+5v电源,经限流后传给与非门,一旦有一个键按下即有一个输入变为高电平这时与非门将输出低电平,此时单片机就能立即响应外部中断0,在外部中断的子程序中实现对P2.0、P2.1的扫描,从决定对输出水的温度的升温或者降温。
工作原理
我们设计的智能调节阀从外观看有一个出水口和两个进水口(一个热水入水口和一个冷水入水口)组成。
其内部结构为热水入口下方的管道内有一个内置PT100其位置位于管道中心位置与管道的轴心线平行,再往下去时就是测流量的传感器,再往下就是一个由电机驱动的阀门,其阀门出口接至冷水与热水的混合器。
冷水的通道结构与热水通道结构相同,此处不多做陈述。
电路结构首先将PT100测的信号AT89C5,AT89C52经一定的算法处理决定电机的正反转来改变两个入水口阀门的开度大小,从而引起流量的变化,使传感器测得值发生变化,再经AT89C52单片机处理后反复驱动电机来改变阀门开度大小,从而得到预设水温。
其中预设水温值由外电路经按键操作输入AT89C52单片机。
概述:
基于热量计算公式
Q=C*M*T
(Q为热量,C为比热容,M为质量,T为温度。
)
设:
Q1为热水的热量,Q2为冷水的热量,Q3为混合后的热量
由能量守恒可知:
Q1+Q2=Q3
所以:
C*M1*T1+C*M2*T2=C*M3*T3
由M=P*V
(此公式内P为液体密度,V为液体体积。
)
由上得:
V1*T1+V2*T2=V3*T3
管道内流过液体体积为:
V=vst
(v为液体流动速度,s为管道横截面积,t为液体已流时间。
)
所以上式可变为:
v1*s*t*T1+v2*s*t*t2=v3*s*t*T3
上式可化简为:
v1*T1+v2*t2=v3*T3
又因为流量计输出为形式为3600脉冲每吨水,
所以任何一个时刻的水流速度都将在脉冲宽度上反映出来,其大致对应关系为:
v=1000/(s*t)
所以上式可变为:
T1/t1+T2/t2=T3/t3
有上述推导可知对水热量的测量可以变为对水温和时间的测量,故可以根据此来设计电路。
程序框图
电路
(1)程序
#include
#include
sbitp3_3=p3^3;
inta=42,b,i,j,m,l,o,p,n,R;
floatt1,t2,t3,E,F,D,t,G;
//AD输入
ad(D)
{
delay4();//等待转换完成
t=P1;
Return();
}
delay4()
{for(o=0;o<130;o++)
{;;}
}
//脉冲时间的测定
Interrupt2()
{
TMOD=0x90;//定时器T1工作在方式1
TH1=0;
TL1=0;
TR1=1;
While(p3_3==1);//准备计时
TR1=1;
While(p3_3==0);//开始计时
While(p3_3==1);//停止计时
TR1=0;
Readt();
Return(T);
}
Readt()
{
Do
{
G=T;
TH-high=TH1;
}
While(TH-high!
=TH1)//判定读取是否正确
}
//水温设定
Interrupt0()
{
DELAY0();
I(p2^0==1)//减水温
{
a=--a;
b=a;
delay1();
}
If(p2^1==0)//升水温
{
a=++a;
b=a;
delay1();
}
Return(a);
}
delay0()//延时10ms进行消抖
{
for(i=0;i<50;i++)
For(r=0;r<20;r++)
{led();}
}
Delay1()
{for(j=0;j<50;j++)//延时0.1S
{
p2^5=!
p2^5;
for(k=0;k<50;k++)
{
p2^6=!
p2^6;
for(n=0;n<4;n++)
{
led();
}
}
}
}
//水温显示
led()
{
p2^5=1;
p2^6=0;
a=b;
a=a&&0x7fh;//取低7位
sbuf=a;
delay3();
p2^6=1;
p2^5=0;
a=b;
a=a/07fh;//取高7位
sbuf=a;
delay3();
}
delay3()
{for(m=0;m<10;m++)
{;;}
}
main()
{M()
{
p0=02h;//in2输入(混合水温度)
ad(t3);
t3=t;
led();
if(t3==b){M();}
p0=00h;//in0输入(冷水温度)
ad(t1);
t1=t;
led();
p0=01h;//in1输入(热水温度)
ad(t2);
t2=t;
LED();
p1=00h;//输入热水时间
ie=0ffh;
ip=0ffh;
p1^0=1;//开热水三态门
m1()
{if(int1==0)}//等待低电平出现
{m1();}
Else
{E=G;}
p1^0=0;//输入热水时间
p1^1=1;//开冷水三态门
M2()
{if(int1==0)}//等待低电平出现
{m2();}
Else
{F=G;}
}
if(c3/(E+F)<{
p2^3=1;
p2^2=0;
delay5();
M();
}
if(c3/(E+F)>>c1/E+c2/F)//水温高
{p2^3=0;
p2^2=1;
delay5();
M();
}
}
delay5()
{for(l=0;l<20;l++)
{for(p=0;p{led();}
}
}