趣味のマイコンいじり

安価なマイコンを利用して作成したアプリの紹介です。

ArduinoとDRV8830の基板でDCモータを動かして見ました

  秋月電子のホームページにI2Cで制御できるDCモータドライブモジュールが
有りましたので購入してArduinoマイコンボードを使って調べてみました。
  また、このモジュールを使えばI2Cの2ピンのポートで最大9台までの
DCモータが制御できる事も分かりましたのでArduino用のライブラリも
同時に作成する事にしました。
  なお、検討当初、モータ駆動時のノイズの影響で高速回転にすると動作が
不安定になる問題が有りましたが、一般に知られているノイズ対策を行う事で
高速回転での動作の安定性も確保できる様になりました。
それらをまとめた状況は次の様になります。

<DRV8830モータドライバモジュールの概要>
    購入した「DRV8830モータードライバモジュール」はDRV8830のチップを
    マウントした基板で、次の様なものでした。
    イメージ 1

        I2Cでの制御方式で、2本の制御線で最大9台までのDCモータの制御が
        可能なものです。

        なお、モジュールのキットにはチップがマウントされた基板とマウント用の
        コネクタのみで、完成には次の部品が必要でした。

     [必要部品一覧]
      イメージ 2

<関連資料>
 
日本語のDRV8830のデータシートは次のURLから入手可能です
       URL : http://www.tij.co.jp/jp/lit/ds/symlink/drv8830.pdf


<テスト内容>

    モータードライバモジュールのテストは次の様な内容で、正回転と速度を
    変えた逆回転を繰り返す動作をさせる事にしました・

 [目的と結果]
    テストの確認目標は次のものでした。
    1.購入したものの動作方法の確認
    2.および、それが動作する事を確認
    3.ノイズ対策等の動作を安定させる為の方法の検討と確認

    結果としては、最初、高速回転にすると動作が途中で止まったり、回転方向
    切り替え直後に停止する問題が発生しましたが、モーター端子および
    モジュールの電源に一般的なノイズ対策を施す事で動作は安定し、期待した
    結果が得られる様になりました。

 [テストでの機器の接続]
   イメージ 3
    イメージ 4

 [テストコード]
  
テストコードでは今回作成したDRV8830チップ駆動用のライブラリを
   使用しています。そのライブラリコードはこちらから(exsamples
   フォルダ内に下記のコード有り)
          /*
            <DCモータドライバ DVR8830 駆動確認プログラム>
         
           このプログラムの動作には、こちらで作成した「DRV8830_bis」のライブラリが必要です。
           これを解凍してシステムのライブラリに追加して下さい。
           解凍後のフォルダの追加先 : C:\Program Files (x86)\arduino\libraries
                       (デホルトでのインストール時)
               
          */
         
          // 設定定義
          #define DRVADR   4            // モータドライブ基板の A0, A1 設定アドレス(open, open)
         
          // ライブラリの追加
          #include <DRV8830_bis.h>
         
          // DRV8830駆動用ライブラリのインスタンスを生成
          DRV8830_bis moter(2.5, 5.0);  // モータ最大電圧(2.5V)、ドライブ基板の電源電圧(5.0V)
                          // 電流制限用の抵抗がないので電源電圧を抑える(2.5V以上では発熱で中断)
         
          // 初期設定
          void setup()
          {
               // シリアルモニターの初期設定
               Serial.begin(9600) ;
          }
         
          // メインループ処理
          void loop()
          {
              // 変数の割り当て
              int ans;    // 読み込みデータ格納用バッファ
         
              // モータ正回転
              ans = moter.speed(DRVADR, 90); // 目標電圧の90%で正回転
              delay(3000) ;
         
              // レジスタ読み出し
              Serial.print("after 90% positive rotation ");
              OutRegcontent();
         
              // モータブレーキ
              ans = moter.brake(DRVADR);      // モータのブレーキ
              delay(500) ;
         
              // モータ逆回転
              ans = moter.speed(DRVADR, -60); // 目標電圧の60%で逆回転
              delay(3000) ;
         
              // レジスタ読み出し
              Serial.print("after 60% reverse rotation ");
              OutRegcontent();
          }
         
          // レジスタ内容シリアル出力
          void OutRegcontent(void)
          {
            int ans = moter.read(DRVADR);
            Serial.print(" control = 0x");
            Serial.print(ans & 0xFF, HEX);
            Serial.print(" fault = 0x");
            Serial.println(ans >> 8, HEX);
            return;
          }


     動作状況の確認はこちらから(Dropboxへのリンク)