电子设计竞赛水温控制系统程序+电路图+报告喜欢就拿去Word文档格式.docx
《电子设计竞赛水温控制系统程序+电路图+报告喜欢就拿去Word文档格式.docx》由会员分享,可在线阅读,更多相关《电子设计竞赛水温控制系统程序+电路图+报告喜欢就拿去Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
0.5℃。
2.降低功耗。
测量温度点供电电压5V时,发射功耗≤15mA,待机功耗≤10uA。
3.能够按照温度变化情况改变采样速率(当20秒内温度大于5℃时,加大采样密度到每10次),主机报警。
4.其他。
水温控制系统
摘要:
为了完成水温控制系统的设计,我们介绍了STC89C51单片机的自动
温控制系统的设计及实现过程。
该系统具有实时显示,设定温度显示,温度调节,温度测量并能根据设定值对水的温度进行调节和控温的目的,控制算法基于数字PID算法。
关键词:
PID,继电器,制冷片,风扇,加热器,PT100温度传感器,0P07
Abstract:
Inordertocompletethewatertemperaturecontrolsystemdesign,weintroducedtheSTC89C51SCMautomatictemperaturecontrolsystemdesignandimplementationprocess.Thesystemhasreal-timedisplay、settemperature、temperatureregulation、temperaturemeasurementandcanaccordingtovalueofwatertemperatureregulationandtemperaturecontrolpurposes,controlalgorithmwasbasedonthePIDalgorithm.
Keyword:
PID,Relay,Coolingplate,Fan,Heater,PT100temperaturesensor,0P07
1系统方案
1.1方案论证
(1)方案一:
此方案是采用传统的模拟控制方法(方案框图如图2-1-1),选用模拟电路,用电位器设定给定值,反馈的温度值与给定的温度值比较后,决定加热或者不加热。
器特点是电路简单,易于实现,但是系统所得结果的精度不高并且调节动作频繁,系统静差大,不稳定。
系统受环境的影响大,不能实现复杂的控制算法,而且不易实现对系统的控制及对温度的显示,人机交换性能差。
图2-1-1模拟控制框图
(2)方案二:
采用单片机AT89C51为核心。
(方框图如图2-1-2),采用了温度传感器PT100采集温度变化信号,用OP07放大变化信号,12位A/D采样芯片TLC2543将其转换成数字信号并通过单片机处理后去控制温度,使其达到稳定。
使用单片机具有编程灵活,控制简单的优点,使系统能简单的实现温度的控制及显示,并且通过PID算法使系统具有,反应速度快,控制精度高的特点。
该水温控制系统是一个典型的检测、控制型应用系统,它要求系统完成从水温检测、信号处理、输入、运算到输出控制(电炉加热,制冷片降温)以实现水温控制的全过程。
图2-1-2单片机控制框图
比较两种方案,方案二明显的改善了方案一的不足及缺点,并具有人机界面友好,操作简单,控制温度精度高的特点。
因此本设计电路采用方案二。
2理论分析与计算
2.1测量与控制方法
2.1.1温度采集电路
1.PT100使用桥式输入
2.放大器第一级差分输入,第二级同相放大
3.采样放大电压输出范围:
0到2.4V
2.1.2A/D转换器
采用TLC2543是IT公司的12位串行模数转化器,使用开关电容逐次逼近技术完成A/D转换过程。
由于是串行输入结构,能够节省51系列单片机I/O资源,且价格适中,分辨率较高。
(以下是TLC2543的封装)
2.1.3PT100温度传感器
PT100温度传感器为正温度系数热电阻传感器,主要技术参数如下:
①测量范围:
-200℃~+850℃;
②允许偏差值℃:
A级,B级;
③响应时间<30s;
④最小置入深度:
热电阻的最小置入深度≥200mm;
⑤允通电流≤5mA。
另外,PT100温度传感器还具有抗振动、稳定性好、准确度高、耐高压等优点。
鉑热电阻的线性较好,在0~100摄氏度之间变化时,最大非线性偏差小于0.5摄氏度。
鉑热电阻阻值与温度关系为:
①-200℃<t<0℃时,;
②0℃≤t≤850℃时,;
式中,A=0.00390802;
B=-0.000000580;
C=0.0000000000042735。
可见PT100在常温0~100摄氏度之间变化时线性度非常好,其阻值表达式可近似简化为:
,当温度变化1℃,PT100阻值近似变化0.39。
2.1.4OP07放大器
Op07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。
由于OP07具有非常低的输入失调电压(对于OP07A最大为25μV),所以OP07在很多应用场合不需要额外的调零措施。
OP07同时具有输入偏置电流低(OP07A为±
2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面
第一级放大倍数U01=-(U1-U2)*R1/R5=9
第二级放大倍数U02=(R9+R10)/R9=3.6
总放大倍数U=U01*U02=32.4
2.1.5HD7279
HD7279A是一片具有串行接口的,可驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。
2.1.6继电器电路
考虑到单片机系统通过继电器使用低电压控制市电,因此为了整个系统的安全,在继电器模块的市电输入端加入3A保险丝,当电路出现短路时,将会跳闸,以确保设备的安全。
3电路设计
3.1键盘及液晶
4程序设计
4.1程序流程图
对液晶12864处理
说明:
界面1:
显示水温控制系统,绍兴文理学院元培学院
界面2:
显示设定温度,PID的KP,KI,KD值
界面3:
显示设定温度值,当前温度值,温控等。
通过按键改变设定温度,也可以通过按键退出设定温度值。
通过按键可以控制温控是否启动。
当当前温度小于设定温度,可以进行开启温控,进行加热,最终达到设定温度。
当通过按键把设定温度值下降,可以再通过按键启动冷却装置,使温度下降到设定温度,之后也启动温控。
同时在温控时,通过按键可以画出升温或下降温度的曲线。
通过按键可以让界面2与界面3的切换。
5理论计算
PID算法参数KP:
5KI:
0.005KD:
6结果分析
本次水温控制系统硬件上,使用电容滤波;
软件上软件使用去极值采样滤波。
在闭环控制环节中加入了经典应用PID调节。
经过多次采样测量。
有以下实验结果。
1.当起始温度为30摄氏度时,启动控制,设定温度为50摄氏度。
达到稳定所需时间为6分钟。
动态误差小于2摄氏度。
静态误差小于正负0.2摄氏度
2.当温度为50摄氏度时,开启降温功能,控制温度下降到40摄氏度。
调节所需时间为5分钟。
动态误差0.3度。
静态误差0.2度
3.当温度稳定到60摄氏度时,加入室温的冷水200ml,温度调节的时间为5分钟。
动态误差为0.4度。
静态误差为0.2
4.本系统已实现温度随水温实时曲线
根据测量的数据,本系统具有比较高的滤波性质,且精度较高,在加热和降温时采样依然稳定精确。
参考文献
[1]穆秀春,王宇.Altium[M].1.电子工业出版社,2011.
[2]黄智伟.全国大学生电子设计竞赛[M].2.北京航空航天大学出版社,2011.
[3]邓建国,陈南,钱聪,等.电子设计指南[M].1.高等教育出版社,2006.
附录
1.完整原理图
2.部分程序代码
以上为水温控制系统完整原理图
主核心代码:
TLC2543:
PID:
unsignedintread2543(unsignedcharport)
{
unsignedintad=0;
unsignedchari;
clock=0;
d_cs=1;
d_in=0;
d_cs=0;
port<
<
=4;
for(i=0;
i<
12;
i++)
if(d_out)
ad|=0x01;
clock=1;
delay_t(3);
if(port&
0x80)
d_in=1;
else
d_in=0;
clock=0;
ad<
=1;
port<
}
ad>
>
return(ad);
AD采样:
unsignedintadwendu()
unsignedintwendutt,a,b,wendu1,wendu2;
unsignedcharcounti;
unsignedintwendu_tempt,wenduhe=0;
wendu_tempt=wendu;
wenduhe=0;
a=read2543()*k;
if(a>
=200&
a<
299)
a=a+(float)(a-200)*0.03-8;
elseif(a>
=300&
&
399)
a=a+(float)(a-300)*0.03-3;
=400&
450)
a=a+(float)(a-300)*0.03;
elseif(a>
=450&
a<
499)
a=a+(float)(a-450)*0.04;
=499&
599)
a=a+(float)(a-499)*0.06+2;
=599&
699)
a=a+(float)(a-599)*0.06+8;
=699&
799)
a=a+(float)(a-699)*0.06+14;
b=a;
wendu1=a;
wendu2=b;
wenduhe=wenduhe+wendu1;
wenduhe=wenduhe+wendu2;
for(counti=0;
counti<
10;
counti++)
wendutt=read2543();
wendutt=wendutt*k;
if(wendutt>
wendutt<
wendutt=wendutt+(float)(wendutt-200)*0.03-8;
elseif(wendutt>
wendutt=wendutt+(f