モータードライバ基板(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モーターにするか悩んでいるところです。
コメント