Main Content

カスケード PI コントローラーを使用した BLDC モーターの速度制御

この例では、Simulink で既存のプラントの PID コントローラーを調整する方法の 1 つについて説明します。ここでは Closed-Loop PID Autotuner ブロックを使用してカスケード構成で 2 つの PI コントローラーを調整します。Autotuner ブロックは、プラントに摂動を与え、目的の帯域幅付近で推定されたプラントの周波数応答に基づく PID 調整を実行します。Open-Loop PID Autotuner ブロックとは対照的に、ここではフィードバック ループが閉じたままとなり、自動調整プロセス中に初期のコントローラー ゲインは変化しません。

BLDC モーター モデル

この例のモデルは、降圧コンバーターをもつ三相 BLDC モーターと、三相インバーター電力リンクを使用します。降圧コンバーターは MOSFET でモデル化され、インバーターは、デバイスのオン抵抗と特性が正しく表現されるよう、理想的なスイッチではなく IGBT でモデル化されます。半導体ゲート トリガーを変更して DC-DC コンバーター リンクとインバーターの両方の電圧を制御することができ、これによりモーターの速度が制御されます。

mdl = 'scdbldcspeedcontrol';
open_system(mdl)

モーター モデル パラメーターは次のようになります。

p    = 4;        % Number of pole pairs
Rs   = 0.1;      % Stator resistance per phase           [Ohm]
Ls   = 1e-4;     % Stator self-inductance per phase, Ls  [H]
Ms   = 1e-5;     % Stator mutual inductance, Ms          [H]
psim = 0.0175;   % Maximum permanent magnet flux linkage [Wb]
Jm   = 0.0005;   % Rotor inertia                         [Kg*m^2]
Ts  = 5e-6;      % Fundamental sample time               [s]
Tsc = 1e-4;      % Sample time for inner control loop    [s]
Vdc = 48;        % Maximum DC link voltage               [V]

モデルは内側の DC リンク電圧ループと外側のモーター速度ループの 2 つのカスケード PI コントローラーを使用して、安定した閉ループ動作をするよう事前設定されます。

Kpw = 0.1;    % Proportional gain for speed controller
Kiw = 15;     % Integrator gain for speed controller
Kpv = 0.1;    % Proportional gain for voltage controller
Kiv = 0.5;    % Integrator gain for voltage controller

追従性能をテストするための信号は、0 ~ 500 RPM、500 ~ 2000 RPM、および 2000 ~ 3000 RPM の一連の速度ランプです。モデルを初期のコントローラー ゲインでシミュレートすると、追従応答が遅く、コントローラーの再キャリブレーションが必要であることを示しています。

open_system([mdl '/Visualization/RPM (Outer)'])
sim(mdl)

Open-Loop PID Autotuner ブロックの構成

この例では、Closed-Loop PID Autotuner ブロックを使用してコントローラーの性能を改善します。これらのブロックは、実験中にループを閉じてプラントの周波数応答を推定してから、コントローラー ゲインを調整します。Control サブシステムを調べ、Autotuning Speed サブシステムと Autotuning Voltage サブシステムの Closed-Loop PID Autotuner ブロックを確認します。

open_system([mdl '/Control'])

一般的なカスケード式ループ調整の方法に従い、まず、外側の速度ループを開いた状態で内側の電圧ループを調整します。その後、内側の電圧ループを閉じた状態で外側の速度ループを調整します。

PID コントローラーの調整要件を指定するには、各 PID 自動調整器ブロックの [調整] タブのパラメーターを使用します。この例のコントローラーは並列、離散時間の PI コントローラーです。コントローラーのサンプル時間は 100 マイクロ秒です。

どちらのコントローラーも [ターゲットの位相余裕] は 60 度で、性能とロバスト性の良好なバランスを提供します。

外側のループのコントローラーには、[ターゲットの帯域幅] に 100 ラジアン/秒を選択します。内側のループのコントローラーには、推定されたターゲットの帯域幅 400 ラジアン/秒を選択します。これらの値によって、内側のループのコントローラーが、必ず外側のループのコントローラーよりも高速な応答をもつようになります。

Closed-Loop PID Autotuner ブロックは、閉ループ実験を実行してプラントの周波数応答を取得します。この実験のパラメーターをブロック パラメーターの [実験] タブで指定します。ここで [プラントの符号][正] であり、定格操作点でのプラント入力における正の変化によって、プラントが新しい定常状態に達したときにプラント出力に正の変化が生じます。この例のようにプラントが安定の場合、プラントの符号はその DC ゲインの符号に等しくなります。

自動調整プロセス中に挿入される正弦波の振幅には 1 を使用して、プラントの飽和制限内にありながら、プラントが確実に正しく励起されるようにします。選択した振幅が小さすぎると、自動調整ブロックで応答信号をパワー エレクトロニクス回路にあるリップルから区別するのが難しくなります。

内側のループの PI コントローラーを調整

カスケード コントローラーの調整では、内側の電圧ループを最初に調整してから外側の速度ループを調整するようにモデルを設定します。

内側のループのコントローラーに調整プロセスを有効にするには、Autotuning Voltage サブシステムで、Tune Inner Voltage Loop の Constant ブロック値を 1 に設定します。この値を設定することで、外側のループが開き、内側のループが代わりに定数の定格基準電圧 12.5 を使用するように設定されます。

set_param([mdl '/Control/Tune Inner Voltage Loop'],'Value','1')

また、外側のループの調整を無効にするために、Tune Outer Speed Loop の Constant ブロック値を 0 に設定します。

set_param([mdl '/Control/Tune Outer Speed Loop'],'Value','0')

この設定は、1 ~ 1.8 秒のシミュレーション時間で閉ループ調整実験を実行するように設定されている Closed-Loop PID Autotuner ブロックを有効にします。プラントは最初の 1 秒を使用して定常状態の操作条件に達します。閉ループ実験の持続時間として適切な推定は $200/{b_t}$ です。ここで、${b_t}$ はターゲットの帯域幅です。Closed Loop PID Autotuner ブロックの % conv 出力を使用して実験の進捗状況を監視し、% conv 信号が 100% の近くで安定したときに終了できます。

シミュレーションを実行します。実験が完了すると、Closed-Loop PID Autotuner ブロックは内側の電圧ループの調整された PID コントローラー ゲインを返します。モデルはこれらを配列 VoltageLoopGains として MATLAB ワークスペースに送信します。

close_system([mdl '/Visualization/RPM (Outer)'])
open_system([mdl '/Visualization/VDC (Inner)'])
sim(mdl)

内側のループの PI コントローラーを新しいゲインで更新します。

Kpv = VoltageLoopGains(1);
Kiv = VoltageLoopGains(2);

外側のループの PI コントローラーの調整

次に、外側の速度ループを調整します。Autotuning Voltage サブシステムで、Tune Inner Voltage Loop の Constant ブロック値を 0 に変更します。これで内側の電圧ループの調整が無効になります。内側のループのコントローラーは、新しく調整されたゲイン Kpv および Kiv を使用します。

set_param([mdl '/Control/Tune Inner Voltage Loop'],'Value','0')

同様に、Autotuning Speed サブシステムで、Tune Outer Speed Loop の Constant ブロック値を 1 に変更します。これで外側の速度ループの調整が有効になります。このループでは、閉ループの自動調整期間 0.9 秒を使用し、1 秒から開始します。調整の定格速度は 2000 RPM です。

set_param([mdl '/Control/Tune Outer Speed Loop'],'Value','1')

シミュレーションを再び実行します。実験が完了すると、Closed-Loop PID Autotuner ブロックが外側の速度ループの調整された PID コントローラー ゲインを返します。モデルはこれらを配列 SpeedLoopGains として MATLAB ワークスペースに送信します。

close_system([mdl '/Visualization/VDC (Inner)'])
open_system([mdl '/Visualization/RPM (Outer)'])
sim(mdl)

外側のループの PI コントローラーを新しいゲインで更新します。

Kpw = SpeedLoopGains(1);
Kiw = SpeedLoopGains(2);

自動調整後の追従性能の改善

調整されたコントローラー性能を確認するには、両方のループの調整を無効にします。

set_param([mdl '/Control/Tune Inner Voltage Loop'],'Value','0')
set_param([mdl '/Control/Tune Outer Speed Loop'],'Value','0')

調整されたゲインにより、テスト ランプ信号の追従が改善されます。

sim(mdl)

参考

関連するトピック