电阻炉温度控制系统设计文档格式.docx

上传人:b****6 文档编号:17186144 上传时间:2022-11-28 格式:DOCX 页数:16 大小:257.38KB
下载 相关 举报
电阻炉温度控制系统设计文档格式.docx_第1页
第1页 / 共16页
电阻炉温度控制系统设计文档格式.docx_第2页
第2页 / 共16页
电阻炉温度控制系统设计文档格式.docx_第3页
第3页 / 共16页
电阻炉温度控制系统设计文档格式.docx_第4页
第4页 / 共16页
电阻炉温度控制系统设计文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

电阻炉温度控制系统设计文档格式.docx

《电阻炉温度控制系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《电阻炉温度控制系统设计文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

电阻炉温度控制系统设计文档格式.docx

采用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月.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1