Scilabで学ぶフィードバック制御入門
ようこそ
 はじめに
数学の準備
 高校数学
 複素数
 ラプラス変換
 ラプラス逆変換
Scilab入門
 概要
 四則演算
 配列
 グラフ表示
 プログラム1
 プログラム2
伝達関数
 概要
 poly,syslin,csim
 ステップ応答法
 RLC回路
周波数応答
 ゲイン・位相
 ボード線図
 比例・微分・積分
 1次遅れ,ムダ時間
 パデ近似の導出
 pade関数の作成
制御の安定性
 ブロック線図
 フィードバック
 2次遅れ系
 ステップ応答法
 周波数応答法
ナイキスト線図
 安定性の判別
 判別の仕組み
 安定余裕の評価
 評価の例題
Xcos
 入門
 例・運動方程式
PID制御(Xcos)
 概要
 比例(P)動作
 積分(I)動作
 微分(D)動作
 PID・ボード線図

制御の安定性:ナイキスト線図


フィードバック系の安定性を調べるには特性方程式を解けばいいことが分かりました。
しかし、高次の特性方程式を解くことは、計算労力の点から大変です。

ここでは、図的に判定出来るナイキスト線図の安定判別法を述べます。

ナイキスト線図の描き方

下図のようなフィードバック系のシステムを考えます。


図のようにループをXで切り離し下図のように考えた時の伝達関数を一巡伝達関数といいます。


この一巡伝達関数の系からナイキスト線図を作成します。

今、一巡伝達関数が


で与えられるときのナイキスト線図の描画方法を順に見ていきます。

伝達関数の極座標表現

一巡伝達関数を極座標形式で表すと

となります。
したがって、ゲインと位相は次のとおりです。
ゲイン
位相

これらの式にωが 0〜∞ のまで変化させた時の軌跡をグラフにプロットします。
コンソール画面
-->z=0:0.1:100;                       //←ωの値 0〜100 までを0.1刻み
-->for i=1:length(z) do               //←zの要素数ループ
-->  g=1/sqrt(1-z(i)^2+z(i)^4);       //←極座標の絶対値
-->  if(z(i)==1) then
-->    d=0-%pi/2;                     //←ωが1のとき 位相角=π/2(90°)
-->  elseif(z(i)>1) then
-->    d=0-atan(z(i)/(1-z(i)^2))-%pi; //←ωが1を超えたとき 位相角=0-aectan(ω)-π(180°)
-->  else
-->    d=0-atan(z(i)/(1-z(i)^2));     //←ωが1未満のとき 位相角=0-aectan(ω)
-->  end
-->  x(i)=g*cos(d);                   //←直交座標系のx座標の計算
-->  y(i)=g*sin(d);                   //←直交座標系のy座標の計算
-->end
-->x(i+1)=0;                          //← ω→∞のときは x=0
-->y(i+1)=0;                          //← ω→∞のときは y=0
-->plot(x,y,'o')
-->xgrid()

<実行結果>


各プロット位置を結んだ線をナイキスト線図と言います。

nyquist関数

伝達関数を極座標形式に変換してナイキスト線図を作図しました。
しかしScilabには、nyquist関数が用意されていて、伝達関数から直接ナイキスト線図を描画させることが出来ます。

コンソール画面
-->s=%s;               //←多項式の変数 s を定義
-->G=1/(s^2+s+1);      //←一巡伝達関数を定義
-->sys=syslin('c', G); //←連続時間線形システムへ伝達関数 G を登録
-->nyquist(sys)        //←ナイキスト線図の描画

<実行結果>


ここで表示したナイキスト線図は、ω=0.001〜1000のようです(グラフの数値から判断して)。
これはnyquist関数のデフォルト値かと思われます。
しかし実際のナイキスト線図は、ω= -∞〜+∞ で表示します。
nyquist関数は、ωの初期値と終値をしていできるので、ω=-1000〜1000で描画させます。
コンソール画面
-->s=%s;               //←多項式の変数 s を定義
-->G=1/(s^2+s+1);      //←一巡伝達関数を定義
-->sys=syslin('c', G); //←連続時間線形システムへ伝達関数 G を登録
-->nyquist(sys,-1000,1000)     //←ナイキスト線図の描画 ω=-1000〜1000

<実行結果>


本来の形のナイキスト線図を描画することができました。