电阻炉温度控制系统设计.docx
- 文档编号:4269485
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:16
- 大小:257.38KB
电阻炉温度控制系统设计.docx
《电阻炉温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《电阻炉温度控制系统设计.docx(16页珍藏版)》请在冰豆网上搜索。
电阻炉温度控制系统设计
目录
摘要3
1.整体设计及系统原理3
2.硬件电路设计4
2.1主机电路的设计4
2.2数据采集电路的设计5
2.3电控制执行电路的设计5
2.4键盘显示的设计6
3.系统软件设计7
3.1主程序模块7
3.2功能实现模块8
3.2.1T0中断子程序8
3.2.2T1中断子程9
3.3运算控制模块9
3.3.1标度转换子程序9
3.3.2PID算法子程序9
4.源程序代码10
5.结果分析论述15
6.参考文献15
摘要
电阻炉是工业炉的一种,是利用电流通过电热体元件将电能转化为热能来加热或者熔化元件或物料的热加工设备。
电阻炉由炉体、电气控制系统和辅助系统组成,炉体由炉壳、加热器、炉衬(包括隔热屏)等部件组成。
由于炉子的种类不同,因而所使用的燃料和加热方法也不同;由于工艺不同,所要求的温度高低不同,因而所采用的测温元件和测温方法也不同;产品工艺不同,对控温精度要求不同,因而控制系统的组成也不相同。
电气控制系统包括主机与外围电路、仪表显示等。
辅助系统通常指传动系统、真空系统、冷却系统等,因炉种的不同而各异。
本文介绍了以AT89S52单片机为核心的温度控制器的设计,在该设计中采用高精度的温度传感器AD590对电热锅炉的温度进行实时精确测量,用超低温漂移高精度运算放大器OP07将温度-电压信号进行放大,再送入12位的AD574A进行A\D转换,从而实现自动检测,实时显示及越限报警。
控制部分采用PID算法,实时更新PWM控制输出参数,控制可控硅的通断时间,最终实现对炉温的高精度控制。
1.整体设计及系统原理
温度控制是工业生产过程中经常遇到的过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的。
根据题目要求,电热锅炉温度控制系统由核心处理模块、温度采集模块、键盘显示模块、及控制执行模块等组成。
采用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
#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;
unsignedcharADConvert(void);
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>>8;
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>>8;
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;delay(5);SBUF=DisCode[num1%100/10];delay(100);
P2=0xc0;delay(5);SBUF=DisCode[num1%10];delay(100);
P2=0x40;delay(5);SBUF=DisCode[num2/100];delay(100);
P2=0x80;delay(5);SBUF=DisCode[num2%100/10];delay(100);
P2=0x00;delay(5);SBUF=DisCode[num2%10];delay(100);
P2=0xe0;delay(5);SBUF=Statud[0];delay(100);
P2=0x60;delay(5);SBUF=Statud[1];delay(100);
}
unsignedcharADConvert(void)
{
unsignedintVoltage;
AD_Start=0;
AD_Start=1;
AD_Start=0;
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;
}
elseif(error1<16&&error1>-16)
{
if(error1>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
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月.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电阻炉 温度 控制系统 设计