ArduinoとDRV8830の基板でDCモータを動かして見ました
秋月電子のホームページにI2Cで制御できるDCモータドライブモジュールが
有りましたので購入してArduinoのマイコンボードを使って調べてみました。
また、このモジュールを使えばI2Cの2ピンのポートで最大9台までの
DCモータが制御できる事も分かりましたのでArduino用のライブラリも
同時に作成する事にしました。
なお、検討当初、モータ駆動時のノイズの影響で高速回転にすると動作が
不安定になる問題が有りましたが、一般に知られているノイズ対策を行う事で
高速回転での動作の安定性も確保できる様になりました。
それらをまとめた状況は次の様になります。
<DRV8830モータドライバモジュールの概要>
購入した「DRV8830モータードライバモジュール」はDRV8830のチップを
マウントした基板で、次の様なものでした。
I2Cでの制御方式で、2本の制御線で最大9台までのDCモータの制御が
可能なものです。
なお、モジュールのキットにはチップがマウントされた基板とマウント用の
コネクタのみで、完成には次の部品が必要でした。
[必要部品一覧]
<関連資料>
日本語のDRV8830のデータシートは次のURLから入手可能です
URL : http://www.tij.co.jp/jp/lit/ds/symlink/drv8830.pdf
<テスト内容>
モータードライバモジュールのテストは次の様な内容で、正回転と速度を
変えた逆回転を繰り返す動作をさせる事にしました・
[目的と結果]
テストの確認目標は次のものでした。
1.購入したものの動作方法の確認
2.および、それが動作する事を確認
3.ノイズ対策等の動作を安定させる為の方法の検討と確認
結果としては、最初、高速回転にすると動作が途中で止まったり、回転方向
切り替え直後に停止する問題が発生しましたが、モーター端子および
モジュールの電源に一般的なノイズ対策を施す事で動作は安定し、期待した
結果が得られる様になりました。
[テストでの機器の接続]
[テストコード]
テストコードでは今回作成した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へのリンク)
有りましたので購入してArduinoのマイコンボードを使って調べてみました。
また、このモジュールを使えばI2Cの2ピンのポートで最大9台までの
DCモータが制御できる事も分かりましたのでArduino用のライブラリも
同時に作成する事にしました。
なお、検討当初、モータ駆動時のノイズの影響で高速回転にすると動作が
不安定になる問題が有りましたが、一般に知られているノイズ対策を行う事で
高速回転での動作の安定性も確保できる様になりました。
それらをまとめた状況は次の様になります。
<DRV8830モータドライバモジュールの概要>
購入した「DRV8830モータードライバモジュール」はDRV8830のチップを
マウントした基板で、次の様なものでした。
I2Cでの制御方式で、2本の制御線で最大9台までのDCモータの制御が
可能なものです。
なお、モジュールのキットにはチップがマウントされた基板とマウント用の
コネクタのみで、完成には次の部品が必要でした。
[必要部品一覧]
<関連資料>
日本語のDRV8830のデータシートは次のURLから入手可能です
URL : http://www.tij.co.jp/jp/lit/ds/symlink/drv8830.pdf
<テスト内容>
モータードライバモジュールのテストは次の様な内容で、正回転と速度を
変えた逆回転を繰り返す動作をさせる事にしました・
[目的と結果]
テストの確認目標は次のものでした。
1.購入したものの動作方法の確認
2.および、それが動作する事を確認
3.ノイズ対策等の動作を安定させる為の方法の検討と確認
結果としては、最初、高速回転にすると動作が途中で止まったり、回転方向
切り替え直後に停止する問題が発生しましたが、モーター端子および
モジュールの電源に一般的なノイズ対策を施す事で動作は安定し、期待した
結果が得られる様になりました。
[テストでの機器の接続]
[テストコード]
テストコードでは今回作成した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へのリンク)