MATLAB/SimulinkでモーターのPID制御(1入力1出力)をやってみる、部分的モデルマッチング法MOME

MATLAB/SimulinkのPIDブロックを用いずに、練習がてらモーターを制御するモデルを自作した。正しいかどうかは保証できないし、参考になるのはブロック図ぐらい?今後はMATLAB自体のPIDブロックを使ってみようと思う。また、実際のモーターで確かめてみる。深入りはしない。

シミュレーション

・角速度制御(速度制御)
適当にPIDを合わせると、速度は目標の±1%以内になった。
PWMの周波数を、5kHz以上にすると、挙動がおかしくなった。なぜだろう。

画像1

画像2

画像6

・角度制御(位置制御)
速度制御の場合と異なり、P制御だけで十分収束した。なぜだろう。

画像3

画像4

画像7

マイコンでやってみる

マイコンで角速度制御をやってみると、このようなグラフになった。
なぜ最初に振動するのか。収束しても若干振動する。
横軸は揃えてみようと思う。

画像7

マイコンで角度制御をやってみると、このようなグラフになった。
形はきれいだが、値が2パーセントほどオーバーしてしまう。なぜだろうか。

画像8

20210407
部分的モデルマッチング法を実践するためにモデルを作成して確認した。
素晴らしく追従した(青)。しかし、操作量の電圧には制限があるため、入力制限を設けると(黄)。

・角速度

画像9

・操作量

画像10

・操作量の積分項

画像11

これを解決するには、操作量に制限がある場合について考える必要がある。
https://hamachannel.hatenablog.com/entry/2019/01/06/135004
こんなのがあった。積分項が上昇してしまうことをウィンドアップというらしい。解決方法は3つあり、
1.固定fix
2.逆解析conditioned
3.Velocityform
とりあえず一番直感的な2番をシミュレーションでやってみる。

・角速度

画像12

・操作量

画像13

・操作量の積分項

画像14

fixを実際にモータでやってみたところ、やや振動する。
離散時間が関わっているのだろうか。fixを入れないときよりだいぶましになった。

この記事が気に入ったらサポートをしてみませんか?