1、目录一、系统设计方案的论证与比较2二、硬件电路设计32.1、主控单元32.2、温度采集32.3、ACSSR交流功率调节电路42.4、变送电路41、420mA变送器XTR10142、I/V转换器RCV42052.5、键盘及显示的设计51、键盘设计52、LED数码管显示设计62.6、硬件连接图6三、 Matlab参数整定73.1 闭环连续pid控制73.2、增加扰动83.3 增加史密斯预估器83.4 数字pid算法实现91、 流程图如下:92、 Matlab中m文件实现温度控制的pid增量型算法如下:103、 显示二维平面图如下:11四、系统软件设计114.1 主程序模块114.2 功能实现模块1
2、21、T0中断子程序122、T1中断子程序124.3运算控制模块131、标度转换子程序132、PID算法13五、源程序13摘要:电阻炉是一种利用电流通过电热元件产生的热量加热工件的热处理设备。具有结构简单、操作简便、价格低廉等特点,广泛用于淬火、正火、回火和退火等常规热处理生产,是机械制造企业最常用的热处理加热设备之一。电阻炉炉温控制系统控温性能的优劣以及智能化程度的高低,不仅直接影响机械产品质量的高低,而且还直接影响热处理生产劳动强度的大小。随着微电子制造技术和现代控制技术的发展,采用以功能强、体积小、价格低的单片机为核心、以先进PID控制为算法构建智能化电阻炉温度控制系统已成为现实。本文介
3、绍了以AT89S52单片机为核心的温度控制器的设计,在该设计中采用热电偶温度传感器以及DWB温度变送器对电热锅炉的温度进行实时精确测量,送入8位的AD0809进行AD转换,从而实现自动检测,实时显示及越限报警。控制部分采用PID算法,实时更新PWM控制输出参数,通过AC-SSR电路实现了对炉温的高精度控制。 关键词:炉温控制;PID控制;单片机 一、系统设计方案的论证与比较根据题目要求,电热锅炉温度控制系统由核心处理模块、温度采集模块、键盘显示模块、及控制执行模块等组成. 此次设计采用比较流行的AT89S52作为电路的控制核心,使用8位的模数转换器AD0808进行数据转换,控制电路部分采用PW
4、M通过AC-SSR实现锅炉温度的连续控制,此方案电路简单并且可以满足题目中的各项要求的精度。综上分析,我们采用方案二。系统总体框图如下。图1 控制器设计总体框图根据温度变化慢,并且控制精度不易掌握的特点,我们设计了以AT89S52单片机为检测控制中心的电热锅炉温度自动控制系统。温度控制采用改进的PID数字控制算法,显示采用8位LED动态显示。该设计结构简单,控制算法新颖,控制精度高,有较强的通用性。所设计的控制系统有以下功能:1、温度控制设定波动范围小于1%,测量精度小于1%,控制精度小于2%。2、实时显示当前温度值。3、按键控制:设置复位键、运行键、功能转换键、加一键、减一键。4、越限报警。
5、二、硬件电路设计硬件系统主要由AT89S52单片机、温度采集、AD转换、光耦隔离、键盘显示电路、蜂鸣报警、等功能电路组成。2.1、主控单元AT89S52单片机为主控制单元。AT89S52是ATMEL公司生产的低功耗、高性能CMOS 8位单片机它除正常工作以外还可以工作于低功耗和掉电模式,进一步减少了芯片的功耗。降低芯片的温升,延迟了芯片的使用寿命。其内部配有8K的Flash程序存储器和256字节的数据存储器。所配置的Flash程序存储器,便于实现ISP在线下载,降低了应用系统的开发成本。除此之外,AT89S52还具有2个16位定时计数器。5个两级中断源结构,32位并行输人输出端口和一个全双工的
6、串行口,以及看门狗定时器等功能单元。AT89S52单片机首先根据炉温的给定值和测量值计算出温度偏差,然后进行PID控制并计算出相应的控制数据由P10口输出。最后将P10口输出的控制数据送往光电耦合隔离器的输入端,利用PWM脉冲调制技术调整占空比,达到使炉温控制在某一设定温度。AT89S52单片机还负责按键处理、温度显示以及与上位机进行通信等工作。4位高亮度LED用于显示设定温度或实测温度。2.2、温度采集温度采集电路主要由铂铑-铂热电偶LB-3。LB-3热电偶可以在1300高温下长时间工作,满足常规处理工艺要求。测温时,热电阻输出mV热电势,必须经过变送器变换成0-5V的标准信号。本系统选用D
7、WB型温度变送器,并将其直接安装在热电偶的接线盒内,构成一体化的温度变送器,不仅可以节省补偿导线,而且可以减少温度信号在传递过程中产生的失真和干扰。电阻炉炉温信号是一种变换缓慢的信号。这种信号在进行A/D转换时,对转换速度要求不高。因此为了减低成本以及方便选材,可以选用廉价的、常用的A/D芯片ADC0808,ADC0808是一种逐次逼近式8路模拟输入、8为数字输出地A/D转换器件,转换时间为100us,完全满足系统设计的要求。经过ADC0808转换所得到的实测炉温数据直接送入AT89S52单片机中进行数据处理。此外,为了防止断偶或者炉温越限,产生热处理质量事故;同时为了提高温控系统的智能化控制
8、性能,降低热处理操作人员的劳动强度,本系统特别设置了断偶或炉温越限自动报警电路。在热处理生产过程中,当发生断偶或炉温越限等异常现象时,主控单元AT89S52单片机自动启动报警电路进行声、光报警,以便操作人员快速处理,防止炉内工件过热,破坏金属组织结构。2.3、ACSSR交流功率调节电路由输出来控制电炉,电炉可以近似建立为具有滞后性质的一阶惯性环节数学模型。为了避免交流接触器等机械触电因频繁通断产生电弧,烧坏触电或者干扰其他设备正常工作,本系统选用AC-SSR交流功率调节器作为PID控制系统的执行机构。AT89S52单片机P1.0口输出的温度控制信号经过光电耦合器件隔离,送至过零检测电路。过零检
9、测电路产生脉冲控制AC-SSR调功电路。当实测温度偏低时,单片机输出的控制信号使得双向可控硅的导通角减小,导通时间变短,加热器功率降低炉温适当降低。通过控制输入到加热器平均功率的大小达到控制电阻炉炉温的目的。采用过零触发的方式,使可控硅输出为正弦波,有效地避免了移相触发输出非正弦波而造成的对电网的公害。控制执行部分的硬件电路如下图图2 控制执行部分的硬件电路2.4、变送电路1、420mA变送器XTR101XTR101为420mA线性化变送器,它可与镍络-镍硅测温传感器构成精密的T/I变换。器件中的放大器适合很宽的测温范围,在-40+85的工作温度内,传送电流的总误差不超过1%,供电电源可以从1
10、1.6V到40V,输入失调电压2.5mV,输入失调电流20nA。XTR101外形采用标准的14脚DIP封装。XTR101有如下两种应用于转换温度信号的典型电路:2、I/V转换器RCV420RCV420是一种精密电流/电压变换器,它能将420mA的环路电流变为05V的电压输出,并且具有可靠的性能和很低的成本。除具有精密运放和电阻网络外,还集成有10V基准电源。对环路电流由很好的变换能力。具有-25+85和070的工作温度范围,输入失调电压1mA,总的变换误差0.1%,电源电压范围518V。RCV420的外形采用标准的16脚DIP封装。它的典型应用如下:2.5、键盘及显示的设计1、键盘设计位选键S
11、W与P23相连,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和74LS16
12、4来实现8位动态显示。 图 4 LED显示2.6、硬件连接图 三、 Matlab参数整定 通过使用MATLAB的simulink仿真构造传递函数为控制对象,其结构图如下:图6 控制对象结构图要设计数字pid炉温控制系统,首先设计连续的pid控制器。以下为在matlab simulink中构建系统框图如下:3.1 闭环连续pid控制图7 闭环连续PID控制结构图仿真结果如下:图8 阶跃响应曲线图3.2、增加扰动图9 增加扰动的控制结构图图8 阶跃响应曲线图3.3 增加史密斯预估器图9 增加施密斯预估器的控制结构图仿真结果如下图10 阶跃响应曲线图3.4 数字pid算法实现1、 流程图如下:离散被
13、控对象初始化各变量采样时刻到否计算偏差增量型计算公式NY图10 PID算法流程图2、 Matlab中m文件实现温度控制的pid增量型算法如下:clear all;close all;ts=1; %采样时间=1ssys=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;
14、for k=1:100time(k)=k*ts;%时间参数r(k)=500;%给定值y(k)=u(k)*dsyse(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);endhold on;plot(time,y,b); %绘图b为蓝色显示、时间为横轴、输出为纵轴kp,ki,kd3、 显示二维平面图如下:图8 阶跃响应曲线图四、系统软件设计系统的软件由三大模块组成:主程序模块、功能实现模块和运算控制模块。4.1
15、 主程序模块主程序流程图。图8 主程序流程图4.2 功能实现模块以用来执行对可控硅及电炉的控制。功能实现模块主要由AD转换子程序、中断处理子程序、键盘处理子程序、显示子程序等部分组成。1、T0中断子程序该中断是单片机内部100ms定时中断,优先级设为最高,是最重要的子程序。在该中断响应中,单片机要完成调用PID算法子程序且输出PID计算结果等功能。其流程图如下:图8 T0中断子程序2、T1中断子程序T1定时中断用于调制PWM信号,优先级低于T 0中断,其定时初值由PID算法子程序提供的输出转化而来,T1中断响应的时间用于输出控制信号。其流程图如下:图9 T1中断子程序4.3运算控制模块 运算控
16、制模块涉及标度转换、PID算法、以及该算法调用到的乘法子程序等。1、标度转换子程序该子程序作用是将温度信号(00HFFH)转换为对应的温度值,以便送显示或与设定值在相同量纲下进行比较。单片机运算采用定点数运算,并且在高温区和低温区分别用程序作矫正处理。2、PID算法积分分离控制的基本思路是:当偏差e(k)绝对值较大时。取消积分作用,以免由于积分作用使系统稳定性降低,超调量增大;当偏差e(k)绝对值小于某一设定值M时,引入积分控制,以便消除静差,提高控制精度,即综上所述,PID算法流程图如下:图10 PID控制算法流程图五、源程序#include#include PID.h/#defineAD_
17、DataP0unsignedcharADConvert(void);sbitAD_Start=P20;sbitAD_EOC=P21;sbitCtrl=P34; sbitSW=P23;sbitoutpin=P10;unsigned char const DisCode10 = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,; /显示代码表unsigned char const Statud10 = 0xb7,0xf8,0xf3;unsigned int tep,step=300;unsigned int s_ulCycle,s_uiHighT
18、ime,s_uiLowTime,Freq,value,Scale;/PWM设置用到的参数unsigned long longtemp,longtemp1,longtemp2;unsigned char i=0;bit s_bStatus=0;unsignedcharADConvert(void);/A/D转换void display(unsigned int num1, unsigned int num2); /显示模块voiddelay(unsignedintDelayTime); /延时子程序voidInterrupt_init();void PWM_Set( unsigned int u
19、iFreq, unsigned char ucScale );/PWM模块void main() unsigned long temp=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(temp320)|(temp 100 ) /占空比不可
20、能大于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;/保持高电平的时间 void PWM_Tm1ISR(void) interrupt 1 TR1 = 0; s_bS
21、tatus= s_bStatus; /取反标志位,表示该输出高电平或低电平 if(s_bStatus) /输出高电平 TH1 = s_uiHighTime8; /保持高电平的计数次数 TL1 = s_uiHighTime; outpin = 1; /输出高电平 else /输出低电平 TH1 = s_uiLowTime8; /保持低电平的技术次数 TL1 = s_uiLowTime; outpin = 0; /输出低电平 TR1 = 1; /允许计数器重新开始计数void Interrupt_init() /内部计数器初始化 EA=1; /开总中断 TMOD=0x11; /T0,T1都使用16
22、位定时器,不受外部外部引脚电平控制ET0=1; ET1=1; EX0=1;IT0=1; EX1=1;IT1=1; TH0=s_uiLowTime8;TL0=s_uiLowTime; /定时器0赋予初值TR0=1; /启动定时器0TH1=0x4b; TL1=0xff; /定时50ms TR1=1; voidPID_Ctrler(void) interrupt 3 TH0=0x4b; TL0=0xff;if(i=1)i=0;value=ypid(step,tep);else i+; voidEX0_int(void) interrupt 0/利用外部中断0,设置目标温度if(SW)/sw=1,初值
23、温度step加1,实现step的个位设置step+;else /sw=0,初值温度step加10,实现step十位设置step+=10;voidEX1_int(void) interrupt 2 /利用外部中断1,设置目标温度if(SW)step-;/sw=1,初值温度step减1,实现step的个位设置else step-=10;/sw=0,初值温度step减10,实现step十位设置 void display(unsigned int num1, unsigned int num2) /LED实时显示温度 P2=0xa0;delay(5);SBUF=DisCodenum1/100;dela
24、y(100); /显示百位 P2=0x20;delay(5);SBUF=DisCodenum1%100/10;delay(100);/显示十位 P2=0xc0;delay(5);SBUF=DisCodenum1%10;delay(100); /显示个位 P2=0x40;delay(5);SBUF=DisCodenum2/100;delay(100); P2=0x80;delay(5);SBUF=DisCodenum2%100/10;delay(100); P2=0x00;delay(5);SBUF=DisCodenum2%10;delay(100); P2=0xe0;delay(5);SBUF
25、=Statud0;delay(100); P2=0x60;delay(5);SBUF=Statud1;delay(100); unsignedcharADConvert(void)/A/D采样,把模拟量转换为数字量 unsigned int Voltage;AD_Start=0;/启动ADC0808AD_Start=1;AD_Start=0;delay(10);Voltage=AD_Data;return (Voltage);voiddelay(unsignedintDelayTime) /延时子程序while(DelayTime-); int idata lerror1,lastout;/,
26、out_max,yout5,lyrk,yrk,;unsigned char xi,xp,xd;unsigned char const UPPER_LIMIT=400;char p;unsigned int ypid(unsigned int give,unsigned int feedback)int error1,error2,out;error1=give-feedback; /计算积分偏差error2=error1-lerror1; /计算比例偏差lerror1=error1; /更新e(k-1) out=lastout+error1/xi+error2*xp; /计算PI控制值if(e
27、rror1=0)out=out; /计算不灵敏区的运算补偿else if(error1-8)if(error10)out=out+1;else out=out-1;else if(error1-16)if(error10)out=out+2; else out=out-2;if(outUPPER_LIMIT)out=UPPER_LIMIT; /对输出值进行上限控制if(out0)out=0; /对输出值进行下限控制lastout=out; /更新out(k-1)if(error1-xd)out=out+error1;return(out); /返回最终运算结果void clr_lastout(
28、unsigned int value1)lastout=value1;void initialize_pid_value()xp=1;xi=8;xd=4;六、结果分析论述本次的课程设计就快结束了,从开始的兴奋到中途的郁闷再到最后的满足,感受到了实验带来的复杂感觉。刚开始,在仅仅一个课题的情况下来设计电路图,真是感到无从下手,在经过老师的耐心讲解,经过简单的调适与对比,最终完成了电路图的设计。经过此次设计,我对这门课程有了更深的了解。在设计过程中,首先要熟悉系统的工艺,进行对象的分析,按照要求确定方案。然后要进行硬件和软件的设计和调试。由于没有实际的样机,所以不能看到系统的运行结果。只能在理论上
29、对系统的结果进行预测分析。此次设计使我对微型计算机控制技术有了全面的深刻的了解,对我以后深入学习这门技术有很大的帮助。此次的计算机控制技术课程设计,得到了不少的启示。思考问题以及进行实践都要严谨,缜密。真所谓小心取证,就是这个道理。通过学习数字PID的电阻热炉温度控制系统的设计,更加了解可编程控制器的构造及应用。激发我们的创新意识,在学习与进行设计的过程中,利用已经掌握的知识及查阅的资料,自行完成课程设计任务以及设计完成。七、致谢在本次设计中,感谢丁健老师的悉心指导。通过老师在设计思想上的为我指点迷津、开拓思路,是我们的实验更好的完成。因此,我要向丁健老师致以最诚挚的感谢。八、参考文献【1】于海生编著. 计算机控制技术. 机械工业出版社.2010年1月.【2】李朝青 编著.单片机原理及接口技术. 北京航空航天大学出版社.1999年3月.【3】余锡存 曹国华 编著. 单片机原理及接口技术(第二版). 西安电子科技大学. 2007年12月.【4】邵裕森 戴先中 编著. 过程控制系统机械工业出版社2009年6月.