暇人の技術備忘録

ハサミの技術備忘録

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

【DCモータの角度制御】第1回:DCモータのシステム同定

f:id:sbasami:20200604202633p:plain

はじめに

今回からDCモータの角度制御についてやったことを色々書いていこうと思います。順序としては、モデルの推定→MATLABでシミュレーション→実機実装という感じです。

第1回はDCモータのシステム同定です。シミュレーションをやりたくてもモデルがないと始まらないのでモデルを作るところからやっていきます。全体的な流れは「システム同定の基礎」という書籍を参考にしました。

Step 1:同定実験の設計

同定実験の設計で決めることは「同定対象の入出力」、「同定入力」、「サンプリング周波数」の3つ。

同定対象の入出力

今回の同定実験では、図1のようなシステムのDCモータを同定対象とします。ここで入力をマイコンからモードライバへの指令、出力をエンコーダからの角速度 [rad/s]とします。

f:id:sbasami:20191028133841j:plain
図1.DCモータの制御システム

DCモータを同定対象としていますが入出力の位置の関係で、実質的にはモードライバ、DCモータ、エンコーダをブラックボックス化した図2のようなブロック全体が同定対象になっています。

f:id:sbasami:20191028133859j:plain
図2.実際の同定対象

マイコンからモードライバへの指令はPWMで与えますが、システム同定する上での入力は図3のようにPWMのパルス波ではなく平均電圧 [V]で考えます。

f:id:sbasami:20191024150724j:plain
図3.平均電圧の説明

同定入力

システムの動特性を詳しく調べるには、「周波数特性」と「振幅特性」の二つの要素が重要になってきます。周波数特性はすべての周波数成分を含んでいるのが理想です。振幅特性については飽和しない範囲で可能な限り大きいものが良いです。同定入力としてよく用いられるのはM系列信号ですが、パラメータ調整が必要でそれによって結果が変わるので、個人的にはあまり使いたくないです(本音を言うと自分には難しくてよく理解できなかった)。

そこで今回は周波数応答法を使用します。ただ、やはり全ての周波数成分を含むのは不可能なので使用する帯域の選定が必要になってきます。システムの周波数特性は図4のようなボード線図で表すことができ、システムの特性が一番表れるのはおそらくカットオフ周波数付近だと考えられます。

f:id:sbasami:20191027210425j:plain
図4.ボード線図

よって、使用する周波数帯域はカットオフ周波数付近が良いのですが、これはシステムによって違うので試行錯誤になると思います(結局パラメータ調整するんかい)。今回はとりあえず同定入力の周波数帯域を自分の勘で0.1~100Hzと決定しました。

次に振幅についてですが今回はモータ用の電源電圧を5Vとして考えます。5Vを超える電圧は飽和するため入力できないと考えると、振幅は±5Vということになります。因みにここで書いた±というのはモータの正転と反転を表しています。

サンプリング周波数

サンプリング定理では測定する波形の2倍より高い(以上ではない)周波数あれば問題ないとされています。本実験の同定入力の周波数帯域は0.1Hz~100Hzなので、サンプリング周波数は200Hzより高い周波数であれば良いです。とりあえず今回は500Hzとしておきます。

Step 2:同定実験

使用部品

同定実験で使用する主な部品は以下の通り。すべてスイッチサイエンスで購入することができます。

各部品のピンアサインを図5~7に示します。

f:id:sbasami:20191028135111j:plain
図5.Teensy LC ピンアサイン(https://www.pjrc.com/teensy/pinout.html

f:id:sbasami:20191028135148j:plain
図6.モータドライバのピンアサイン(https://www.pololu.com/product/2961

f:id:sbasami:20191028140529j:plain
図7.エンコーダのピンアサイン(https://www.pololu.com/product/3081

使用プログラム

実験で使用したTeensy LC用のソースコードを以下に示します。

Teensy LCでDCモータの周波数応答を測定するプログラム

実験結果

実験結果を図8に示します。出力波形の振幅に注目すると最初は定常的ですが周波数が高くなると減衰しているため、カットオフ周波数付近のデータが取れていると思われます。

f:id:sbasami:20191028143338j:plain
図8.周波数応答(サンプリング周波数:500Hz)

しかし、実験に使用したエンコーダの分解能が1回転12パルスと非常に低いため、角速度の波形がガタガタになってしまいました。とりあえず今回はこの入出力データでシステム同定してみます。

Step 3:モデル構造の選定

モデルにも色々な形があるので、どの形でシステム同定するか選ぶ必要があります。今回はDCモータが同定対象なので伝達関数の形でシステム同定を行います。DCモータの伝達関数の導出方法についてここでは詳細を省きますが「実験で学ぶDCモータのマイコン制御術」という書籍を参考にしています。結果だけ載せるとDCモータのブロック線図は図9のようになります。

f:id:sbasami:20191028143646j:plain
図9.DCモータのブロック線図

記号 名称 記号 名称
Va 入力電圧 [V] Tm トルク [N・m]
La 電機子インダクタンス [H] J ロータ慣性モーメント [kg・m^2]
Ra 電機子抵抗 [Ω] D 粘性制動係数 [N・m/(rad/s)]
Ia 電機子電流 [A] Ωr 角速度 [rad/s]
KE 誘導起電力定数 [V/(rad/s)] θ 角度 [rad]
KT トルク定数 [N・m/A]

図9のブロック線図より、Va(s)からΩr(s)までの一巡伝達関数


\displaystyle{G(s)=\frac{Ω_r(s)}{V_a(s)} = \frac{\frac{K_T}{(sL_a+R_a)(sJ+D)}}{1+\frac{K_TK_E}{(sL_a+R_a)(sJ+D)}}}


\displaystyle{= \frac{K_T}{s^2L_aJ+s(L_aD+R_aJ)+(R_aD+K_TK_E)}}

場合によっては、モータ自体の粘性制動係数Dは小さいため、D≃0と近似して以下のようにすることもあります。


\displaystyle{G(s)=\frac{K_T}{s^2L_aJ+sR_aJ+K_TK_E}}

さらに場合によっては、電機子インダクタンスLaは電機子抵抗Raに比べて小さいため、La≃0と近似して以下のようにすることもあります。


\displaystyle{G(s)=\frac{K_T}{sR_aJ+K_TK_E}}

これらのことからDCモータは1つもしくは2つの極を持つ伝達関数で表すことができることが分かりました。この情報を基にStep 4 で実際にシステム同定を行います。

Step 4:システム同定

システム同定MATLABを用いて行います。詳しい手順は「実際のラボ処理データからシンプル モデルの推定 - MATLAB & Simulink Example - MathWorks 日本」を参考にしています。とりあえず自分が書いたソースコードを以下に示しておきます。

MATLABでDCモータのモデル同定を行うプログラム

結果として以下の伝達関数が同定されました。

  • 極が1、零が0のモデル

\displaystyle{G1=\frac{366.9}{s + 36.84}}

  • 極が2、零が0のモデル

\displaystyle{G2=\frac{1.668e06}{s^2 + 4551 s + 1.676e05}}

モデルの応答を実機と比較してみると図10のようになりました。どちらのモデルも実機と似たような挙動をしています。わずかにG1モデルのほうが適合率が高いですね。

f:id:sbasami:20191028143436j:plain
図10.入出力データとモデルの応答比較

Step 5:モデル妥当性の評価

Step 4 で応答比較したのはモデル推定に使用したデータなので結果が一致するのは当然といえば当然です。モデルの妥当性を評価するにはモデル推定に使用していない入出力データと比較すべきです。そこで図11のようなパルス状の入出力データを新たに測定し、同定されたモデルの応答と比較します。

f:id:sbasami:20191027233437j:plain
図11.パルスの入出力データ

図11の入出力データと同定モデルの応答比較を図12に示します。図10と比べると適合率は落ちていますが、概ね応答は同じに見えます。

f:id:sbasami:20191028143412j:plain
図12.パルス入出力データとモデルの応答比較

おわりに

DCモータの伝達関数を同定することができたので、次回は同定したモデルを用いて制御系のシミュレーションをやってみようと思います。気になるのはエンコーダの分解能がシステム同定にどの程度影響するかですが、この辺りも後々検証できればいいなと思っています。

エンコーダの分解能に関する検証やりました↓↓↓

sbasami-tech.hatenablog.com

制御系のシミュレーションやりました↓↓↓

sbasami-tech.hatenablog.com