EverydayThanks

PIC・arduinoなど電子工作の備忘録

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

ArduinoUNO+A4988でステッピングモータを回す

2014年08月02日 | arduino

 

以前、壊れたプリンタからとっておいたステッピングモータ(EM-483)があったので、今回、Pololu社製モータドライバを使いarduinoUNOで動かしてみた。図1に実態配線図を示す。(動画は、ボードへはUSBにて給電している。)

 


 

使用部品

1.バイポーラステッピングモータ(EM-483 データシート持たず、、、)

2.ArduinoUNO

3.電解コンデンサ(100μF)

4.ステッピングモータドライバ(Pololu A4988)

 


 

A4988について

 

右上より時計回り

VMOT:ステッピングモータ供給電源(8V-35V)

GND:ステッピングモータ供給電源GND

2A〜1B:ステッピングモータ端子

VDD:ボード電源(3.3Vまたは5V)

GND:ボードGND

DIR:モータの回転方向(High・Low)

STEP:パルスを与えると回転する(Full stepに設定したとき200stepで一回転する)

SLEEP・RESET:短絡しておく

MS1〜MS3:各PinのHigh・Low状態によって、stepサイズを変更できる。


MS1MS2MS3Microstep Resolution
Low Low Low Full step
High Low Low Half step
Low High Low Quarter step
High High Low Eighth step
High High High Sixteenth step


今回は、MS2のみHighなのでQuarter step。Full stepの4倍。つまり800stepで一回転する。

ENA:Enable端子。Low状態で動作する。


 

図1)Fritzingによる実態配線図

 

 


 

ソースリスト

int x;

void setup() {
  pinMode(6,OUTPUT); // Enable → Arduinoの6番ピンへ
  pinMode(5,OUTPUT); // Step → Arduinoの5番ピンへ
  pinMode(4,OUTPUT); // Dir → Arduinoの4番ピンへ
  digitalWrite(6,LOW); // Set Enable low → Low状態でEnable
}

void loop() {

  digitalWrite(4,HIGH); // Set Dir High → 回転方向をセット
  for(x = 0; x < 200; x++) // 括弧内を200回実行
  {
    digitalWrite(5,HIGH); // 5番ピンをHigh状態へ
    delayMicroseconds(500); // 500ms待って
    digitalWrite(5,LOW); // 5番ピンをLow状態へ
    delayMicroseconds(500); // 500ms待って
  }
  delay(1000); // 1秒待つ

 

  digitalWrite(4,Low); // Set Dir Low → 回転方向を反対方向へセット
  for(x = 0; x < 200; x++) // 括弧内を200回実行
  {
    digitalWrite(5,HIGH); // 5番ピンをHigh状態へ
    delayMicroseconds(500); // 500ms待って
    digitalWrite(5,LOW); // 5番ピンをLow状態へ
    delayMicroseconds(500); // 500ms待って
  }
  delay(1000); // 1秒待つ

delayやdelayMicrosecondsの値をいろいろ変えて試してみてください。


 

以下のサイトを参考にさせていただきました。

ソースはほとんど同じです。

参考1:pololu社サイト

参考2:Fritzing A4988 single stepper test

 

 


この記事をはてなブックマークに追加

ArduinoでDCモータをPWM制御する

2014年06月01日 | arduino

 

 

1)実体配線図とスケッチを示す.

http://snagai4500.blogzine.jp/photos/uncategorized/2012/05/27/dcmotorpwm_3.png

 

#include <LiquidCrystal.h>

#define VR1 0
LiquidCrystal lcd(12,11,5,4,3,2);

void setup(){
  lcd.begin(16,2);
  pinMode(0,OUTPUT); //信号用ピン
  pinMode(1,OUTPUT); //信号用ピン
}

void loop(){
  int val;
  float f;
  val = analogRead(VR1)/2;
 
  if(val>=255 && val<=256){ //静止
    digitalWrite(0,LOW);
    digitalWrite(1,LOW);
    lcd.setCursor(0,0);
    lcd.print("STOP ");
  }else if(val>256){       //正転
    digitalWrite(0,HIGH);
    digitalWrite(1,LOW);
    analogWrite(6,val-256);
    lcd.setCursor(0,0);
    lcd.print("RIGHT");
  }else{                    //逆転
    digitalWrite(0,LOW);
    digitalWrite(1,HIGH);
    analogWrite(6,255-val);
    lcd.setCursor(0,0);
    lcd.print("LEFT ");
  }
  lcd.setCursor(0,1);
  lcd.print(val);
}

2)解説

作成中です.


この記事をはてなブックマークに追加