【问题标题】:how to calculate gain of a controller for desired bandwidth?如何计算所需带宽的控制器增益?
【发布时间】:2016-03-04 10:10:47
【问题描述】:

我一直在为运动系统设计控制器。控制器包含串联的增益、比例积分器 (PI) 和前置滤波器。我已经手动调整了控制器的增益以获得所需的带宽(交叉频率)。导联和 PI 的频率基于经验法则(对于导联,分子中的带宽/3,分母中的带宽 *3 和积分器的带宽/5)。 如何仅通过提及所需的带宽来决定控制器的增益以自动获得。有什么经验法则可以遵循吗?它如何随采样频率变化?

【问题讨论】:

    标签: frequency phase control-theory transfer-function magnitude


    【解决方案1】:

    PID 控制器设计是一个固有的困难问题。除非您的系统由于简单性而允许您导出某些表达式,否则您无法通过简单的事情来做到这一点。

    一种方法是求助于非凸非平滑优化算法,例如 Matlab 自己的 systune 或 HIFOO 或其他一些解决“a”解决方案但不是“the”解决方案的工具。

    文档中有环路整形和带宽限制的示例。

    【讨论】:

      【解决方案2】:

      好吧,您可以简单地将您的经验法则用于 I 操作和前导过滤器。然后您只需检查开环的波特图。在您想要带宽的频率处检查系统的幅度。然后,您可以简单地计算需要应用多少增益才能将该点向上移动到 0 dB(带宽)。

      此外,经验法则假定采样频率足够高。但是,一般来说,如果采样频率变低,您的增益也会变低,但是 I 作用和前置滤波器的频率也会发生变化。

      -编辑-

      我为你做了一个小脚本。脚本是自我解释的。

      同样的方法可以应用于离散域。此外,我不会在离散域中设计控制器,而是在连续时域中设计控制器。接下来,我将使用离散化方法将控制器从连续时间转换为离散时间,例如Bilinear transformhttp://nl.mathworks.com/help/control/ref/c2d.html 提供了如何在 Matlab 中执行此操作的信息。

      另外,我想向你推荐这个工具,http://cstwiki.wtb.tue.nl/index.php?title=Home_of_ShapeIt

      clear all;
      close all;
      clc;
      
      %% Initialize parameters
      s = tf('s');
      
      % Mass of plant
      m = 10;
      
      % Desired bandwidth
      BW = 10;
      
      %% Define plant
      P = 1/(m*s^2);
      
      %% Define filters
      % Lead lag filter
      f1 = (1/(2*pi*BW/3)*s + 1)/(1/(2*pi*BW*3)*s + 1);
      
      % Integrator
      f2 = (s + 2*pi*BW/5)/s;
      
      % define Controller
      C = f1*f2;
      
      %% Determine gain
      % Open loop
      OL = C*P;
      
      % Evaluate at bandwidth and get magnitude
      mag = abs(evalfr(OL,2*pi*BW));
      
      % Desired gain is 1/mag
      C = 1/mag*C;
      
      % Recalculate open loop
      OL = C*P;
      
      % Evaluate at bandwidth, magnitude should be 1
      sprintf('Magnitude at bandwidth: %f\n',abs(evalfr(OL,2*pi*BW)));
      
      %% Compute other stuff
      % Sensnitivity
      SS = 1/(1 + OL);
      
      % Closed loop, complementary sensitivity
      CL = OL*SS;
      
      % Process sensitivity
      PS = P*SS;
      
      % Controller sensitivity
      CS = C*SS;
      
      %% Create some plots
      % Open loop
      figure(1);
      bode(OL);
      title('Open loop');
      
      % Nyquist
      figure(2);
      nyquist(OL);
      
      % Other sensitivities
      figure(3);
      subplot(2,2,1);
      bodemag(CL);
      title('Closed loop');
      subplot(2,2,2);
      bodemag(SS);
      title('Sensitivity');
      subplot(2,2,3);
      bodemag(PS);
      title('Process sensitivity');
      subplot(2,2,4);
      bodemag(CS);
      title('Controller sensitivity');
      
      % Step
      figure(4);
      step(CL);
      title('Step response');
      

      【讨论】:

      • 我正在尝试计算具有上述相同控制器的离散系统的增益。我没有找到足够的材料来进行分析计算。您能否就此提供一些见解?在 s 域的情况下,我可以通过将 s 替换为 jw 来找到增益。我需要帮助来找到离散函数(z 域)的增益。我尝试用 exp(jw) 代替 z ,但它没有给出预期的结果。任何帮助将不胜感激..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      相关资源
      最近更新 更多