昇圧コンバーター モデルの LPV 近似
この例では、昇圧コンバーターの Simscape™ Electrical™ モデルについて、lpvss オブジェクトを使用して線形パラメーター変動 (LPV) 近似を取得する方法を示します。この例では、昇圧コンバーター モデルの LPV 近似 (Simulink Control Design)の例のモデルを使用して、コマンド ラインで LPV 近似を作成します。LPV 近似により、さまざまな操作条件で迅速に平均的動作を解析することができます。
昇圧コンバーター モデル
昇圧コンバーター回路は、電圧源のチョッピングまたはスイッチング制御によって、ある DC 電圧を別の DC 電圧に変換します。特定の負荷電圧の要求は、トランジスタ デューティ比の対応する要件に変換されます。デューティ比の変調は、通常、スイッチング周波数より数桁も低速になります。そのため、比較的小さなリップルで平均電圧になります。

実際には、電源電圧および抵抗負荷の外乱も実際の負荷電圧に影響します。
Simulink® モデルを開きます。
mdl = 'BoostConverterExampleModel';
open_system(mdl)
このモデルの回路の特徴は、高周波数のスイッチングにあります。このモデルは、25 ns のサンプル時間を使用します。モデルで使用される Boost Converter ブロックは、コンバーター ダイナミクスの 2 種類のバージョンを実装するバリアント サブシステムです。このモデルは、単一の入力としてデューティ比を取り、3 つの出力 (インダクタの電流、負荷電流、および負荷電圧) を生成します。
高周波数のスイッチング要素と短いサンプル時間のため、低速でシミュレーションが実行されます。
バッチ平衡化と線形化
さまざまな用途において、特定のデューティ比プロファイルに応答して生成される平均電圧が重要となります。そのような動作は、この回路の基本サンプル時間よりも数桁ほど大きいタイム スケールで研究されています。このような回路の "平均モデル" は、一定期間の電力のダイナミクスの平均に基づく解析的な考慮事項によって導出されます。BoostConverterExampleModel モデルは、最初のバリアントである AVG Voltage Model バリアントのような、回路の平均モデルを実装します。一般的にはこのバリアントは、Low Level Model バリアントより高速に実行されます。
平均モデルは線形システムではありません。これは、デューティ比および負荷変動に対する非線形の依存性を示します。シミュレーションの高速化と電圧の安定したコントローラーの設計を実現するために、さまざまなデューティ比および負荷値でモデルを線形化できます。この例では、スナップショットベースの平衡化と線形化を使用します。スケジューリング パラメーターは、デューティ比 d と抵抗負荷 R です。いくつかのスケジューリング パラメーターの値でモデルを平衡化および線形化します。
デューティ比の変動に 10% ~ 60% の範囲、負荷変動に 4 ~ 15 Ω の範囲を選択します。スケジューリング変数ごとにこれらの範囲内の 5 つの値を選択し、それらの値の取りうるすべての組み合わせのグリッドを作成します。
nD = 5; nR = 5; dspace = linspace(0.1,0.6,nD); % Values of d in 10%-60% range Rspace = linspace(4,15,nR); % Values of Rin 4-15 Ohms range [dgrid,Rgrid] = ndgrid(dspace,Rspace); % All combinations of d and R values
スケジューリング パラメーターのパラメーター構造体配列を作成します。
params(1).Name = 'd'; params(1).Value = dgrid; params(2).Name = 'R'; params(2).Value = Rgrid;
さまざまな条件下でのモデルのシミュレーションにより、モデルの出力は 0.01 秒より前に定常値で安定することがわかります。そのため、スナップショット時間として t = 0.01 s を使用します。関数 findop を使用してスナップショット時間の平衡操作点を計算します。この操作は終了するまでに数分かかります。
op = findop(mdl,0.01,params);
モデルを線形化するには、最初にモデルから線形化の入力ポイントと出力ポイントを取得します。
io = getlinio(mdl);
線形化のオフセットを格納するように線形化オプションを構成します。
opt = linearizeOptions('StoreOffsets', true);配列 op の操作点でモデルを線形化します。
[linsys,~,info] = linearize(mdl,op,io,params,opt);
線形システム配列をプロットします。
bodemag(linsys)
grid on
LPV モデル
ssInterpolant を使用して、線形化されたモデルとオフセットを (,) の操作範囲で内挿する LPV モデルを作成します。
lpvsys = ssInterpolant(linsys,info.Offsets);
LPV シミュレーション
モデルをシミュレートするために、スケジューリングの範囲におおよそ対応するデューティ比の入力プロファイルを使用します。また、抵抗負荷を変動させて、負荷外乱のシミュレーションを実行します。デューティ比のプロファイル din を生成します。
t = linspace(0,.05,1e3)'; din = 0.25*sin(2*pi*t*100)+0.25; din(500:end) = din(500:end)+.1;
抵抗負荷のプロファイル rin を生成します。
rin = linspace(4,12,length(t))'; rin(500:end) = rin(500:end)+3; rin(100:200) = 6.6;
スケジューリング パラメーターのプロファイルをプロットします。
clf yyaxis left plot(t,din) xlabel('Time (s)') ylabel('Duty Cycle') yyaxis right plot(t,rin) ylabel('Resistive Load (Ohm)') title('Scheduling Parameter Profiles for Simulation')

lsim を使用して、このスティミュラスに対する LPV 近似の応答をシミュレートします。
p = [din rin]; % scheduling variables
xinit = info.Offsets(1).x;
y = lsim(lpvsys,din,t,xinit,p);LPV System ブロックを使用して実装された昇圧コンバーターの LPV モデルをシミュレートし、結果をプロットします。
% Offset data for LPV block offsets = getOffsetsForLPV(info); yoff = offsets.y; xoff = offsets.x; uoff = offsets.u; simOut = sim('BoostConverterLPVModel','StopTime','0.05'); lpvBlockSim = simOut.logsout.getElement('ysim'); tsim = lpvBlockSim.Values.Time; ysim = lpvBlockSim.Values.Data(:,:); clf subplot(311) plot(t,y(:,1),tsim,ysim(:,1)) ylabel(lpvsys.OutputName{1}); subplot(312) plot(t,y(:,2),tsim,ysim(:,2)) ylabel(lpvsys.OutputName{2}); subplot(313) plot(t,y(:,3),tsim,ysim(:,3)) ylabel(lpvsys.OutputName{3}); legend('LPV object simulation','LPV system block simulation','location','best')

これらの結果は、LPV System ブロックで得られるシミュレーション結果と一致しています。
LPV モデルの離散化
昇圧コンバーターの等価な離散化 LPV モデルを計算します。離散化により、このモデルの固定ステップ シミュレーションとコード生成が容易になります。結果を連続モデルの結果と比較します。
dlpvsys = c2d(lpvsys,t(2)-t(1),'tustin'); yd = lsim(dlpvsys,din,t,xinit,p); clf subplot(311) plot(t,y(:,1),t,yd(:,1),'--') ylabel(lpvsys.OutputName{1}); subplot(312) plot(t,y(:,2),t,yd(:,2),'--') ylabel(lpvsys.OutputName{2}); subplot(313) plot(t,y(:,3),t,yd(:,3),'--') ylabel(lpvsys.OutputName{3}); legend('Continuous','Discrete','location','best')

モデルを閉じます。
close_system(mdl,0)
参考
ssInterpolant | sample | linearize (Simulink Control Design) | ndgrid