基于51单片机的PID调温热得快课程设计.docx
《基于51单片机的PID调温热得快课程设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的PID调温热得快课程设计.docx(36页珍藏版)》请在冰豆网上搜索。
![基于51单片机的PID调温热得快课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/23/8889854f-bd15-450a-9b73-e05f21364c97/8889854f-bd15-450a-9b73-e05f21364c971.gif)
基于51单片机的PID调温热得快课程设计
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
注意事项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
□优□良□中□及格□不及格
3、学生综合运用所学知识和专业技能分析和解决问题的能力
□优□良□中□及格□不及格
4、研究方法的科学性;技术线路的可行性;设计方案的合理性
□优□良□中□及格□不及格
5、完成毕业论文(设计)期间的出勤情况
□优□良□中□及格□不及格
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
建议成绩:
□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
指导教师:
(签名)单位:
(盖章)
年月日
评阅教师评阅书
评阅教师评价:
一、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
二、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
建议成绩:
□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
评阅教师:
(签名)单位:
(盖章)
年月日
教研室(或答辩小组)及教学系意见
教研室(或答辩小组)评价:
一、答辩过程
1、毕业论文(设计)的基本要点和见解的叙述情况
□优□良□中□及格□不及格
2、对答辩问题的反应、理解、表达情况
□优□良□中□及格□不及格
3、学生答辩过程中的精神状态
□优□良□中□及格□不及格
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
评定成绩:
□优□良□中□及格□不及格
教研室主任(或答辩小组组长):
(签名)
年月日
教学系意见:
系主任:
(签名)
年月日
1.系统设计方案
选用铂电阻温度传感器。
此类温度传感器线性度、稳定性等方面性能都很好,但其成本较高。
采用热敏电阻。
选用此类元器件有价格便宜的优点,但由于热敏电阻的非线性特性会影响系统的精度。
比较以上三种方案,方案三具有具有体积小、质量轻、线形度好、性能稳定等优点其各方面特性都满足此系统的设计要求的优点,因此选用方案三。
2.系统硬件部分设计
硬件设计包含DS18B20模块,1602液晶显示模块,继电器模块,键盘输入模块和声光报警模块,DS18B20可以被编程,所以箭头是双向的,CPU(89C52)首先写入命令给DS18B20,然后DS18B20开始转换数据,转换后通89C52来处理数据。
数据处理后的结果就显示到1602液晶上。
2.1系统硬件电路图
3.系统软件部分
软件设计的部分采用分层模块化设计,主要有键盘扫描、按键处理程序、数码管显示程序、继电器控制程序、温度信号处理程序、超温报警程序。
另外以AT89C52单片机为控制核心。
利用PID控制算法提高了水温的控制精度使用PID控制算法实施自动控制系统具有控制参数精度高、反映速度快和稳定性好的特点。
通过热电偶采集的被测温度偏离所希望的给定值时,PID控制可根据测量信号与给定值的偏差进行比例(P)、积分(I)、微分(D)运算,从而输出某个适当的控制信号给执行机构,促使测量值恢复到给定值,达到自动控制的效果。
PID模块的温度控制精度主要受P、I、D这三个参数影响。
其中P代表比例,I代表积分,D代表微分。
比例运算(P)
比例控制是建立与设定值(SV)相关的一种运算,并根据偏差在求得运算值(控制输出量)。
如果当前值(PV)小,运算值为100%。
如果当前值在比例带内,运算值根据偏差比例求得并逐渐减小直到SV和PV匹配(即,直到偏差为0),此时运算值回复到先前值(前馈运算)。
若出现静差(残余偏差),可用减小P方法减小残余偏差。
如果P太小,反而会出现振荡。
积分运算(I)
将积分与比例运算相结合,随着调节时间延续可减小静差。
积分强度用积分时间表示,积分时间相当于积分运算值到比例运算值在阶跃偏差响应下达到的作用所需要的时间。
积分时间越小,积分运算的校正时间越强。
但如果积分时间值太小,校正作用太强会出现振荡。
微分运算(D)
比例和积分运算都校正控制结果,所以不可避免地会产生响应延时现象。
微分运算可弥补这些缺陷。
在一个突发的干扰响应中,微分运算提供了一个很大的运算值,以恢复原始状态。
微分运算采用一个正比于偏差变化率(微分系数)的运算值校正控制。
微分运算的强度由微分时间表示,微分时间相当于微分运算值达到比例运算值在阶跃偏差响应下达到的作用所需的时间。
微分时间值越大,微分运算的校正强度越强。
用继电器模块来控制200W“热得快”来对1升水进行加热,用键盘设定需要加热温度值,观察1602所显示的稳定水温和环境温度降低时温度控制的静态误差。
多次调试并合设定PID参数来完善系统。
实物图:
首先,通过本次应用系统设计,在很大程度上提高了我们的独立思考能力和专业知识相信在接下来的日子我们能在已有的基础上做得更好。
我们所设计的该系统主要根据目前省能源的发展趋势和国内实际的应用特点和要求,采用了自动化的结构形式,实现对水温的自动检测和控制。
该系统的主要特点是:
1)适用性强,用户只需对界面参数进行设置并启动系统正常运行便可满足不同用户水温的要求,实现对水温的实时监控。
避免了电力力资源的浪费,节省了能源。
2)将单片机以及温度传感器引入对水温的分析和处理中,单片机控制决策无需建立被控对象的数学模型,系统的适应性强,适合对非线性、时变、滞后系统的控制对水温控制系统进行控制。
3)系统成本低廉,操作非常简单,可扩展性强,只要稍加改变,即可增加其他使用功能。
通过对本设计的思考,更加加深了我们对单片机的认识,熟练了对单片机的控制,更对当前的温度传感器有了更深刻的认识与了解,但是由于此系统依赖温度传感器,因而对温度传感器的稳定性,线性等诸多方面有着严格的要求,但是传感器的性能越好,相对而言其价格也就越高,因而在此设计中,温度传感器觉的还是存在遗憾,由于温度计的使用温度有限所以水温不能达到90℃以上。
最后由于时间紧迫,本设计还有诸多地方需要改进,我们会在接下来的时间里继续完善该设计,以期做的更好。
附录:
部分程序:
//main.c:
#include
#include"lcd.h"
#include"temp.h"
#include"pid.h"
sbitc1=P2^6;
sbitc2=P2^7;
sbitbeep=P1^3;
sbitK3=P3^2;
sbitK4=P3^3;
voidIntConfiguration();
voidDelay(unsignedintn);
unsignedcharKeyValue=0;
externfloatset_temper;
/*******************************************************************************
*函数名:
main
*函数功能:
主函数
*输入:
无
*输出:
无
*******************************************************************************/
voidmain()
{
externstructPIDspid;//PIDControlStructure
LcdInit();
IntConfiguration();
PIDInit(&spid);
spid.Proportion=10;//SetPIDCoefficients
spid.Integral=8;
spid.Derivative=6;
spid.SetPoint=100;//SetPIDSetpoint
beep=1;
TMOD=0x21;
TH0=0x2f;
TL0=0x40;
//PCON=0X80;//波特率加倍
//TH1=0XF3;//计数器初始值设置,注意波特率是4800的
//TL1=0XF3;
EA=1;
ET0=1;
//ES=1;
TR0=1;
TR1=1;
c1=0;
c2=0;
P1=0XFF;
while
(1)
{
LcdDisplay(Ds18b20ReadTemp());
LcdDisplay2(set_temper);
//LcdDisplay3(realtmp);
/*if((set_temper-realtmp)<1&&(realtmper-set_temp)<1)
{
beep=0;
}
else
beep=1;*/
compare_temper();
//SBUF=Ds18b20ReadTemp();
//Delay1ms
(1);//1s钟刷一次
}
}
voidIntConfiguration()
{
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
//设置INT1
IT1=1;
EX1=1;
EA=1;//打开总中断
}
/*******************************************************************************
*函数名:
Delay(unsignedintn)
*函数功能:
延时
*输入:
n
*输出:
无
*******************************************************************************/
voidDelay(unsignedintn)//延时50us误差0us
{
unsignedchara,b;
for(;n>0;n--)
{
for(b=1;b>0;b--)
for(a=22;a>0;a--);
}
}
/*******************************************************************************
*函数名:
Int0()interrupt0
*函数功能:
外部中断0的中断函数
*输入:
无
*输出:
无
*******************************************************************************/
voidInt0()interrupt0//外部中断0的中断函数
{
Delay
(1);//延时消抖
if(K3==0)
{
while(K3==0);
set_temper++;
}
if(set_temper>60.00)
set_temper=60.00;
}
/*******************************************************************************
*函数名:
Int1()interrupt2
*函数功能:
外部中断1的中断函数
*输入:
无
*输出:
无
*******************************************************************************/
voidInt1()interrupt2//外部中断1的中断函数
{
Delay
(1);//延时消抖
if(K4==0)
{
while(K4==0);
set_temper--;
}
if(set_temper<40.00)
set_temper=40.00;
}
//pid.c
#include"pid.h"
#include"temp.h"
structPIDspid;//PIDControlStructure
unsignedintrout;//PIDResponse(Output)
unsignedintrin;//PIDFeedback(Input)
inti=0,j=0,flag2=0,tem=0;
sbitoutput=P1^6;
unsignedcharflag,flag_1=0;
unsignedcharhigh_time,low_time,count=0;//占空比调节参数
floatset_temper=40;
voidPIDInit(structPID*pp)
{
high_time=50;
low_time=50;
memset(pp,0,sizeof(structPID));
}
/*====================================================================================================
PID计算部分
=====================================================================================================*/
unsignedintPIDCalc(structPID*pp,unsignedintNextPoint)
{
unsignedintdError,Error;
Error=pp->SetPoint-NextPoint;//偏差
pp->SumError+=Error;//积分
dError=pp->LastError-pp->PrevError;//当前微分
pp->PrevError=pp->LastError;
pp->LastError=Error;
return(pp->Proportion*Error//比例
+pp->Integral*pp->SumError//积分项
+pp->Derivative*dError);//微分项
}
/***********************************************************
温度比较处理子程序
***********************************************************/
voidcompare_temper()
{
unsignedchari;
externfloatrealtmp;
externunsignedints;
if(set_temper>realtmp)
{
if(set_temper-realtmp>1)
{
high_time=100;
low_time=0;
//P1=0XFF;
//mod1=0;
}
else
{
//P1=0XFF;
//mod2=0;
for(i=0;i<10;i++)
{Ds18b20ReadTemp();
rin=s;//ReadInput
rout=PIDCalc(&spid,rin);//PerformPIDInteration
}
if(high_time<=100)
high_time=(unsignedchar)(rout/800);
else
high_time=100;
low_time=(100-high_time);
}
}
elseif(set_temper<=realtmp)
{
if(realtmp-set_temper>0)
{
//P1=0XFF;
//mod3=0;
high_time=0;
low_time=100;
//mod2=0;
}
else
{
//P1=0XFF;
//mod4=0;
for(i=0;i<10;i++)
{Ds18b20ReadTemp();
rin=s;//ReadInput
rout=PIDCalc(&spid,rin);//PerformPIDInteration
}
if(high_time<100)
high_time=(unsignedchar)(rout/10000);
else
high_time=0;
low_time=(100-high_time);
}
}
//else
//{}
}
/*****************************************************
T0中断服务子程序,用于控制电平的翻转,40us*100=4ms周期
******************************************************/
voidserve_T0()interrupt1using1
{
j++;
if(++count<=(high_time))
{
output=1;
i++;
}
elseif(count<=100)
{
output=0;
}
else
count=0;
if(j==1000)
{j=0;flag2=1;tem=i;i=0;}
TH0=0x2f;
TL0=0xe0;
}
/*****************************************************
串行口中断服务程序,用于上位机通讯
******************************************************/
voidserve_sio()interrupt4
{