电阻炉温度控制系统设计文档格式.docx
《电阻炉温度控制系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《电阻炉温度控制系统设计文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
采用AT89S52单片机作为电路的控制核心,使用12位的高精度模数转换器AD574A进行数据转换,控制电路部分采用PWM控制可控硅的通断以实行对锅炉温度的连续控制,温度控制采用改进的PID数字控制算法,显示采用3位LED静态显示。
该设计结构简单,控制算法新颖,控制精度高,有较强的通用性,所以系统设计总体框图如下:
图
(1)系统设计总体框图
2.硬件电路设计
2.1主机电路的设计
主机选用ATMEL公司的51系列单片机AT89S52来实现,利用单片机软件编程灵活、自由度大的特点,力求用软件完善各种控制算法和逻辑控制。
本系统选用的AT89S52芯片时钟可达12MHz,运算速度快,控制功能完善。
其内部具有128字节RAM,而且内部含有4KB的flashROM不需要外扩展存储器,可使系统整体结构更为简单、实用。
其原理图如下所示:
图
(2)单片机最小系统
2.2数据采集电路的设计
就本系统来说,需要实时采集水温数据,然后经过A/D转换为数字信号,送入单片机中的特定单元,然后一部分送去显示;
另一部分与设定值进行比较,通过PID算法得到控制量并经由单片机输出去控制电热锅炉加热或降温。
数据采集电路主要由AD590,0P07,74LS373,AD574A等组成。
由于控制精度要求为0.1度,而考虑到测量干扰和数据处理误差,则温度传感器和AD转化器的精度应更高才能保证控制精度的实现,这个精度可处粗略定为0.1度。
故温度传感器需要能够区分0.1度;
而对于AD转换器,由于测量范围为40-90度,以0.1度作为响应的AD区分度要求,则AD需要区分(90-40)/0.1=500个数字量,显然需要10位以上的AD转换器。
为此,选用高精度的12位AD574A。
为了达到测量高精度的要求,选用温度传感器AD590,AD590具有较高精度和重复性(重复性优于0.1℃,其良好的非线形可以保证优于0.1℃的测量精度,利用其重复性较好的特点,通过非线形补偿,可以达到0.1℃测量精度.)超低温漂移高精度运算放大器0P07将温度一电压信号进行放大,便于A/D进行转换,以提高温度采集电路的可靠性。
模拟电路硬件部分如下图所示:
图(3)温度电压转换电路
2.3电控制执行电路的设计
由输出来控制电炉,电炉可以近似建立为具有滞后性质的一阶惯性环节数学模型。
其传递函数形式为:
其中时间常数T=350秒,放大系数K=50,滞后时间t=10秒。
可控硅可以认为是线形环节实现对炉温的控制。
单片机输出与电炉功率分别属于弱电与强电部分,需要进行隔离处理,这里采用光耦合元件TLP521在控制部分进行光电隔离,此外采用变压器隔离实现弱强电的电源隔离。
单片机PWM输出电平为0时,光耦合元件导通,从而使三极管形成有效偏置而导通,通过整流桥的电压经过集电极电阻以及发射集反向偏压,有7V左右的电压加在双向可控硅控制端,从而使可控硅导通,交流通路形成,电阻炉工作;
反之单片机输出电平为0时,光耦元件不能导通,三极管不能形成有效偏置而截止,可控硅控制端电压几乎为零,可控硅截止从而截断交流通路,电炉停止工作。
此外,还设有越限报警,当温度低于下限时发光二极管亮;
高上限时蜂鸣器叫。
控制执行部分的硬件电路如下图。
图(4)控制执行部分电路
2.4键盘显示的设计
按键的响应是由中断来实现的。
按键AN3与P3.2相连,采用外部中断方式,并且优先级定为最高;
按键AN5和AN4分别与P1.7和P1.6相连,采用软件查询的方式;
AN1则为硬件复位键,与R、C构成复位电路。
其中的功能定义如表1所示。
按键
键名
功能
AN1
复位键
使系统复位
AN4
加一键
设定温度渐次加一
AN5
减一键
设定温度渐次减一
表1按键功能
显示采用3位共阳LED静态显示方式,显示内容有温度值的十位、个位及小数点后一位,这样可以只用P3.0(RXD)口来输出显示数据,从而节省了单片机端口资源,在P1.4口和P3.1(TXD)的控制下通过74LS164来实现3位静态显示。
数字电路硬件部分见图(5):
图(5)数字硬件电路示意图
3.系统软件设计
系统的软件由三大模块组成:
主程序模块、功能实现模块和运算控制模块。
3.1主程序模块
主程序流程图见图(6)所示:
图(6)主程序流程图
3.2功能实现模块
功能实现模块主要由A/D转换子程序、中断处理子程序、键盘处理子程序、显示子程序等部分组成,以用来执行对可控硅及电炉的控制。
3.2.1T0中断子程序
该中断是单片机内部100ms定时中断,优先级设为最高,是最重要的子程序。
在该中断响应中,单片机要完成调用PID算法子程序且输出PID计算结果等功能。
其流程图如下:
图(7)T0中断子程序
3.2.2T1中断子程
T1定时中断用于调制PWM信号,优先级低于T0中断,其定时初值由PID算法子程序提供的输出转化而来,T1中断响应的时间用于输出控制信号。
其流程图如图(8)所示:
图(8)T1中断子程序
3.3运算控制模块
3.3.1标度转换子程序
该子程序作用是将温度信号(00H~FFH)转换为对应的温度值,以便送显示或与设定值在相同量纲下进行比较。
所用线形标度变换公式为:
式中,Ax:
实际测量的温度值;
Nx:
经过A/D转换的温度量;
Am=90;
Ao=40;
Nm=FEH;
No=01H。
单片机运算采用定点数运算,并且在高温区和低温区分别用程序作矫正处理。
3.3.2PID算法子程序
系统算法控制采用工业上常用的位置型PID数字控制,并且结合特定的系统加以算法的改进,形成了变速积分PID一积分分离PID控制相结合的自动识别的控制算法。
该方法不仅大大减小了超调量,而且有效地克服了积分饱和的影响,使控制精度大大提高。
由前面得到的PID参数以及以上的方程为Δu(k)=q0e(k)+q1e(k-1)+q2e(k-2),由此可以计算出在数字PID增量型控制算法的参数:
q0=120,q1=-240,q2=120。
PID控制算法的流程图如下图(9):
图(9)PID控制算法的流程图
4.源程序代码
#include<
reg52.h>
#include"
PID.h"
#defineAD_DataP0
unsignedcharADConvert(void);
sbitAD_Start=P2^0;
sbitAD_EOC=P2^1;
sbitCtrl=P3^4;
sbitSW=P2^3;
sbitoutpin=P1^0;
unsignedcharconstDisCode[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
unsignedcharconstStatud[10]={0xb7,0xf8,0xf3};
//n,t,p,i,d,0xb0,0xde
unsignedinttep,step=300,s_ulCycle,s_uiHighTime,s_uiLowTime,Freq,value,Scale;
unsignedlonglongtemp,longtemp1,longtemp2;
unsignedchari=0;
bits_bStatus=0;
voiddisplay(unsignedintnum1,unsignedintnum2);
voiddelay(unsignedintDelayTime);
voidEX_init();
voidPWM_Set(unsignedintuiFreq,unsignedcharucScale);
main()
{
unsignedlongtemp=0,temp1=0;
Ctrl=0;
EX_init();
initialize_pid_value();
while
(1)
{
temp=ADConvert();
temp=temp*400/256;
if((temp>
360)||(temp<
0))Ctrl=1;
elseCtrl=0;
tep=temp;
temp1=step;
display(temp,temp1);
Scale=value/4;
PWM_Set(100,Scale);
}
}
voidPWM_Set(unsignedintuiFreq,unsignedcharucScale)
if(ucScale>
100)//占空比不可能大于100%
return;
s_ulCycle=921600/uiFreq;
longtemp1=s_ulCycle;
longtemp2=ucScale;
longtemp=65535-(longtemp1*longtemp2/100);
s_uiHighTime=longtemp;
longtemp=65535-(longtemp1*(100-longtemp2)/100);
s_uiLowTime=longtemp;
voidPWM_Tm1ISR(void)interrupt1
TR0=0;
s_bStatus=~s_bStatus;
//取反标志位,表示该输出高电平或低电平
if(s_bStatus)//输出高电平
TH0=s_uiHighTime>
>
8;
TL0=s_uiHighTime;
outpin=1;
}
else//输出低电平
TH0=s_uiLowTime>
TL0=s_uiLowTime;
outpin=0;
TR0=1;
voidEX_init()
{
EA=1;
TMOD=0x11;
//T0,T1都使用16位定时器,不受外部外部引脚电平控制
ET0=1;
ET1=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
TH0=s_uiLowTime>
TL0=s_uiLowTime;
//定时器0赋予初值
TR0=1;
//启动定时器0
TH1=0x4b;
TL1=0xff;
//定时50ms
TR1=1;
voidPID_Ctrler(void)interrupt3
TH0=0x4b;
TL0=0xff;
if(i==1){i=0;
value=ypid(step,tep);
elsei++;
}
voidEX0_int(void)interrupt0
if(SW)step++;
elsestep+=10;
voidEX1_int(void)interrupt2
if(SW)step--;
elsestep-=10;
voiddisplay(unsignedintnum1,unsignedintnum2)
P2=0xa0;
delay(5);
SBUF=DisCode[num1/100];
delay(100);
P2=0x20;
SBUF=DisCode[num1%100/10];
P2=0xc0;
SBUF=DisCode[num1%10];
P2=0x40;
SBUF=DisCode[num2/100];
P2=0x80;
SBUF=DisCode[num2%100/10];
P2=0x00;
SBUF=DisCode[num2%10];
P2=0xe0;
SBUF=Statud[0];
P2=0x60;
SBUF=Statud[1];
unsignedcharADConvert(void)
unsignedintVoltage;
AD_Start=0;
AD_Start=1;
delay(10);
Voltage=AD_Data;
returnVoltage;
voiddelay(unsignedintDelayTime)
while(DelayTime--);
PID.h:
/****************************************************************\
*函数说明:
主要用于PI运算通过给定和反馈计算出输出*
*入口:
ifin,give(反馈,给定)*
*出口:
out*
*全局变量:
lasterror,lastout;
*
*调用模块:
无*
\****************************************************************/
intidatalerror1,lastout;
//,out_max,yout[5],lyrk,yrk,;
unsignedcharxi,xp,xd;
unsignedcharconstUPPER_LIMIT=400;
charp;
unsignedintypid(unsignedintgive,unsignedintfeedback)
interror1,error2,out;
error1=give-feedback;
//计算积分偏差
error2=error1-lerror1;
//计算比例偏差
lerror1=error1;
//更新e(k-1)
out=lastout+error1/xi+error2*xp;
//计算PI控制值
if(error1==0)out=out;
//计算不灵敏区的运算补偿
elseif(error1<
8&
&
error1>
-8)
if(error1>
0)out=out+1;
elseout=out-1;
16&
-16)
0)out=out+2;
elseout=out-2;
if(out>
UPPER_LIMIT)out=UPPER_LIMIT;
//对输出值进行上限控制
if(out<
0)out=0;
//对输出值进行下限控制
lastout=out;
//更新out(k-1)
if(error1<
xd&
-xd)out=out+error1;
return(out);
//返回最终运算结果
clr_lastout()*
*功 能:
将PID计算模块的上次输出改为指定的值*
*
voidclr_lastout(unsignedintvalue1)
{//PID运算从0开始
lastout=value1;
initialize_pid_value()*
初始化PID的比例系数,积分系数*
*
voidinitialize_pid_value()
xp=1;
xi=8;
xd=4;
5.结果分析论述
这次的题目是有关电阻炉的温度控制。
电阻炉在我们的日常生活,工业生产当中有着相当广泛的应用,所以说这次做的课程设计具有很强的实际意义。
针对本文提出了一种基于单片机AT89S51的设计方案。
设计中运用PID算法更新T1的定时常数,PWM控制输出参数,通过AC-SSR电路实现了对炉温的高精度控制.本设计的控制器工作稳定,控制精度高,改进的PID算法超调量大大降低;
软件采用模块化结构,提高了通用性。
通过本次试验,我在队友的协助以及老师的精心指导下。
我们了解了如何去设计一个完整的计算机控制系统的方法以及步骤,而且我们通过MATLAB仿真的数据完成了对PID的整定。
通过我的努力,最终完成了这个设计,我感到很高兴。
6.参考文献
【1】于海生编著.计算机控制技术.机械工业出版社.2010年1月.
【2】余锡存曹国华编著.单片机原理及接口技术(第二版).西安电子科技大学.2007年12月.
【3】邵裕森戴先中编著.过程控制系统.机械工业出版社.2009年6月.