Arduino Stepper-Motor

Her er en liten beskrivelse som viser noe av prinsippet for styring av en stepper-motor.

En video som viser hvordan lysdiodene tennes i rekkefølge:

Diodene tennes en og en, i riktig rekkefølge. For å trekke en steppermotor så behøver vi å forsterke strømmen i utgangspretsen enten ved å bruke 4 transistorer eller en hardware driver.

Eksempel på en enkel programkode som viser «grunnprinsippene»:


int pinne1=8;
int pinne2=9;
int pinne3=10;
int pinne4=11;

int tid=1000;

void setup() {
  // Bestemmer hva som er utganger:
  pinMode(pinne1,OUTPUT);
  pinMode(pinne2,OUTPUT);
  pinMode(pinne3,OUTPUT);
  pinMode(pinne4,OUTPUT);
}

void loop() {
  // Tenner lysdiodene 1 og 1:
    digitalWrite(pinne1,HIGH);
    digitalWrite(pinne2,LOW);
    digitalWrite(pinne3,LOW);
    digitalWrite(pinne4,LOW);
    delay(tid);
    
    digitalWrite(pinne1,LOW);
    digitalWrite(pinne2,HIGH);
    digitalWrite(pinne3,LOW);
    digitalWrite(pinne4,LOW);
    delay(tid);
    
    digitalWrite(pinne1,LOW);
    digitalWrite(pinne2,LOW);
    digitalWrite(pinne3,HIGH);
    digitalWrite(pinne4,LOW);
    delay(tid);
    
    digitalWrite(pinne1,LOW);
    digitalWrite(pinne2,LOW);
    digitalWrite(pinne3,LOW);
    digitalWrite(pinne4,HIGH);
    delay(tid);
}

Programkoden over er basert på at man bygger opp programmet uten bruk av ferdig programbibliotek. Det finnes også et ferdig programbibliotek som man kan ta i bruk og som forenkler oppgaven vesentlig. I demoeksemplene i Arduino IDE, så kan man se hvordan dette programbiblioteket kan brukes.

Programkode fra Arduino demo-eksempler. Motoren dreier først en omdreining den ene veien, så en omdreining den andre veien:


#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number 
// of steps per revolution for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);

  // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

Noen små endringer for å tilpasse en virkelig motor. (28BYJ-48)


#include <Stepper.h>

// 8-9-10-11 til 1-2-3-4 på driver
 
const int stepsPerRevolution = 3000;  // change this to fit the number 
// of steps per revolution for your motor
 
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
 
void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(15);
  // initialize the serial port:
  Serial.begin(9600);
}
 
void loop() {
  // step one revolution  in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);
 
  // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}