モデルベースデザイン
ArduinoとMATLAB/Simulinkを連携させてDCモータを速度制御してみる
元の記事になります。
ArduinoとMATLAB/Simulinkを用いたDCモータのシステム同定
上記事の続きとなります。
実機を使った制御設計において, PIDゲインをいろいろ変化させながら実験を繰り返したり, ジーグラ・ニコルスの限界感度法といった持続振動条件を発見し, ゲイン設計を行うといった手法は, ”動き”を"推定"し"獲得"してゆくことになりますが, 時間がかかってしまうことが多いかと思います。
そのため, 制御プラントの数式モデルを獲得し, それに基づいて設計を行うモデルベース設計が行われることが望ましいと思われます。(システム制御の分野に限らず, 回路設計等広範な分野でも採用可かと)試行錯誤を伴う実験を回避したり, 仕様をみたす制御系設計が可能になったり, 新しい制御理論の実験検証がしやすくなります。製品開発期間の短縮, 問題の早期発見といったメリットもあります。
前回では, システム同定によって, 1次遅れ系制御対象(DCモータの速度制御系)のパラメータを同定し, 数式モデルを獲得しました。そこで今回は, 制御プラントの数式モデルを用いつつ, 制御特性の向上を狙って (なるべく簡単に) フィードバック制御設計を行います。
よろしくお願いします。
極配置法による制御ゲイン設計
ここでは, 閉ループ伝達関数の極を配置することによる「極配置法」によってPIゲインを決めていきます。 プラントの伝達関数を
PIコントローラの伝達関数を
と置くことにより, 下図のフィードバック制御系の目標値 から出力 までの閉ループ伝達関数を求めてみます。
閉ループ伝達関数は以下の公式で計算できます。
上式分子は”前向き伝達関数”で, から へ直線的にたどったときの伝達関数を掛け合わせたものなので となり, また, 一巡伝達関数はフィードバックループを一巡した伝達関数を掛け合わせたものなので, これも となります。 したがって から までの伝達関数は,
となります。 この伝達関数の, 分母式である,
の根が閉ループの極となります。極と , が一致するようにゲイン設計をします。 と を根に持つ方程式は,
上2式を比較すると, 次の式が得られます
とは負の実数や共役複素数を設定します。 極と応答の理論背景についての考察, ,ステップ応答は, 逆ラプラス変換により
ここで が極 を持つ場合,
となり,
となり, 指数関数の和が応答になることが分かります。また, 極が虚部を持たなければ振動せず, 実部が絶対値の大きい負であれば応答は早く収束するイメージもつくかと思います。
それでは実験をしていきます。 また今回使用するDCモータをミニ四駆で用いられるレブチューン2モータを使用しました。ちなみに筆者はサイクロンマグナム†が好きです。サイクロンマグナムに使用するモータを同定し, 制御するという体裁で進めさせていただければと思います。 注† : サイクロンマグナム 装置外観
前回の記事の手法でシステム同定を行いましたがパラメータは
となり, 波形は,
上図のような波形となりました。(すこしずれてしまいましたが...)では制御実験を行います。
モータの電圧指令値を 1V 初期値, 0.5V 振幅のステップ電圧として, 制御器をPI制御器, 設定する極を-2の重根にした場合で実験を行いました。mファイルでSimulinkファイルを呼び出します。
% velo_pi_mbd.m % Initialize & load data close all clear all load model_data % PI design by pole placement p1 = input('p1 = '); p2 = p1; % 重根の場合 Kp = -((p1+p2)*T + 1)/K; Ki = p1*p2*T/K; % Open simulink model open_system('velo_pi_mbd_sl'); open_system('velo_pi_mbd_sl/Output'); ts = 1/50; sim('velo_pi_mbd_sl') % EOF of velo_pi_mbd.m
次に波形となります。上図で黄色が指令値,青が実機応答で, オレンジがシミュレーションによる数理応答になります。下図は青が指令値と数理応答の誤差, 黄色が実機応答と指令値の誤差になります。
極指定を の重根で設定します。
極を左半面に寄せるほど応答は早くなります。ちなみに に設定すると,
応答が早くなりましたが, オーバーシュートが生じます。PゲインもIゲインも増加しますので, 直感的にゲインを上げ続けると発振していきそうですね。(安定限界は調べていません)
領域下における極配置設計, お手軽でなかなか良いと個人的に感じます。 今回 D 制御は入れていませんが, 古典制御におけるPID制御則はやはり偉大です。。。さすがこの世界を支えている制御則です。
z 変換とデジタル制御について
ATMega328Pというマイクロプロセッサを用いたArduinoでの実験を行いました。制御器は 領域における連続時間の下での設計でしたが, 本来マイコンが行っている計算は, 周期的に測定量をサンプリングし, デジタル回路のなかで計算を行ってから制御量を決定するので, その動作は断続的なものとなります。(デジタル制御と呼ばれる所以です)また, 今回のシステムは連続ダイナミクス(DCモータは連続時間において1次遅れ系)と離散ダイナミクス(デジタル論理のこと。コンピュータ, オートマトン)が混在したシステムのなので, ハイブリッド制御系と言ったりすることもできます。厳密にはデジタル制御器を実現し, 離散時間下で性能を評価したほうがよいですね。 離散信号を扱うのなら " 変換" を用いるのが便利です。
を整数として,
を満たす の関数について,このような は数列
を表し, に対して の関数 を
で定義します。この(正則)関数を の 変換と呼びます。離散的時刻 に対して を割り当てると解釈するといいでしょう。また数列 に対応するインパルス列 を
で, サンプリング信号を模擬します。時刻 に発生する単位インパルス[tex:\delta(t-kT{s})]のラプラス変換は, $e^{-skT{s}}$ であり, したがって のラプラス変換 は,
となり, ここで,
と置き換えると. の右辺を得ることができます。つまり, 「インパルス列 の 変換は のラプラス変換において を で置き換えたもの」と解釈できます。この式から, が1ステップ(時間 )だけ信号を進める作用を持ち, は1ステップだけ遅らせる作用をすることが示唆されます。
について, 1次までのマクローリン展開より
と比較すると,
と求めることができます。(前進オイラー法) ちなみに, 双一次変換では と比較すると,
といった変換となります。今回は簡易的に前進オイラー法でいきます。 PI制御器の伝達関数は 領域では,
ですが, マイコン側から見れば 領域におけるデジタル PI 制御器は,
となります。 のこぎり波の山サンプリングを想定して, ADCがサンプリングしてからPWM出力するまでを1サンプリング遅延 とすると, Simulinkファイルは次のようになります。
では, 前章で 平面上で設計した, の時のゲインで実験したときの波形をそれぞれ見比べてみます。
領域
領域
上図が 領域のPI制御器, 下図が 変換後の PI 制御器による実験波形とシミュレーション波形です。 変換した後のほうが数理応答に近づき, 誤差が少なくなっていることが分かりました。 これでさらに精密な実機評価が可能になったと思っています。
デジタル制御によって,
・ 平面上の単位円で応答性や安定性を評価できる。
・数サンプルで制定する制御法(有限時間制定制御)が可能になる。
といった恩恵を得ることができます。 平面上で再設計したいところですが, 今回はここまででご勘弁を。(個人的に学生実験レベルでとどめておきたいのです。)
ちなみに実験風景は
test pic.twitter.com/FejzynGBaC
— まなお (@Manao0731) December 7, 2019
このような感じです。
さらに性能を上げるには...
・デッドビート制御(有限時間制定制御, プラントも離散化して, 一巡伝達関数が n サンプル遅れと仮定して系を設計)
・モデル予測制御の導入(システム同定の恩恵により, プラントのパラメータが得られているため)
・完全追従制御 (堀藤本研究室グループの研究によく見受けられます) (これらの制御法はAtmega328の演算性能が耐えられればの過程。コントローラの選定しなおしがあるかもしれません。ハードウェアサポートのあるマイコンボードが増えていくと個人的にうれしいです...)
・GaN-MOSFET, SiC-MOSFETなど低損失・高速応答デバイスとそのドライブ回路の導入 ( や み が ふ か い )
・ハイパーダッシュモーターやウルトラダッシュモーターへの移行 など考えています。
しばらくは電子デバイスやモータといったハードウェアの性能に頼らず, 制御ロジックを改善する方向で頑張っていこうと思います。(もともとの趣旨でもあります) (80~90年代は繰り返し制御が, 昨今ではニューラルネットやディープラーニングなどが流行りましたが, FF的にパスを設けられないでしょうか)
また, FA-130RAを継続して使用していましたが, 実験を繰り返すうちに特性が悪化する傾向がありましたので, (ブラシ付きDCモータなので仕方ない部分はあります) 整流子がなく, ブラシ摩耗による制御悪化を受けにくいブラシレスDCモータによるベクトル制御にも挑戦したいと思っています。
簡易的ですが, ありがとうございました。
参考文献
[1] 平田光男 ArduinoとMATLABで制御系設計をはじめよう! Simulinkモデルとmファイルを参考にさせていただきました。お世話になっております。 今回の実験を通して多くの知識と経験を得させていただきました。感謝です。
[2] 仮想制御研究室 理論と実践の架け橋 ~システム同定からモデル予測制御(PFC)~ この人の書く文章が楽しみだったりします。
[3] 足立修一 システム同定の基礎 足立先生
[4] Atmega328 データシート 勉強します。
[5] 荒木光彦 ディジタル制御理論入門 古い本ですが参考になります。
[6] 2SK3234 データシート 手持ちのFETです。勉強します。
みなさまありがとうございます。