安く簡単に正転・反転できるDCモータドライバを使ってみました。
ICはDRV8833です。DCモータを2chまで制御できます。
ラズパイのGPIOからモータドライバ制御するまで紹介します。
モータドライバでDCの正転・反転を試してみる(DRV8833編)
安く簡単に正転・反転できるDCモータドライバを使ってみました。
ICはDRV8833です。DCモータを2chまで制御できます。
ICのデータシートを見て、回路図を確認しました。
最終的にラズパイのGPIOからモータドライバICを制御するまで紹介します。
下記動画でも(最初に動かなかったトラブル含めて)紹介しています。
モータドライバ DRV8833
DRV8833はモータドライバICです。使用電圧範囲が2.7~10.8Vと低い範囲で広いのが特徴です。
「ステッピングモーター」「DCモータ」を制御できます。
今回はDCモータを制御を制御します。
Amazonで5個入りのDRV8833の評価ボードを購入しました。
TAMIYAのDCモータ(FA130)
動かすモータは2種類で確認しました。
最初に確認したのは、TAMIYAのロボットセットに付いてきたモータです。
おそらく汎用のFA130だと思われます。
筆者が別で持っている単体でのFA130モータの外箱の仕様です。
推奨の使用電圧範囲が1.5~3.0Vです。
そのため3.0Vで動かせばドライバICとしてもモータとしても仕様範囲内で動作できます。
ただし下記記事でも紹介したように、モータ起動時には電圧降下があります。
適切な配線・接続をすれば3.0Vでも対応できますが、ICが動作しない可能性もあります。
3-6V対応のDCモータ
3V以上に対応したモータも用意して、今回のモータドライバIC経由で動作確認しています。
形状はFA130と全く同じです。
Amazonで購入した(若干怪しい)モータですが、問題なく動作できました。
ラズパイからモータドライバICを制御する
今回はドライバIC電源に単三電池x3本(約4.5V)を使っています。
「モータ起動時の大電流→電圧降下→ICが動作できない」を考慮してです。
先ほど記載しましたがFA130では電圧が仕様範囲外になっています。
自己責任で試すか、モータを変更するなどの対応をお願いします。
DRV8833への回路図
今回の回路図が下記となっています。ラズパイとDRV8833を接続しています。
※今回使ったDRV8833の評価ボードのピン名称で記載しています。
今回はA**でDCモータ1chで接続していますが、B**にも接続すれば2chを制御できます。
簡単にピンの機能を紹介します。
詳細はTIのDRV8833の公式のデータシートのご確認をお願いします。
- VM…DRV8833のドライバIC電源 (モータ電源)への端子
- GND…GND端子。4ピンあるが全て繋がっています。
- AIN*,BIN*…正転・反転を制御する入力端子
- AO*,BO*…モータ出力端子
- STBY…スタンバイ端子(公式ではnSLEEP)。制御するにはHiにします
ラズパイのPythonプログラム
ラズパイからはPythonを使ってGPIOを制御します。
GPIOからモータドライバICへの入力端子(AIN*,BIN*,STBY)を制御します。
ラズパイのPythonのプログラムの書き方は簡単です。
ラズパイ上のどこでもいいので「**.py」とファイルを作って、プログラムを書くだけです。
デフォルトでインストールされているソフト(Tonny)で実行まで出来ます。
今回使ったプログラムは下記です。
正転・反転を3秒ごとに入れ替えて、2回繰り返すだけの単純なものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(17,GPIO.OUT) GPIO.setup(27,GPIO.OUT) GPIO.setup(22,GPIO.OUT) for i in range(2): GPIO.output(17, False); GPIO.output(27, True); GPIO.output(22, True) time.sleep(3) GPIO.output(17, True); GPIO.output(27, False); GPIO.output(22, True) time.sleep(3) GPIO.cleanup() |
実行するには「Run」を押せば、プログラムが開始されます。
PWM制御を入れたプログラム
PWM制御を入れた下記プログラムでも動作確認しています。
単純にON(100%)するのと比べて、PWM制御を入れた分緩やかにモータが回ります。
PWM周波数・Duty比を弄って試してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import RPi.GPIO as GPIO import time # PWM周波数 PWM_FREQ = 50 # Duty比 (0-100の間で指定) DUTY_CYCLE = 50 GPIO.setmode(GPIO.BCM) GPIO.setup(17,GPIO.OUT) GPIO.setup(27,GPIO.OUT) GPIO.setup(22,GPIO.OUT) for i in range(2): GPIO.output(17, False); GPIO.output(22, True) pwm = GPIO.PWM(27, PWM_FREQ); pwm.start(DUTY_CYCLE) time.sleep(3) pwm.stop() GPIO.output(27, False); GPIO.output(22, True) pwm = GPIO.PWM(17, PWM_FREQ); pwm.start(DUTY_CYCLE) time.sleep(3) pwm.stop() GPIO.cleanup() |
まとめ
安く簡単に正転・反転できるDCモータドライバを使ってみました。
ICはDRV8833です。DCモータを2chまで制御できます。
ラズパイのGPIOからモータドライバ制御するまで紹介しました。
ぜひ皆様もDCモータ制御したい場合は、ドライバICを使ってみてください。
コメント