記事一覧

M5StickCでI2CモータードライブDRV8830テスト

M5StickCでI2CモータードライブDRV8830テスト



こんにちはRoboTakaoです。

今回はM5StickCでI2C接続のモータードライブ基板DRV8830(秋月)を試してみました。

M5StickC_Tank01.jpg

構成
 M5StickC
 DRV8830
 タミヤ ダブルギヤボックス
 タミヤ トラック&ホイールセット
 DCモーター 130
 ニッケル水素電池 単三x4

DRV8830
drv8830.jpeg

M5StickCはポートが少ないのでI2C接続ができる秋月の定番基板を2個使用しました。

データシート(日本語)

結線

M5StickC_Tank03.png

・I2CのSDA,SCLは電源の4.8Vに2.2kΩでプルアップしました。

・A0,A1でI2Cアドレスを設定します。
 今回は下記としました。
  右側用DRV8830のA0,A1をHigh(Vccと接続)→ 0x60
  左側用DRV8830のA0,A1をLow(GNDと接続)→ 0x68

・DRV8830のISENCEは電流制限を抵抗R1,R2で設定します。
  R=200mV/Ilimit
 DRV8830の定格電流が1Aなので0.2Ωとしました。
 ただし後述しますが、モーターのバラツキ等で調整するのが良さそう

・バッテリーは定電圧エラーの閾値2.75V以上に常になるようしないといけません。
 3V程度だと、負荷を受けた時に2.75V以下になってFAULTになる可能性があります。

失敗談
 最初、バッテリーを3Vとしていたことで全く動かず。
 電圧は上げましたが、なぜかモーターの回転数がやたら低かったり、うまく動きませんでした。
 どうもモーターでは回るものと回らないものがあるようです。

 起動時のサージ電流が抵抗で設定した電流制限にかかると電流を絞っているか
 DRV8830の保護閾値の3A以上になるとFAULTに掛かって停止しているようです。

 今回最初使用したDCモーターはマブチのFA-130RAと互換のノーブランドモーターです。

 しかしながらマブチのモーターでも巻線径と巻き数で数種類あるようです。

  定格1.5VのFA-130RA-2270 線径0.22mm 70ターン
  定格3VのFA-130RA-18100 線径0.18mm 100ターン

 ターン数の違いで自己インダクタンスが異なっていて、サージの大きさに差が生まれているのではないかと思います。
 (ただし、サージ電流は実測できていないのであくまで推測です。)

 結局のところ左右の片側の電流制限用の抵抗を0.1Ωx3個並列にして0.033Ωに設定していい感じに動くようになりました。


Blynk
コントロールは前回紹介したBlynkを使用します。
使い方の概略は前回の投稿を参考にしてください。

ジョイスティックの設定は画像のようにしました。

M5StickC_Tank04.png

M5StickC_Tank05.png


動作確認

いい感じでくるくる回ります。



M5StickCのスケッチ


#define BLYNK_PRINT Serial

#define BLYNK_USE_DIRECT_CONNECT

#include <M5StickC.h>
#include <BlynkSimpleEsp32_BLE.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <Wire.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"; //メールで送られるAuth Token

const int motorL = 0x60;
const int motorR = 0x68;

long Speed;
long SpeedL, SpeedR;

void setup()
{
M5.begin();
M5.Lcd.println("Blynk");
M5.Lcd.print("TANK BLE TEST");

// Debug console
Serial.begin(9600);

Serial.println("Waiting for connections...");

Blynk.setDeviceName("M5StickC_TANK_Blynk");

Blynk.begin(auth);

Wire.begin(0, 26); //SDA, SCL

writeMotorResister(motorL, 0x00, 0x00);
writeMotorResister(motorR, 0x00, 0x00);
}

//モータドライバ I2C制御 motor driver I2C
void writeMotorResister(int motor, byte vset, byte data1){
int vdata = vset << 2 | data1;
Wire.beginTransmission(motor);
Wire.write(0x00);
Wire.write(vdata);
Wire.endTransmission(true);
}

void loop()
{
Blynk.run();
}

//ジョイスティックのデータ受信
BLYNK_WRITE(V0) {
long s = param[0].asInt();

Serial.print("s: ");
Serial.println(s);

Speed = abs(s);

//モータ制御
if(s >= 0){
writeMotorResister(motorR, byte(Speed), 0x01);
}else{
writeMotorResister(motorR, byte(Speed), 0x02);
}
}

BLYNK_WRITE(V1) {
long s = param[0].asInt();

Serial.print("s: ");
Serial.println(s);

Speed = abs(s);

//モータ制御
if(s >= 0){
writeMotorResister(motorL, byte(Speed), 0x01);
}else{
writeMotorResister(motorL, byte(Speed), 0x02);
}
}

スポンサードリンク

コメント

コメントの投稿

非公開コメント

プロフィール

RoboTakao

Author:RoboTakao
みなさんご訪問ありがとうございます。ロボット作りたいけどお小遣いそんなにないし、簡単でローコストでロボットを作るための私のプロジェクトを紹介します。

ウェブサイトもありますのでそちらもよろしくお願いします。
http://robotakao.jp/

スポンサーリンク