暇人の技術備忘録

ハサミの技術備忘録

趣味でやっている電子工作の備忘録です。

【DCモータの角度制御】第2回:MATLABを用いた制御系のシミュレーション

f:id:sbasami:20200604203354p:plain

はじめに

第1回ではDCモータのシステム同定を行いモデルを作成しました。

sbasami-tech.hatenablog.com

また、第1回の補足としてシステム同定におけるエンコーダ分解能の影響についても検証しました。

sbasami-tech.hatenablog.com

第2回ではモデルに基づいて角度制御を行うためののシミュレーションを行いたいと思います。今回の角度制御では「I-PD制御」と「アンチワインドアップ制御」の2つの制御を使用してみたいと思います。

I-PD制御

PID制御などにおいて目標値をステップ上に変化させると微分項と比例項(特に影響が大きいのは微分項)によって操作量が急激に変化する「キック」という現象が起こります。キックの対策として目標値応答に対して比例項と微分項の影響を取り除いたものがI-PD制御になります。図1にI-PD制御のブロック図を示します。

f:id:sbasami:20191110132125j:plain
図1.I-PD制御のブロック線図

I-PD制御はPID制御と比較してオーバーシュートはほとんどなくなりますが、応答速度が遅くなるという特徴があります。なお、外乱抑制に関してはPID制御と同等の性能を持っています。

アンチワインドアップ制御

PID制御のように制御器が積分項を含む場合、入力飽和がない時に良好に制御できても入力飽和があると大きなオーバーシュートを生じてしまうことがあり、この現象をワインドアップといいます。この現象を避けるための制御をアンチワインドアップ制御といい、実装方法としては主に以下の2つがあります。

  1. 飽和中に積分器を停止する。
  2. 自動整合制御を使用する。

今回のシミュレーションでは比較的実装が簡単な飽和中に積分器を停止する方法を使用したいと思います。アンチワインドアップ制御の詳しい解説や効果については以下のサイトに詳しく書かれていますのでそちらを参照してください。

hamachannel.hatenablog.com

MATLABによるシミュレーション

それでは実際にシミュレーションをしていきたいと思います。シミュレーションで使用するDCモータのモデルを図2に示します。Vaは電圧、Ωrは角速度です。なおこれは第1回ではなく第1回+αの方で求めたモデルになります。このモデルが一番適合率が高かったのでこれを使います。

f:id:sbasami:20191104202410j:plain
図2.システム同定で得られたDCモータのモデル

第1回や第1回+αのシステム同定で求めたモデルは出力を角速度[rad/s]としたモデルでした。今回は角度制御のシミュレーションを行いたいので、積分器を追加して出力を角度[rad]とした図3のモデルを使用します。

f:id:sbasami:20191104202421j:plain
図3.出力を角度に変換したDCモータのモデル

使用プログラム

シミュレーションに使用したMATLABコードを下記に示します。

MATLABでDCモータのIPD制御シミュレーションを行うプログラム

PID調整器の使い方

ここで問題なのは制御ゲインの決め方です。シミュレーション上で試行錯誤するのもありだとは思いますが、何かしら指標になるものは欲しいです。実はMATLABには「PID調整器」というものがあるのでそれを使ってゲインを決めてみましょう。

まず、上記のコードを実行します。ゲインを全て0にしているので目標値には追従しないと思います。
f:id:sbasami:20191104212008j:plain

実行すると右側のワークスペースに生成された変数が表示されます。
f:id:sbasami:20191104212029j:plain

この状態で上側のタブにある「アプリ」をクリックし、アプリの中の「PID調整器」をクリック。
f:id:sbasami:20191104212045j:plain

以下のような画面が出て来ますので左上の「Plant」をクリック。
f:id:sbasami:20191104212058j:plain

出てきたタブの「インポート」をクリック。
f:id:sbasami:20191104212139j:plain

ワークスペースにあるどの変数をインポートするか聞かれるので「Gz」を選択して「インポート」をクリック。今回「Gz」にはシミュレーション周期で離散化した状態空間モデルが入ってます。
f:id:sbasami:20191104212212j:plain

インポートが終了すると以下の画面になります。デフォルトでは勝手にP制御の調整をしてくれます。ただ、今回はI-PD制御のゲインが知りたいので左上の「タイプ」の横にある「P」をクリック。
f:id:sbasami:20191104212235j:plain

色々なタイプのPIDが出て来ますのでその中から「I-PD」を選択。
f:id:sbasami:20191104212252j:plain

そうすると以下の画像のようにI-PDのゲイン調整を勝手にしてくれます。ゲインは右下に表記されています。上にある「応答時間」と「過渡動作」のバーを弄ると応答性が変わるので試してみてください。
f:id:sbasami:20191104212310j:plain

それではPID調整器で調整されたゲインを用いてシミュレーションをしてみましょう。デフォルトで出力されたゲインは以下のようになりました。

  • Kp:2.234
  • Ki:7.946
  • Kd:0.07392

このゲインを用いてシミュレーションを実行した結果を図5に示します。概ね調整器と同じような軌道だと思われます。

f:id:sbasami:20191104213710j:plain
図5.シミュレーション結果

後は求める応答性が実現できるまで調整器で調整するか、試行錯誤で頑張ります。

おわりに

今回はI-PD制御とアンチワインドアップ制御についての簡単な紹介とMATLABでのシミュレーションについて説明しました。次回は、シミュレーションで求めたゲインを実機に実装し、シミュレーションと実機の応答を比較してみます。

やりました↓↓↓

sbasami-tech.hatenablog.com