RaspberryPi PicoでDCモータとモータドライバを使う

コンピュータ、組み込み

Raspberry Pi Pico とモータドライバを使って小型のDCモータを制御します。
速度と回転方向を制御します。
モータドライバTB6612FNG(md08a)と、2種類のDRV8833を評価します。

今回紹介するもの

DCモータドライバ(md08a)

特徴

1個または2個のDCモータを個別に制御ができます。
PWM制御によりモータの回転数を制御できます。
モータの回転方向を設定できます。

製品情報

出力1A
モータ電源電圧4.5 ~ 13.5V
ロジック電源電圧2.7 ~ 5.5V
PWM制御最大 100kHz

Switch sienceで購入できます。
検索 : TB6612FNG (\770) Sep/2022

ピン配置

外観

DCモータドライバ(DRV8833(R))

同じIC(DRV8833)の赤い基板と黒い基板のタイプがあります。
識別のためにDRV8833(R)赤い基板とDRV8833(B)黒い基板と識別します。

特徴
できることは md08a(TB6612FNG)と同じですが、安価で入手性もよい。
1個または2個のDCモータを個別に制御ができます。
PWM制御によりモータの回転数を制御できます。
モータの回転方向を設定できます。

製品情報

モータ電源電圧2.7 ~ 10.8V
ロジック電源電圧0 ~ 5V

Amazonで購入できます。
検索 : DRV8833 (R)(\130~\200) Sep/2022

ピン配置

外観

DCモータドライバ(DRV8833(B))

同じIC(DRV8833)の赤い基板と黒い基板のタイプがあります。
識別のためにDRV8833(R)赤い基板とDRV8833(B)黒い基板と識別します。

特徴

DRV8833(R)に比べて4ピン少ないが、できることはDRV8833(R)と同じ。
1個または2個のDCモータを個別に制御ができます。
PWM制御によりモータの回転数を制御できます。
モータの回転方向を設定できます。

製品情報

出力1.5A
モータ電源電圧3 ~ 10V
ロジック電源電圧
ロジック電源電圧の製品情報は見つかっていませんが、現在RP2040系(3.3V)で動作確認できています。

Amazonで購入できます。
検索 : DRV8833 (\120~\190) Sep/2022

ピン配置

外観

DCモータ

特徴

小型のラジコンやミニ4駆で使われるモータです。
電流の流れる方向で回転方向、電圧で回転数を制御できますが、今回回転数はPWMにより制御します。

外観

軸には回転がわかるようにするためにシャフトが取り付けてあります。

使ってみて

DCモータと複数のモータドライバをRaspberryPi Picoを使って制御してみました。

md08aは高価で配線が多いですが、モータの回転数が最もなめらだだったと思います(主観)
電気効率が最も良いと想像しています。

DRV8833はRもBも安価で配線が少ないので導入は早いですが、md08aと比べると回転が重そうに感じました。

確認できる方法が見つかりましたら追記します。

DCモータは高速な回転動力を得るために使用します。
ミニ四駆やプラレールなど動きっぱなし用途では手軽に利用できます。
今回紹介したDCモータドライバを使用すれば、回転速度の調整や回転方向の制御を手軽に行うことができました。
ただ、回転量や回転速度の精度を求める制御が難しく、精度の必要な位置決めや、厳格な速度コントロール用途には不向きです。

精度の必要な位置決めや速度制御にはステッピングモータやサーボモータなどが使われます。

準備

使うもの

名称(型番)用途
汎用DCモータ今回の主役。回ってもらいます。
DCモータドライバ
TB6612FNG
(md08a)
マイコン基板から指示を受け、DCモータを制御する。
DCモータドライバ
(DRV8833(R))
マイコン基板から指示を受け、DCモータを制御する。
DCモータドライバ
(DRV8833(B))
マイコン基板から指示を受け、DCモータを制御する。
制御マイコン基板
RaspberryPi Pico
回転数や方向を指示するマイコン基板。
制御マイコン基板
RP2040-Zero
RaspberryPi Pico の代わり
どちらを使ってもかまいません。
ブレッドボードマイコン基板、ドライバを配置する。
ジャンパワイヤ
両端ワニ口クリップ
マイコンやドライバとの配線に使用。
バッテリーモータの電源に使用。
今回充電式電池 単3を2本直列(2.4V)を使用します。
スライド抵抗つまみの位置により抵抗が変化します。
モーターの回転数や方向の設定に使用します。

ライブラリ

ボードライブラリ

マイコン基板ライブラリ
Raspberry Pi PicoRaspberry Pi RP2040 Boards(x.x.x)※ > Raspberry Pi Pico
※記載時は 2.3.2を使用

動作 TB6612FNG(md08a)

TB6612FNG(md08a)の配線

Raspberry
Pi Pico
配線色TB6612FNG
(md08a)
配線色DCモータ配線色可変抵抗配線色バッテリー
3.3VVCC
3.3VSTBY
3.3VP1
GNDGNDP3-minus
GP16PWMA
GP18AIN1
GP19AIN2
GP28P2
VMOT+plus
AO1M1
AO2M2

スケッチ TB6612FNG(md08a)

/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license

About Licence
当サイトで掲載しているスケッチのライセンスについて OSSの利用について 当サイトで掲載しているスケッチおよびプログラム(以下プログラム)は、Open Source Software(以下OSS)を利用しています。誰でも当サイトに掲載されて...
【スケッチの説明】 Raspberry Pi Pico 基板で使用できます。 DCモータドライバを使用して、DCモータの回転方向と回転速度を制御します。 スライド抵抗の抵抗値を読み出し、中間値より大きい場合は正回転、小さい場合は逆回転します。 中間値から離れるほど回転速度が速くなります。 【ライブラリ】 Raspberry Pi RP2040 Boards(2.3.2) > Raspberry Pi Pico 【準備】 Raspberry Pi Pico - モータドライバ md08a 3.3V -> VCC, STBY GND -> GND GP16 -> PWM(速度制御) GP18 -> AIN1(回転方向1) GP19 -> AIN2(回転方向2) Raspberry Pi Pico - スライド抵抗 3.3V -> スライド抵抗電源 GND -> スライド抵抗 GP28 -> 出力 Raspberry Pi Pico - バッテリー GND -> - モータドライバ md08a - DCモータ AO1 -> どちらか AO2 -> どちらか モータドライバ md08a - バッテリー VMOT -> + 【バージョン情報】 2022/7/26 : 新規 **********************************************************************/ #define PIN_POTADC 28 //スライド抵抗からの電圧信号 #define PIN_PWM 16 //PWMによる回転速度制御 #define PIN_DIR1 18 //モータの回転方向1 #define PIN_DIR2 19 //モータの回転方向2 #define ADC_SIZE 1024 //ADCのサイズ(10bit) #define PWM_SIZE 256 //PWMのサイズ(8bit) void setup() { //各ピンの出力方向の設定 pinMode(PIN_POTADC, INPUT); //固定抵抗は電圧の読み取りを行う pinMode(PIN_PWM,OUTPUT); //回転速度と方向の出力 pinMode(PIN_DIR1,OUTPUT); pinMode(PIN_DIR2,OUTPUT); } void loop() { int pot_adc = analogRead(PIN_POTADC) - (ADC_SIZE / 2); //スライドの位置が半分より左側ならマイナス、右側ならマイナスにする int pwm = pot_adc / (ADC_SIZE / PWM_SIZE); //ADCの読み取り分解能10bit(1024)を、PWMの設定分解能8bit(256)へ変換する //速度がマイナス側なら逆転、プラス側なら正転 if(pwm < 0) { digitalWrite(PIN_DIR1, LOW); digitalWrite(PIN_DIR2, HIGH); } else { digitalWrite(PIN_DIR1, HIGH); digitalWrite(PIN_DIR2, LOW); } //速度の設定を行う。 //マイナスを使うため半値オフセットしていたため、倍にして最大PWM設定値を使用できるようにする。 //整数のみ設定するため、abs()を使う analogWrite(PIN_PWM, abs(pwm) * 2); }

結果

動作 DRV8833(R) & DRV8833(B)

DRV8833の動作は簡単にするために可変抵抗を使わないで、回転方向と速度を変更します。
端子が違うので配線はそれぞれ違いますが、同じスケッチを使用します。

配線図では単三2本を使って弱弱しく回転する程度なので、3.7Vバッテリー以上を推奨します。

DRV8833(R)の配線

RP2040 Zero配線色DRV8833(B)配線色DCモータ配線色バッテリー
GNDGND-minus
GP1IN1
GP2IN2
VM+Plus
OUT1M1
OUT2M2

DRV8833(B)の配線

RP2040 Zero配線色DRV8833(R)配線色DCモータ配線色バッテリー
GNDGND-minus
GP1AIN1
GP2AIN2
VM+Plus
AO1M1
AO2M2

スケッチ DRV8833(R) & DRV8833(B)

このスケッチはDRV8833(R)でもDRV8833(B)のどちらでも使用できます。
DRV8833(B)の時はSTBY端子がないので、配線しない状態で使用します。

/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license

About Licence
当サイトで掲載しているスケッチのライセンスについて OSSの利用について 当サイトで掲載しているスケッチおよびプログラム(以下プログラム)は、Open Source Software(以下OSS)を利用しています。誰でも当サイトに掲載されて...
【スケッチの説明】 RP2040 搭載基板で使用できます。 ※LogicLevel 3.3Vの基板であれば使用できると思いますが、動作確認はしていません。 DCモータドライバを使ってDCモータの回転方向と回転速度を制御します。 起動後、正回転で徐々に回転速度を上げてから徐々に回転速度を下げていきます。 その後、逆回転で徐々に回転速度を上げてから徐々に回転速度を下げていきます。 【ライブラリ】 Raspberry Pi RP2040 Boards(2.3.2) > Raspberry Pi Pico 【準備】 Raspberry Pi Pico - モータドライバ md08a 3.3V -> STBY ※DRV8833(B)のときは不要 GND -> GND GP1 -> AIN1(回転方向1) GP2 -> AIN2(回転方向2) モータドライバ DRV8833 - DCモータ AO1 -> どちらか AO2 -> どちらか モータドライバ DRV8833 - バッテリー VM -> + GND -> - 【バージョン情報】 2022/9/6 : 新規 **********************************************************************/ #define VIN1 1 #define VIN2 2 void setup() { pinMode(VIN1, OUTPUT); pinMode(VIN2, OUTPUT); } void loop() { int i = 0; //正回転 digitalWrite(VIN2, LOW); //回転速度を上げる for(i = 0; i < 256; i ++) { analogWrite(VIN1, i); delay(10); } //回転速度を下げる for(i = 0; i < 256; i ++) { analogWrite(VIN1, 0xff - i); delay(10); } //逆回転 digitalWrite(VIN1, LOW); //回転速度を上げる for(i = 0; i < 256; i ++) { analogWrite(VIN2, i); delay(10); } //回転速度を下げる for(i = 0; i < 256; i ++) { analogWrite(VIN2, 0xff - i); delay(10); } }

結果

DRV8833(R)の結果

DRV8833(B)の結果

コメント

タイトルとURLをコピーしました