Amazonで買えるBTS7960モータードライバをArduinoに接続、DCモーターを速度制御してみたのでやり方を紹介したいと思います。
BTS7960モータードライバとは
DCモーターをPWMで速度制御できる汎用基盤です。電源が直流6~27Vのモーターに使用可能。
簡単に説明すると、モータードライバ無しで電源を繋げただけのDCモーターは1方向で無負荷で定速回転しかしませんが、モータードライバを使うことで回転方向と速度の制御ができるようになります。
仕様
入力電圧 | 6 ~ 27 VDC |
最大電流 | 43 Amp |
PWM周波数 | 最大25kHz |
制御入力電圧 | 3.3 ~ 5 V |
制御モード | PWM又はレベル |
データシートより抜粋
https://www.handsontec.com/dataspecs/module/BTS7960%20Motor%20Driver.pdf
制御入力
Pin | 機能 | 説明 |
1 | RPWM | 右回転レベル又はPWM信号入力 |
2 | LPWM | 左回転レベル又はPWM信号入力 |
3 | R_EN | 右回転 動作有効 (High 有効、Low無効) |
4 | L_EN | 左回転 動作有効 (High 有効、Low無効) |
5 | R_IS | 右回転動作 電流アラーム |
6 | L_IS | 左回転動作 電流アラーム |
7 | Vcc | +5V |
8 | Gnd | 接地 |
準備したもの
BTS7960モータードライバ
Arduino UNO
以前購入したELEGOOの入門キットを使用
775モーター
今回電源は12Vで使用。私が使っている物はAliExpressで買った遊星歯車減速機付き。
ボリューム 10k ohm
BTS7960モータードライバでモーターを回してみる
接続図
BTS7960とAruduino UNOを上図のように接続。
BTS7960側は[R_PWM], [L_PWM], [R_EN], [L_EN]の4点のみ、[Vcc]と[GND]は接続不要です。
Arduino側は10から13番ピンのデジタルアウトプット、Arduinoの電源はUSB接続にしました。
プログラムコード
一からプログラムして出力を出すこともできますが、GitHubにライブラリデータがあったのでこちらを使用しています。
ダウンロードして解凍したフォルダ [ BTS7960Library-master ] を [ AruduinoIDEインストール先 / libraries ]内に保存して使用します。
サンプルコード
#include "BTS7960.h"
//ピン番号設定 BTS7960(uint8_t RPWM,uint8_t LPWM,uint8_t L_EN,uint8_t R_EN)
BTS7960 m1(10,11,12,9);
void setup() {
}
void loop() {
//BTS7960 Motordriver 有効
m1.enable();
//正転 最大速度まで加速
for(int speed = 0 ; speed < 255; speed++) m1.setSpeed(speed);
// 逆転 最大速度まで加速
for(int speed = 255 ; speed > -255; speed--) m1.setSpeed(speed);
// モーター停止, m1.setSpeed(0)と同様
m1.stop();
m1.disable();
}
ライブラリデータのExampleに使い方の説明がありましたので日本語でコメント書いてみました。
モーター正転加速➡減速➡逆転加速➡減速を繰り返すプログラム
#include "BTS7960.h"
//BTS7960(uint8_t RPWM,uint8_t LPWM,uint8_t L_EN,uint8_t R_EN)
BTS7960 m1(10,11,12,13);
void setup() {
}
void loop() {
//enable the BTS7960 Motordriver
m1.enable();
//increase to fullspeed
for(int speed = 0 ; speed < 255; speed++) {
delay(50);
m1.setSpeed(speed);
}
// decrease speed to full backwards
for(int speed = 255 ; speed > -255; speed--){
delay(50);
m1.setSpeed(speed);
}
for(int speed = -255 ; speed < 0; speed++) {
delay(50);
m1.setSpeed(speed);
}
delay(1000);
}
とりあえずモータードライバが動くか試すために上記コードを書き込んでみました。
ArduinoIDEにライブラリデータを入れてコピペで書き込めば動きます。
ボリュームのつまみでモーターの回転方向と速度制御する
接続図
A0への入力に10kΩのボリュームを追加。
ボリュームで回転方向と速度を制御するように作ってみます。
プログラムコード
#include "BTS7960.h"
//BTS7960(uint8_t RPWM,uint8_t LPWM,uint8_t L_EN,uint8_t R_EN)
BTS7960 m1(10,11,12,13);
const int VOL = A0;
void setup() {
}
void loop() {
int ad;
int speed;
ad = analogRead( VOL );
speed = ad * 510.00 / 1023 - 255.00 ;
//enable the BTS7960 Motordriver
m1.enable();
m1.setSpeed(speed);
}
A0でAD変換された値
はボリュームを右いっぱいに回すと1023、左いっぱいで0が入ってきます。速度設定 [speed] は-255で左回転最高速度、0で停止、+255で右回転最高速度となるのでボリュームがセンターの位置で0、左いっぱいで-255、右いっぱいで+255となるように計算式を書いてボリュームのつまみでモーターの回転方向と速度が制御できるようになりました。
ライブラリを使うと簡単です。
ご参考まで。