Cómo controlar motores paso a paso

Usando un Arduino (microcontrolador basado en Atmega8) entrada iniciada por brolín y kdag

Objetivo

Controlar la video camara de -medellinwireless- de manera remota, la imagen corresponde al video en stream que usamos durante el montaje del primer motor, recuperado de una impresora y comprado en la plaza minorista por $1.000 pesos oro.

I. Reconocer el tipo de motor que tenemos

Creamos una tabla como la siguiente donde los valores ahi mostrados son los obtenidos al medir la resistencia entre cada par de cables del motor (para nuestro caso un motor bipolar de 6 cables).

rojo

amarillo

azul

blanco1

blanco2

café

rojo

---

---

---

---

1.5

3.5

amarillo

---

---

3.5

1.8

---

---

azul

---

3.5

---

1.5

---

---

blanco1

---

1.8

1.8

---

---

---

blanco2

1.5

---

---

---

---

1.5

café

3.5

---

---

---

1.8

---

II. Identificar las terminales comunes del motor

Nos fijamos en la tabla y tratamos de dibujar 4 bobinas (todas 4 con aproximadamente el mismo valor de resistencia). Las bobinas obtenidas son

Vemos como blanco2 y blanco1 son comunes en dos bobinas. Estos(blancoX) son los que van a ir a la alimentación.

III. Código utilizado para flashear el atmega8 (tomado del proyecto arduino)

/* 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;
  }
}

IV. Controlando la camara

Este aparte continua en http://www.berebere.randomlab.net/berebere/BereBere/WebCam

ALTRED: Como-ArduinoPAP (last edited 2007-04-04 23:20:09 by 84-74-29-80)