2013年12月8日日曜日

モータのPID制御1(サーボ制御の基礎,P制御)

久しぶりの記事があんなのだけでは少し寂しいので,よくあるPID制御について少し.
メカトロ系の研究室に配属されたこともあり,制御の話も少し耳にするので備忘録になれば.

まず,PID制御ってなんじゃ,って話.

Proportional(比例項),Integral(積分項),Differential(微分項)の3要素により
物体を制御する…
なんて言っちゃえばお終いなんですけど.それじゃちょっと...

一般的にモータ制御の目的というと,
  • 一定の速度で回したい
  • ある角度で合わせたい
  • 指定した動作をさせたい
とかですね.今回は2つめの,「ある角度で合わせたい」という機能に絞ってみます. たとえば,現在の角度から90度だけ回したい,とか.

高校生の頃は正直,やっすいギア付きモータしか知らなかったので,
「90度になったらOFFにすればいいじゃん」
とか思ってたんですけど.

実際には慣性力のよく効くモータ(e.g.ギア無しのモータとか)では,ON-OFFだと,
早すぎて回り過ぎ→モータを逆転させる→反対側に行き過ぎる
の繰り返し(振動)みたいになるんですよね.

これを解決するのがPIDなどの制御.(実際にはもっと色々あるけど)

とまあ,前置きはこれくらいで.

PIDってなんじゃ,っていう僕の高校時代くらいの人が読めるレベルで書いてます.

まずはP(比例)制御.

P制御は,目標値と出力の差に比例した操作量を与える制御則です.



図が昔のレポートの使い回しですけどw

まず,左上の図5から.

題通り,初期状態です.左には角度を検出するセンサがあって,
右にはモータに同様のセンサがベルトでつながれたものが配置されてます.

この目的は,左のセンサの角度(手で回す)と右のモータの角度が同じになることです.
いわゆるマスタースレーブです.

左右のセンサからは,角度に応じた電圧が出ていて,真ん中の白丸で,2つを引き算します.
そして引き算した結果(偏差という)が,モータに入力されます.

このときは,左のセンサも右のセンサも0度(0V)なので,
それを引き算した値(0V)がモータに入力されています.


入力が0Vなので当然,モータは回りません.

このように目標値(左のセンサの角度)から出力(右のセンサの角度)を引く一連の流れを
フィードバックループと呼びます.

次に,右上の図6のようにステップ入力を与える時を考えます.

ステップ入力というのは目標値が急に変化する入力のことで,階段状となっている入力です.
この場合,左のセンサのメモリが上に向いた状態(図5)から,
一気に90度回した状態(図6)を指します.

実際には0度から90度に回す時に多少時間はかかりますが,
ここでは一瞬で回せるものとしています.

このとき,
「5Vのステップ入力が与えられた状態」
と表すことができます.

ここでは,一瞬で左のセンサが動いたので,右のモータとセンサは何も起きていない状態です.

次に,ステップ入力が与えられた直後を考えます.

このとき,図の白丸部分では左のセンサの出力(5V)と,
右のセンサの出力(まだ0V)を引き算しています.

このため,5Vから0Vを引いた値,つまり5Vがモータへと入力されることになります.

この5Vによって,モータは右向きに回転します.
(実際に回路を組む時は,モータが正しい方向に回るようにつける必要があります)

次は,左下の図7のようにモータが回転してから少しだけ後の時間を考えます.


この少しだけ後というのは,0.01秒とか,もっと短いくらいの時間です.

この時間の間に,モータはさっきの5Vによって,少しだけ右に回転しました.
ベルトを通じて右のセンサも回転するので,モータと右のセンサは同じだけ回転しています.
このとき,モータと右のセンサの角度は54度,右のセンサから出ている電圧は3Vとします.

ここで,白丸での計算を考えると,左のセンサは5Vのままですが,
右のセンサは3Vとなっていて,引き算された値は2Vとなっています.

これによって,モータには2Vの電圧がかかることになります.

さっきはモータに5Vの電圧がかかっていましたが,今回は2Vになっているので,
前よりはゆるやかな回転になっているはずです.

このゆるやかな回転で,モータは更に右に回転します.

次は,右下の図8のように,さらに少しだけ後の時間(時間の間隔は一緒)を考えます.

さっきの時間で言うと,左のセンサを回してから,0.02秒後とか.

このとき,右のモータは,1回目の回転よりも回転する量が少なくなっているはずです.

この瞬間の角度は90度とします.

このとき,右のセンサの値は5Vです.
そのため,モータに入力される電圧は,
左のセンサの5Vから,右のセンサの5Vを引いた,0Vが入力されます.

モータに電圧がかかっていないので,モータは回転を停止し,90度の位置で停止します.

これがP(比例)制御です.
今回は,左と右のセンサの差を,そのまま入力としていましたが,
実際にはセンサからの電圧は数mVで,モータに入力するのは数Vであるので,
適当な比例定数kを掛け算したものを,入力として与えています.

この入力を操作量と呼びます.
今回は,操作量=偏差(センサ同士の差)でした.
大抵の場合は,操作量=k×偏差です.

この比例定数を大きくすると,入力が与えられた少しあと(0.01秒後とか)に
回転する量が大きくなるので,目標の90度を行きすぎてしまいます.
(もちろん,行き過ぎた場合には,モータへの入力がマイナスになって,
モーターが逆回転→通り過ぎる→正転を繰り返して90度に達します.
さらに比例定数が大きいとずっと振動する場合もあります.)

逆に,小さいと,回転の速さが遅くなって90度になるまでに時間がかかったり,
後述の外乱によって定常偏差が発生して,90度に達しない場合があります.

このように,偏差に比例した制御を行うことをP(比例)制御といいます.

実際は今回のように,左もセンサである必要はなくて,
5V(角度に相当する電圧を指定してもよい)を与えることが出来ればいいわけです.

こんな感じで,目標を指定して,角度の制御を行うことができます.

今回はこのあたりで.

0 件のコメント:

コメントを投稿