草庐IT

「自控原理」2.4 信号流图与梅逊公式、闭环传递函数

HuangZi-zi 2024-07-16 原文

本节引入了信号流图以及梅逊增益公式,可以据此快速对系统进行化简
本节引入了闭环传递函数的概念,并介绍了常用的闭环传递函数

文章目录


方框图还是很强大的,但是当系统比较复杂的时候化简方框图就非常繁琐,所以引入信号流图。

信号流图的基本概念

  1. 节点: 表示变量的点。也就是一个物理量。只出不入的节点叫做源节点,只入不出的点叫做阱节点
  2. 支路和增益: 连接两个节点的有向线段称为支路,支路上方标注增益。输出信号等于输入信号乘以增益
  3. 源点和阱点: 用源节点表示输入信号、阱节点表示输出信号
  4. 混合节点: 既有输入又有输出的节点。1出2入为比较点,1入2出为引出点
  5. 通路: 沿支路箭头方向穿过各相连支路的路径
  6. 前向通路: 从源点到阱点的通路通过任一节点不多于一次,称这个通路为前向通路
  7. 回路: 通路的起点就是终点,称这个通路为回路

信号流图与方框图的关系

从结构图绘制信号流图


第一步画出节点。也就是有多少变量画多少个小圈
然后按照传递函数,写增益。注意反馈的地方,如果是负反馈那么整体的增益需要写上-号,而不能在信号比较的地方画-号。

注意a4和c并不是合并为一个点,因为在信号流图里面是只入不出表示输出,所以需要单独添加一个阱点

从信号流图绘制结构图


根据信号流图先画各个环节。注意要识别比较点和引出点。把箭头变成方框,把圈变成箭头信号。

梅逊(Mason)增益公式

M = 1 Δ ∑ k = 1 N ( P k Δ k ) M=\frac{1}{\Delta}\sum\limits_{k=1}^N(P_k\Delta_k) M=Δ1k=1N(PkΔk)
其中:
N N N: 系统前向通道数目
P k P_k Pk: 第k条前向通路的增益
Δ \Delta Δ: 特征式
Δ = 1 − ∑ k L k + ∑ i , j L i L j − ∑ l , m , n L l L m L n + … \Delta=1-\sum\limits_kL_k+\sum\limits_{i,j}L_iL_j-\sum\limits_{l,m,n}L_lL_mL_n+… Δ=1kLk+i,jLiLjl,m,nLlLmLn+
或者用文字表示为:
Δ = 1 − \Delta=1- Δ=1(所有不同单回路增益之和)+(所有可能的两两互不接触回路增益之和)-(所有可能的三个互不接触的回路增益之和)+…
Δ k \Delta_k Δk: 第k条前向通路特征式的余子式,就是抽去第k条前向通路后剩下的信号流图的特征式 Δ \Delta Δ值。如果第k条前向通路与所有回路都有接触,那么 Δ k = 1 \Delta_k=1 Δk=1

Mason公式例题

例题1:如图,求传递函数:

首先确定前向通路和回路:

确认有没有两两、三三互不接触的回路(本题没有)
然后就可以写特征式,代入梅逊增益公式计算了
特征余子式这道题第一个前向通道与所有回路都相交所以余子式为1,而第二个前向通路与所有回路都不相交所以余子式为原本的 Δ \Delta Δ

一般来说,给出结构图要求使用梅逊公式的时候并不需要化成信号流图,可以直接从方框图求解。不过这就需要尤其注意正负反馈。比如:例题2: 求传递函数

直接从方框图可以看到前向通路和回路

当更换了输入输出变量后,回路和特征式是不受影响的

用方框图直接代入梅逊公式就一定要注意负反馈带来的 - 号的问题
此外在判断互不接触的回路时也要特别小心,必须从图上看信号流动有没有相交,不能从回路增益中是否含有相同环节判断是否相交。

典型闭环系统的结构图与传递函数

在前面的例题里面也可以看出来,对于同一个系统,可以写出好几个不同的传递函数,在这里做进一步的讲解。

一个典型的闭环系统结构图如图:

使用梅逊增益公式求这些传递函数非常简单。只需要根据不同的输入和输出确定前向通道即可,这里就不写过程了。

开环传递函数

系统的开环传递函数定义为前向通道传递函数与反馈通道传递函数之积
G ( s ) H ( s ) = B ( s ) E ( s ) = G 1 ( s ) G 2 ( s ) H ( s ) G(s)H(s)=\frac{B(s)}{E(s)}=G_1(s)G_2(s)H(s) G(s)H(s)=E(s)B(s)=G1(s)G2(s)H(s)

闭环传递函数

由于研究线性定常时不变系统,满足叠加原理,因此使r(t)、n(t)分别作用,分别研究其传递函数。
此外系统输出 C ( s ) C(s) C(s)和偏差信号 E ( s ) E(s) E(s)都可以反应系统所处的状态,因此可以分别列写传递函数。

  1. 输入r(t)作用下的闭环传递函数
    Φ ( s ) = C ( s ) R ( s ) = G 1 ( s ) G 2 ( s ) 1 + G 1 ( s ) G 2 ( s ) H ( s ) Φ e ( s ) = E ( s ) R ( s ) = 1 1 + G 1 ( s ) G 2 ( s ) H ( s ) \Phi(s)=\frac{C(s)}{R(s)}=\frac{G_1(s)G_2(s)}{1+G_1(s)G_2(s)H(s)}\\ \Phi_e(s)=\frac{E(s)}{R(s)}=\frac{1}{1+G_1(s)G_2(s)H(s)} Φ(s)=R(s)C(s)=1+G1(s)G2(s)H(s)G1(s)G2(s)Φe(s)=R(s)E(s)=1+G1(s)G2(s)H(s)1
  2. 干扰n(t)作用下的闭环传递函数
    Φ n ( s ) = C ( s ) N ( s ) = G 2 ( s ) 1 + G 1 ( s ) G 2 ( s ) H ( s ) Φ e n ( s ) = E ( s ) N ( s ) = − G 2 ( s ) H ( s ) 1 + G 1 ( s ) G 2 ( s ) H ( s ) \Phi_n(s)=\frac{C(s)}{N(s)}=\frac{G_2(s)}{1+G_1(s)G_2(s)H(s)}\\ \Phi_{en}(s)=\frac{E(s)}{N(s)}=\frac{-G_2(s)H(s)}{1+G_1(s)G_2(s)H(s)} Φn(s)=N(s)C(s)=1+G1(s)G2(s)H(s)G2(s)Φen(s)=N(s)E(s)=1+G1(s)G2(s)H(s)G2(s)H(s)
  3. 系统的总输出以及总误差
    总输出:
    C ( s ) = G 1 ( s ) G 2 ( s ) ⋅ R ( s ) 1 + G 1 ( s ) G 2 ( s ) H ( s ) + G 2 ( s ) ⋅ N ( s ) 1 + G 1 ( s ) G 2 ( s ) H ( s ) C(s)=\frac{G_1(s)G_2(s)\cdot R(s)}{1+G_1(s)G_2(s)H(s)}+\frac{G_2(s)\cdot N(s)}{1+G_1(s)G_2(s)H(s)} C(s)=1+G1(s)G2(s)H(s)G1(s)G2(s)R(s)+1+G1(s)G2(s)H(s)G2(s)N(s)
    总误差:
    E ( s ) = R ( s ) 1 + G 1 ( s ) G 2 ( s ) H ( s ) + − G 2 ( s ) H ( s ) ⋅ N ( s ) 1 + G 1 ( s ) G 2 ( s ) H ( s ) E(s)=\frac{R(s)}{1+G_1(s)G_2(s)H(s)}+\frac{-G_2(s)H(s)\cdot N(s)}{1+G_1(s)G_2(s)H(s)} E(s)=1+G1(s)G2(s)H(s)R(s)+1+G1(s)G2(s)H(s)G2(s)H(s)N(s)

观察各个传递函数,我们发现其分母都是 1 + G 1 G 2 H 1+G_1G_2H 1+G1G2H,称这个式子=0为系统的特征方程,反应系统的固有特征,不随输入输出量而改变。特征方程的根叫做特征根。(闭环的特征方程和特征根)
这里需要和前面2.2节提到的特征方程和特征根进行区分。由开环传递函数求得的是开环的特征方程和特征根。

例题:

按照之前的结构,可以直接代入公式计算出各种传递函数。

可以按照不同的输入分别计算输出。

这里是把每一个传递函数都化成时域方程然后再叠加。其实也可以在复域叠加传递函数,然后再化成时域方程。

这个地方偏差没有用传递函数再计算而是直接通过反馈关系叠加出来的。

有关「自控原理」2.4 信号流图与梅逊公式、闭环传递函数的更多相关文章

  1. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  2. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

  3. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  4. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  5. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  6. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  7. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  8. ruby-on-rails - 将字符串转换为 ruby​​-on-rails 中的函数 - 2

    我需要一个通过输入字符串进行计算的方法,像这样function="(a/b)*100"a=25b=50function.something>>50有什么方法吗? 最佳答案 您可以使用instance_eval:function="(a/b)*100"a=25.0b=50instance_evalfunction#=>50.0请注意,使用eval本质上是不安全的,尤其是当您使用外部输入时,因为它可能包含注入(inject)的恶意代码。另请注意,a设置为25.0而不是25,因为如果它是整数a/b将导致0(整数)。

  9. ruby - 如何将 Puma::Configuration 传递给 Sinatra? - 2

    这是我的网络应用:classFront我是这样开始的(请不要建议使用Rack):Front.start!这是我的Puma配置对象,我不知道如何传递给它:require'puma/configuration'Puma::Configuration.new({log_requests:true,debug:true})说真的,怎么样? 最佳答案 配置与您运行的方式紧密相关puma服务器。运行的标准方式puma-pumaCLI命令。为了配置puma配置文件config/puma.rb或config/puma/.rb应该提供(参见examp

  10. jquery - 如何将 AJAX 变量从 jQuery 传递到他们的 Controller ? - 2

    我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam

随机推荐