电阻炉温度控制系统设计.docx
- 文档编号:30287544
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:23
- 大小:186.88KB
电阻炉温度控制系统设计.docx
《电阻炉温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《电阻炉温度控制系统设计.docx(23页珍藏版)》请在冰豆网上搜索。
电阻炉温度控制系统设计
(此文档为word格式,下载后您可任意编辑修改!
)
长春大学
课程设计说明书
题目名称电阻炉温度控制系统设计
院(系)电子信息工程学院
专业(班级)电气08401班
学生姓名杨闯
指导教师王英霞(副教授)
起止日期2011.11.14~2011.11.25
电阻炉温度控制系统设计
[摘要]本课程设计以电阻炉为研究对象,开发了基于单片机的温度控制系统。
本温度控制系统按功能分主要包括温度传感器模块、数据处理模块、温度显示/设定模块和温度控制模块。
温度传感器采用了数字式温度传感器DS18B20,对温度进行实时采样并将模拟信号转换成数字信号返回给单片机。
系统可通过键盘对电阻炉温度进行预设,单片机根据当前炉内温度和预设温度进行比较结果,在进行PID运算,控制输出宽度可调的PWM方波,并由此控制固态继电器的导通和关断来调节电热丝的加热功率,当炉内温度过高与过低的时,蜂鸣器将进行报警,从而使炉内温度迅速达到预设值并保持恒定。
[关键词]单片机温度检测PID温度控制
DesignandImplementationofaTemperatureControlSystem
[Abstract]Thedesignprocess,firstofallthesoftwaredesignanddevelopment,makingthesystemfunctionalmoduleandthroughtheProteussoftwaresimulation,respectively,toachievefeatureanintegrateddesignofthehardware,andrepeateddemonstration,testingthedeviceparameterstomakeitstableoperation,andultimatelymakeThissystemhasrealizedtheconstanttemperaturecontrol.
[Keywords]:
MCS-51,Temperaturedetection,PID,Temperaturecontrol
第一章前言1
1.1设计目的1
1.2设计要求1
第二章系统总体设计方案2
2.1设计方案2
第三章系统硬件设计3
3.1单片机系统3
3.1.1STC89C52简介3
3.1.2晶振电路5
3.1.3复位电路5
3.2温度检测电路6
3.3温度控制电路6
3.4键盘显示电路7
第四章PID控制设计8
4.1PID算法设计8
4.2PID程序设计9
第五章系统软件设计11
5.1系统程序流程图11
5.2系统总程序11
第六章总结18
致谢19
参考文献20
第一章前言
1.1设计目的
本文选择设计一个电阻炉温度控制系统,利用微机控制系统完成电阻炉的检测、处理及数字控制计算,根据数据结果进行相应的处理,从而改变电阻炉的加热功率,达到控制温度的目的。
1.2设计要求
1、现场温度值可处理。
2、温度范围为20℃—100℃。
3、系统有必要的保护和报警。
4、温度值要有显示。
5、误差范围±1℃。
第二章系统总体设计方案
2.1设计方案
本系统以STC89C52为核心,以KEIL为系统程序开发平台,以C语言进行程序设计。
所设计的温度控制主要由单片机、温度检测模块、温度控制模块、温度显示模块、按键设定模块、报警模块等五部分组成。
设计方案见图2-1
图2-1总体设计方案框图
第三章系统硬件设计
3.1单片机系统
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
3.1.1STC89C52简介
STC89C52是一种低功耗,高性能CMOS微控制器(如图3-1),可提供以下标准功能:
8K字节闪存器,256字节内部RAM,32个I/O口线,看门狗定时器,2个数据指针,3个16位定时/计数器,一个6向量2级中断结构,全双工串行通信口,片内振荡器及时钟电路。
并支持两种软件可选的节电工作模式,空闲方式停止CPU的工作,但允许RAM,定时/计数器,串性通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个中断或硬件复位为止。
图3-1STC89C52引脚图
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,
P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第
八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低8位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次PSEN有效。
但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.1.2晶振电路
单片机外接晶振后,就构成了自激振荡器,并产震荡时钟,为单片机提供稳定的时钟。
而且单片机每条指令的运行都是严格按照机器周期来执行的,机器周期就是由晶振电路(如图3-2)提供的。
3-2晶振电路图
3.1.3复位电路
单片机复位电路(如图3-3)就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。
单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。
按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。
3-3复位电路图
3.2温度检测电路
本设计温度检测电路(图3-4)采用数字传感器DS18B20,DS18B20是一种可组网的单线数字温度传感器,它采用单线总线结构,集温度测量和A/D转换于一体,直接输出数字量,用一根I/O线就可以传送数据与命令,其温度测量范围为-55℃~+125℃,精度为+/-0.5℃,使用中无需外部器件,可利用数据线或外部电源提供电能,供电电压范围为3.3~5.5V,通过编程,实现9~12位分辨率读出温度数据。
3-4温度检测电路图
3.3温度控制电路
本文温度检测电路(图3-5)采用固态继电器SSR,固态继电器SSR是一种无触点通断电子开关,它利用电子元件(如开关三极管、双向可控硅等半导体器件)的开关特性,可达到无触点无火花地接通和断开电路的目的,为四端有源器件,其中两个端子为输入控制端,另外两端为输出受控端。
为实现输入与输出之间的电气隔离,器件中采用了高耐压的专业光电耦合器。
当施加输入信号后,其主回路呈导通状态,无信号时呈阻断状态。
整个器件无可动部件及触点,可实现相当于常用电磁继电器一样的功能。
单片机端口输出的PWM方波控制固态继电器SSR的开断,从而控制电阻炉的开断频率,控制电热丝功率的变化,以达到加热目的。
3-5温度控制电路图
3.4键盘显示电路
键盘显示电路(图3-6)设定部分主要是键盘输入,此部分主要由两个按键组成,PLAS为加,SUBS为减,当系统启动时,默认设定温度为20℃,当按下PLAS时设置电阻炉温度增加,按下SUBS时设置电阻炉温度减小。
此部分按键为常开按钮,当不触发时为断开状态,按键按下之后与地连接,故为低电平,单片机读取按键数据为低电平时有效。
DS18B20检测到的温度与设定温度进行比较,单片机根据当前炉内温度和预设温度进行比较结果,进行PID控制运算,运算后的温度值用数码管精进行实时显示。
3-6键盘显示电路
第四章PID控制设计
4.1PID算法设计
对温度的控制算法,采用技术成熟的PID算法,对于时问常数比较大的系统来说,其近似于连续变化,因此用数字PID完全可以得到比较好的控制效果。
简单的比例调节器能够反应很快,但不能完全消除静差,控制不精确,为了消除比例调节器中残存的静差,在比例调节器的基础上加入积分调节器,积分器的输出值大小取决于对误差的累积结果,在误差不变的情况下,积分器还在输出直到误差为零,因此加入积分调节器相当于能自动调节控制常量,消除静差,使系统趋于稳定。
积分器虽然能消除静差,但使系统响应速度变慢。
进一步改进调节器的方法是通过检测信号的变化率来预报误差,并对误差的变化作出响应,于是在P1调节器的基础上再加上微分调节器,组成比例、积分、微分(PID)调节器,微分调节器的加入将有助于减小超调,克服振荡,使系统趋于稳定,同时加快了系统的稳定速度,缩短调整时间,从而改善了系统的动态性能,其控制规律为:
单片机是一种采样控制,它只能根据采样时刻的误差值计算控制变量,不能直接计算公式中的积分项和微分项,采用数值计算法逼近后,PID的调节规律可以通过数值公式为:
如果采样取得足够小,这种逼近可相当准确,被控过程与连续过程十分接近。
我们变换上式
(2)得:
把,带入上式得:
试中ei=W-Yi,W设定值,Yi为第i次实际输出值,Kp为比例系数,积分系数I=T/Ti,微分系数D=T/Td,T为采样周期。
用PID控制算法实现锅炉温度控制是这样一个反馈过程:
比较实际炉温和设定炉温得到偏差,通过对偏差的处理获得控制信号,再去调节炉子的加热功率,从而实现对炉温的控制,由于电阻炉一般都是下一阶段对象和带纯滞后的一阶对象,所以式中Kp、Kd和Ki的选择取决于电阻炉的响应特性和实际经验。
本程序先将用户设定温度和电阻炉实际温度T比较,计算出偏差ei,然后分两种情况进行计算控制变量:
(1)大于等于设定的偏差e时,由于积分控制器使系统响应速度变慢,不采用积分控制器调节,直接使用PD调节,获得比较快的动态响应,计算Pd和Pp,最终得到控制量获得比较快的动态响应。
(2)小于设定的设定的偏差e时,正常的分别计算Pi、Pd和Pp,然后根据算法公式计算出控制变量。
流程图如图4-1所示。
4-1PID控制流程图
4.2PID程序设计
PID算法函数voidPID(void),根据误差的大小算出固态继电器的导通时间
———————————————————————
voidPID()
{
ucharCtrhab[20]={8,15,2O,4O,5O,6O,7O,80,100,120,140,160,180,
200};//控制时间参数表
kp=200;
kd=3;
ki=10;//初始化PID参数
tempsv=controlnum;
temppv=T;//读入实际、设定温度
e2=temsv—temppv;//计算误差
e0=el;
el=e2;
u0=u;//误差及输出量的转赋
P=e2一el;//计算P值
D=kd*(e2—2el+e0);//计算D值
if(e2>=50)I=kp+e2;//判断采用PD还是PID控制
elseI=0;
u=kp(P+I+D)+uO;
controltime=ctrhab[u];//查表赋控制时间
}
第五章系统软件设计
5.1系统程序流程图
系统流程图如图5-1所示。
5-1程序流程图
5.2系统总程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitds=P2^2;//温度传感器信号线
sbitdula=P2^6;//数码管段选线
sbitwela=P2^7;//数码管位选线
sbitbeep=P2^3;//蜂鸣器
uinttemp;//定义整型的温度数据
floatf_temp;
uintwarn_11=200;//定义温度的下限值
uintwarn_12=1000;//定义温度的上限值0
sbits1=P1^0;//键盘
sbits2=P1^2;
sbitpwm=P1^6;
unsignedcharcodetable[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0-9带小数点
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//不带小数点
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
vioddsreset(void)//DS18B20复位,初始化函数
{
uinti;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
bittempreadbit(void)//读一位数据函数
{
uinti;
bitdat;
ds=0;i++;
ds=1;i++;i++;
dat=ds;
i=8;
while(i>0)i--;
return(dat);
}
uchartempread(void)//读一个字节数据函数
{
uchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
Voidkeyscan()//键盘
{
if(s1==0)
{
warn_11++;
}
If(s2==0)
{
warn_12++;
}
}
voidtempwritebyte(uchardat)
{
uinti;
ucharj;
bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
ds=0;
i++;
i++;
ds=1;
i=8;
while(i>0)
i--;
}
else
{
ds=0;
i=8;
while(i>0)
i--;
ds=1;
i++;
i++;
}
}
}
voidtempchange(void)//DS18B20开始获取温度并转换
{
dsreset();
delay
(1);
tempwritebyte(0xcc);
tempwritebyte(0x44);
}
uintget_temp()//读取寄存器中存储的温度数据
{
uchara,b;
dsreset();
delay
(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread();
b=tempread();
temp=b;
temp<<=8;
temp=templa;
f_temp=temp*0.0625;
temp=f_temp*10+0.5;
f_temp=f_temp+0.05;
returntemp;
}
voiddisplay(ucharnum,uchardat)//数据显示程序
{
uchari;
dula=0;
P0=table[dat];
dula=1;
dula=0;
wela=0;
i=0XFF;
i=i&(~((0X01)<<(num)));
P0=i;
wela=1;
wela=0;
delay
(1);
}
voiddis_temp(uintt)//显示温度数值函数t传递的是整形的温度值
{
uchari;
i=t/1000;
display(0,i);
i=t%1000/100;
display(1,i+10);
i=t%1000%100/10;
display(2,i);
i=t%100%10;
display(3,i);
}
voidwarn(uints)//蜂鸣器报警
uchari;
i=s;
beep=1;
while(i--)
{
dis_temp(get_temp());
}
beep=0;//蜂鸣器响
i=s;
while(i--)
{
dis_temp(get_temp());
}
}
voiddeal(uintt)//温度处理函数
{
uchari;
if((t>warn_12)//大于100度,蜂鸣器响
{
warn(40);
dis_temp(get_temp());
pwm=1;
delay(10000);
}
elseif(t<=warn_11)//小于20读,蜂鸣器响
{
warn(40);
dis_temp(get_temp());
PID();
}
else//在20度和100度之间是只调用显示函数
{
while
(1)
{
beep=1;
PID();
dis_temp(get_temp());
}
}
}
voidPID()
{
ucharCtrhab[20]={8,15,2O,4O,5O,6O,7O,80,100,120,140,160,180,
200};//控制时间参数表
kp=200;
kd=3;
ki=10;//初始化PID参数
tempsv=controlnum;
temppv=T;//读入实际、设定温度
e2=temsv—temppv;//计算误差
e0=el;
el=e2;
u0=u;//误差及输出量的转赋
P=e2一el;//计算P值
D=kd*(e2—2el+e0);//计算D值
if(e2>=50)I=kp+e2;//判断采用PD还是PID控制
elseI=0;
u=kp(P+I+D)+uO;
controltime=ctrhab[u];//查表赋控制时间
}
voidinit_com(void)//串口初始化
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFd;
TL1=0xFd;
TR1=1;
}
voidcomm(char*parr)
{
do
{
SBUF=*parr++;
while(!
TI);
TI=0;
}
while(*parr);
}
voidmain()//主函数
{
ucharbuff[4],i;
dula=0;
wela=0;
init_com();
while
(1)
{
tempchange();//温度转换函数
for(i=10;i>0;i--)
{
dis_temp(get_temp());
}
deal(temp);
sprintf(buff,"%f",f_temp);//将浮点型温度格式转换为字符型
for(i=10;i>0;i--)
{
dis_temp(get_temp());//温度显示
}
comm(buff);
for(i=10;i>0;i--)
{
dis_temp(get_temp());
}
}
}
第六章总结
本文采用智能温度传感器DS18B20,它可直接输入数字量,精度高,电路简单,只需要模拟DS18B20的读写时序,根据DS18B20的协议读取转换的温度。
STC89C52可以快速的对检测值进行处理,开发工具KEIL与C语言在课堂上都有学过,使用开发工具KEIL用C语言对系统进行了程序设计更加适合当代大学生。
固态继电器的开、关可以很精准的调节电热丝的加热功率,基本完成了题目要求,但此系统在工作环境及测量温度范围上有待改进和研发。
致谢
本次设计能够顺利完成,除了我自身的努力外,还有老师热心帮助,在此我向她表示衷心的感谢!
我的指导教师王英霞老师,她对本次课程设计做了详细的指导,从课程设计论文的前期准备、开题、初稿到最后定稿的每个环节都凝聚了他们的汗水,在她身上我不仅学到了大量的理论知识,更重要的是他们对工作认真负责、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电阻炉 温度 控制系统 设计