ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

リニア電動アクチュエータ

この例では、slTunersystune を使用して、飽和制限によりリニア電動アクチュエータの電流ループと速度ループを調整します。

リニア電動アクチュエータ

リニア電動アクチュエータの Simulink モデルを開きます。

open_system('rct_linact')

電動コンポーネントと機械コンポーネントは Simscape Electronics および Simscape Multibody を使用してモデル化されています。制御システムは、DC モーターの駆動電流と角速度を制御する 2 つのカスケード フィードバック ループで構成されています。

図 1: 電流コントローラーと速度コントローラー。

内側のループ (電流) コントローラーは比例ゲインですが、外側のループ (速度) コントローラーには比例および積分動作があることに注意してください。両方のコントローラーの出力は +/- 5 に制限されます。

設計仕様

オーバーシュートを最小限に抑えた状態で、2000 rpm 速度要求に約 0.1 秒で応じるためには、比例ゲインおよび積分ゲインを調整する必要があります。モデルの初期ゲイン設定は P=50 および PI(s)=0.2+0.1/s で、対応する応答は図 2 に示されています。この応答は非常に低速で、負荷外乱に対して影響を受けすぎています。

図 2: 調整されていない応答。

制御システムの調整

systune を使用して両方のフィードバック ループを一緒に調整できます。設計を準備するには、調整ブロックのリストを使用して slTuner インターフェイスのインスタンスを作成します。すべてのブロックと信号はモデル内のそれらの名前で指定されます。モデルは t=0.5 で線形化され、t=0 での一部の導関数の不連続性を回避します。

TunedBlocks = {'Current PID','Speed PID'};
tLinearize = 0.5;  % linearize at t=0.5

% Create tuning interface
ST0 = slTuner('rct_linact',TunedBlocks,tLinearize);

データ構造体 ST0 には、制御システムとその調整可能な要素の説明が含まれます。次に、DC モーターが 0.1 秒で 2000 rpm の速度要求に従うことを指定します。

TR = TuningGoal.Tracking('Speed Demand (rpm)','rpm',0.1);

これで、looptune で比例ゲインおよび積分ゲインを調整できます。

ST1 = systune(ST0,TR);
Final: Soft = 1.12, Hard = -Inf, Iterations = 34

これにより、調整ゲイン値を含む更新された説明 ST1 が返されます。この設計を検証するには、次のように速度要求から速度への閉ループ応答をプロットします。

T1 = getIOTransfer(ST1,'Speed Demand (rpm)',{'rpm','i'});
figure
step(T1)

応答は線形領域で良好に見えるため、調整されたゲイン値を Simulink にプッシュし、非線形モデルで設計をさらに検証します。

writeBlockValue(ST1)

非線形シミュレーションの結果が図 3 に表示されています。非線形の動作は線形近似よりも大幅に悪くなり、誤差は内側のループの飽和までたどることができます (図 4 を参照)。

図 3: 調整コントローラーの非線形シミュレーション。

図 4: 電流コントローラーの出力 (+/- 5 に制限される)。

飽和の回避

ここまでは、外側 (速度) ループの目的の応答時間のみを指定しました。これにより、systune では内側のループと外側のループ間の制御操作を自由に割り当てることができます。内側のループの飽和は、比例ゲインが高すぎることおよび再分配が必要であることを示します。可能な修復方法の 1 つは、スピード コマンドから P コントローラーおよび PI コントローラーの出力へのゲインを明示的に制限することです。速度指令が 2000 rpm で飽和制限が +/- 5 の場合、平均のゲインは 5/2000 = 0.0025 を超えません。標準的にするには、速度指令からコントローラー出力へのゲインを 0.001 より小さい値で維持します。これを行うには、2 つのゲイン要件を追加し、3 つのすべての要件に対応するようコントローラーのゲインを再調整します。

% Mark the control signals as points of interest so that they can be
% referenced in the gain requirements
addPoint(ST0,{'Current PID','Speed PID'})

% Limit gain from speed demand to control signals to avoid saturation
MG1 = TuningGoal.Gain('Speed Demand (rpm)','Speed PID',0.001);
MG2 = TuningGoal.Gain('Speed Demand (rpm)','Current PID',0.001);

% Retune with these additional requirements
ST2 = systune(ST0,[TR,MG1,MG2]);
Final: Soft = 1.39, Hard = -Inf, Iterations = 45

最終的なゲイン 1.39 は、要件がほぼ満たされているが完全には満たされていないことを示します (すべての要件は、最終的なゲインが 1 未満の場合に満たされます)。viewSpec を使用して、各要件に対して調整コントローラーがどのようになるか検証します。

figure('Position',[100,100,560,550])
viewSpec([TR,MG1,MG2],ST2)

次に、線形領域で 2 つの設計を比較します。

T2 = getIOTransfer(ST2,'Speed Demand (rpm)',{'rpm','i'});
figure
step(T1,'b',T2,'g--')
legend('Initial tuning','Tuning with Gain Constraints')

2 番目の設計はアグレッシブさが低くなりますが、応答時間の要件は満たしています。最後に、新規の調整ゲイン値を Simulink モデルにプッシュし、2000 rpm の速度要求と 500 N の負荷外乱への応答をシミュレートします。シミュレーション結果を図 5 に示し、電流コントローラーの出力を図 6 に示します。

writeBlockValue(ST2)

図 5: ゲイン制約による調整の非線形応答。

図 6: 電流コントローラーの出力。

非線形応答は満たされて、電流ループは飽和しなくなります。追加のゲイン制約によって systune は内側のループと外側のループ間で制御操作を再分散し、飽和を回避します。