计算机控制技术课程设计基于某PID-电阻炉温度控制系统.doc
word基于Smith-PID电阻炉温度控制系统一、课程设计(综合实验)的目的与要求设计目的用SMITH-PID控制器控制电阻炉。避免因为延时过大造成的控制误差过大设计要求设计一个基于闭环直接数字控制算法的电阻炉温度控制系统具体化技术指标如下:1.电阻炉温度控制在0500;2. 加热过程中恒温控制,误差为±2;3. LED实时显示系统温度,用键盘输入温度,精度为1;4. 采用Smith-PID数字控制算法,要求误差小,平稳性好;5. 温度超出预置温度±5时发出报警。2方案设计本系统是一个典型的温度闭环控制系统,需要完成的功能是温度设定、检测与显示以及温度控制、报警等。温度的设定和显示功能可以通过键盘和显示电路部分完成;温度检测可以通过热电阻、热电偶或集成温度传感器等器件完成;温度超限报警可以利用蜂鸣器等实现;温度控制可以采用可控硅电路实现。系统采用89C51作为系统的微处理器来完成对炉温的控制和键盘显示功能。8051片除了128KB的RAM外,片又集成了4KB的ROM作为程序存储器,是一个程序不超过4K字节的小系统。系统程序较多时,只需要外扩一个容量较小的程序存储器,占用的I/O口减少,同时也为键盘、显示等功能的设计提供了硬件资源,简化了设计,降低了成本。因此89C51可以完成设计要求。系统建模和数字控制器的设计PID调节是连续系统术最成熟的、应用最广泛的一种控制算方法。它结构灵活,不仅可以用常规的PID调节,而且可以根据系统的要求,采用各种PID的变型,如PI、PD控制及改进的PID控制等。它具有许多特点,如不需要求出数学模型、控制效果好等,特别是在微机控制系统中,对于时间常数比较大的被控制对象来说,数字PID完全可以代替模拟PID调节器,应用更加灵活,使用性更强。所以该系统采用PID控制算法。系统的结构框图如图3-1所示:3.2数字控制器的设计具有一阶惯性纯滞后特性的电阻炉系统,其数学模型可表示为:采用离散Smith预估控制系统。该系统框图如下设包括零阶保持器在的广义被控对象传递函数为式中:T为采样周期,并设m=(取整数)。纯滞后补偿器的传递函数为采用由传递函数直接求差分方程式的方法进行计算,其步骤如下。(1) 计算外反馈回路偏差e1(n),即式中:y(n)为被控量第n次采样时的数值;R(n)为给定值,在定值控制系统中为常数。(2) 计算纯滞后补偿器的输出y1(n),即化为微分方程式,则可写成:用差分代替微分,则有在计算第n次采样的z(n)值时,p(n)尚未计算,因而用p(n-1)和p(n-2)代替p(n)和p(n-1)。经移项整理后得其中;纯滞后补偿器的输出为(3) 计算反馈回路偏差e2(n),即(4) 计算数字控制器输出p(n),控制器采用PID控制规律,则式中:为控制器的比例系数;为积分系数,;为微分系数,。P(n)即为计算机的控制输出,用以控制执行机构的信号。若有需要还可用此p(n)重新计算z(n),作为下一个采样周期的z(n-1)值。返回 z(n)z(n-m)z(n-1)z(n-m-1)P(n)P(n-1)P(n-1)P(n-2) P1(n)P1(n-1) 重算z(n)计算p(n)数字滤波输出P1(n)Pmp1(n)P1(n)>Pm计算p1(n)计算e2(n)计算y1(n)计算z(n)计算e1(n)有效性检查读入y1(n)Smith预估补偿控制程序流程框图如下3、 硬件设计 系统的硬件电路包括微控制器部分(主机)、温度检测、温度控制、人机对话(键盘/显示/报警)4个主要部分温度检测部分1. 本次设计采用的是89C51单片机人机对话部分89C51热电阻变送器A/D转换器温度显示键盘温度控制部分电炉可控硅调功器驱动器光耦声音报警 电热阻控制系统结构框图 2.温度检测电路。温度检测电路包括温度传感器、变送器和A/D转换器三部分。温度传感器和变送器的类型选择与被控温度的围及精度等级有关。型号为WZB-003的铂热电阻适合于0500的温度测量围,可以满足本系统的要求。变送器将电阻信号转换成与温度成正比的电压,当温度在0500时变送器输出04.9V左右的电压。 A/D转换器件的选择主要取决于温度的控制精度。本系统要求温度控制误差,采用8位A/D转换器,其最大量化误差为,能够满足精度要求。因此,本系统采用ADC0809作为A/D转换器。电路设计好后,调整变送器的输出,使的温度变化能对应于04.9V的输出,则A/D转换对应的数字量为00HFAH,即0250,转换结果乘以2正好是温度值。用这种方法一方面可以减少标度变换的工作量,另一方面还可以避免标度变换带来的计算误差, 3.温度控制电路。控制电路采用可控硅来实现,双向可控硅SCR和电炉电阻丝串接在交流220V的电回路中,单片机P1.7口的信号通过光电隔离器和驱动电路送到可控硅的控制端,由P1.7口的高低电平来控制可控硅的导通与断开,从而控制电阻丝的通电加热时间。 4.人机对话电路。这部分包括键盘、显示和报警三部分电路。本系统设有3位LED数码显示器,用于显示电阻炉的设定温度和实际温度。采用串行口扩展的静态显示电路作为显示接口电路。为使系统简单紧凑,键盘只设置3个功能键,分别是“百位”、“十位”和“个位”键,由P1口低3位作为键盘接口。利用数字键可以分别对预置温度的百位、十位和个位进行的温度设置,并在LED上显示当前设置值。另外,还设置了系统复位键。5. 报警功能由蜂鸣器实现。当由于意外因素导致电阻炉温度高于设置温度时,P1.6口送出低电平经反相器驱动蜂鸣器鸣叫报警。4、 软件设计系统的操作过程和工作过程在程序的设计过程中起着很重要的指导作用,因此在软件设计之前应首先分析电阻炉的工作原理。1. 工作流程 电阻炉在上电复位后先处于停止加热状态,这时可以用数字键设定预置温度并显示出来;温度设定后,就可以按启动键启动系统工作。温度检测系统不断定时检测当前温度,并送往显示器显示,达到预定值后停止加热并显示当前温度;当温度下降到下限时再启动加热。这样不断重复上述过程,使温度保持在预定温度围之。启动后可以修改预置温度。2.功能模块根据对工作流程的分析,系统软件可以分为以下几个功能模块:(1) 键盘管理。实现键盘扫描与处理功能,接收温度预置,启动系统工作。(2) 显示。显示设置温度及当前温度。(3) 温度检测及温度值变换。实现A/D转换及数字滤波功能。(4) 温度控制。根据检测到的温度控制电炉的工作状态。(5) 报警。当预置温度或当前检测的炉温越限时,输出报警信号。3.资源分配在编程前,首先要对89C51的资源进行分配。它包括显示单元(6位)、预置温度单元(2位)、当前检测温度(2位)、BCD码显示缓冲区(3位)、二进制码显示缓冲区(3位)、报警允许标志、堆栈区等。然后,还需要对键盘输入和报警、控制电路的端口地址进行分配。地址功能名称初始化值50H51H当前检测温度,高位在前TEMP1TEMP000H52H53H预置温度,高位在前ST1ST000H54H56H温度BCD码显示缓冲区(百位、十位、个位)T100,T10,T00H57H58H二进制显示缓冲区,高位在前BT1,BT000H59H7FH堆栈区PSW.5报警允许标志F0=0时禁止报警;F0=1时允许报警FOO单片机89C51存的资源分配可以利用伪指令进行定义。数据存储器的分配与定义如下表。P1.0P1.3为键盘输入接口,P1.6和P1.7分别为报警控制和电路控制接口。ADC0809输入通道INOIN7的地址为7FF8H7FFFH,本系统使用IN0通道。4. 程序总体结构设计 系统程序设计采用模块化设计方法,程序由主程序、中断服务子程序和各功能模块程序等组成,各功能模块可直接调用。主程序完成系统的初始化、温度预置及其合法性检测、预置温度的显示及定时器T0的初始化设置等。T0中断服务程序是温度控制体系的主体,用于温度检测、控制和报警(包括启动A/D转换、读入采样数据、数字滤波、越限温度报警和越限处理、输出可控硅的控制脉冲等)。中断由T0产生,根据需要每隔15S中断一次,即每15S采样控制一次。由于系统采用6MHZ晶振,最大定时为130ms,为实现15S定时,另行设计了一个软件计数器。主程序和中断服务子程序如下。TEMP1 EQU 50H ;当前检测温度(高位)TEMP2 EQU 51H ;当前检测温度(低位)ST1 EQU 52H ;预置温度(高位)ST1 EQU 53H ;预置温度(低位)T100 EQU 54H ;温度BCD码显示缓冲区(百位)T10 EQU 55H ;温度BCD码显示缓冲区(十位)T1 EQU 56H ;温度BCD码显示缓冲区(个位)BT1 EQU 57H ;温度二进制显示缓冲区(高位)BT2 EQU 58H ;温度二进制显示缓冲区(低位)ADINO EQU 7FF8H ;ADC0809通道IN0的端口地址F0 BIT PSW.5 ;报警允许标志 TEMP1 DB 00H,00H,00H,00H,00H,00H,00H,00H ;50H58H单元初始化(清零)ORG 0000HAJMP MAIN ;转主程序ORG OOOBHAJMP PT0 ;转PTO中断服务子程序ORG 0030HMAIN: MOV SP,#59H ;设堆栈指针 CLR F0 ;报警标志清零 MOV TMOD,#01H ;定时器0初始化(方式1) MOV TL0,#0B0H ;定时器100ms定时常数 MOV TH0,#3CH MOV R7,#150 ;置15s计数器初值 SETB ETO ;允许定时器0中断 SETB EA ;开中断 SETB TR0 ;启动定时器0MAIN1: ACALL KIN ;调键盘管理子程序 ACALL DISP ;调显示子程序 SJMP MAIN1;定时器0中断服务子程序PT0:PT0: MOV TL0,#0B0H MOV TH0,#3CH ;重置定时器初值 DJNZ R7,BACK ;检测是否到达15S MOV R7,#150 ;重置计数器初值 ACALL TIN ;温度检测 MOV BT1,TEMP1 ;当前温度送显示缓冲区 MOV BT0,TEMP2 ACALL DISP ;显示当前温度 ACALL CONT ;温度控制 ACALL ALARM ;温度越限报警BACK: RETI开始保护现场重置定时器0初值开定时器0中断定时器0、软定时器、各数据缓冲区、个标志位初始化调用显示子程序调用键盘管理子程序定义堆栈区开始软定时器减1中断返回调报警子程序调用温度控制子程序当前温度送显示缓冲区调用温度检测子程序重置软定时器0初值调显示子程序15s到? 主程序 中断服务程序 系统程序总体结构框图5. 功能软件设计(1) 键盘管理模块。上电或复位后系统处于键盘管理状态,其功能是键盘的扫描和处理,接收温度预置和启动键。程序设有预置温度合法检测报警,当预置温度超过。键盘管理子程序和流程图如下。先设置预置温度合法性检测子程序CHK(用双字节减法比较预置温度是否大于,对应的数字量为01F4H) CHK: MOV A,#0F4H ;预置温度上限低8位送A CLR C ;清零C SUBB A,STO ;低8位减,借位送CY MOV A,#01H ;预置温度上限高8位送A SUBB A,ST1 ;高8位带借位减 JC OUTA ;预置温度越界,转报警 MOV A,#00H ;预置温度合法标志CHR: RET OUTA: MOV ST1,#01H ;将500写入预置温度数据区 MOV ST0,#0F4H CLR P1.6 ;发报警信号 ACALL DELAY ;调用延迟子程序 SETB P1.6 ;停止报警 SJMP CHKR DELAY: MOV R5,#100H ;延时1s程序 DEL1: MOV R6,#10 DEL2: MOV R7,#7DH DEL3: DJNZ R7,DEL3 DJNZ R6,DEL2 DJNZ R5,DEL1 RET 利用+1按键可以分别对预置温度的百位、十位和个位进行加1设置,以下是程序 KEY: MOV BT0,ST0 ;预置温度送显示缓冲区 MOV BT1,ST1 ACALL DISP ;显示预置温度KEY0:ACALL KEY1 ;读按键值 JZ KEY0 ;无键按下循环,直到有键按下LCALL DISP LCALL DISP ;两次调用显示子程序延时去抖动ACALL KEY1 ;再检测有无键按下JZ KEY0 ;无键按下重新检测 ACC.0,K10MOV A,#100 ;百位键按下LJMP KEY3K10: ACC.1,K1 MOV A,#10 ;十位键按下LJMP KEY2K1: ACC.2,KEY0 MOV A,#01 ;个位键按下KEY2: ADD A,ST0 ;预置温度按键+1 MOV STO,AKEY3: LCALL KEY1 ;判断闭合键释放 JNZ KEY3 ;未释放继续判断LJMP KEY ;闭合键释放继续扫描键盘RET ;返回KEY1: MOV A,P1 ;读键值子程序 CPL AANL A,#0FHRET开始P1.0=1?预置温度合法检查百位键+1P1.1=1?预置温度显示缓冲区十位键+1有键闭合?个位键+1P1.2=1?保存新的温度预置值调用显示子程序返回启动加热有键闭合? 键盘管理子程序流程图(2) 显示模块。显示子程序的功能是将显示缓冲区57H和58H的二进制数据先转换成3个BCD码,分别存入百位、十位和个位显示缓冲区(54H、55H和56H)单元,然后通过串行口送出显示。显示子程序DISP:DISP: ACALL HTB ;调用将显示数据转换成BCD码的子程序 MOV SCON,#00H ;置串行口为方式0 MOV R2,#03H ;显示位数送R2 MOV R0,#T100 ;显示缓冲区首地址送R0LD: MOV DPTR,#TAB ;指向字符码表首地址 MOV A,R0 ;取显示数据 MOVC A,A+DPTR ;查表 MOV SBUF,A ;字符码送串行口WAIT: C TI,NEXT ;发送结束转下一个数据并清中断标志 SJMP WAIT ;发送未完等待NEXT: INC R0 ;修改显示缓冲区指针 DJNZ R2,LD ;判断3位显示是否完成,未完继续 RETTAB: C0H F9H A4H B0H 99H 92H 82H F8H 80H 90H HTB: MOV A,57H ;取二进制显示数据 MOV A,58H MOV B,#100 ;除以100,确定百位数 DIV A,B MOV 54H,A ;百位数送54H单元 MOV A,#10 ;除以10,确定十位数以及个位数 XCH A,B DIV A,B MOV 55H,A ;十位数送55H单元 MOV 56H,B ;个位数送56H单元 RET ;返回(3) 温度检测模块。A/D转换采用查询方式。为提高数据采样的可靠性,对采样温度进行数字滤波。数字滤波的算法很多,这里采用4次采样取平均值的方法。如前所述,本系统A/D转换结果乘以2正好是温度值,因此,4次采样的数字量之和除以2就是检测的当前温度。检测结果高位存入50H,低位存入51H。开始()-1()=0?返回检测结果缓冲区清零采样次数4R24次累加结果除以2检测结果缓冲区累加采样结果结果低8位51H高8位50H转换结束?启动A/D转换 温度检测子程序流程图程序如下: MOV 51H,#00H ;清检测温度缓冲区 MOV 50H,#00H MOV R2,#04H ;取样次数送R2 MOV DPTR,#7FF8H ;指向A/D转换器0通道TADC0:MOVX DPTR,A ;启动转换TADC1:JNB IE1,TADC1 ;等待结束 MOVX A,DPTR ;读转换结果 ADDC A,51H ;累加 MOV 51H,A DJNZ R2,TADC0 ;4次采样是否完成,未完继续 CLR C ;累加结果除以2 MOV A,51H RRC A MOV R5,A ORL A,#0FH ;高8位放50H低8位放51H MOV 51H,A ORL R5,#0F0H MOV 50H,R5 RET(4) 温度控制模块。将当前温度与预置温度比较,当前温度小于预置温度时,继电器闭合,接通电阻丝加热;当前温度大于预置温度,继电器断开,停止加热;当两者相等时电炉保持原来状态;当前温度降低到比预置温度低时,再重新启动加热;当前温度超出报警上下限时将启动报警,并停止加热。温度控制子程序:CONT: MOV A,51H ;当前温度A CLR C ;清零 SUBB A,53H ;当前温度-预置温度 JNC CONT1 ;无借位,表示当前温度预置温度,转CONT1 JNB F0,CONT0 ;当前温度<预置温度,判断是否超过预置温度 CLR C SUBB A,#02H ;若超过预置温度,判断二者差值是否大于2 JNC ACC.7,CONT1 ;差值不大于2,转CONT1CONT0: CLR P1.7 ;开电炉 SJMP CONT2 ;返回CONT1: SETB F0 ;设置允许报警标志 SETB P1.7 ;关电炉CONT2: RET开始当前温度与预置温度比较置允许报警标志关电炉返回开电炉当前温度<预置温度-2?当前温度<预置温度? 温度控制流程图 (5)温度超限报警模块。报警上限温度值为预置温度,即当前温度上升到高于预置温度时报警,并停止加热;报警下限温度值设为预置温度,即在当前温度下降到低于预置温度,且允许报警,这是为了防止开始从较低温度加温时报警。报警的同时关闭电炉。程序如下ALARM: MOV A,51H ;读取当前温度 CLR C ;清零SUBB A,53H ;当前温度-预置温度AJC ALARM0 ;有借位,当前温度小于预置温度转ALARM0SETB F0 ;当前温度预置温度,允许报警AJMP ALARM1 ALARM0:MOV A,53H ;预置温度A CLR C ;清零SUBB A,51H ;预置温度-当前温度AALARM1:CLR C ;清零 SUBB A,#05H ;温度差再减5JC ALARM2 ;相减结果小于5,不报警返回JNB F0,ALARM2 ;相减结果5,判断是否允许报警,不允许则返回CLR P1.6 ;启动报警SETB P1.7 ;关电炉ACALL DELAY ;报警延时SETB P1.6 ;关报警ALARM2:RET ;返回DELAY: MOV R5,#100H ;延时1s程序DEL1: MOV R6,#10DEL2: MOV R7,#7DHDEL3: DJNZ R7,DEL3 DJNZ R6,DEL2DJNZ R5,DEL1RET返回当前温度预置温度开报警器,关电炉允许报警?温差>置允许报警标志预置温度-当前温度当前温度-预置温度开始 报警子程序流程图3、 课程设计(综合实验)总结或结论=4、 参考文献1 广弟, 朱月秀.单片机基础. 航空航天大学, 第三版. 2007.61 凌玉华, 连浩.单片机原理及应用系统设计. 中南大学, 第一版. 2006.41 居义, 晓琴.单片机课程设计指导. 清华大学.2009.0915 / 15