SSブログ

モータードライバでモーターを動かしてみる。 [Arduino]

モーターを動かしてみたいというのは前々から考えてたのですが、LEDとは違ってマイコンに直結するわけにも行かずちょっと調べてみました。
具体的には、ミニ四駆やプラレールなどに使われているおもちゃ用のFA-130タイプのモーターを動かしてみたいと思いました。
fa-130ra-2270.jpg
箱には、使用電圧範囲 1.5~3.0V、適正電圧 1.5V、消費電流 500mA とありました。

ちょっと秋月電子のページを見てみたら、BD6211というモータードライバをみつけました。

フルブリッジドライバ 7V BD6211F-E2: 半導体 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gI-05087/

bd6211.png

出力電流:1.0Aまでということで、モーターの消費電流 500mA以上あるのでいいかと思いきや、、

性能線図の見方と使用例|マブチモーター
http://www.mabuchi-motor.co.jp/ja_JP/technic/t_0201.html

で、みてみると、停動電流(Is)というのがあり、「回転中のモーターの負荷を増加させて、モーターの回転が停止した時の電流を停動電流(A)と表します。」と書いてありました。
データシートで見てみると、FA-130RA-2270 の STALL CURRENTに2.20A とありました。

FA-130RA - マブチモーター
http://www.mabuchi-motor.co.jp/en_US/cat_files/fa_130ra.pdf

まあ、でもホビーユースだし、、特徴 6)に「出力保護回路(過電流/過電圧/過熱/不足電圧)」って書いてあるし、、まあとりあえずつないでみるかということでやってみました。

ただ、通常のArduinoだと、システムが5Vになっているし、なにかやって壊れちゃうのもいやなので、ATtiny45Vと単3アルカリ乾電池2本で動かしてみることにしました。
SOP8ピンSIP化変換基板をつかってブレッドボードで使えるようにして、裏面にコンデンサーものせました。

SOP8ピンSIP化変換基板 (1枚): パーツ一般 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gP-06554/

で、こんな感じにしました。
bd6411test.jpg

モーターの配線からノイズが出るのか、配線の向きによってはリセットがかかったので、念のためプルアップ。
マイコンのロジックのIO電圧も乾電池の電圧より低めにでるようなので、プルアップしてみました。

bd6411test_circ.jpg

スケッチはこんな感じ。

// モータードライバ(BD6211F)のテスト (ATtiny45 1MHz版)
//    FIN   RIN   VREF  OUT1  OUT2
//     L     L     x     HiZ   HiZ   スタンバイ
//     H     L     VCC   H     L     正転
//     L     H     VCC   L     H     逆転
//     H     H     x     L     L     ブレーキ(停止)
//     PWM   L     VCC   H    #PWM   正転(PWM制御A)
//     PWM   H     VCC   L    #PWM   逆転(PWM制御B)(PWM duty比と出力が逆になる)

#include "wiring_private.h"                  // sbi(), cbi() を使うため
#include <util/delay.h>

#define  BD6211F_FIN      1                  // OC0B
#define  BD6211F_RIN      0

void setup() {
  pinMode( BD6211F_FIN ,     OUTPUT );       // OC0B
  pinMode( BD6211F_RIN ,     OUTPUT );
  // 20-100kHzほどのPWMを作成
  TCCR0A = _BV(WGM01) | _BV(WGM00);          // 高速PWM (TOP値 OC0A),
  TCCR0B = _BV(WGM02) | _BV(CS00);           // 分周なし
  TIMSK  = 0;               // タイマー割り込みの不許可 (Arduinoの時間系をつぶす)
  OCR0A  = 15;              // 62.5kHz @ 1MHz (←1MHz/16clk)  OC0B 0-15でPWMのduty比調整
}

void loop() {
  int motorPWM;             // モーターの出力
  // analogWriteは sbi(TCCR0A, COM0B1); をやってくれて OCR0Bに値を入れてくれる。
  // ただし、値が0だと digitalWrite を呼び出し、cbi(TCCR0A, COM0B1); でPWM OFFにされる。
  // ■正転(PWM制御A) スピードアップ
  cbi( TCCR0A, COM0B0 );    // OC0B非反転動作
  for( motorPWM = 1; motorPWM < 16; motorPWM++) { 
    analogWrite(  BD6211F_FIN , motorPWM ); 
    digitalWrite( BD6211F_RIN , LOW      );
    _delay_ms( 1000 );
  }
  // ■ブレーキ(停止)
  cbi( TCCR0A, COM0B0 );    // 標準ポート動作(OC0B切断)
  digitalWrite( BD6211F_FIN , HIGH );
  digitalWrite( BD6211F_RIN , HIGH );
  _delay_ms( 2000 );
  // ■正転(PWM制御A) スピードダウン
  cbi( TCCR0A, COM0B0 );    // OC0B非反転動作
  for( motorPWM = 15; motorPWM > 0; motorPWM--) { 
    analogWrite(  BD6211F_FIN , motorPWM );
    digitalWrite( BD6211F_RIN , LOW      );
    _delay_ms( 1000 );
  }
  // ■逆転(PWM制御B) スピードアップ
  sbi( TCCR0A, COM0B0 );    // OC0B反転動作
  for( motorPWM = 1; motorPWM < 16; motorPWM++) { 
    analogWrite(  BD6211F_FIN , motorPWM );
    digitalWrite( BD6211F_RIN , HIGH     );
    _delay_ms( 1000 );
  }
  // ■スタンバイ
  cbi( TCCR0A, COM0B0 );    // 標準ポート動作(OC0B切断)
  digitalWrite( BD6211F_FIN , LOW  );
  digitalWrite( BD6211F_RIN , LOW  );
  _delay_ms( 2000 );
  // ■逆転(PWM制御B) スピードダウン
  sbi( TCCR0A, COM0B0 );    // OC0B反転動作
  for( motorPWM = 15; motorPWM > 0; motorPWM--) { 
    analogWrite(  BD6211F_FIN , motorPWM );
    digitalWrite( BD6211F_RIN , HIGH     );
    _delay_ms( 1000 );
  }  
}

動いている様子です。

わかりにくいので、音で感じてください。


マブチモーター FA-130RA

マブチモーター FA-130RA

  • 出版社/メーカー: マブチモーター
  • メディア: おもちゃ&ホビー


タグ:モーター
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。