Main Content

Simulink ブロックのカスタム線形化の指定

この例では、Simulink® ブロックまたはサブシステムの線形化を指定する方法を示します。

Simulink Control Design™ の線形化では、正確な線形化法を使用して Simulink モデルの線形近似を求めます。この線形化は、特定の操作点周りの小さい領域で有効です。この方法は、ほとんどの Simulink モデルに効果的です。ただし、場合によっては、正確な線形化法を変更して、不連続性の影響を考慮したり、導関数や遅延動作のダイナミクスを近似したりする必要があります。Saturation ブロックや Dead Zone ブロックなど、多くの組み込み Simulink ブロックでは、[線形化時にゲインとして扱う] パラメーターを指定してこの動作を制御できます。線形化できないブロックまたはサブシステムの場合は、線形化の指定が必要になることがあります。この例では、サブシステムにカスタム線形化を指定して、PWM 信号の線形化を近似します。

PWM 生成サブシステムを使用したモデルの線形化

scdpwm モデルには、PWM 信号をモデル化してからプラント モデルに入る Voltage to PWM サブシステムがあります。

mdl = 'scdpwm';
open_system(mdl)

標準的なコンフィギュレーションを使用して、このモデルを線形化すると、結果の線形モデルのゲインはゼロになります。

io = getlinio(mdl);
sys = linearize(mdl,io)
sys =
 
  D = 
                Step
   Plant Model     0
 
Static gain.

Voltage to PWM/Compare To Zero ブロックにより、この線形化はゼロになります。

pwmblk = 'scdpwm/Voltage to PWM';
open_system(pwmblk)

ブロックは純粋な不連続非線形性を表すため、線形化はゼロです。

u = [-1:0.1:0,0:0.1:1];
y = [zeros(11,1);ones(11,1)];
plot(u,y)
xlabel('Block Input - u')
ylabel('Block Output - y')
ylim([-0.1 1.1])

PWM サブシステムのカスタム線形化の指定

Simulink Control Design ソフトウェアを使用すると、Simulink モデルのブロックの線形化を制御できます。ブロックの線形化を指定するには、以下を使用します。

  • 行列

  • 伝達関数や状態空間モデルなどの線形時不変モデル

  • 不確かさをもつパラメーターまたは状態空間モデル (Robust Control Toolbox™ ソフトウェアが必要)

この例では、PWM サブシステムにむだ時間が含まれています。

$$PWM(s) = e^{-sT_s}$$

このむだ時間は、100 Hz の PWM 信号のデューティ比周波数に対応します。Voltage to PWM サブシステムに遅延を指定するには、まずブロックを選択します。次に、[アプリ] タブで [線形化マネージャー] をクリックします。

[線形化] タブで、[ブロックの線形化の指定] をクリックします。次に、[ブロックの線形化の指定] ダイアログ ボックスで次の手順を実行します。

  1. [次のいずれかを使用してブロックの線形化を指定] パラメーターを選択します。

  2. ドロップダウン ボックスで [MATLAB Expression] を選択します。

  3. ss(1,'OutputDelay',1/100) を使用して線形化を指定します。

次のコードは、[ブロックの線形化の指定] ダイアログ ボックスで遅延を入力するのと同じです。

set_param(pwmblk,'SCDEnableBlockLinearizationSpecification','on');
rep = struct('Specification','ss(1,''OutputDelay'',1/100)',...
             'Type','Expression',...
             'ParameterNames','',...
             'ParameterValues','');
set_param(pwmblk,'SCDBlockLinearizationSpecification',rep);

システムの連続時間線形モデルを作成します。

opt = linearizeOptions('SampleTime',0);
sys = linearize(mdl,io,opt);

指定したサブシステムの線形化を含む線形化モデルにより、予想どおりの結果が得られます。

sys = zpk(sys)
sys =
 
  From input "Step" to output "Plant Model":
                       1
  exp(-0.01*s) * -------------
                 (s^2 + s + 1)
 
Continuous-time zero/pole/gain model.

線形化とシミュレーションの比較

frest.createStep 入力信号を使用して、モデルの線形化をモデルの推定される周波数応答と比較できます。

Voltage to PWM サブシステムに指定した線形化は線形化にのみ影響し、モデルのシミュレーションには影響しません。そのため、周波数応答を推定する前に線形化の指定を削除する必要はありません。

入力信号を作成し、モデルの周波数応答を推定します。

instep = frest.createStep('Ts',1/10000,'StepTime',1,...
                          'StepSize',1e-1,'FinalTime',15);
[sysf,simoutstep] = frestimate(mdl,io,instep);

線形化モデルを推定モデルのシミュレーション結果と比較します。

frest.simCompare(simoutstep,sys,instep)
legend('Linearization with PWM Subsystem Specification',...
            'Simulated Step Response','Location','East')

線形化は推定システムのダイナミクスを正確に表しています。

カスタム線形化のその他の用途

ブロックの線形化の指定は、線形時不変モデルに限定されません。Robust Control Toolbox™ ソフトウェアがある場合は、モデル内のブロックに対して、不確かさをもつパラメーターと不確かさをもつ状態空間 (USS) モデルを指定できます。したがって、結果の線形化は、不確かさをもつモデルです。この例Linearization of Simulink Models with Uncertainty (Robust Control Toolbox)では、不確かさをもつ線形化の計算方法を示します。

また、連続領域の離散コントローラーと連続プラントのダイナミクスを使用したモデルの解析を実行することもできます。詳細については、計算遅延とサンプリングの効果のモデル化を参照してください。

Simulink モデルを閉じます。

bdclose(mdl)

参考

関連するトピック