pátek 16. ledna 2015

Arduino + Krokový motor

Ze staré jehličkové tiskárny se ke mě dostaly dva krokové motory:

EM-93
Carriage Motor Specifications
Type                              4-phase 200-pole stepper motor
Voltage                          Driving: +36DC
                                     Holding: +5V DC
Coil Resistance              110 +/- 7% at 25°C per phase
Current                         Driving: 0.68A (max.)
                                     Hoding: O. 15A (typical)
Excitation                      1-2 phase, 2-2 phase




EM-50
Paper Feed Motor Specifications
Type                              4-phase 48-pole PM type stepper motor
Voltage                          Driving: + 36 VDC
                                     Holding: +5 VDC
Coil Resistance              780 +/- 3% at 25” per phase
Current                         Driving: 1.2 A (max.)
                                     Holding: 0.08 A(typical)
Excitation                     2-2 phase



Popis krokových motorů je pěkně popsán na stránkách: robotika , odkud jsem převzal obrázek zapojení. 
Propojit tyto motory s Arduinem pomocí tranzistorového pole ULN2803 bylo snadné a použití ukázkového programu přímo ze stránek Arduina také...

Schéma zapojení:

Ukázkový kód z Arduino Stepper motor

/* Stepper Unipolar Advanced
 * -------------------------
 *
 * Program to drive a stepper motor coming from a 5'25 disk drive
 * according to the documentation I found, this stepper: "[...] motor 
 * made by Copal Electronics, with 1.8 degrees per step and 96 ohms 
 * per winding, with center taps brought out to separate leads [...]"
 * [http://www.cs.uiowa.edu/~jones/step/example.html]
 *
 * It is a unipolar stepper motor with 5 wires:
 * 
 * - red: power connector, I have it at 5V and works fine
 * - orange and black: coil 1
 * - brown and yellow: coil 2
 *
 * (cleft) 2005 DojoDave for K3
 * http://www.0j0.org | http://arduino.berlios.de
 *
 * @author: David Cuartielles
 * @date: 20 Oct. 2005
 */

int motorPins[] = {8, 9, 10, 11};
int count = 0;
int count2 = 0;
int delayTime = 500;
int val = 0;

void setup() {
  for (count = 0; count < 4; count++) {
    pinMode(motorPins[count], OUTPUT);
  }
}

void moveForward() {
  if ((count2 == 0) || (count2 == 1)) {
    count2 = 16;
  }
  count2>>=1;
  for (count = 3; count >= 0; count--) {
    digitalWrite(motorPins[count], count2>>count&0x01);
  }
  delay(delayTime);
}

void moveBackward() {
  if ((count2 == 0) || (count2 == 1)) {
    count2 = 16;
  }
  count2>>=1;
  for (count = 3; count >= 0; count--) {
    digitalWrite(motorPins[3 - count], count2>>count&0x01);
  }
  delay(delayTime);
}

void loop() {
  val = analogRead(0);
  if (val > 540) {
    // move faster the higher the value from the potentiometer
    delayTime = 2048 - 1024 * val / 512 + 1; 
    moveForward();
  } else if (val < 480) {
    // move faster the lower the value from the potentiometer
    delayTime = 1024 * val / 512 + 1; 
    moveBackward();
  } else {
    delayTime = 1024;
  }
}

Program je jednoduchý. V podstatě jen čte hodnotu z potenciometru připojeného na Analogový vstup 0 a dle ní nastavuje směr a rychlost motoru. 
Popis bitových operací (posuvů) je pěkně popsán na: uart




A videoukázka s motorem EM-93 v šasi jehličkové tiskárny:












1 komentář:

  1. Zdravím, jsou reálně ty motorky EM-93 použitelné do rebela ??

    OdpovědětVymazat