控制方法的C语言实现

所需积分/C币:50 2016-03-01 16:44:07 973KB PDF
收藏 收藏
举报

控制系统的数学模型及其C语言实现;PID控制及其C语言实现;工业常用智能算法及其C语言实现;实例设计之电源仿真软件
的基础,读者务求深入了解。图1-1所示为系统分析设计的一般步骤 实际系统是真实世界的客观存在,进行系统设计时,首先要根据实际系统,分析岀系统的时域模型,然后通 过拉普拉斯变换得到系统的传递函数,利用控制系统分析方法,分析系统的稳定性,并根据设计要求设计系统 校正环节,然后将校正环节转换为时域系统,利用模拟量或者欻字控制技术离散化眢个环节,并实现基本的设 计,然后根据实际系统控制状态完蓍控制方式,最终完成整个系统的设计。以上便完成了整个控制系统的设计 流程。本书将分不同章节分别从模型、分析、设计、实现四个方面进行讲解,以期达到使读者融会贯通的目的。 本章是从模型的角度岀发,分析并说明由实际系统冋时域模型的抽象,并进一步生成传递函数的方法。以下 能容为本节需要的基本数学知识,如果读者对微分、积分、拉普拉斯变化、拉普拉斯反变换能够充分了解,本 节可略去不看。 实际 √系统 时域 时域 转换 模型 校正 传递 环节 函数 系统 分析 图1-1控制系统设计环图 3/53 自动控制系统的C语言设计 12基本数学工具 1.2.1微分方程与差分方程 凡是表示未知函数、未知函数的导数与自变量之间关系的方程,都称之为微分方程。微分方程用来描述实际 系统被关注特性随时间演变的过程,它可以描述系统的动态过程。 微分方程进行离散化变形成了差分方程,而差分方程的时间上的连续发生便会形成微分方程。为什么要建立 微分方程与差分方程,因为人们对于变化非常关注,人们往往希望从目前已知的东西上加上合理的预测而得到 未来的变化。也就是说如果我们可以知道“变化值=现在值一过去值”,那么我们就希望能够得到“未来值 现在值+变化值”。而微分方程的飛式dhm/d与差分方程的飛式(MμM)(Tλ--T)恰恰反映了系统 的变化的特性。 下面示例1-1说明了系统微分方程的建立过程。如图1-2所示,电路由电阻R、电感L、电容C组成,写出 以U(t)为输入,U(t)为输出的微分方程。 Ult C Uo(t) 图12示例1-1电路图 4/53 基尔霍夫定律指出回路的电压和为0,那么我们可以知道n()=L+()()d+Ri(t),其中我们又知 道u(=2()d,消去中间变量即可得到电压输入输出的微分方程 LO (d uo(t) t ro +a0()=l() 由公式不难看出,微分方程体现了给定电压a(t)与u()随时间t的变化关系,是系统的一种动态的体 现。对于控制系统而言,控制的过程是动态的过程,控制中所说的平衡也是-种动态的平衡,那么建立系统的 动态模型就是完成控制系统设计的重要前提。 下面我们把上述微分方程转换为差分方程的形式。首先需要明确,二次微分是对一次微分求微分,明白这点 后,差分方程也就容易写出了。 ( lot LC rC +1 t I 我们不难看出,差分方程能够将微分方程离散化,离散化的系统可以很容易用C语言表示岀来,从而容易用 C语言描述岀相应的模型,进而为设计控制系统提倛模型仿真依据。所以说,微分方程转化为差分方程,最终实 现系统的离散化,是理论设计向实际应用转化的必要步骤。 122拉普拉斯变换与传递函数 通过上一小节,我们可以知道,系统可以使用多阶微分的形式表示出来,但是问题在于,如果对系统进行分 析,微分方程的求解相当麻烦,尤其对于复杂的系统而言,分析多阶微分方程是相当困难的,那么有没有—种 方法,能够将复杂的微积分运算转化到简单的四则运算呢,拉普拉斯变换就是提供了这样—种方案,将时间域 上的系统转化到复域上来,并在复域上进行分析设计,进行控制设计时,将复域控制系统通过拉普拉斯反变换 的方式转化到时间域,进而可以离散化实现控制过程。 5/53 自动控制系统的C语言设计 定义:时间函数f(),当使有定义,且广义积分「f(e"a在的某区域内收敛,则由此积 分确定的参数为s的函数F(s)=f(1)∈"d叫做函数f()的拉普拉斯变换。 零初始条件下,系统输岀量的拉普拉斯变换与输入量的拉普拉斯变化之比就称为线性定常系统的传递函数。 小贴 如何由微分方程快速进行拉普拉斯变换? 设线性定常系统由下述n阶绂性常微分方程描述 ao clt+ai dic(t)+, +d( at c(t)+a, c(0)=bo m r(t)+ by r(t)+…+b b) r(t)+b,r( 公式中,c(t)为系统输出量,r()为系统输入量.且其各阶导数在t=0均为零。则对上述公式进行拉普拉斯变换后,得到的代数方程为 Laos+ ais +a(m-1s+anlC(s)=[b+b1m-1)+…+bm=1)3bm]R(s) 则系统的传递函数可表示为 G(s)=C(s)_b05+b,s(m-l+ .+hom- -s+ bo a0S+a1,、(x-1)+…+a(n-1)3+aa 6/53 1.3典型环节的微分方程、传递函数及C语言实现方法 无论多么复杂的系统,总是可以由简单的子系统构成,分析典型环节的特点,其目的是为了通过典型环节的 特点分析更为复杂的系统,实际工程应用中,真正完全通过理论的方式建立模型是非常困难的,实际的模型建 立过程是一个复杂的过程,需要通过假设、验证、参数实验给定等多种手段分析完善模型内容,利用实验获取 模型的方法又称作系统辨识技术,在下—节中将重点讲解。假设的过程,其实就是根据系统特点,综合典型环 节的过程。将不同的环节通过四则运算给予不同的参数迸行运算,从而接近真实的模型。从这个角度上讲,透 彻理解典型环节的特点,无论对于理论分析系统,还是对于实际建立系统模型都具有重要的意义。 这里的典型环节包括比例、积分、微分、惯性、震荡、滞后六个子环节。下面进行单独讲解。 131比例环节 比例环节是自然界普遍存在的一个环节,几乎所有的系统必定存在比例环节。比例环节的特点在于输入输岀 量成正比例关系,没有失真与延时。其微分方程可表示为:c(t)=Kr(t)。其传递函数可表示为 C(s K 对于比例环节而言,C语言实现相对比较简单。下面进行C语言实现过程的说明。 float ProElement(float K, float give value float result result = K*Givevalue return result 7/53 自动控制系统的C语言设计 以上代码用C语言实现了比例环节的处理。使用时直接定义一全局变量,例如 float resultvalue;然后直接 调用该函数即可,例如 Resultvalue= Proelement(0.1,10);返回的 Resultvalue=10 13.2惯性环节 惯性环节是自然界普遍存在的另一个环节,其存在的广泛性不亚于比例环节,任何系统,只有时间精度足够 高,都必然存在一定的惯性性能。惯性环节的特点是对变化的输入量,输岀量不能立刻复现,或多或少的存在 一定的延时,在延时的时间内,输出量会逐渐接近输入的给定值。其微分方程可表示为:rd0)+c()=r() 其中T为惯性时间常数,T越大,惯性越大,当延时时间约为3-4倍的T时,翰岀接近输入给定值。其传递函数 可表示为:G(s)= Ts+ 下面讲解用C语言实现惯性环节的过程。这里注意系统的输出为α(t),输入为 r(.首先将微分方程转化为差分方程的形式:c()c(-1)+c(1)=r(),化简该公式可表示为 c() r(t)+ tc(t 上述公式表明,当前时刻输出量c(t)与上一时刻输出量c(t1)相关。利用该原理,可使 用C语言通过迭代函数实现。首先定于全局变量,存放上一时刻输出量的值 float resultvalue back。初值设定 为0,然后可通过下面函数实现迭代过程。 float Inertial element(float t, float Give value) float result result =(T*Resultvalue Back + Givevalue)/(1+T) Resultvalue Back= result. 8/53 return result 133积分环节 积分环节是设计校正系统是常用的一个环节,经典的PID算法就分别用到了比例、积分、微分三个环节。积 分环节的显著特点是,输岀量与输入量的积分成正比例关系,当输入量消失后,输岀量貝有记忆功能,能够储 存部分能量。其微分方程可表示为:c(=-」r(4)d。其传递函数可表示为:G()=-。对于离散系统而言, 积分过程实质上是系统输入量的累加和,用C语言实现积分过程可表示为 定义全局变量 Resultvalue float IntegralElement(float Give Value) float result. Resultvalue Resultvalue Givevalue result= resultvalue return result 134震荡环节 震荡环节相对而言较为复杂,日常所见系统中,震荡环节体现的相对也少一些,比如RC震荡电路,单摆等 系统输入震荡系统,该系统的特点在于,系统中存在两个独立储能元件,并可以进行能量交换,从而形成震荡。 9/53 自动控制系统的C语言设计 其微分方程表示为:T 2a C +267cQ+c()=(),其传递函数表示为:c(s) 其 S+27s+1 中T为时间常数,g为阻尼系数。上述公式表示成差分方程的形式为 [c(t)-2c(t-1)+c(-2)]+2T[c(t)-c(t-1)c(t)=r(t) 整理化简得到如下公式:c()+(2+2f7)e(4-1)-2c(-2) ,由上述公式可知输出量c(t)与输入量 T+2T+1 r(t),以及前两次的输岀量存在关系。类似惯性环节的C语言实现方式,我们使用迭代函数实现该环节。 定义全局 float型变量 Resultvaluebackone, ResultvalueBacktwo。 f| bat oscilelement( float t, float we, float givevalue)/为时间常数,WP表示阻尼系数 float result, result =(Give Value+(2*T*T+2*WP*T)*Resultvalue Backone-T*T*ResultValue BackTWo)/(T*T+2*T*WP+1); Resultvalue BackTwo resultvalue backone Resultvalue Backone result return result 13.5微分环节 微分环节也经常运用到校正环节中,如果被控系统存在较大的惯性环节,可考虑校正环节中加λ微分环节, 微分环节关注的是给定变化率的特性,所以在-定程度上具有系统预沨能力。微分环节根据微分阶数的不同分 10/53

...展开详情
试读 53P 控制方法的C语言实现
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    控制方法的C语言实现 50积分/C币 立即下载
    1/53
    控制方法的C语言实现第1页
    控制方法的C语言实现第2页
    控制方法的C语言实现第3页
    控制方法的C语言实现第4页
    控制方法的C语言实现第5页
    控制方法的C语言实现第6页
    控制方法的C语言实现第7页
    控制方法的C语言实现第8页
    控制方法的C语言实现第9页
    控制方法的C语言实现第10页
    控制方法的C语言实现第11页
    控制方法的C语言实现第12页
    控制方法的C语言实现第13页
    控制方法的C语言实现第14页
    控制方法的C语言实现第15页
    控制方法的C语言实现第16页

    试读已结束,剩余37页未读...

    50积分/C币 立即下载 >