你是不是也遇到过这种情况?在 MATLAB 里想用 margin 函数分析控制系统稳定性,结果输完代码要么报错,要么出来一堆看不懂的数字,完全不知道咋回事。别愁,今天小编就来给大伙好好掰扯掰扯这个 margin 函数,从参数到实例,再到那些容易踩的坑,保证让你看完就会用。
一、margin 函数到底是干啥的?为啥要用它?
估计有刚接触的朋友会问,margin 函数听着挺玄乎,它到底能帮咱解决啥问题啊?其实简单说,这函数就是用来分析控制系统的稳定裕度的,像相位裕度、增益裕度这些,都能靠它算出来。
那为啥非得用它呢?你想啊,做控制系统设计的时候,稳定性可是头等大事。要是增益裕度不够,系统说不定就会振荡;相位裕度太差,响应可能就跟不上。用 margin 函数一算,这些关键指标一目了然,咱调参数的时候心里就有数了,多方便。
二、margin 函数的参数都代表啥?怎么用才对?
margin 函数的参数说简单也简单,说复杂也复杂,咱一步一步来看。
最基本的用法是 margin (sys),这里的 sys 就是咱要分析的系统模型,比如用 tf 函数建立的传递函数。举个例子,sys = tf ([1],[1 2 3]),然后输入 margin (sys),MATLAB 就会自动画出波特图,还把增益裕度、相位裕度这些数值标出来,是不是挺直观?
但有些朋友可能会用到 margin (mag, phase, w) 这种形式,这时候 mag 是幅值,phase 是相位,w 是频率。这种用法就得注意了,幅值得用线性单位,可别写成分贝了,不然算出来的结果肯定不对。小编之前就见过有人在这栽跟头,折腾了半天都没找到问题在哪,后来才发现是单位搞错了,你说亏不亏。
那参数的顺序能换吗?肯定不能啊,必须是幅值、相位、频率这个顺序,少一个或者换个位置,函数都不认,直接就给你报错,这点可得记牢了。
三、实例演示:手把手教你用 margin 函数
光说参数可能有点抽象,咱来个实例操作,看完你就明白咋回事了。
假设咱有个传递函数 G (s) = 1/(s² + 2s + 3),想看看它的稳定裕度。首先在 MATLAB 里输入 sys = tf (1, [1 2 3]),然后敲 margin (sys),这时候屏幕上就会弹出波特图,图上会标出增益裕度(GM)、相位裕度(PM),还有对应的频率。
要是增益裕度是正的,相位裕度也在 30 到 60 度之间,那说明这个系统稳定性还不错。要是增益裕度是负的,那可得小心了,系统可能不稳定,得赶紧调参数。
再试试稍微复杂点的,比如两个系统串联,G1 = tf (1, [1 1]),G2 = tf (1, [1 2]),sys = series (G1, G2),然后用 margin (sys) 分析。你看,这样不管多复杂的系统,用 margin 函数都能轻松搞定,是不是很方便?
四、使用 margin 函数容易踩的坑,避开就能少走弯路
虽说 margin 函数不难用,但有些坑还是得提前知道,不然很容易出错。
第一个坑就是单位问题,前面也提到了,用 margin (mag, phase, w) 的时候,幅值一定要用线性单位,要是习惯性地用了分贝,结果肯定不对。咱可以先用 db2mag 函数把分贝转换成线性单位,这样就保险多了。
第二个坑是频率范围设置不合理。有时候默认的频率范围可能没包含穿越频率,画出的波特图就看不出来增益裕度和相位裕度,这时候可以自己设置频率范围,比如 w = logspace (-1, 2, 1000),然后用 margin (mag, phase, w),这样结果就准确多了。
还有一个坑,就是系统模型建错了。要是传递函数的分子分母写反了,或者系数输错了,那 margin 函数算出来的结果肯定也是错的。所以用之前,一定得仔细检查系统模型对不对,别辛辛苦苦算半天,最后发现是模型建错了,多冤枉。
五、小编的一点小建议
用 margin 函数这么久,小编觉得啊,这函数是真的好用,但也别啥都依赖它。算出来的稳定裕度只是个参考,实际系统还得结合仿真和实验来验证。
另外,多动手试试不同的系统模型,熟悉熟悉 margin 函数在各种情况下的输出,用得多了自然就熟练了。刚开始用的时候别怕出错,出错了就看看报错信息,慢慢琢磨,很快就能掌握。
希望这篇文章能帮到正在学 MATLAB 的朋友们,祝大家用 margin 函数的时候都顺顺利利,少踩坑,多出成果。