您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 控制方法的c语言实现
版权所有:王帅严谨任何盗版或出于商业目的的恶意传播正常转载请注明版权第一章数学模型第一章数学模型被控系统的数学模型是描述系统内在物理量之间关系的数学表达式。系统的数学模型体现了输入量、输出量之间的内在关系,将输入量与输出量通过物理关系连接起来。认清被控系统的数学模型,是设计控制系统的基础。从另外一层意义上讲,对于本领域被控对象数学模型认识的深入程度,直接决定了工程师在该领域所能取得的成就。认识系统的数学模型是进行控制系统设计的基础。1.1时域与复域时域,是以时间做基本变量的范围,描述数学函数或物理信号对时间的关系。时域是真实世界,是惟一实际存在的域。我们的经历都是在时域中发展和验证的,我们习惯于事件按时间的先后顺序地发生。而评估数字产品的性能时,通常在时域中进行分析,因为产品的性能最终就是在时域中测量的。正是因为时序是真实世界的反映,在用编程语言描述系统模型或控制系统时,首先需要分析出系统的时域模型。复域,是指时域的微分方程通过拉普拉斯变坏得到的变量在复数范围内的域。得到复域数学模型(传递函数)的目的在于分析系统的稳定性,常用的分析方法包括根轨迹和频域分析法。分析系统的稳定性是设计稳定系统的基础,读者务求深入了解。图1-1所示为系统分析设计的一般步骤。实际系统是真实世界的客观存在,进行系统设计时,首先要根据实际系统,分析出系统的时域模型,然后通过拉普拉斯变换得到系统的传递函数,利用控制系统分析方法,分析系统的稳定性,并根据设计要求设计系统校正环节,然后将校正环节转换为时域系统,利用模拟量或者数字控制技术离散化各个环节,并实现基本的设计,然后根据实际系统控制状态完善控制方式,最终完成整个系统的设计。以上便完成了整个控制系统的设计流程。本书将分不同章节分别从模型、分析、设计、实现四个方面进行讲解,以期达到使读者融会贯通的目的。本章是从模型的角度出发,分析并说明由实际系统向时域模型的抽象,并进一步生成传递函数的方法。以下1/30自动控制系统的C语言设计能容为本节需要的基本数学知识,如果读者对微分、积分、拉普拉斯变化、拉普拉斯反变换能够充分了解,本节可略去不看。图1-1控制系统设计环图1.2基本数学工具1.2.1微分方程与差分方程凡是表示未知函数、未知函数的导数与自变量之间关系的方程,都称之为微分方程。微分方程用来描述实际系统被关注特性随时间演变的过程,它可以描述系统的动态过程。微分方程进行离散化变形成了差分方程,而差分方程的时间上的连续发生便会形成微分方程。为什么要建立微分方程与差分方程,因为人们对于变化非常关注,人们往往希望从目前已知的东西上加上合理的预测而得到2/30实际系统时域模型传递函数系统分析校正环节时域转换第一章数学模型未来的变化。也就是说如果我们可以知道“变化值=现在值–过去值”,那么我们就希望能够得到“未来值=现在值+变化值”。而微分方程的形式dm/dt与差分方程的形式(MN+1−MN)/(TN+1−TN)恰恰反映了系统的变化的特性。下面示例1-1说明了系统微分方程的建立过程。如图1-2所示,电路由电阻R、电感L、电容C组成,写出以U(t)为输入,U0(t)为输出的微分方程。LRCi(t)U(t)U0(t)图1-2示例1-1电路图基尔霍夫定律指出回路的电压和为0,那么我们可以知道u(t)=Ldidt+(1C)∫i(t)dt+Ri(t),其中我们又知道u0(t)=1c∫i(t)dt,消去中间变量即可得到电压输入输出的微分方程。LC(d2u0(t))dt2+RC(du0(t))dt+u0(t)=u(t)由公式不难看出,微分方程体现了给定电压u(t)与u0(t)随时间t的变化关系,是系统的一种动态的体现。对于控制系统而言,控制的过程是动态的过程,控制中所说的平衡也是一种动态的平衡,那么建立系统的动态模型就是完成控制系统设计的重要前提。3/30自动控制系统的C语言设计下面我们把上述微分方程转换为差分方程的形式。首先需要明确,二次微分是对一次微分求微分,明白这点后,差分方程也就容易写出了。LC((u0t(n+1)−u0t(n))/(t(n+1)−t(n))−(u0t(n)−u0t(n−1))/(t(n)−t(n−1)))(t(n+1)−t(n))+RC(u0t(n+1)−u0t(n))(t(n+1)−t(n))+u0t(n+1)=ut(n+1)我们不难看出,差分方程能够将微分方程离散化,离散化的系统可以很容易用C语言表示出来,从而容易用C语言描述出相应的模型,进而为设计控制系统提供模型仿真依据。所以说,微分方程转化为差分方程,最终实现系统的离散化,是理论设计向实际应用转化的必要步骤。1.2.2拉普拉斯变换与传递函数通过上一小节,我们可以知道,系统可以使用多阶微分的形式表示出来,但是问题在于,如果对系统进行分析,微分方程的求解相当麻烦,尤其对于复杂的系统而言,分析多阶微分方程是相当困难的,那么有没有一种方法,能够将复杂的微积分运算转化到简单的四则运算呢,拉普拉斯变换就是提供了这样一种方案,将时间域上的系统转化到复域上来,并在复域上进行分析设计,进行控制设计时,将复域控制系统通过拉普拉斯反变换的方式转化到时间域,进而可以离散化实现控制过程。定义:时间函数f(t),当t⩾0使有定义,且广义积分∫0+∞f(t)e−stdt在s的某一区域内收敛,则由此积分确定的参数为s的函数F(s)=∫0+∞f(t)e−stdt叫做函数f(t)的拉普拉斯变换。零初始条件下,系统输出量的拉普拉斯变换与输入量的拉普拉斯变化之比就称为线性定常系统的传递函数。小贴士如何由微分方程快速进行拉普拉斯变换?设线性定常系统由下述n阶线性常微分方程描述:4/30第一章数学模型a0dndtnc(t)+a1d(n−1)dt(n−1)c(t)+⋯+a(n−1)ddtc(t)+anc(t)=b0dmdtmr(t)+b1d(m−1)dt(m−1)r(t)+⋯+b(m−1)ddtr(t)+bnr(t)公式中,c(t)为系统输出量,r(t)为系统输入量。且其各阶导数在t=0均为零。则对上述公式进行拉普拉斯变换后,得到的代数方程为:[a0sn+a1s(n−1)+⋯+a(n−1)s+an]C(s)=[b0sm+b1s(m−1)+⋯+b(m−1)s+bm]R(s)则系统的传递函数可表示为:G(s)=C(s)R(s)=b0sm+b1s(m−1)+⋯+b(m−1)s+bma0sn+a1s(n−1)+⋯+a(n−1)s+an1.3典型环节的微分方程、传递函数及C语言实现方法无论多么复杂的系统,总是可以由简单的子系统构成,分析典型环节的特点,其目的是为了通过典型环节的特点分析更为复杂的系统,实际工程应用中,真正完全通过理论的方式建立模型是非常困难的,实际的模型建立过程是一个复杂的过程,需要通过假设、验证、参数实验给定等多种手段分析完善模型内容,利用实验获取模型的方法又称作系统辨识技术,在下一节中将重点讲解。假设的过程,其实就是根据系统特点,综合典型环节的过程。将不同的环节通过四则运算给予不同的参数进行运算,从而接近真实的模型。从这个角度上讲,透彻理解典型环节的特点,无论对于理论分析系统,还是对于实际建立系统模型都具有重要的意义。这里的典型环节包括比例、积分、微分、惯性、震荡、滞后六个子环节。下面进行单独讲解。5/30自动控制系统的C语言设计1.3.1比例环节比例环节是自然界普遍存在的一个环节,几乎所有的系统必定存在比例环节。比例环节的特点在于输入输出量成正比例关系,没有失真与延时。其微分方程可表示为:c(t)=Kr(t)。其传递函数可表示为:G(s)=C(s)R(s)=K。对于比例环节而言,C语言实现相对比较简单。下面进行C语言实现过程的说明。floatProElement(floatK,floatGiveValue){floatresult;result=K*GiveValue;returnresult;}以上代码用C语言实现了比例环节的处理。使用时直接定义一全局变量,例如floatResultValue;然后直接调用该函数即可,例如ResultValue=ProElement(0.1,10);返回的ResultValue=1.0。1.3.2惯性环节惯性环节是自然界普遍存在的另一个环节,其存在的广泛性不亚于比例环节,任何系统,只有时间精度足够高,都必然存在一定的惯性性能。惯性环节的特点是对变化的输入量,输出量不能立刻复现,或多或少的存在一定的延时,在延时的时间内,输出量会逐渐接近输入的给定值。其微分方程可表示为:Tdc(t)(dt)+c(t)=r(t)。其中T为惯性时间常数,T越大,惯性越大,当延时时间约为3-4倍的T时,输出接近输入给定值。其传递函数6/30第一章数学模型可表示为:G(s)=1Ts+1。下面讲解用C语言实现惯性环节的过程。这里注意系统的输出为c(t),输入为r(t)。首先将微分方程转化为差分方程的形式:Tc(t)−c(t−1)t−(t−1)+c(t)=r(t),化简该公式可表示为:c(t)=r(t)+Tc(t−1)T+1。上述公式表明,当前时刻输出量c(t)与上一时刻输出量c(t-1)相关。利用该原理,可使用C语言通过迭代函数实现。首先定于全局变量,存放上一时刻输出量的值floatResultValueBack。初值设定为0,然后可通过下面函数实现迭代过程。floatInertialElement(floatT,floatGiveValue){floatresult;result=(T*ResultValueBack+GiveValue)/(1+T);ResultValueBack=result;returnresult;}1.3.3积分环节积分环节是设计校正系统是常用的一个环节,经典的PID算法就分别用到了比例、积分、微分三个环节。积分环节的显著特点是,输出量与输入量的积分成正比例关系,当输入量消失后,输出量具有记忆功能,能够储存部分能量。其微分方程可表示为:c(t)=∫r(d)dt。其传递函数可表示为:G(s)=1s。对于离散系统而言,积分过程实质上是系统输入量的累加和,用C语言实现积分过程可表示为:定义全局变量ResultValue7/30自动控制系统的C语言设计floatIntegralElement(floatGiveValue){floatresult;ResultValue=ResultValue+GiveValue;result=ResultValue;returnresult;}1.3.4震荡环节震荡环节相对而言较为复杂,日常所见系统中,震荡环节体现的相对也少一些,比如RC震荡电路,单摆等系统输入震荡系统,该系统的特点在于,系统中存在两个独立储能元件,并可以进行能量交换,从而形成震荡。其微分方程表示为:T2d2c(t)dt2+2℘Tdc(t)dt+c(t)=r(t),其传递函数表示为:G(s)=1T2s2+2℘Ts+1。其中T为时间常数,℘为阻尼系数。上述公式表示成差分方程的形式为:T2[c(t)−2c(t−1)+c(t−2)]+2℘T[c(t)−c(t−1)]+c(t)=r(t),整理化简得到如下公式:c(t)=r(t)+(2T2+2℘T)c(t−1)−T2c(t−2)T2+2℘T+1,由上述公式可知输出量c(t)与输入量r(t),以及前两次的输出量存在关系。类似惯性环节的C语言实现方式,我们使用迭代函数实现该环节。定义全局float型变量ResultValueBackOne,ResultValueBackTwo。8/30第一章数学模型floatOscilElement(floatT,floatWP,floatGiveValue)//T为时间常数,WP表示阻尼系数{floatresult;result=(GiveValue+(2*T*T+2*WP*T)*ResultValueBackOne-T*T*ResultValueBackTwo)/(T*T+2*T*WP+1);ResultValueBackTwo=ResultValueBackOne
本文标题:控制方法的c语言实现
链接地址:https://www.777doc.com/doc-4175284 .html