温度控制系统设计(计算机控制技术课程设计)(共45页).docx
精选优质文档-倾情为你奉上学 号: 计算机控制技术课程设计题 目温度控制系统设计学 院专 业班 级姓 名指导教师2016年月日课程设计任务书学生姓名: _ 专业班级: _ 指导教师: 周申培 工作单位: _ 题 目: 温度控制系统设计初始条件:被控对象为电炉,采用热阻丝加热,利用大功率可控硅控制器控制热阻丝两端所加的电压大小,来改变流经热阻丝的电流,从而改变电炉炉内的温度。可控硅控制器输入为05伏时对应电炉温度0300,温度传感器测量值对应也为05伏,对象的特性为积分加惯性系统,惯性时间常数为T140秒。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1设计温度控制系统的计算机硬件系统,画出框图;2编写积分分离PID算法程序,从键盘接受Kp、Ti、Td、T及的值;3计算机仿真被控对象,编写仿真程序;4通过数据分析Td改变时对系统超调量的影响。5. 撰写设计说明书。课程设计说明书应包括:设计任务及要求;方案比较及认证;系统滤波原理、硬件原理,电路图,采用器件的功能说明;软件思想,流程,源程序;调试记录及结果分析;参考资料;附录:芯片资料,程序清单;总结。时间安排:2016年5月23日2016年6月3日摘要比例-积分-微分控制(简称PID控制),是控制系统中应用最为广泛的一种控制规律。实际运行的经验和理论的分析都表明,这种控制规律对许多工业过程进行控制时,都能得到满意的效果。利用计算机可以很好地使用PID算法对控制对象进行控制,具有较高的精度,并且可以很方便的改变PID参数,以达到不同的控制效果。本设计的控制对象为电炉,控制量为电炉温度,利用单片机对大功率可控硅导通角的控制,可以很方便地改变电热丝两端的电压,从而起到调节温度的作用。而热电偶配合单片机编程,能够较精确地得到炉温,使单片机能够实时发出控制信号,快速将炉温调节为给定值。当外界出现干扰使炉温发生变化时,单片机能够通过PID算法快速使炉温回到给定值。为了使PID控制更加稳定可靠,本设计加入了积分分离的改进措施,当偏差较大时取消积分作用,利用PD控制快速使系统趋于稳定;当偏差小于某一个值时,加入积分作用,以消除静差。利用Matlab软件,可以通过仿真得到Td改变对系统超调量的影响。关键词:PID控制;Matlab;系统超调量目录专心-专注-专业1 设计任务及要求 1.1 设计任务要求被控对象为电炉,采用热阻丝加热,利用大功率可控硅控制器控制热阻丝两端所加的电压大小,来改变流经热阻丝的电流,从而改变电炉炉内的温度。可控硅控制器输入为05伏时对应电炉温度0300,温度传感器测量值对应也为05伏,对象的特性为积分加惯性系统,惯性时间常数为T140秒。要求完成的主要任务:1设计温度控制系统的计算机硬件系统,画出框图;2编写积分分离PID算法程序,从键盘接受Kp、Ti、Td、T及的值;3计算机仿真被控对象,编写仿真程序;4通过数据分析Td改变时对系统超调量的影响。5. 撰写设计说明书。1.2 任务要求分析本系统的控制对象为电炉,被控量为温度,利用温度传感器实时检测电炉温度;将测得的数据经过A/D转换后送入计算机;计算机系统将检测得到的温度与炉温给定值进行比较,并计算偏差;按照预置的控制算法,对可控硅控制器的导通角进行调节,从而可以控制热阻丝两端的电压,起到温度调节的作用。为了实现数据采集、转换、处理以及PID算法控制,并通过键盘对温度设定值和PID控制参数进行修正,因此可以使用单片机或PLC。由于本次控制对象为电炉,其时间常数较大,因此采用周期不宜过小,避免系统响应过于频繁,降低计算机系统的效率并使控制品质变坏;但也不能太大,否则会使误差不能及时消除。2 方案比较及认证2.1 方案设计用温度传感器来检测炉的温度,将炉温转变成毫伏级的电压信号,经温度变送器放大并转换成电流信号。由电阻网络将电流信号变成电压信号,送入A/D转换器,通过采样和模数转换,所检测到的电压信号和炉温给定值的电压信号送入计算机程序中作比较,得出给定值与实际值之间的偏差,并与进行比较,从而确定算法。计算得到的控制量输出给可控硅控制器,改变可控硅的导通角,达到调压的目的,是电阻丝两端的电压增大或较小,进而实现对炉温的控制。方案一:使用PLC直接对铁块温度进行PID调节。其基本思想为,触摸屏要设定温度给PLC,PLC控制光耦电路,然后对电阻丝进行控制加热。具体流程为,由触摸屏设定温度给PLC,由PLC通过电路控制铁块的加热或不加热,热电偶把温度以电压的方式经过AD转换反馈给PLC,PLC再经过PID来控制温度。其结构框图如图2-1所示。图2-1 方案一设计结构图方案二:单片机热电偶温度自动控制。主要的控制芯片采用AT89C51,要求传感器测量的电压范围和可控硅控制器的电压在0-5,所以A/D与D/A转换芯片采用ADC0809和DAC0832。炉温控制在0300内,因此采用镍铬-铜镍热电偶,同时选用运算放大器将信号放大。图2-2 方案二设计结构图2.2 方案认证根据设计要求,综合考虑选择方案二。在系统中,利用热电偶测得电阻炉实际温度并转换成毫伏级电压信号。该电压信号经过温度检测电路转换成与炉温相对应的数字信号进入单片机,单片机进行数据处理后,通过液晶显示器显示温度,同时将温度与设定温度比较,根据设定计算出控制量,根据控制量通过控制继电器的导通和关闭从而控制电阻丝的导通时间,以实现对炉温的控制。程序流程图如图2-3所示。图2-3 程序流程图3 系统软件设计3.1 PID控制算法模拟PID控制器的控制规律为(3-1)在PID调节中,比例控制能迅速反应误差,从而减小误差,但比例控制不能消除稳态误差,KP的加大,会引起系统的不稳定;积分控制的作用是:只要系统存在误差,积分控制作用就不断地积累,输出控制量以消除误差,因而,只要有足够的时间,积分控制将能完全消除误差,积分作用太强就会使系统超调增大,甚至使系统出现振荡;微分控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调节时间,从而改善系统的动态性能。为了便于计算机实现PID控制算法,必须将式(3-1)变换成差分方程,以得到数字PID位置型控制算式(3-2)根据式(3-2)可写出u(k-1)的表达式 (3-3)将式(3-2)与式(3-3)相减,可以得到数字PID增量型控制算式为(3-4)式中,Kp为比例增益;Ki=Kp*T/Ti为积分系数;Kd=Kd*Td/T为微分系数。相对于位置型算法,增量型算法不需要做累加,计算误差或计算精度对控制量的计算影响较小,而位置型算法要用到过去的累加值,容易产生较大的累加误差。位置型算法不仅要占用较多的内存单元,而且不便于编写程序,并且逐渐增大的累加误差可能引起系统冲击,严重影响系统的稳定性。综合考虑,应该使用增量型数字PID控制算法来增加系统的稳定性以及控制精度。3.2 积分分离的PID控制控制算法在一般的PID控制中,当有较大的扰动或大幅度改变给定值时,由于此时有较大的偏 差,以及系统有惯性和滞后,故在积分项的作用下,往往会产生较大的超调和长时间的波动。特别对于温度等变化缓慢的过程,这一现象更为严重,为此,可采用积分分离措施,即偏差e(k)较大时,取消积分作用;当偏差较小时才将积分作用投入。亦即当时,采用PD控制;当时,采用PID控制。积分分离阈值应根据具体对象及控制要求。若值过大时,则达不到积分分离的目的;若值过小,则一旦被控量y(t)无法跳出个积分分离区,只进行PD控制,将会出现残差,为了实现积分分离,编写程序时必须从数字PID差分方程式中分离出积分项,进行特殊处理。积分分离PID控制算法流程图如图3-1所示。图3-1 积分分离PID控制算法流程图4 系统硬件设计4.1 系统滤波原理一般微机应用系统的模拟输入信号中,均含有种种噪音和干扰,它们来自信号源本身、传感器、外界干扰等。噪音有两大类:一类为周期性的,另一类为不规则的。前者可采用双积分A/D转换器,有效地消除其影响。后者为随机信号,可用数字滤波方法予以消除。 算术平均值法式要按输入的N个采样为周期ix(i=1N),寻找这样一个y,使y与各采样值间的偏差的平方和为最小,使 由一元函数求值原理可得4.2 硬件设计原理该温度控制硬件设计采用了单片机AT89C52,A/D转换器ADC0809与D/A转换器DAC0832。其设计思想为:用热电偶来检测炉的温度,将炉温转变成毫伏级的电压信号,经温度变送器放大并转换成电流信号。由电阻网络讲电流信号变成电压信号,送入A/D转换器ADC0809,通过采样和模数转换,所检测到的电压信号和炉温给定值的电压信号都转换成数字量送入单片机AT80C52进行比较,其差值即为实际炉温和给定炉温的偏差,以单片机为核心的数字PID控制器对偏差按照给定的方法运算,运算结果送入D/A转换器DAC0832转换成模拟电压,经功率放大器放大后送入晶闸管调压器,触发晶闸管并改变其导通角的大小,从而控制电阻炉的加温电压,起到炉温调节的作用。其电路图如图4-1所示。图4-1 硬件设计电路图5 系统仿真5.1 仿真程序及图形被控对象为采用simulink仿真,通过simulink模块实现积分分离PID控制算法。 选择合适的Kp,Ki,Kd是系统的仿真效果趋于理想状态。MATLAB程序如下所示。clear all;close all;ts=2; %采样时间2ssys=tf(1,40,1,0); %令sys为系统传递函数 dsys=c2d(sys,ts,'zoh'); %将sys离散化并加零阶保持器num,den=tfdata(dsys,'v'); %求sys多项式模型参数kp=1;ti=50;td=1;beta=0.1;ki=kp*ts/ti;kd=kp*td/ts;Simulink仿真图如图5-1所示。图5-1 Simulink仿真图5.2 仿真结果(1) 当Td=0.1时,仿真波形图如图5-2所示。图5-2 当Td=0.1时的仿真波形图(2) 当Td=1时,仿真波形图如图5-3所示。图5-3 当Td=1时的仿真波形图(3) 当Td=10时,仿真波形图如图5-4所示。图5-4 当Td=10时的仿真波形图(4) 当Td=15时,仿真波形图如图5-5所示。图5-5 当Td=15时的仿真波形图(5) 当Td=20时,仿真波形图如图5-6所示。图5-6 当Td=20时的仿真波形图(6) 当Td=30时,仿真波形图如图5-6所示。图5-7 当Td=30时的仿真波形图(7) 当Td=40时,仿真波形图如图5-8所示。此时系统出现振荡,系统不稳定。图5-7 当Td=40时的仿真波形图5.3 结果分析增大微分时间Td,有利于加快系统响应,使超调量减小,稳定性增加,但系统对扰动的抑制能力减弱,对扰动有较敏感的响应。通过仿真可以看出,当K,Td,T,取了合适的值后,改变Td既会改变系统的超调量,又会使系统的稳定时间发生较大的改变。在一定范围内Td增大,而相应的系统超调量减小,说明此时微分作用会使系统超调量减小。但超过该范围,随Td增大超调量增大。仿真结果中,当Td=40时,系统甚至出现不稳定的情况。因此,积分时间常数Td必须取恰当值,微分作用过强,会使系统超调过大,甚至不稳定。因此,Td增大即微分作用的增强有助于增加系统的稳定性,还可以改善系统的动态特性,如可以明显减少超调量,缩短调节时间等,提高控制精度。但Td值偏大都会适得其反。6 心得体会通过本次温度控制系统设计,个人有了很多获得:一,了解了自身各种理论知识的不足之处,强化了自身知识水平;二,知道了理论必须与实践结合,各种技术才能真正达到熟练运用的程度;三,科学技术是严密谨慎的,不能有一丝马虎,否则可能会出现较大误差;四,通过本次温度控制设计,进一步学习了单片机设计与Matlab仿真设计。也学习了数字PID控制,比较了数字PID位置型控制算法与数字PID增量型控制算法。同时了解了数字PID控制器改进的方法,如积分分离。为了实现积分分离,编写程序时必须从数字PID差分方程式中分离出积分项,进行特殊处理。参考文献1 于海生. 计算机控制技术M. 北京:机械工业出版社,2014:101-111.2 张毅刚,彭喜元. 单片机原理及应用M. 北京:高等教育出版社,2010:43-82.3 刘教瑜. PLC应用技术M. 北京:人民邮电出版社,2013:276-278.4 刘红丽. 传感与检测技术M. 北京:国防工业出版社,2012:73-81.5 王孝武,方敏,葛锁良. 自动控制理论M. 北京:机械工业出版社,2012:117-118.附录A 芯片资料附A1 ADC0809芯片功能A/D转换器是将模拟电压或电流转换成数字量的期间或装置,它是一种模拟系统和计算机之间的接口,它在数据采集和控制系统中,得到了广泛的应用,常用的A/D转换器有ADC0809. 它是一种带有8通道模拟开关的8位逐次逼近式A/D转换器,转换时间为100us左右,线性误差为±1/2LSB,采用28脚双立直插式封装,ADC0809由8通道模拟开关、通道选择逻辑、8位A/D转换器及三态输出锁存缓冲器组成。(1)8通道模拟开关及通道选择逻辑该部分的功能是实现8选1操作,通道选择信号C、B、A与所选通道的关系如下:表A-1 ADC0809模拟开关及通道选择逻辑 地址锁存允许信号(ALE、正脉冲)用于通道选择信号C、B、A的锁存。加至C、B、A上的通道选择信号在ALE的作用下送入通道选择逻辑后,通道i上的模拟输入被送至A/D转换器转换。(2)8位A/D转换器图A-1 ADC0809引脚图如图A-1所示。IN0IN7为模拟信号的8个输入通道。VREF,VREF为基准电压的正极和负极。 ADDA 、ADDB和ADDC为模拟信号输入通道的地址选择线。ALE为地址锁存信号,由低电平到高电平正跳变时讲地址选择线的状态锁存,一选通相应的输入通道。 START为启动信号,正脉冲的上升沿使内部寄存器清零,从下降沿开始进行A/D转换。 OEC为转换结束信号,在START信号之后变低,转换结束为高电平,用来申请中断。OE为输出允许信号,有效时将输出寄存器中的数据放到数据总线上。2-82-1为数码输出端,2-8为最低有效位,2-1为最高有效位。附A2 DAC0832芯片功能D/A转换器的功能是把二进制数字量电信号转换为与其数值成正比的模拟量电信号。常用D/A转换器为DAC0832芯片。DAC0832工作在单缓冲寄存器方式,即当CS信号来时,D0D7数据线送来的数据直通进行D/A转换,当IOW变高时,则此数据便被锁存在寄存器中,因此D/A转换的输出也保持不变。DAC0832讲输入的数字量转换成差动的电流输出(Iout1和Iout2),为了将其编程电压输出,须经过运算放大器,使其输出05V(Vref为-5V)或010V(Vref为-10V),若要形成负电压输出,则Vref需接正的基准电压。图A-2 DAC0832引脚图如图A-2 所示,DAC0832是双列直插式8位D/A转换器。能完成数字量输入到模拟量(电流)输出的转换。图4为DAC0832的引脚图。其主要参数如下:分辨率为8位,转换时间为1s,满量程误差为±1LSB,参考电压为(+10/span>-10)V,供电电源为(+5+15)V,逻辑电平输入与TTL兼容。在DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号XFER。当ILE为高电平,片选信号 CS和写信号 WR1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的输出随输入而变化。此后,当WR1由低电平变高时,控制信号成为低电平,此时,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据DB的变化而变化。对第二级锁存来说,传送控制信号XFER和写信号WR2同时为低电平时,二级锁存控制信号为高电平,8位的DAC寄存器的输出随输入而变化,此后,当WR2由低电平变高时,控制信号变为低电平,于是将输入寄存器的信息锁存到DAC寄存器中。其余各引脚的功能定义如下: DI7DI0:8位的数据输入端,DI7为最高位。IOUT1:模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0。IOUT2:模拟电流输出端2,IOUT2与IOUT1的和为一个常数。RFB:反馈电阻引出端,DAC0832内部已有反馈电阻,所以 RFB端可以直接接到外部运算放大器的输出端,相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。 VREF:参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为+10。VREF端与D/A内部T形电阻网络相连。VCC:芯片供电电压,范围为5V15V。GND :模拟量地/数字量地,即模拟/数字电路接地端。附A3 AT89C51单片机 AT89C51提供以下的功能标准:4K字节闪烁存储器,128字节随机存储器,32个I/O口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内震荡器和时钟电路。另外,AT89C51还可以进行0HZ的静态逻辑操作,并支持两种软件的节电模式。8051单片机的内部结构十分复杂,但封装之后,只有引脚是面向用户的,所以使用者需要熟悉各引脚的用途。常用的8051芯片是用双列直插40脚封装。如图A-3所示。图A-3 AT89C51引脚图其各引脚功能如下所示:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0口外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并作为输入时,P2口的管脚被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。P3口也可作为AT89C51的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,可用作对外部输出的脉冲或用于定时目的。 :外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的信号将不出现。 /VPP:当保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,将内部锁定为RESET;当端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。附录B 程序清单附B1 单片机程序代码单片机程序代码如下所示:积分分离PID控制算法子程序:START:MOV 68H,KP ;分别将KP ,TI ,TD, T,送入指定的存储单元MOV 54H,TI MOV 55H,TDMOV 56H,TMOV 57H,MOV A,68H;计算KI=KP*T/TI MOV B,56HMUL ABMOV B,54HDIV ABMOV 69H,AMOV A,68H;计算KD=KP*TD/TMOV B,55HMUL ABMOV B,56HDIV ABMOV 6AH,ALOOP0: MOV DPTR #7FF0H;读取预定温度值,送入ADC0809的IN0口地址 MOV DPTR,A ;启动A/D转换LOOP1 JB P3.3,LOOP1;等待转换数据MOVX A,DPTR;读取ADC0809的IN0口转换后的数据MOV 5CH,A;将预定值数据放入指定的存储单元MOV DPTR,#7FF1H;读取采样温度值,送ADC0809的IN1口地址MOVX DPTR,A;启动A/D转换LOOP2: JB P3.3,LOOP2;等待转换数据 MOVX A,DPTR;读取ADC0809的IN1口转换后的数据MOV 49H,A ;将采样值数据放入指定的存储单元MOV A,5CH ;计算e(i),先取温度给定值CLR CSUBB A,50H ;温度给定值-采样值JNC AA0;判断e(i)的正负,如果为正,跳至AA0CPL A;e(i)为负,下两条指令求补ADD A,#01H AA0MOV R0,57HSUBB A,57H;|e(i)|-JNC AA1;|e(i)|>跳至AA1SJMP AA2;|e(i)|<跳至AA2 AA1: LCALL PD;调用PD算法 AA2: LCALL PID;调用PID算法MOV A,7CH;将Ui通过DAC0832输出MOV DPTR,#7FF2HMOVX DPTR,AINC DPTRMOVX DPTR,ALCALL DELAY;调用延时子程序,等待下一次采样计算SJMP LOOP0;进入下一次控制计算DELAY PROC NEARDL0: MOV R6,#FFHDL1: MOV R7,#FFHDL2: MOV R5,#FFHDLS: DJNZ R5,DLSDJNZ R7,DL2DJNZ R6 DL1RETDELAY ENDPPID PROC NEARPID:MOV A,5CH;计算e(i),先取温度给定值CLR CSUBB A,50H;温度给定值-温度检测值JNC PID1;判断e(i)正负,如果为正,跳至PID1CPL A;e(i)为负,下两条指令求补ADD A,#01H SETB 30H;e(i)为负,符号位置1SJMP PID2PID1:CLR 30H;e(i)为正,符号位置0PID2:MOV 6BH,A;e(i)值存放在6BH单位元中MOV R1,6BH;计算ei-ei-1,先将ei值,送R1 MOV C,30H;将ei的符号位值送20H位MOV 20H,CMOV R2,6CH;将ei-1值送R2MOV C,31H;将 ei-1的符号位值送21H位MOV 21H,C LCALL DJF;调用单字节带符号的减法子程序MOV 6EH,R3;将差值ei-ei-1送6EH单元MOV C,22H;将差值ei-ei-1的符号位送33H位MOV 33H,CMOV R1,6CH;计算ei-1-ei-2,先将ei-1值送R1 MOV C,31H;将ei-1符号位送20H位MOV 20H,CMOV R2,6DH;将ei-2的值送R2MOV C,32H;将 ei-2的符号位值送21H位MOV 21H,CLCALL DJF;调用单字节带符号的减法子程序MOV 6FH,R3;将差值ei-1-ei-2送6FH单元 MOV C,22H;将差值ei-1-ei-2的符号位送34H位 MOV 34H,C MOV R1,6EH ;计算(ei-ei-1)-(ei-1-ei-2),将ei-ei-1值送R1 MOV C,33H;将ei-ei-1符号位送20H位 MOV 20H,C MOV R2,6FH;将ei-1-ei-2值送R2 MOV C,34H;将ei-1-ei-2符号位送21H位 MOV 21H,C LCALL DJF;调用单字节带符号的减法子程序 MOV 70H,R3;将差值(ei-ei-1)-(ei-1-ei-2)送70H单元 MOV C,22H;将差值(ei-ei-1)-(ei-1-ei-2)的符号位值送 35H位 MOV 35H,CMOV A,68H;计算Kp*(ei-ei-1),将Kp值送A MOV B,6EH;将ei-ei-1值送B MUL AB;两数相乘 MOV 71H,B;Kp*(ei-ei-1)值存71H,72H单元 MOV 72H.A MOV A,69H;计算KI*ei,将KI值送A MOV B,6BH;将ei值送B MUL AB;两数相乘 MOV 73H,B;KI*ei值存73H,74H单元 MOV 74H,A MOV A,6AH;计算KD*(ei-ei-1)-(ei-1-ei-2),将KD送 A MOV B,70H;将(ei-ei-1)-(ei-1-ei-2)值送BMUL AB;两数相乘 MOV 75H,B;KD*(ei-ei-1)-(ei-1-ei-2)值存75H,76H 单元 MOV 76H,A MOV R1,71H;计算Kp*(ei-ei-1)+KI*ei,将Kp*(ei-ei-1) 值送R1,R2 MOV R2,72H MOV C,33H;将Kp*(ei-ei-1)的符号位值送23H位 MOV 23H,C MOV R3,73H;将KI*ei值送R3,R4 MOV R4,74H MOV C,30H;将KI*ei值的符号位懂24H位 MOV 24H,C LCALL SJF;调用双字节带符号加法子程序 MOV 77H,R5;将Kp*(ei-ei-1)+KI*ei值送77H,78H MOV 78H,R6 MOV C,25H;将Kp*(ei-ei-1)+KI*ei值的符号位送36H位 MOV 36H,C MOV R1,77H;计算Ui,将将Kp*(ei-ei-1)+KI*ei值送R1, R2 MOV R2,78H MOV C,36H;将Kp*(ei-ei-1)+KI*ei值的符号位送23H位 MOV 23H,C MOV R3,75H;将KD*(ei-ei-1)-(ei-1-ei-2)的值送R3,R4 MOV R4,76HMOV C,35H;将KD*(ei-ei-1)-(ei-1-ei-2)的符号位送23H 位MOV 24H,C LCALL SJF;调用双字节带符号加法子程序MOV 79H,R5;将Ui值送79H,7AH MOV 7AH,R6 MOV C,25H;将Ui值的符号位送37H MOV 37H,C MOV R1,7DH;计算Ui,将Ui-1值送R1,R2 MOV R2,7EH CLR 23H;Ui-1值的符号位值恒为0 MOV R3,79H;将Ui值送R3,R4 MOV R4,7AH MOV C,37H;将Ui值的符号位送24H MOV 24H,C LCALL SJF;调用双字节带符号加法子程序 JNB 25H,PID3;判断计算结果是否为负 MOV 7BH,#00H;如果是负数,则输出电压为0 MOV 7CH,#00H SJMP PID4 PID3:MOV 7BH,R5;否则,将计算得到的Ui值置7BH,7CH MOV 7CH,R6 PID4:MOV 6DH,6CH ;数据迭代,ei-1值送ei-2存储单元MOV 6CH,6BH;ei值送ei-1存储单元 MOV 7DH,7BH;Ui值送Ui-1存储单元 MOV 7EH,7CH RET PID ENDPPD PROC NEARPD:MOV A,5CH;计算ei,先取温度给定值CLR C SUBB A,50H;温度给定值-温度检测值 JNC PD1;判断ei正负,如果为正,跳至PID1 CPL A;ei为负,下两条指令求补 ADD A,#01H SETB 30H;ei为负,符号位置1 SJMP PD2 PD1:CLR 30H;ei为正,符号位置0 PD2:MOV 6BH,A;ei值存放在6BH单位元中 MOV R1,6BH;计算ei-ei-1,先将ei值,送R1 MOV C,30H;将ei的符号位值送20H位 MOV 20H,C; MOV R2,6CH;将ei-1值送R2 MOV C,31H;将 ei-1的符号位值送21H位 MOV 21H,C LCALL DJF;调用单字节带符号的减法子程序 MOV 6EH,R3;将差值ei-ei-1送6EH单元 MOV C,22H;将差值ei-ei-1的符号位送33H位 MOV 33H,C MOV R1,6CH;计算ei-1-ei-2,先将ei-1值送R1 MOV C,31H;将ei-1符号位送20H位 MOV 20H,C MOV R2,6DH;将ei-2的值送R2 MOV C,32H;将 ei-2的符号位值送21H位 MOV 21H,C LCALL DJF;调用单字节带符号的减法子程序 MOV 6FH,R3;将差值ei-1-ei-2送6FH单元 MOV C,22H;将差值ei-1-ei-2的符号位送34H位 MOV 34H,C MOV R1,6EH ;计算(ei-ei-1)-(ei-1-ei-2),将ei-ei-1值送R1 MOV C,33H;将ei-ei-1符号位送20H位MOV 20H,C MOV R2,6FH;将ei-1-ei-2值送R2 MOV C,34H;将ei-1-ei-2符号位送21H位 MOV 21H,C LCALL DJF;调用单字节带符号的减法子程序 MOV 70H,R3;将差值(ei-ei-1)-(ei-1-ei-2)送70H单元 MOV C,22H;将差值(ei-ei-1)-(ei-1-ei-2)的符号位值送 35H位 MOV 35H,C MOV A,68H;计算Kp*(ei-ei-1),将Kp值送A MOV B,6EH;将ei-ei-1值送B MUL AB;两数相乘 MOV 71H,B;Kp*(ei-ei-1)值存71H,72H单元 MOV 72H.A MOV A,6AH;计算KD*(ei-ei-1)-(ei-1-ei-2),将KD送A MOV B,70H;将(ei-ei-1)-(ei-1-ei-2)值送B MUL AB;两数相乘 MOV 75H,B;KD*(ei-ei-1)-(ei-1-ei-2)值存75H,76H单元 MOV 76H,A MOV R1,71H;计算Kp*(ei-ei-1)+KI*ei,将Kp*(ei-ei-1)值送 R1,R2 MOV R2,72H MOV C,33H;将Kp*(ei-ei-1)的符号位值送23H位 MOV 23H,C MOV R3,75H;将KD*(ei-ei-1)-(ei-1-ei-2)值送R3,R4 MOV R4,76H MOV C,35H;将KD*(ei-ei-1)-(ei-1-ei-2)值的符号位送 24H位 MOV 24H,CLCALL SJF;调用双字节带符号加法子程序 MOV 79H,R5;将Ui值送79H,7AH MOV 7AH,R6 MOV C,25H;将Ui值的符号位送37H MOV 37H,C MOV R1,7DH;计算Ui,将Ui-1值送R1,R2 MOV R2,7EH CLR 23H;Ui-1值的符号位值恒为0 MOV R3,79H;将Ui值送R3,R4 MOV R4,7AH MOV C,37H;将Ui值的符号位送24H MOV 24H,C LCALL SJF;调用双字节带符号加法子程序 JNB 25H,PD3;判断计算结果是否为负 MOV 7BH,#00H;如果是负数,则输出电压为0 MOV 7CH,#00H SJMP PID4 PD3:MOV 7BH,R5;否则,将计算得到的Ui值置7BH,7CH MOV 7CH,R6 PD4:MOV 6DH,6CH;数据迭代,ei-1值送ei-2存储单元MOV 6CH,6BH;ei值送ei-1存储单元 MOV 7DH,7BH;Ui值送Ui-1存储单元 MOV 7EH,7CH RET PD ENDP附B2 仿真程序代码仿真程序代码如下所示:clear all;close all;ts=2;%采样时间2ssys=tf(1,40,1,0);%令sys为系统传递函数 dsys=c2d(sys,ts,'zoh'); %将sys离散化并加零阶保持器num,den=tfdata(dsys,'v'); %求sys多项式模型参数kp=1;