DCモータの速度制御(matlab&arduino)
とりあえず小手調べということでDCモータの速度制御をやって見ました.
モータには某工業大学のロボット学科の授業でたくさん使われているRDO-29BMAというモータを使いました.(リンク先中央付近)
これはDMN29というシリーズのモータにエンコーダがセットになってるものです.
どうやら某工業大学の教授が掛け合って作ってもらったものだとか・・・
なんでこれかというと・・・なぜか僕の周りにはこれを持ってる人が多いんです!!!w
次に回路ですが,「ArduinoとMATLABで制御系設計をはじめよう!」という本の回路を参考にして作りました.
が,動かない・・・
ここで我らがKingが一言・・・
「これ間違ってね?w」
こちらが正しい回路図だそうですw
というわけで,良い子のみんなは本に書いてあることが必ず正しいと思っちゃ駄目だよ!!(キリッ
最後にプログラム・・・ではなくモデル
ここが真骨頂ですねw
メインモデル
モータモデル
ArduinoIOというmatlabのarduino用アプリケーション(無料)を使って作成したモデルです.
これはmatlab(simulink)上でこのモデルを動かして,arduinoと通信する方法で行っています.
arduino上で動かすこと(スタンドアロン)も出来るのですが,毎回コード生成する必要はないので,設計段階ではこちらを使う方が便利だと思います.
スタンドアロンで実行する場合の方法はまた今度詳しく書きたいと思います.
で,このモデルはどうゆうことをしているのかというと,目標回転数[rps]を与えて,PID制御器によってモータをPWM制御しています.
以下,パラメータ
サンプリング周期: 0.01[s]
モータ印加電圧: 12[V]
Pゲイン: 0.001
Iゲイン: 0.5
Dゲイン: 0
ゲインとかは結構適当ですw
ホントはPID制御器の自動ゲイン調節などの機能を使いたかったんですが,エラー吐かれて出来ませんでした><
現在,調査中ですが,エラーの内容見る限り,プラントがモデルになってるわけじゃないので不可能そう・・・
というわけで結果(Scope)は・・・
Scope
上が目標値[rps]と出力値[rps]
下が制御入力
出力値はだいぶ発振してますね.
原因は主に2つあると思います.
1.ゲイン調整不足
2.回路が適当
1は地道に調整するばおk(限界感度法とか)
2は回路のコンデンサとかの容量が適当なので,そのへんをちゃんと設計すればもっとモータの特性が上がるのかな・・・ グラフ見る感じは応答が遅いのでw
こんな感じで実際にそこそこ知的なロボット作れたらなーとか思ってますw
ではまた
モータには某工業大学のロボット学科の授業でたくさん使われているRDO-29BMAというモータを使いました.(リンク先中央付近)
これはDMN29というシリーズのモータにエンコーダがセットになってるものです.
どうやら某工業大学の教授が掛け合って作ってもらったものだとか・・・
なんでこれかというと・・・なぜか僕の周りにはこれを持ってる人が多いんです!!!w
次に回路ですが,「ArduinoとMATLABで制御系設計をはじめよう!」という本の回路を参考にして作りました.
が,動かない・・・
ここで我らがKingが一言・・・
「これ間違ってね?w」
こちらが正しい回路図だそうですw
というわけで,良い子のみんなは本に書いてあることが必ず正しいと思っちゃ駄目だよ!!(キリッ
最後にプログラム・・・ではなくモデル
ここが真骨頂ですねw
メインモデル
モータモデル
ArduinoIOというmatlabのarduino用アプリケーション(無料)を使って作成したモデルです.
これはmatlab(simulink)上でこのモデルを動かして,arduinoと通信する方法で行っています.
arduino上で動かすこと(スタンドアロン)も出来るのですが,毎回コード生成する必要はないので,設計段階ではこちらを使う方が便利だと思います.
スタンドアロンで実行する場合の方法はまた今度詳しく書きたいと思います.
で,このモデルはどうゆうことをしているのかというと,目標回転数[rps]を与えて,PID制御器によってモータをPWM制御しています.
以下,パラメータ
サンプリング周期: 0.01[s]
モータ印加電圧: 12[V]
Pゲイン: 0.001
Iゲイン: 0.5
Dゲイン: 0
ゲインとかは結構適当ですw
ホントはPID制御器の自動ゲイン調節などの機能を使いたかったんですが,エラー吐かれて出来ませんでした><
現在,調査中ですが,エラーの内容見る限り,プラントがモデルになってるわけじゃないので不可能そう・・・
というわけで結果(Scope)は・・・
Scope
上が目標値[rps]と出力値[rps]
下が制御入力
出力値はだいぶ発振してますね.
原因は主に2つあると思います.
1.ゲイン調整不足
2.回路が適当
1は地道に調整するばおk(限界感度法とか)
2は回路のコンデンサとかの容量が適当なので,そのへんをちゃんと設計すればもっとモータの特性が上がるのかな・・・ グラフ見る感じは応答が遅いのでw
こんな感じで実際にそこそこ知的なロボット作れたらなーとか思ってますw
ではまた
スポンサーサイト