电阻炉温度控制系统设计.docx
- 文档编号:11564596
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:21
- 大小:206.26KB
电阻炉温度控制系统设计.docx
《电阻炉温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《电阻炉温度控制系统设计.docx(21页珍藏版)》请在冰豆网上搜索。
电阻炉温度控制系统设计
目录
一、系统设计方案的论证与比较2
二、硬件电路设计3
2.1、主控单元3
2.2、温度采集3
2.3、AC—SSR交流功率调节电路4
2.4、变送电路4
1、4~20mA变送器XTR1014
2、I/V转换器RCV4205
2.5、键盘及显示的设计5
1、键盘设计5
2、LED数码管显示设计6
2.6、硬件连接图6
三、Matlab参数整定7
3.1闭环连续pid控制7
3.2、增加扰动8
3.3增加史密斯预估器8
3.4数字pid算法实现9
1、流程图如下:
9
2、Matlab中m文件实现温度控制的pid增量型算法如下:
10
3、显示二维平面图如下:
11
四、系统软件设计11
4.1主程序模块11
4.2功能实现模块12
1、T0中断子程序12
2、T1中断子程序12
4.3运算控制模块13
1、标度转换子程序13
2、PID算法13
五、源程序13
摘要:
电阻炉是一种利用电流通过电热元件产生的热量加热工件的热处理设备。
具有结构简单、操作简便、价格低廉等特点,广泛用于淬火、正火、回火和退火等常规热处理生产,是机械制造企业最常用的热处理加热设备之一。
电阻炉炉温控制系统控温性能的优劣以及智能化程度的高低,不仅直接影响机械产品质量的高低,而且还直接影响热处理生产劳动强度的大小。
随着微电子制造技术和现代控制技术的发展,采用以功能强、体积小、价格低的单片机为核心、以先进PID控制为算法构建智能化电阻炉温度控制系统已成为现实。
本文介绍了以AT89S52单片机为核心的温度控制器的设计,在该设计中采用热电偶温度传感器以及DWB温度变送器对电热锅炉的温度进行实时精确测量,送入8位的AD0809进行A\D转换,从而实现自动检测,实时显示及越限报警。
控制部分采用PID算法,实时更新PWM控制输出参数,通过AC-SSR电路实现了对炉温的高精度控制。
关键词:
炉温控制;PID控制;单片机
一、系统设计方案的论证与比较
根据题目要求,电热锅炉温度控制系统由核心处理模块、温度采集模块、键盘显示模块、及控制执行模块等组成.
此次设计采用比较流行的AT89S52作为电路的控制核心,使用8位的模数转换器AD0808进行数据转换,控制电路部分采用PWM通过AC-SSR实现锅炉温度的连续控制,此方案电路简单并且可以满足题目中的各项要求的精度。
综上分析,我们采用方案二。
系统总体框图如下。
图1控制器设计总体框图
根据温度变化慢,并且控制精度不易掌握的特点,我们设计了以AT89S52单片机为检测控制中心的电热锅炉温度自动控制系统。
温度控制采用改进的PID数字控制算法,显示采用8位LED动态显示。
该设计结构简单,控制算法新颖,控制精度高,有较强的通用性。
所设计的控制系统有以下功能:
1、温度控制设定波动范围小于±1%,测量精度小于±1%,控制精度小于±2%。
2、实时显示当前温度值。
3、按键控制:
设置复位键、运行键、功能转换键、加一键、减一键。
4、越限报警。
二、硬件电路设计
硬件系统主要由AT89S52单片机、温度采集、A/D转换、光耦隔离、键盘显示电路、蜂鸣报警、等功能电路组成。
2.1、主控单元
AT89S52单片机为主控制单元。
AT89S52是ATMEL公司生产的低功耗、高性能CMOS8位单片机.它除正常工作以外还可以工作于低功耗和掉电模式,进一步减少了芯片的功耗。
降低芯片的温升,延迟了芯片的使用寿命。
其内部配有8K的Flash程序存储器和256字节的数据存储器。
所配置的Flash程序存储器,便于实现ISP在线下载,降低了应用系统的开发成本。
除此之外,AT89S52还具有2个16位定时计数器。
5个两级中断源结构,32位并行输人/输出端口和一个全双工的串行口,以及看门狗定时器等功能单元。
AT89S52单片机首先根据炉温的给定值和测量值计算出温度偏差,然后进行PID控制并计算出相应的控制数据由P1.0口输出。
最后将P1.0口输出的控制数据送往光电耦合隔离器的输入端,利用PWM脉冲调制技术调整占空比,达到使炉温控制在某一设定温度。
AT89S52单片机还负责按键处理、温度显示以及与上位机进行通信等工作。
4位高亮度LED用于显示设定温度或实测温度。
2.2、温度采集
温度采集电路主要由铂铑-铂热电偶LB-3。
LB-3热电偶可以在1300℃高温下长时间工作,满足常规处理工艺要求。
测温时,热电阻输出mV热电势,必须经过变送器变换成0-5V的标准信号。
本系统选用DWB型温度变送器,并将其直接安装在热电偶的接线盒内,构成一体化的温度变送器,不仅可以节省补偿导线,而且可以减少温度信号在传递过程中产生的失真和干扰。
电阻炉炉温信号是一种变换缓慢的信号。
这种信号在进行A/D转换时,对转换速度要求不高。
因此为了减低成本以及方便选材,可以选用廉价的、常用的A/D芯片ADC0808,ADC0808是一种逐次逼近式8路模拟输入、8为数字输出地A/D转换器件,转换时间为100us,完全满足系统设计的要求。
经过ADC0808转换所得到的实测炉温数据直接送入AT89S52单片机中进行数据处理。
此外,为了防止断偶或者炉温越限,产生热处理质量事故;同时为了提高温控系统的智能化控制性能,降低热处理操作人员的劳动强度,本系统特别设置了断偶或炉温越限自动报警电路。
在热处理生产过程中,当发生断偶或炉温越限等异常现象时,主控单元AT89S52单片机自动启动报警电路进行声、光报警,以便操作人员快速处理,防止炉内工件过热,破坏金属组织结构。
2.3、AC—SSR交流功率调节电路
由输出来控制电炉,电炉可以近似建立为具有滞后性质的一阶惯性环节数学模型。
为了避免交流接触器等机械触电因频繁通断产生电弧,烧坏触电或者干扰其他设备正常工作,本系统选用AC-SSR交流功率调节器作为PID控制系统的执行机构。
AT89S52单片机P1.0口输出的温度控制信号经过光电耦合器件隔离,送至过零检测电路。
过零检测电路产生脉冲控制AC-SSR调功电路。
当实测温度偏低时,单片机输出的控制信号使得双向可控硅的导通角减小,导通时间变短,加热器功率降低炉温适当降低。
通过控制输入到加热器平均功率的大小达到控制电阻炉炉温的目的。
采用过零触发的方式,使可控硅输出为正弦波,有效地避免了移相触发输出非正弦波而造成的对电网的公害。
控制执行部分的硬件电路如下图
图2控制执行部分的硬件电路
2.4、变送电路
1、4~20mA变送器XTR101
XTR101为4~20mA线性化变送器,它可与镍络-镍硅测温传感器构成精密的T/I变换。
器件中的放大器适合很宽的测温范围,在-40℃~+85℃的工作温度内,传送电流的总误差不超过1%,供电电源可以从11.6V到40V,输入失调电压<±2.5mV,输入失调电流<20nA。
XTR101外形采用标准的14脚DIP封装。
XTR101有如下两种应用于转换温度信号的典型电路:
2、I/V转换器RCV420
RCV420是一种精密电流/电压变换器,它能将4~20mA的环路电流变为0~5V的电压输出,并且具有可靠的性能和很低的成本。
除具有精密运放和电阻网络外,还集成有10V基准电源。
对环路电流由很好的变换能力。
具有-25℃~+85℃和0℃~70℃的工作温度范围,输入失调电压<1mA,总的变换误差<0.1%,电源电压范围±5~±18V。
RCV420的外形采用标准的16脚DIP封装。
它的典型应用如下:
2.5、键盘及显示的设计
1、键盘设计
位选键SW与P2^3相连,INTO与外部中断0(P3.2^)相连,INT1与外部中断1(P3.3^)相连。
采用外部中断方式实现温度的设置。
功能定义如下:
(1)、当SW拨到下面时,INT0健实现温度值的十位加1,INT1健实现温度值的十位减1
(2)、当SW拨到上面时,INT0健实现温度值的个位加1,INT1健实现温度值的个位减1
图3温度设置
2、LED数码管显示设计
显示采用8位共阴LED动态显示方式,显示内容有温度值的百位、十位及个位,这样可以只用P3.0(RXD)口来输出显示数据,从而节省了单片机端口资源,在P2.5,P2.6,P2.7三个IO口和P3.1(TXD)的控制下通过74LS138和74LS164来实现8位动态显示。
图4LED显示
2.6、硬件连接图
3、Matlab参数整定
通过使用MATLAB的simulink仿真构造传递函数为控制对象,其结构图如下:
图6控制对象结构图
要设计数字pid炉温控制系统,首先设计连续的pid控制器。
以下为在matlabsimulink中构建系统框图如下:
3.1闭环连续pid控制
图7闭环连续PID控制结构图
仿真结果如下:
图8阶跃响应曲线图
3.2、增加扰动
图9增加扰动的控制结构图
图8阶跃响应曲线图
3.3增加史密斯预估器
图9增加施密斯预估器的控制结构图
仿真结果如下
图10阶跃响应曲线图
3.4数字pid算法实现
1、流程图如下:
图10PID算法流程图
2、Matlab中m文件实现温度控制的pid增量型算法如下:
clearall;
closeall;
ts=1;%采样时间=1s
sys=tf(50,[350,1],'iodelay',10);%Gp_s的传递函数
ts=1;
dsys=c2d(sys,ts,'z');%离散传递函数
[num,den]=tfdata(dsys,'v');%离散化后提取分子、分母
e_1=0;%上一偏差
Ee=0;%偏差累计
u_1=0.0;%上一状态控制器输出
u_2=0.0;
y_1=0;%上一状态输出
y_2=0;
kp=1;%PID参数
ki=0.04;
kd=4;
fork=1:
100
time(k)=k*ts;%时间参数
r(k)=500;%给定值
y(k)=u(k)*dsys
e(k)=r(k)-y(k);%偏差
u(k)=kp*e(k)+ki*Ee+kd*(e(k)-e_1);%增量型计算公式
Ee=Ee+e(k);
u_2=u_1;
u_1=u(k);
y_2=y_1;
y_1=y(k);
e_2=e_1;
e_1=e(k);
end
holdon;
plot(time,y,'b');%绘图b为蓝色显示、时间为横轴、输出为纵轴
[kp,ki,kd]
3、显示二维平面图如下:
图8阶跃响应曲线图
四、系统软件设计
系统的软件由三大模块组成:
主程序模块、功能实现模块和运算控制模块。
4.1主程序模块
主程序流程图。
图8主程序流程图
4.2功能实现模块
以用来执行对可控硅及电炉的控制。
功能实现模块主要由A/D转换子程序、中断处理子程序、键盘处理子程序、显示子程序等部分组成。
1、T0中断子程序
该中断是单片机内部100ms定时中断,优先级设为最高,是最重要的子程序。
在该中断响应中,单片机要完成调用PID算法子程序且输出PID计算结果等功能。
其流程图如下:
图8T0中断子程序
2、T1中断子程序
T1定时中断用于调制PWM信号,优先级低于T0中断,其定时初值由PID算法子程序提供的输出转化而来,T1中断响应的时间用于输出控制信号。
其流程图如下:
图9T1中断子程序
4.3运算控制模块
运算控制模块涉及标度转换、PID算法、以及该算法调用到的乘法子程序等。
1、标度转换子程序
该子程序作用是将温度信号(00H~FFH)转换为对应的温度值,以便送显示或与设定值在相同量纲下进行比较。
单片机运算采用定点数运算,并且在高温区和低温区分别用程序作矫正处理。
2、PID算法
积分分离控制的基本思路是:
当偏差e(k)绝对值较大时。
取消积分作用,以免由于积分作用使系统稳定性降低,超调量增大;当偏差e(k)绝对值小于某一设定值M时,引入积分控制,以便消除静差,提高控制精度,即
综上所述,PID算法流程图如下:
图10PID控制算法流程图
五、源程序
#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};
unsignedinttep,step=300;
unsignedints_ulCycle,s_uiHighTime,s_uiLowTime,Freq,value,Scale;//PWM设置用到的参数
unsignedlonglongtemp,longtemp1,longtemp2;
unsignedchari=0;
bits_bStatus=0;
unsignedcharADConvert(void);//A/D转换
voiddisplay(unsignedintnum1,unsignedintnum2);//显示模块
voiddelay(unsignedintDelayTime);//延时子程序
voidInterrupt_init();
voidPWM_Set(unsignedintuiFreq,unsignedcharucScale);//PWM模块
voidmain()
{unsignedlongtemp=0,temp1=0;
Ctrl=0;//蜂鸣器初始状态不响
Interrupt_init();//中断初始化
EX0_int();//外部中断0初始化
EX1_int();//外部中断1初始化
initialize_pid_value();
clr_lastout(0);//最后输出的温度值
while
(1)
{
temp=ADConvert();//检测的温度
temp=temp*400/256;//检测的温度转换为数字量
if((temp>320)||(temp<0))Ctrl=1;
elseCtrl=0;
tep=temp;
temp1=step;
display(temp,temp1);
Scale=value/4;
PWM_Set(100,Scale);
}
}
/******************************************************************************
PWM设置
\******************************************************************************
voidPWM_Set(unsignedintuiFreq,unsignedcharucScale)
{
if(ucScale>100)//占空比不可能大于100%
return;
else
{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
{
TR1=0;
s_bStatus=~s_bStatus;//取反标志位,表示该输出高电平或低电平
if(s_bStatus)//输出高电平
{
TH1=s_uiHighTime>>8;//保持高电平的计数次数
TL1=s_uiHighTime;
outpin=1;//输出高电平
}
else//输出低电平
{
TH1=s_uiLowTime>>8;//保持低电平的技术次数
TL1=s_uiLowTime;
outpin=0;//输出低电平
}
TR1=1;//允许计数器重新开始计数
}
voidInterrupt_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//利用外部中断0,设置目标温度
{
if(SW)//sw=1,初值温度step加1,实现step的个位设置
step++;
else//sw=0,初值温度step加10,实现step十位设置
step+=10;
}
voidEX1_int(void)interrupt2//利用外部中断1,设置目标温度
{
if(SW)
step--;//sw=1,初值温度step减1,实现step的个位设置
else
step-=10;//sw=0,初值温度step减10,实现step十位设置
}
voiddisplay(unsignedintnum1,unsignedintnum2)//LED实时显示温度
{
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)//A/D采样,把模拟量转换为数字量
{unsignedintVoltage;
AD_Start=0;//启动ADC0808
AD_Start=1;
AD_Start=0;
delay(10);
Voltage=AD_Data;
return(Voltage);
}
voiddelay(unsignedintDelayTime)//延时子程序
{
while(DelayTime--);
}
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);//返回最终运算结果
}
voidclr_lastout(unsignedintvalue1)
{
lastout=value1;
}
voidinitialize_pid_value()
{xp=1;
xi=8;
xd=4;
}
六、结果分析论述
本次的课程设计就快结束了,从开始的兴奋到中途的郁闷再到最后的满足,感受到了实验带来的复杂感觉。
刚开始,在仅仅一个课题的情况下来设计电路图,真是感到无从下手,在经过老师的耐心讲解,经过简单的调适与对比,最终完成了电路图的设计。
经过此次设计,我对这门课程有了更深的了解。
在设计过程中,首先要熟悉系统的工艺,进行对象的分析,按照要求确定方案。
然后要进行硬件和软件的设计和调试。
由于没有实际的样机
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电阻炉 温度 控制系统 设计