MATLAB/SimulinkでモーターのPID制御(1入力1出力)をやってみる、部分的モデルマッチング法MOME
MATLAB/SimulinkのPIDブロックを用いずに、練習がてらモーターを制御するモデルを自作した。正しいかどうかは保証できないし、参考になるのはブロック図ぐらい?今後はMATLAB自体のPIDブロックを使ってみようと思う。また、実際のモーターで確かめてみる。深入りはしない。
シミュレーション
・角速度制御(速度制御)
適当にPIDを合わせると、速度は目標の±1%以内になった。
PWMの周波数を、5kHz以上にすると、挙動がおかしくなった。なぜだろう。
・角度制御(位置制御)
速度制御の場合と異なり、P制御だけで十分収束した。なぜだろう。
マイコンでやってみる
マイコンで角速度制御をやってみると、このようなグラフになった。
なぜ最初に振動するのか。収束しても若干振動する。
横軸は揃えてみようと思う。
マイコンで角度制御をやってみると、このようなグラフになった。
形はきれいだが、値が2パーセントほどオーバーしてしまう。なぜだろうか。
20210407
部分的モデルマッチング法を実践するためにモデルを作成して確認した。
素晴らしく追従した(青)。しかし、操作量の電圧には制限があるため、入力制限を設けると(黄)。
・角速度
・操作量
・操作量の積分項
これを解決するには、操作量に制限がある場合について考える必要がある。
https://hamachannel.hatenablog.com/entry/2019/01/06/135004
こんなのがあった。積分項が上昇してしまうことをウィンドアップというらしい。解決方法は3つあり、
1.固定fix
2.逆解析conditioned
3.Velocityform
とりあえず一番直感的な2番をシミュレーションでやってみる。
・角速度
・操作量
・操作量の積分項
fixを実際にモータでやってみたところ、やや振動する。
離散時間が関わっているのだろうか。fixを入れないときよりだいぶましになった。