电阻炉微型计算机温度控制系统设计.docx
《电阻炉微型计算机温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《电阻炉微型计算机温度控制系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
电阻炉微型计算机温度控制系统设计
学 号:
0121011360211
课程 设计
题目
电阻炉微型计算机温度控制系统的设计
学院
专 业
班 级
姓名
指导教师
2013
年
7
月
4
日
课程设计任务书
学生姓名:
专业班级:
指导教师:
石云 工作单位:
题 目:
电阻炉微型计算机温度控制系统的设计
初始条件:
设计一个电阻炉微型计算机温度控制系统,系统为一阶惯性纯滞后特性(参数自定),温度控制要求为500℃,温度控制精度为1℃;通过LED显示温度;
要求完成的主要任务:
1.输入通道及输出通道设计;
2.LED接口设计;
3.采用改进PID控制算法;
1.系统软件流程及各程序模块设计并用仿真软件演示;
4.完成符合要求的设计说明书。
时间安排:
2013年6月25日~2013年7月4日
指导教师签名:
年 月 日
系主任(或责任教师)签名:
年 月 日
1控制对象1
1.1控制对象介绍ﻩ1
2方案的比较和确定1
3统软硬件设计2
3.1总体设计2
3.2温度检测电路3
3。
3控制信号输出通道3
3.4LED显示电路ﻩ4
4系统软件设计ﻩ5
4。
1程序流程图ﻩ5
4.2控制算法ﻩ6
5基MATLAB仿真被控对象8
6。
心得体会10
参考文献11
附录一电路图12
附录二程序代码ﻩ13
摘要
当今社会,随着产品的精细化,温度对产品的影响原来越受到人们的关注,于是,温度控制成为了工业生产中重要的控制参数之一。
这样,一个能够精确控制温度的系统成为人们迫切的需要,它将能够广泛的被使用于的各种加热炉、精密器件制造、甚至于食品行业等.
本次试验便以电阻炉的温度控制为例,试图探求一个具有良好稳定性的温度控制系统。
本次试验以C51单片机为核心,采用温度变送器桥路和固态继电器控温电路,该控制系统具有硬件成本低、控温精度较高、可靠性好、抗干扰能力强等特点。
基本的想法是:
C51单片机能够按要求对电阻炉进行实时监测和控制算法的确定,发出准确的控制命令;A/D转换芯片将得到的模拟量转化为数字量;单片机对数字量进行处理,得到应有的控制量,去控制加热功率,从而实现对温度的控制。
关键词:
单片机、电阻炉、温度测量、控制系统
电阻炉微型计算机温度控制系统的设计
1控制对象
1.1控制对象介绍
电阻炉是利用电流通过电热体元件将电能转化为热能来加热或者熔化工件和物料的热加工设备。
电阻炉由炉体、电气控制系统和辅助系统组成。
炉体由炉壳、加热器、炉衬(包括隔热屏)等部件组成。
电气控制系统包括电子线路、微机控制、仪表显示及电气部件等.辅助系统通常指传动系统、真空系统、冷却系统等,虽炉种的不同而已.
电阻炉的主要参数由额定电压、额定功率、额定温度、工作空间尺寸。
生产率、空炉损耗功率、空炉升温时间、炉温控制精度及炉温均匀性等
1。
2控制性能要求
本设计要求控制一个电阻炉,它是一个具有很大滞后性的系统,惯性也很大,其传递函数的形式可以写为
温度控制要求为500℃,温度控制精度为1℃,电阻炉的温度还要通过LED 实时显示出来.
2方案的比较和确定
方案一
系统采用8084芯片作为系统的微处理器.温度信号由热电偶检测后转换为电信号经过预处理(放大)送到A/D转换器,转换后的数字信号再送到8084芯片内部进行判断或计算。
从而输出的控制信号来控制锅炉是否加热.但对于8084芯片来说,其内部只有128个字节的RAM,没有程序存储器,并且系统的程序很多,要完成键盘、显示等功能就必须对8084芯片进行存储器扩展和I/O口扩展,并且需要容量较大的程序存储器,外扩时占用的I/O口较多,使系统的设计复杂化.
方案二
系统采用AT89C51作为系统的微处理器来完成对炉温的控制和键盘显示功能。
C51单片机片内除了128KB的RAM外,片内又集成了4KB的ROM作为程序存储器,是一个程序不超过4K字节的小系统。
系统程序较多时,只需要外扩一个容量较小的程序存储器,占用的I/O口减少,同时也为键盘、显示等功能的设计提供了硬件资源,简化了设计,降低了成本.因此89C51可以完成设计要求。
综上所述的二种方案,该设计选用方案二比较合适。
3统软硬件设计
3.1总体设计
系统的硬件包括微控制器部分(主机)、温度检测、温度控制、人机对话(键盘/显示)4个主要部分,系统的结构框图如图3—1所示。
系统程序采用模块化设计方法,程序有主程序、中断服务子程序和各功能模块程序组成,各功能模块可直接调用。
图3-1系统结构框图
3.2温度检测电路
温度检测电路包括温度检测电路、放大器和A/D转换三部分。
原理图如图3-2所示
图3-2温度检测电路
Pt100温度传感器的测量范围为:
,符合题目中的温度测量。
它是利用金属铂在温度变化时自身电阻值也随之改变的特性来测量温度的,显示仪表将会指示出铂电阻的电阻值所对应的温度值。
当被测介质中存在温度梯度时,测得的温度是感温元件所在范围内介质层中的平均温度。
铂电阻的阻值随温度的变化而变化的计算公式:
—200<t<0℃Rt=R0[1+At+Bt+C(t—100)t] (3-1)
0<t〈850℃Rt=R0(1+At+Bt2) (3-2)
Rt为t℃时的电阻值,R0为0℃时的阻值。
公式中的A,B,系数为实验测定。
这里给出标准的系数:
A=3.90802*10—3℃;B=-5。
802*10-7℃;C=-4.27350*10-12℃.
3.3控制信号输出通道
该电路用到了芯片MOC3021,它是过零触发双硅输出光耦。
过零触发是在设定时间间隔内,改变晶闸管导通的周波数来实现电压或功率的控制。
实际上它就相当于一个用于交流电路中的“电子开关",这个电子开关的“接通”、“断开”动作是在交流电流过“0"点完成的。
这样的电路,对用电负荷不会造成“电流冲击”。
电路的工作状况是“断续"的,适用于本系统热惯性较大的电阻炉负载。
控制信号输出通道的电路图如图10所示,考虑到加热系统具有较大的热惯性,即一阶惯性纯滞后特性,本系统采用脉冲宽度调制(PWM)的控制方法,单片机输出控温信号。
单片机输出低电平时,使双向可控硅导通,电热丝通电;输出高电平时,双向可控硅截止,电热丝断电。
其中,7407用于驱动,提供更大的电流驱动发光二极管.可控硅门极回路与220V电源相通,光电耦合器有效地把单片机系统与220V强电隔离,确保了单片机系统的安全性。
原理图如3—3所示
图3—3控制信号输出通道
3。
4LED显示电路
由于温度控制精度为1℃,设计中选取型号为7SEG-MPX4—CC的数码管显示器,其为共阴极数码管。
工作方式为动态显示方式。
动态显示,就是微型机定时地对显示器件扫描,在这种方法中,显示器件分时工作,每次只能一个器件显示。
但由于人视觉的暂留现象,所以,仍感觉所有的器件都在显示。
图3—4LED显示电路
4 系统软件设计
4.1程序流程图
该控制系统的流程图如图4-1所示,首先对单片机的各个控制端口以及各个参数初始化,然后就启动A/D转换,读取转换后的数据。
对转换后的数据进行滤波等操作,使数据的准确性提高,然后进行标度变换,得到实际的测量温度。
把测量温度进行处理后送到数码管显示,把测量温度与规定温度作比较,判断是否动作。
同时计算测量温度与标准值之间的偏差,根据偏差判断是进行PID计算还是积分项改进(分离)的PD计算,得到PWM脉冲控制执行机构,然后程序重复执行。
图4-1电阻炉系统控制流程图
4.2控制算法
4.2.1控制算法的确定
PID调节是连续系统中技术最成熟的、应用最广泛的一种控制算方法.它结构灵活,不仅可以用常规的PID调节,而且可以根据系统的要求进行改进,适时的采用各种PID的变型,如PI、PD控制等,本次试验便是使用改进的PID控制算法,它具有许多特点,如不需要求出数学模型、控制效果好、能够避免积分饱和、能够消除积分不灵敏区等,特别是在温度调节系统中,由于被控量变化较为缓慢且有惯性和滞后情况,积分项往往会产生很大的积累,导致系统产生很大超调,甚至发生震荡,使用改进PID控制算法可以将积分项进行分离,提高系统稳定性.改进PID控制系统的结构框图如图4—2所示:
图4-2系统结构框图
具有一阶惯性纯滞后特性的电阻炉系统,其数学模型可表示为:
(4—1)
在改进PID调节中,需要根据多次测试确定积分分离阈值β,当
时,采用PD控制,当
时,采用PID控制。
阈值β一定要选取合适,若选取过大,达不到积分分离的目的,若选取过小,被控量无法跳出积分分离区,一直处于PD控制,将会出现残差。
确定β时,可以先假设一个值,然后测试若干个不同的PI、PD参数,得出一组较好的控制参数。
积分分离控制算法可表示为:
(4-2)
式中:
T为采样时间,a为积分项开关系数,当
时,a=0;
时,a=1。
为积分系数;
为微分系数;
为比例系数。
因此,炉温控制系统的输出量为:
a=0,
a=1,
其中,
为输出量;
、
、
分别为第t次、第t-1次和第t—2次采样时刻的偏差值。
由式可知:
a=1时,比例系数和微分系数同时起作用,温度快速接近设定值。
a=0时,比例系数和微分系数同时起作用,使系统更加稳定接近设定值,避免超调和过冲。
与PID控制算法相比,改进PID控制算法有如下优点:
(1)单纯的PID控制算法无法发挥计算机运算速度快、逻辑判断能力强、编程灵活等优势,从而很难获得更好的效果。
而改进PID控制算法则能够更加灵活的根据输入量的变化与特点进行算法调整,使输出更加准确.
(2)对于温度这种变化缓慢的过程,PID算法的积分项会使系统产生很大超调量和很长的调整时间,如果在
较大时取消积分作用,在
较小时才投入积分项,就可以很灵活的避免这种情况,获得更加准确的调整。
正因为具有上述优点,在实际控制中,改进PID控制算法比标准PID控制算法应用更加广泛。
5基MATLAB仿真被控对象
由于在硬件电路中,我们看到的只是PID整定的结果,而对于其工作过程却不清楚,因此为了更清楚的了解PID的调节过程,我们使用MATLAB的SIMULINK功能对PID调节进行仿真,得出其整定的工作波形,从而更直观的看到PID调节过程。
采用SIMULINK仿真,通过SIMULINK模块实现积分分离PID控制算示。
设采样时间Ts=10s,被控对象为:
SIMULINK仿真图如图5-1所示。
图5—1Simulink仿真图
选择合适的Kp,Ki,Kd是系统的仿真效果趋于理想状态。
MATLAB编写程序如下:
clearall;
closeall;
ts=10
sys=tf([1],[30,1],'inputdelay',80);
dsys=c2d(sys,ts,’zoh’);
[num,den]=tfdata(dsys,'v’);
kp=5.2
ki=0.1;
kd=0.1
MATLAB仿真波形如图5-2所示。
图5-2MATLAB仿真波形
6。
心得体会
本次课程设计之初,通过老师的给的资料,对报告的要求和所设计的内容有了一定的了解.由于对电阻炉,温度传感器等不是太了解,于是在我查询了相关的资料,了解了电阻炉,温度传感器,根据题目的要求选择了热电阻中的铂电阻。
同时本次课程设计中运用到了51单片机、TLC2543等较多的芯片,为此查询了相关芯片的引脚图,对这些芯片有了大致的了解,在学会使用这些芯片的过程,我也学到了许多的知识。
本次课程设计让protues,DiagramDesigner,word,Keil等软件的使用,增强了我的电脑操作能力,对单片机的使用让我重新回顾了C语言的使用,对以前的知识有了复习的机会。
而本次课程设计主要的难点也是在于程序的设计.
本次课程设计中也遇到了些问题,如刚开始时题目的理解错误,程序运行出错,仿真出问题等,在同学的指导和帮助下,这些问题得到了一定的解决。
在今后的学习生活中也是如此,除了自己的努力外,还需请教他人,学习他人的经验,让今后的路更加的平坦。
参考文献
[1]陈立周、陈宇.《单片机原理及其应用》。
北京:
机械工业出版社,2006
[2]于海生编著.计算机控制技术。
机械工业出版社,2003
[3]谭浩强.C程序设计.北京:
清华大学出版社,2005
[4] 于海生.《计算机控制技术》。
北京:
机械工业出版社,2007。
[5]刘红丽、张菊秀.传感与检测技术.国防工业出版社,2007。
[6]康华光编著.电子技术基础(模拟部分).高等教育出版社,2000
附录一 电路图
附录二程序代码
#include 〈reg52.h>
#includeh>
#define uint unsigned int
#defineuchar unsignedchar
sbitD_OUT=P3^0;
sbitD_IN=P3^1;
sbit_CS=P3^2;ﻩ
sbitCLOCK=P3^3; //单片机与TLC2543连接的端口定义
sbitC1=P2^1;
sbit C0=P2^0;
sbitC2=P2^2;
sbit C3=P2^3;//单片机与数码管位选连接的端口定义
sbitdip=P0^7;//数码管小数点的定义
sbitgreen=P3^4;
sbitred=P3^5;//报警灯的定义
uintKP=10;//比例系数
uintKI=5;//积分系数
uintKD=3; //微分系数
uintKC=5;//速度调整
sbit HEAT=P2^7;//执行装置端口定义
floatPWM;//脉冲调制宽度
uint temp; //温度值
ucharcode table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//数码管显示表
/**************************************
精确延时模块
*************************************/
voiddelay(uchar n)
{
uchari;
ﻩfor(i=0;i〈n;i++)
ﻩ_nop_();
}
/**************************************
毫秒级延时模块
*************************************/
voiddelayms(uchar m)
{
uintx,y;
ﻩfor(x=m;x>0;x--)
for(y=110;y〉0;y--);
}
/**************************************
TLC2543驱动模块
*************************************/
uintread2543(uchar port)
{
uintad=0,i;
CLOCK=0;
ﻩ_CS=0;
port〈<=4;
for(i=0;i〈12;i++)
ﻩ{
ﻩﻩif(D_OUT)ad|=0x01;
D_IN=(bit)(port&0x80);
ﻩCLOCK=1;
ﻩdelay(3);
ﻩCLOCK=0;
ﻩdelay(3);
ﻩﻩport<<=1;
ﻩad<<=1;
ﻩ}
ﻩ_CS=1;
ﻩad>〉=1;
return(ad);
}
/**************************************
温度显示函数
*************************************/
voiddisplay(ucharqian,ucharbai,uchar shi,ucharge)
{
ﻩP0=table[qian];
ﻩC0=0;
delayms
(2);
C0=1;
P0=table[bai];
C1=0;
ﻩdelayms
(2);
ﻩC1=1;
P0=table[shi];
dip=1;
C2=0;
delayms
(2);
C2=1;
P0=table[ge];
ﻩC3=0;
ﻩdelayms
(2);
ﻩC3=1;
}
/**************************************
PID程序判断计算模块
*************************************/
void PID()
{
uintdiff[19]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uintum_diff=0; //Σ(diff)
uinturr_=0;
float p_out,i_out,d_out,temp_pid;
floatpwm_0;
temp_pid=diff[curr_];
if(curr_+1>=19)curr_=0;
sum_diff-=diff[curr_];
diff[curr_]=abs(key—(uint)(temp));
sum_diff+=diff[curr_];
p_out=KP*diff[curr_];//比例项输出
i_out=KI*sum_diff;//积分项输出
d_out=KD*(diff[curr_]—temp_pid);//微分项输出
pwm_0=KC*key; //维持功率项
if(i_out〉100)i_out=100; //积分分离
if(i_out〈-100)i_out=—100;
PWM=p_out+i_out+d_out+pwm_0;//总输出量
if(PWM<0)PWM=0;//积分改进PID控制
else if(PWM〉=100)PWM=100;
}
/**************************************
执行程序模块
*************************************/
voidPWM_OUT_HEAT(floatPWM)
{
uchari;
uchar limit; //pid_value输出百分比
limit=(uchar)PWM;
if(t1<=limit)HEAT=0;//加热
elseHEAT=1; //停止加热
for(i=0;i〈100;i++)
{
ﻩ delay(100);//视具体而定
ﻩ data_to_display(temp);
t1++;
}
if(t1>100)t1=1;
}
/**************************************
主函数
*************************************/
voidmain()
{
ﻩuintad;floattemp1;uchar m1,m2,m3,m4;
ﻩgreen=1;red=1;
while
(1)
{
ﻩad=read2543(0); //读取温度数字量
ﻩtemp=6/4.0*ad;
ﻩm1=temp/1000;
m2=temp/100%10;
ﻩﻩm3=temp/10%10;
ﻩm4=temp%10;//标度变换
ﻩdisplay(m1,m2,m3,m4);
ﻩﻩtemp1=temp/10;
ﻩif(temp1〉501||temp1<409)//灯光显示
ﻩ{
ﻩﻩgreen=1; red=0;
ﻩ}
else
ﻩ{
ﻩred=1;green=0;
}
ﻩif(temp1!
=500)//不等于设定温度时调温
ﻩﻩ{
ﻩPID();
ﻩﻩ ﻩPWM_OUT_HEAT(PWM);//小于等于设定温度升温
ﻩﻩ}
ﻩ}
}