'스테핑모터'에 해당되는 글 2건

  1. 2010.08.02 아두이노 - 내장 라이브러리 사용 스테핑 모터 구동 소스.
  2. 2010.08.02 아두이노 - 스테핑 모터 컨트롤러(SLA7062M) 소스

아두이노 - 내장 라이브러리 사용 스테핑 모터 구동 소스.

왜인지 몰라도 탈조가 있다
마찬가지로 GND로 풀다운된 4개의 스위치에 의해 동작한다.
회로도는 아두이노 홈피에 나온 회로도를 이용


풀브릿지 칩은손쉽게 구할 수 있는 모터 구동용 칩 L298N 을 사용하자.
결선은 소스를 참조.

#include <Stepper.h>

#define    _DEBUG_PRINT_

#define    EN_PIN         (3)
#define    LED_PIN        (13)
#define    MOTOR_INPUT1_PIN      (5)
#define    MOTOR_INPUT2_PIN      (4)
#define    MOTOR_INPUT3_PIN      (6)
#define    MOTOR_INPUT4_PIN      (7)
#define    KEY1_PIN          (10)
#define    KEY2_PIN          (11)
#define    KEY3_PIN          (12)
#define    KEY4_PIN          (9)

const int analogInPin = 0;  // Analog input pin that the potentiometer is attached to

int sensorValue = 0;        // value read from the pot
Stepper step1 = Stepper(200,MOTOR_INPUT1_PIN,MOTOR_INPUT2_PIN,MOTOR_INPUT3_PIN,MOTOR_INPUT4_PIN);
short output = 0;
void setup() {
  // initialize serial communications at 9600 bps:
  pinMode(EN_PIN, OUTPUT);     
  pinMode(LED_PIN, OUTPUT);
  
  pinMode(KEY1_PIN,INPUT);
  pinMode(KEY2_PIN,INPUT);
  pinMode(KEY3_PIN,INPUT);
  pinMode(KEY4_PIN,INPUT);

  #ifdef _DEBUG_PRINT_
  Serial.begin(9600); 
  Serial.println("Start step motor contorller ver 0.1 (made by Kim Hyuk)");
  #endif // _DEBUG_PRINT_
}

int outputValue;
unsigned long  t;

int speed_table1[] = {
  10,20,30,40,50,60,70,80,90,100,      //20
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 

  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,100,100,100,100,100,100,100,100,100, 
  100,90,80,70,60,50,40,30,20,10};          // 200
  
void loop() {
   uint8_t i;
  // read the analog in value:
  t = millis();
  
  if(t % 500 > 200) digitalWrite(LED_PIN,LOW);
  else if(t % 500 < 200) digitalWrite(LED_PIN,HIGH);
  
  if(digitalRead(KEY1_PIN)) { // defaut == 0;
  #ifdef _DEBUG_PRINT_
    Serial.println("Key 1");
  #endif // _DEBUG_PRINT_
    digitalWrite(EN_PIN, HIGH);
    step1.setSpeed(100);
    step1.step(100);
  } else if(digitalRead(KEY2_PIN)) {
  #ifdef _DEBUG_PRINT_
    Serial.println("Key 2");
  #endif // _DEBUG_PRINT_
    digitalWrite(EN_PIN, HIGH);
    for(i =0; i< 100;i++) {
      step1.setSpeed(speed_table1[i]);
      step1.step(2);
    }
  } else if(digitalRead(KEY3_PIN)) {
  #ifdef _DEBUG_PRINT_
    Serial.println("Key 3");
  #endif // _DEBUG_PRINT_
    digitalWrite(EN_PIN, HIGH);
    for(i =0; i< 100;i++) {
      step1.setSpeed(speed_table1[i]);
      step1.step(-2);
    }
  } else if(digitalRead(KEY4_PIN)) {
  #ifdef _DEBUG_PRINT_
    Serial.println("Key 4");
  #endif // _DEBUG_PRINT_
    digitalWrite(EN_PIN, HIGH);
    step1.setSpeed(100);
    step1.step(-100);
  } else {
    digitalWrite(EN_PIN, LOW);
  }
}

아두이노 - 스테핑 모터 컨트롤러(SLA7062M) 소스

간단하게..

// SLA7260 DATASHEET , 11page 회로도와 동일하게 구성
// 각각의 핀 연결은 다음과 같다.

#define  MOPIN      (7)
#define  M1PIN      (6)
#define  M2PIN      (2)
#define  SYNCPIN    (8)
#define  CWPIN      (4)
#define  CLKPIN      (3)
#define  RSTPIN      (5)
#define  ENPIN      (13)

// 4개의 택스위치를 연결한다. 평상시 vdd로 풀업되어 있다.

#define  INPUT1  (9)    // TACK SWTICH INPUT
#define  INPUT2  (10)
#define  INPUT3  (11)
#define  INPUT4  (12)

void setup()
{
  pinMode(MOPIN,INPUT);
  pinMode(M1PIN,OUTPUT);
  pinMode(M2PIN,OUTPUT);
  pinMode(CWPIN,OUTPUT);
  pinMode(CLKPIN,OUTPUT);
  pinMode(SYNCPIN,OUTPUT);
  pinMode(ENPIN,OUTPUT);
  pinMode(INPUT1,INPUT);
  pinMode(INPUT1,INPUT);
  pinMode(INPUT1,INPUT);
  pinMode(INPUT1,INPUT);
  pinMode(RSTPIN,OUTPUT);
  
  digitalWrite(M1PIN,LOW);    // 1/16 step
  digitalWrite(M2PIN,LOW);
  
  digitalWrite(SYNCPIN,HIGH);    // sync mode
  digitalWrite(RSTPIN,LOW);
  Serial.begin(9600);
  Serial.println("SLA7206M controller start..(made by Kim H)");
}

int steps[] = {
  200,190,180,170,160,150,140,130,120,110,
  100,90,80,70,60,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,

  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,

  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,

  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,50,50,50,50,50,
  50,50,50,50,50,60,70,80,90,100,
  110,120,130,140,150,160,170,180,190,200,
};


int steps2[] = {
  200,190,180,170,160,150,140,130,120,110,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,

  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,

  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,

  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  100,100,100,100,100,100,100,100,100,100,
  110,120,130,140,150,160,170,180,190,200,
};


void loop()
{
  int i,j;
  if(digitalRead(INPUT1) == 0) {
    Serial.println("Input1 key..");
    digitalWrite(ENPIN,HIGH);
    digitalWrite(CWPIN,HIGH);
    for(i = 0;i < 200;i++) {
      for(j = 0; j < 16;j++) {
        digitalWrite(CLKPIN,HIGH);
        delayMicroseconds(steps[i]);
        digitalWrite(CLKPIN,LOW);
        delayMicroseconds(steps[i]);
      }
    }
  } else if(digitalRead(INPUT2) == 0) {
    Serial.println("Input2 key..");
    digitalWrite(ENPIN,HIGH);
    digitalWrite(CWPIN,HIGH);
    for(i = 0;i < 200;i++) {
      for(j = 0; j < 16;j++) {
        digitalWrite(CLKPIN,HIGH);
        delayMicroseconds(steps2[i]);
        digitalWrite(CLKPIN,LOW);
        delayMicroseconds(steps2[i]);
      }
    }
    
  } else if(digitalRead(INPUT3) == 0) {
    Serial.println("Input3 key..");
    digitalWrite(ENPIN,HIGH);
    digitalWrite(CWPIN,LOW);
    for(i = 0;i < 200;i++) {
      for(j = 0; j < 16;j++) {
        digitalWrite(CLKPIN,HIGH);
        delayMicroseconds(steps[i]);
        digitalWrite(CLKPIN,LOW);
        delayMicroseconds(steps[i]);
      }
    }
    
  } else if(digitalRead(INPUT4) == 0) {
    Serial.println("Input4 key..");
    digitalWrite(ENPIN,HIGH);
    digitalWrite(CWPIN,LOW);
    for(i = 0;i < 200;i++) {
      for(j = 0; j < 16;j++) {
        digitalWrite(CLKPIN,HIGH);
        delayMicroseconds(steps2[i]);
        digitalWrite(CLKPIN,LOW);
        delayMicroseconds(steps2[i]);
      }
    }
  } else {
    digitalWrite(ENPIN,LOW);
  }    
}


prev 1 next