読者です 読者をやめる 読者になる 読者になる

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

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

モータードライバユニット基板

製作物 電子回路

f:id:tattatatakemori:20170217024716p:plain

f:id:tattatatakemori:20170217024733p:plain

汎用性を意識したモータードライバユニット基板を製作しました.まず研究室のチームで製作しているレスキューロボットに使用しますが,他にも使える設計です.

マイコンを搭載しており,エンコーダやポテンショ,電流などのセンサデータを基にいろいろ制御するところまでをこのモジュールに込めるつもりです.

どんなものか,工夫した点,改良すべき点について書きます.

 

 

機能一覧

  • モータードライバ × 4
  • エンコーダ × 4
  • ポテンショメータ × 4
  • 電流センサ × 4
  • IMU(加速度3軸,ジャイロ3軸) × 1
  • UART × 1
  • CAN × 1
  • RS485 × 1
  • タクトスイッチ × 1
  • LED × 3

プロセス

KiCadで設計しました.

P板.comで基板の製造と表面実装部品の実装を発注(下の写真が届いたときの状態).実装を頼んだのは初めてでしたが特に問題なし.

残りの部品は在庫があったりしたので自分ではんだ付けしました.

f:id:tattatatakemori:20170217021412p:plain

 

詳細

1. 電源

モータ用電源とその他用電源(マイコンなど用)とが必要です.

モータ用電源は後述のモータドライバモジュールが許す範囲(6.5-40V)で,その他用電源はスーパー3端子レギュレータの許す範囲(7-28V)です.もちろんこれらの電圧は分圧抵抗を通してマイコンで読んでいます.

その他用電源は後述のCAN or RS485の信号線とともに1つのコネクタで入れます.またデイジーチェーン接続が可能です.

モーター電源とモーター出力の端子として,XTシリーズの黄色いコネクタを直接基板にはんだ付けしています.すっきりするかと思ってやってみて,確かにすっきりしたとは思いますが,抜き差しの際に基板に負荷がかかるのでよくないかもしれません.

2. マイコン

STM32F405RGT6を使用しています.開発環境はマイクロマウスで有名なkojimaさん公開されているものを以前から使わせていただいています.

書き込みはUSART経由です.以前はUSB-シリアル変換基板を自作したりしてましたが,秋月から超小型USBシリアル変換モジュールが出てからはそれに合わせて基板を設計しています.下の写真のような感じで,モジュールに直接メスピンヘッダをはんだ付けすればすっきりしたものができます.上にグルーを盛って逆刺しを防止しています.

f:id:tattatatakemori:20170217023632p:plain f:id:tattatatakemori:20170217023710p:plain

3. モータードライバモジュール

Pololu G2 High-Power Motor Driver 24v21を使用.販売元のページに詳しい情報が載っています.

このモータードライバモジュールは普通のPWM制御に加えて,locked-antiphase operationが可能です.locked-antiphaseについてはこちらのページを読んで理解しました.locked-antiphaseで制御するには「DIR」にPWM信号を入力して,「PWM」をHighで固定します.よさげなので基本的にlocked-antiphaseを使うことにしましたが,念のためどちらでも使えるように「DIR」と「PWM」のどちらにもPWM信号を入れられるようにしました.あとは「SLP」ピンの操作と「FLT」ピンの読み込みも可能です.

4. エンコーダ

Maxonモータのラインドライバなしのエンコーダに合わせたピン配置です.マイコン電源は3.3Vですが,エンコーダの電源は5Vになります.なんとなくラインドライバなしでモーターを発注してしまったのでそれに合わせましたが,後からラインドライバ付きのにしとけばよかったと猛烈に後悔しています.ノイズが問題にならなければいいですが.

5. ポテンショメータ

単純に可変抵抗のポテンショを読み込みます.RCローパスフィルタを通してA/D変換ピンに接続しています.

6. 電流センサ

裏面についてるのが電流センサです.今回はACS725LLCTR-20AB-Tを使用しています.これはコンパチのがいくつかあるので,使用するモータに合わせて変えると良さそうです.AD変換で読みます.

7. IMU

モーターを回すような場合は基本的に移動するわけですし,どうせ必要になるIMUも載せておきました,使用しているのはMPU-6000で,SPIで接続しています.MPU-6500の方が新しくて小さいですが,小さい分少し精度が悪いてきな記述を見た(気がする)ので6000の方にしました.電源にはマイコン用とは別に電圧リファレンスで3.3Vを作っています.モーターを回したときにどの程度乱れるかは未検証です.

8. CAN & RS485

本体的なもの(PCなど)と通信するためのインターフェースです.僕は基本的にCANを使うつもりですが,Dynamixelなどのサーボモータと同じようにRS485でコマンドのやり取りができても便利かと思ってRS485も載せました.プロトコルを合わせると良さそうです.

これらどちらも信号線は2本ずつで,これとGND,その他用電源Vccとの4本まとめて一つのコネクタになっています.CANとRS485はそれぞれ2個ずつコネクタがついていて,デイジーチェーン接続が可能になっています.一番上の写真ではCAN用のコネクタだけ実装されています.

トランシーバICは,CANがMAX3051,RS485がMAX3362です.

ソフトウェア

現在は一通りの動作確認をしただけで,まだ本格的にソフトは書いていません.

モータの各定数などはモータードライバユニット側で持っておいて,メインの計算機からはコマンドとして「目標速度」「目標角度」「目標トルク」などの簡単なコマンドを送るだけで扱えるようにしようと思っています.

またIMUについてもユニット側でロールピッチヨーにしてから送るなり,生データをストリーミングするなりするつもりです.

SI2016優秀講演賞

研究業績

f:id:tattatatakemori:20170215171321p:plain

12月に参加したSI2016@札幌,なんと優秀講演賞をいただきました.光栄です.

ROSでC++ 11を使う

ROS ノウハウ

以下のページに書いてある.

answers.ros.org

 

ROSのプログラムで

std::string str = std::to_string(1); 

てきなものがコンパイルできなかった.

C++ 11でコンパイルするためにCMakefile.txtに以下を追加.

add_definitions(-std=c++11)

コンパイルが通るようになった.