
モータードライバ基板(DRV8876モジュール)を使用してDCモーターの回転制御を行ってみました。使い方を簡単にまとめておきます。
概要
入手したDRV8876モジュール

pololuのドライバ基板。
動作条件など
| モーターチャンネル | 一つ |
| 電源電圧 | 4.5~37v |
| 論理入力電圧 | 最大5.5v |
| 最大連続電流 | 1.1A |
| 瞬間最大電流 | 2.0A |
| 電流センサ出力 | 2500mV/A |
| PWM周波数 | 最大100kHz |
電流センシングが気になります。
準備(ピン配置、回路、ソース)
ピン配置
phase/enableモードで使いそうなピンのみ説明します。
| ピン | 説明 |
|---|---|
| VIN | 4.5~37v入力 |
| GND | – |
| VM | システム内の他のデバイスに逆方向保護された電力を供給 |
| OUT1 | モーター出力1 |
| OUT2 | モーター出力2 |
| EN | PWM信号を入力(速度制御) |
| PH | 正転/逆転(方向ピン) |
| PMODE | HIGH:PWMモード LOW:phase/enableモード |
| ~SLEEP | LOW:低電力スリープモード |
| CS | 電流センシング |
Arduinoと結線(回路図)

PMODEピン:LOWでphase/enableモード。ENピンにPWM信号。PHピンに2番ピンで回転方向。CSピンにArduinoA0ピンを接続して電圧(電流)測定します。

ブレッドボードで繋いでます。ArduinoにはPCからUSBで5v給電。モーターへは安定化電源から6.6vを給電してます。
ソースコード
uint32_t raw;
float current;
float vol;
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
}
void loop() {
analogWrite(6, 100);
raw = 0;
for (int i = 0; i < 1000; i++) {
raw += analogRead(A0);
// delay(1);
}
vol = 5.0 * (raw / 1000.0) / (1 << 10);
Serial.println(vol, 3);
delay(3000);
digitalWrite(2, !digitalRead(2));
}
おおよそ3秒おきに回転方向を反転。シリアルモニタで電圧値を表示させているスケッチです。このスケッチ書き込んで稼働確認してみました。
稼働確認

問題無く回転しました。電流センサーもきちんと動いてる感じ。
リアクションホイールに使用するモーターをDCモーターにするかBLDCモーターにするか悩んでいるところです。
コメント