さくらのジャンク箱ロゴ

Sakura87がほぼ月刊でお届けするPCや電子工作と写真の備忘録てきなブログ @なんと20周年

Raspberry Pi 2 で小型モーターを制御する

この記事は9年ほど前に投稿されました。内容が古くなっている可能性がありますので更新日時にご注意ください。

IMG_5042_20151018

個人的にはモーターを使う予定はなかったのですが、意外と「Raspberry Pi モーター ○○」で検索に引っかかっているようなので今回は東芝製モータードライバを使ってモーターを制御してみたいと思います。

準備するもの

  • 小型の模型用DCモーター(今回はマブチ130同等品3V仕様のものを使用。)
  • 電池ボックス 単3×4用(モーターの電源用 3V以上あればいい。)
  • 東芝製モータードライバ TA7291P(今回の主役)
  • 15kΩの抵抗(PWM制御を使用しない場合)

ちなみに特に記載がない場合は1個・1本・1台という事になっています。

説明

今回はRaspberry Piでモーターを動かしてみたいと思います。
しかし、モーターは基本的に使用電力が大きいため今までのようにGPIO直というわけにもいきません。
トランジスタなどで簡単な増幅回路を作るという手もありますが3.3V電源はIOポートの他に、2本Raspberry Piから出ていますが、これらを合計しても100mAしかとれず。マブチの130相当のモーターでも無負荷状態で120mA必要なのでどうやっても足りません。更にこいつでモーターを動かそうという人なら、どう考えても正転だけでは意味が無く、どうせならPWM制御も取り入れたいというところでしょうし、外部電源を用意するにしても3.3Vの電源というと入手性はそんなに高くないです。5Vならよくあるのにね。

そこで今回はモーターを動かすための専用ICを使うことにしました。
モーターを動かすためのICはその目的に合わせていくつか種類がありますが。今回は0~20V 最大2A、定格1Aのモーターまで駆動することの出来る東芝製 TA7291PというICを採用しました。
正直、今回動かす130モーターであればもっと小さいICでもいいのですが。このICならタミヤのラジコン用モーターも物によっては動かせるみたいなのでちょっと大きめのICを採用しました。

動作について

このICは電源が3系統必要になります。

  • モーターの出力電圧を制御する電源(制御電源 Vref)
  • ICの制御部を動作させる5V電源(ロジック側電源 Vcc)
  • モータを実際に動かすための電源(出力側電源 Vs)

今回、ロジック側電源はRaspberry Piの5V出力を
出力側電源として単3乾電池4本を使用することにしました。
※どうしてもRaspberry Piから電源をとったり、電源を共通化したい人も居るかもしれませんが、モーターと制御回路の電源はなるべく遠いところで切り離したほうがいいです。(この辺の設計はよくわからないので詳しくは調べてください。まぁホビーユースなら特に気にする必要はないと思いますが。 最低でもRaspberry Piの電源用microUSBコネクタの外で接続することをおすすめします。)

出力側電源は単3乾電池4本で6Vとなりますが、このモータードライバは出力側電源(Vs)の電圧をもとに制御電源端子(Vref)の電圧を決めます。つまり、この端子(Vref)に1.5Vをかければ1.5Vが、3Vをかければ3Vがモーターに流れます。ならばVsに5VをかけてVrefを10Vにしたら10Vになるのかというとそういうことはなく、東芝曰く「やっちゃダメよ☆」ということらしいです。

Raspberry PiのIOポートの電圧は3.3Vです。故にこの方法ではモーターへかかる電圧も3.3Vで頭打ちになります。ならば3.3V以上を流すにはどうすればいいのかというと、例えば高速のフォトカプラなどを使って物理的に切り離し、Vrefにモーター制御用の電源を流してやる方法や、後述する「制御信号(IN1・2)端子をPWM制御する」という方法があるみたいです。

接続方法

gpoio

↑Raspberry Pi2のIOポート一覧表

TA7291Pピンアサイン
端子 名称 機能 接続先
1 GND 接地 Raspberry Piのグランドと電池ボックスの-を接続
2 OUT1 出力端子 モーターへ
3 NC 未接続
4 Vref 制御電源端子 GPIO.1(PWMを使用する場合)
抵抗を介して電池へ(PWMを使わない場合)
5 IN1 入力端子 任意のGPIOポート(今回はGPIO.15/16を使用)
6 IN2 入力端子
7 Vcc ロジック側電源 Raspberry Piの+5V
8 Vs 出力側電源端子 電池ボックスへ
9 NC 未接続
10 OUT2 出力端子 モーターへ

上の表のとおりに接続します。

1番にRaspberry PiのGND端子のいずれか1つ(5V出力を使用するので6番がいいかも)と電池ボックスのマイナス側に接続
2番と10番をモーターに接続、5・6番はモーター制御用のGPIOポートに接続
7番をRaspberry Piの5V端子(2番・4番ピン)に接続、8番を電池ボックスのプラス側に接続。

そして4番ピンはPWM制御を行うのであればPWM可能なGPIOポートに接続(H/W PWMは物理12番 GPIO.1番ピン)常に最高出力で回転させる用途ならば、抵抗を介して電池ボックスの+端子へ接続します。(この接続なら3.3Vで頭打ちにならずに電池ボックスの電圧をモーターに供給できるはず。その場合のPWMはIN1/2をソフトウェアPWMで制御することになりそう。)

回路図は基本的にICにGPIOとモーターが生えてるだけなので省略。
ちなみに、マイコンやトランジスタなどを介してモーターを使う場合、逆起電力を吸収するためのダイオードが必要となりますが、このコントローラには逆起電力を吸収するためのダイオードが内蔵されていますので必要ありません。

動作方法

基本的にはIN1・IN2のオン・オフで制御し、Vrefの電圧を変更することでモーターの回転数を変更します。
IN1もしくはIN2のどちらかを1にすれば回転(正転・逆転)し、どちらも1にすればブレーキがかかります。

TA7291P制御時の動作
IN1 IN2 OUT1 OUT2 動作
0 0 ストップ(絶縁状態)
1 0 H L CW(正転) ※
0 1 L H CCW(逆転) ※
1 1 L L ブレーキ(短絡状態)

※正転・逆転はモーターの接続により入れ替わることがあります。

  • 両方のIOを「0」にする…
    両方のIOが0の場合はコントローラは何もしません。
    自動車で例えるならギアを「N」に入れた時と同じ動作をします。
    モーターは特に何もつながってない状態と同じ状態になり、回転中であればスイッチをオフにした時と同じように惰性で回転を続け停止します。
    IMG_5238
  • IN1を「1」にしてIN2を「0」にする…
    OUT1がHに、OUT2がLになります。
    自動車で例えるならギアを「1速・Dレンジ」に入れた時と同じ動作をします。
    モーターは電池に繋いだ状態となり回転します。
    IMG_5242
  • IN1を「0」にしてIN2を「1」にする…
    OUT1がLに、OUT2がHになります。
    自動車で例えるならギアを「R」に入れた時と同じ動作をします。
    上とは逆の方向でモーターは電池に繋いだ状態となり回転します。
    IMG_5243
  • 両方のIOを「1」にする…
    OUT1・OUT2ともにLとなり、モーターの端子が「短絡」状態となりブレーキが掛かります。
    自動車で言うとブレーキを踏んだ時と同様の動作です。(どちらかと言えばプリウスの回生ブレーキの方が動作が近いですが。)
    回転中のモーターは速やかに停止します。
    IMG_5239

接続例

IMG_5046_20151018

上記の部品をモーターに接続し、動作させている写真。
この写真ではVrefは抵抗を介してモーター用電源に接続しています。この状態だとモーターはON/OFFの動作となり、速度変更は出来ません。逆に、ON/OFFのみでいいのなら、この方がGPIOが2ポートで済みます。また、IN1/2にてPWM制御をする場合もこの接続をします。

なお、メーカーデータシートの応用例では、Vref⇔電池 間以外にも Vref・Vs⇔電池 のところにも抵抗を入れ、Vccに10μF、Vsに任意の電解コンデンサ、OUT1・OUT2間に直列で抵抗とコンデンサを取り付ける回路が書かれているので、実際に使用する場合はその回路で使用したほうが良いでしょう。

IMG_5048_20151018

VrefをPWM駆動の出来るGPIOに接続した写真。モーターの速度を制御するのならこの方法を取ります。

動作状態(動画)


↑回転制御


↑PWM制御

おわりに

モータードライバを使用したモーター制御の方法は以上です。
「制御」といえばやっぱりモーターは書かせませんよね。これがあることで移動したり動かしたりすることが出来るわけですから。やはり必須の事項だと思います。

ちなみにRaspberry Pi2にはPWM出力がやっぱり2つあるみたいなので2つ制御できますね。
もっとも、ソフトウェアPWMならもっとたくさん制御できますがね。

なお、今回は基本的なIOなのでソースコードは割愛します。
GPIOおよびPWMの制御については以下の記事を参考にしてください。

しかし、このICも生産終了予定品だそうなので何か代替出来るドライバを探さないといけませんな。
とはいえホビーユースで使用する分には十分な数出回っているでしょうし、割とメジャーなICなので2SC1815の時のようにセカンドソース品も出てくるでしょうから余り心配は要らないかもしれません。

総閲覧数:392 PV

“Raspberry Pi 2 で小型モーターを制御する” への1件のコメント

  1. […] 制御の知識はこちらを参考にしています. […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください