xoves, 5 de marzo de 2009

Activación dun motor paso a paso

Esta práctica consistiu en activar un motor paso a paso modelo NMB PM42S-048-YTB3.
Para esta práctica necesitamos buscar a folla de características do motor, na que vimos que este motor require 24 Voltios de polarización e que necesita de 48 pasos para realizar un xiro completo de 360º (7,5º por paso).
A continuación debuxamos nun círculo 24 divisións (con separacións de 15º) e conectamos os 4 cables do motor (negro, marrón, laranxa e amarelo).
A secuencia de activación do motor é a seguinte:

Para realizar a secuencia correcta de activación do motor decidimos utilizar a placa Arduino que programamos convenientemente e conectamos o Arduino ao motor a través dos relés dunha controladora por porto paralelo do PC que fabricamos no Taller.
O resultado pode verse no seguinte vídeo:

Mediante un pulsador o Arduino xenera a secuencia que fai que o motor se mova nun sentido e accionando outro pulsador facemos que Arduino invirta o seu xiro.

O esquema circuital aparece no seguinte debuxo:
O programa que tivemos que escribir en Arduino foi o seguinte:

int contador = 0;
int secuencia = 1;
int pinesentrada[] = {6, 7};
int pinessalida[] = {8, 9, 10, 11};
void setup() {
for (contador=0;contador<2;contador++) {
pinMode(pinesentrada[contador], INPUT);}
for (contador=0;contador<4;contador++) {
pinMode(pinessalida[contador], OUTPUT);}
}
void loop() {
if (digitalRead(pinesentrada[0]) == HIGH) {
secuencia= secuencia+1;}
if (digitalRead(pinesentrada[1]) == HIGH) {
secuencia= secuencia-1;}
if (secuencia == 0) secuencia= 4;
if (secuencia == 5) secuencia= 1;
if (secuencia == 1) {
digitalWrite(pinessalida[0], LOW);
digitalWrite(pinessalida[1], HIGH);
digitalWrite(pinessalida[2], HIGH);
digitalWrite(pinessalida[3], LOW);
}
if (secuencia == 2) {
digitalWrite(pinessalida[0], LOW);
digitalWrite(pinessalida[1], HIGH);
digitalWrite(pinessalida[2], LOW);
digitalWrite(pinessalida[3], HIGH);
}
if (secuencia == 3) {
digitalWrite(pinessalida[0], HIGH);
digitalWrite(pinessalida[1], LOW);
digitalWrite(pinessalida[2], LOW);
digitalWrite(pinessalida[3], HIGH);
}
if (secuencia == 4) {
digitalWrite(pinessalida[0], HIGH);
digitalWrite(pinessalida[1], LOW);
digitalWrite(pinessalida[2], HIGH);
digitalWrite(pinessalida[3], LOW);
}
delay(100);
}