電力段の電圧のデジタル制御
この例では、サンプリング周波数に近い帯域幅で高性能デジタル コントローラーを調整する方法を説明します。
電力段の電圧制御
Simulink® を使用して、電子デバイスの電力段の電圧コントローラーをモデル化します。
open_system('rct_powerstage')
電力段の増幅器は、次の周波数応答で 2 次線形システムとしてモデル化されます。
bode(psmodel) grid
コントローラーは、設定点 Vcmd
を追従し、負荷電流 iLoad
の変動の影響を受けないように、デバイスに送られる電圧 Vchip
を制御しなければなりません。制御構造は、フィードバック補償器と外乱フィードフォワード補償器で構成されています。増幅器にかかる電圧 Vin
は、 に制限されます。コントローラーのサンプリング レートは 10 MHz (サンプル時間 Tm
は 1e-7 秒) です。
性能要件
この適用例は、コントローラー帯域幅がナイキスト周波数 pi/Tm
= 31.4 MHz に近づかなければならないため難しい作業です。連続時間コントローラーを離散化するときのエイリアシングの問題を回避するためには、コントローラーを離散時間で直接調整することをお勧めします。
電力段は、(周波数全体での) ピーク偏差を 50% としておよそ 5 つのサンプリング周期における設定点での目標電圧 Vcmd
の変化に応答しなければなりません。この目的を達成するために、追従要件を使用します。
Req1 = TuningGoal.Tracking('Vcmd','Vchip',5*Tm,0,1.5); Req1.Name = 'Setpoint change'; viewGoal(Req1)
電力段は、負荷外乱 iLoad
もすばやく抑制しなければなりません。この要件は iLoad
から Vchip
へのゲインで表します。適切な外乱の抑制にするためには、このゲインを低周波数で低くしなければなりません。
s = tf('s'); nf = pi/Tm; % Nyquist frequency Req2 = TuningGoal.Gain('iLoad','Vchip',1.5e-3 * s/nf); Req2.Focus = [nf/1e4, nf]; Req2.Name = 'Load disturbance';
高性能要求により、制御操作と飽和が高くなる可能性があります。Simulink モデルで指定されたランプ プロファイル vcmd
(約 250 のサンプリング周期で 0 から 1) では、飽和制約 に達しないようにします。レート制限フィルターを使用してランプ コマンドをモデル化し、レート制限入力から へのゲインが 未満になることを要求します。
RateLimiter = 1/(250*Tm*s); % models ramp command in Simulink % |RateLimiter * (Vcmd->Vin)| < Vmax Req3 = TuningGoal.Gain('Vcmd','Vin',Vmax/RateLimiter); Req3.Focus = [nf/1000, nf]; Req3.Name = 'Saturation';
適切なロバスト性を確保するには、プラント入力に少なくとも 7 dB のゲイン余裕と 45 度の位相余裕が必要です。
Req4 = TuningGoal.Margins('Vin',7,45); Req4.Name = 'Margins';
最後に、フィードバック補償器は、プラントの共振をノッチ アウトして無効化する傾向があります。共振周波数が正確に把握されていないまたは変化の影響を受けない場合、このようなプラント反転によって不十分な結果になることがあります。これを避けるために、プラントの共振モードのアクティブな減衰に 0.5 の最小閉ループ減衰を加えます。
Req5 = TuningGoal.Poles(0,0.5,3*nf);
Req5.Name = 'Damping';
調整
次に、systune
を使用して、上で定義された要件に従ってコントローラー パラメーターを調整します。最初に、slTuner
インターフェイスを使用して Simulink モデルを調整用に構成します。特に、2 つの調整可能なブロックがあることと、モデルをサンプル時間 Tm
で線形化して調整しなければならないことを指定します。
TunedBlocks = {'compensator','FIR'}; ST0 = slTuner('rct_powerstage',TunedBlocks); ST0.Ts = Tm; % Register points of interest for open- and closed-loop analysis addPoint(ST0,{'Vcmd','iLoad','Vchip','Vin'});
FIR フィルターをフィードフォワード補償器として使用します。これを行うには、1 次 FIR フィルターのパラメーター化を作成し、それを Simulink の "Feedforward FIR" ブロックに割り当てます。
FIR = tunableTF('FIR',1,1,Tm); % Fix denominator to z^n FIR.Denominator.Value = [1 0]; FIR.Denominator.Free = false; setBlockParam(ST0,'FIR',FIR);
slTuner
では、フィードバック補償器が 3 次状態空間モデル (Simulink ブロックで指定された次数) として自動的にパラメーター化されます。次に、systune
でフィードフォワード補償器とフィードバック補償器を調整します。減衰要件と余裕要件を厳密な制約として扱い、可能な限り残りの要件を満たすように試みます。
rng(0)
topt = systuneOptions('RandomStart',6);
ST = systune(ST0,[Req1 Req2 Req3],[Req4 Req5],topt);
Final: Soft = 1.28, Hard = 0.99973, Iterations = 360 Final: Soft = 1.28, Hard = 0.96667, Iterations = 469 Final: Soft = 1.29, Hard = 0.85363, Iterations = 293 Final: Soft = 1.28, Hard = 0.9954, Iterations = 473 Final: Soft = 1.29, Hard = 0.99829, Iterations = 465 Final: Soft = 1.29, Hard = 0.99631, Iterations = 422 Final: Soft = 1.31, Hard = 0.85685, Iterations = 346
最適な設計は、厳密な制約を満たし (1 未満の Hard
)、その他の制約をほぼ満たします (1 に近い Soft
)。これは、各要件の調整後の応答をプロットしてグラフで確認します。
figure('Position',[10,10,1071,714])
viewGoal([Req1 Req2 Req3 Req4 Req5],ST)
検証
最初に、slTuner
インターフェイスを使用して線形領域で設計を検証します。ステップ コマンド Vcmd
とステップ外乱 iLoad
に対する閉ループ応答をプロットします。
figure('Position',[100,100,560,500]) subplot(2,1,1) step(getIOTransfer(ST,'Vcmd','Vchip'),20*Tm) title('Response to step command in voltage') subplot(2,1,2) step(getIOTransfer(ST,'iLoad','Vchip'),20*Tm) title('Rejection of step disturbance in load current')
getLoopTransfer
を使用して、プラント入力における開ループ応答を計算し、プラントとフィードバック補償器の応答を重ね合わせます。
clf L = getLoopTransfer(ST,'Vin',-1); C = getBlockValue(ST,'compensator'); bodeplot(L,psmodel(2),C(2),{1e-3/Tm pi/Tm}) grid legend('Open-loop response','Plant','Compensator')
ans = Legend (Open-loop response, Plant, Compensator) with properties: String: {'Open-loop response' 'Plant' 'Compensator'} Location: 'northeast' Orientation: 'vertical' FontSize: 8.5500 Position: [0.6292 0.8384 0.3483 0.1161] Units: 'normalized' Use GET to show all properties
コントローラーは目的の帯域幅を実現し、応答は十分に迅速化されます。調整後のパラメーター値を Simulink モデルに適用し、調整後の応答のシミュレーションを実行します。
writeBlockValue(ST)
非線形シミュレーションからの結果は次のように表示されます。制御信号 Vin
は、シミュレーションの設定点の追従部分で 飽和境界内にほぼ留まっています。
図 1: ランプ コマンドとステップ負荷外乱への応答
図 2: 設定点の追従フェーズにおける入力電圧 Vin
の大きさ
参考
systune (slTuner)
(Simulink Control Design) | slTuner
(Simulink Control Design) | TuningGoal.Tracking
| TuningGoal.Gain
| TuningGoal.Margins