メカトロニクスにうってつけの日

ロボット開発や研究活動に関するメモ

DCモータのPWM制御2種の使い分け

DCモータの制御にはよくPWM制御が用いられます.PWM=Pulse Width Modulationであり,パルスの幅を変えることで印加電圧の時間平均を変化させ,実効的な電圧をコントロールするものです.その制御方式にはSign/Magnitude/Break方式(以下SMB)と,Locked Anti-Phase方式(以下LAP)の二種類があります.

tattatatakemori.hatenablog.com

上記の回路で用いたモータードライバ(Pololu G2 High-Power Motor Driver 24v21)ではどちらの方式も使えるのですが,それぞれ長所と短所があったのでうまく使い分けることにしました.その話を書きます.

1. 原理

二つのPWM制御方式については以下のページが参考になります.

NOTE - 回路設計編 - モータドライバと象限

1.1 Sign/Magnitude/Break方式の原理

SMBは[A. 正転or逆転の電圧印加]と[B. ショートブレーキ]を交互に繰り替えす方式です.1と0の波です.1の時間を長くすると印可電圧が上がります.[B. ショートブレーキ]の間は電圧は印加されないため,[B]の間は制御されていないと捉えていいかもしれません.「PWM制御」というとこちらがメジャーかと思います.

1.2 Locked Anti-Phase方式の原理

LAPは[A. 正転の電圧印加]と[B. 逆転の電圧印加]を交互に繰り返します.1と-1の波です.Dutyを変化させることで実効印加電圧は+MAX~-MAXまでシームレスに変化します.Duty50%で静止です.僕は「正転と逆転が綱引きしているイメージ」で捉えています.上記ページによると「DCモータの基本制御式が使える」とのことで,常に能動的に電圧をかけていることから直感的にもたしかに使えそう.

1.3 具体例

例えば上記モタドラ基板で使っているモジュールには制御入力用にPWMピンとDIRピンがあり,各方式で以下のように使い方が異なります.

  • SMBの場合はPWMピンにPWM信号を入力してDIRピンのH/Lで回転方向を指定
  • LAPではPWMピンはHighに固定してDIRピンにPWM信号を入力

2. 今回のモーター制御

レスキューロボットFUHGA用に,速度制御と位置制御を実装しています.

  • 速度制御はエンコーダ出力から計算した速度をフィードバッグとしてPI制御
  • 位置制御はポテンショとエンコーダを用いて現在位置を計測し,目標位置との差に応じた目標速度を目標に上記の速度制御

というのが大筋です.MAXON RE40が7本とRE35が1本搭載されており,4つを速度制御,4つを位置制御しています.PWM周波数はモタドラモジュール最大の100kHzで,電源電圧は24Vだったり28Vだったりです.電流センサも載っていますが計測値は使っていません.

まずはLAPを使っていたのですが,下記の問題があったためSMBも試してみて,使い分けるに至りました.

3. 二つの方式の長所と短所

理論的な話よりも実践してみた実感としてのことを中心に書きます.

3.1 Locked Anti-Phase方式の長所と短所

「DCモータの基本制御式が使える」ということを実感できる動作でとてもいい感じです.しかしながら消費電流がかなり大きく,目標速度0でも常に1A近く消費しています.モーター静止時も常に正転か逆転かの電圧がフルでかかってますので納得です.PWM周波数を上げることができれば改善されるでしょうが,100kHzを超える周波数が使えるドライバはなかなかありません.ロボット全体では制御を起動中は常時7A消費するというきつい状態です.

3.2 Sign/Magnitude/Break方式の原理

SMBはショートブレーキの間は電流を消費しないこともあり,電流消費がかなり少ないです.逆に言うとその分トルクの出方がよくわかりません.LAPのときと制御ゲインを変えておらず,SMBに合わせた最適化をしていないので正当な比較にはなっていませんが,動作はいまいちでした.特に,回転しているモーターを止めようとする力があまり働かないように見え,目標速度への追従がかなり悪くなりました.少なくともLAPに比べるとかなりフィードバッグゲインを上げる必要がありそうです.うれしいところは,静止時にはロボット全体で1Aも消費しないくらいになり,消費電力はかなり抑えられます.

4. 二つの方式の使い分け

  • LAPは〇制御性は高く,×消費電流は多い.
  • SMBは×制御性は低く,〇消費電流は少ない.

ということを踏まえ,モータ個別に状況に応じて二つの方式を切り替えることにしました.具体的には「ダイナミックな動作にはLAPを使い,スタティックな動作にはSMBを使う」という作戦です.

「スタティック」というのは,今回の場合は「速度制御において目標速度が0で,実際の速度も0付近」「位置制御において,目標位置と現在位置が概ね一致して数秒経過」の状態です.このような状態ではSMBに切り替えます.モータはほぼ回転しないので制御性の悪さがあまり問題になりません.そして,大きな動作が必要な時には再び制御性の高いLAPに切り替えて動作します.この使い分けにより,動作性能を損なわずに消費電流を劇的に抑えることができました.

5. まとめ

多くの要素を搭載したレスキューロボットでは,例えば移動中はアームは動かないことがほとんどですし,逆にアームを使った作業中はモビリティは動いていません.かといって制御しないと外力で勝手に動いてしまいます.このように静止させたいモータが多い場合には今回紹介した方法はかなり効くように思います.

来週はロボカップ世界大会,がんばります.