Pages: [1]   Go Down
Author Topic: Acelerar motor paso a paso  (Read 528 times)
0 Members and 1 Guest are viewing this topic.
Madrid
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, me presento,

Me llamo Alvaro, y estoy empezando en esto del mundillo del arduino,

Tengo algo de experiencia en Java, y aunque no es muy distinto los comandos me cuesta un poco esto de que los micros son bucles... Pero poco a poco.

El caso es que tengo un motor paso a paso unipolar, al cual hago andar en dos direcciones, rapido y lento.

Tengo 2 pulsadores:
El primero gira a la derecha el motor deprisa.
El segundo gira hacia la izquierda el motor deprisa

Esto lo tengo funcionando todo OK, pero el problema me  viene cuando quiero acelerar los botones de deprisa un poco.

Es decir, quiero que vaya acelerando el motor, en un instante muy pequeño (1s) porque tal cual lo tengo ahora le mete caña a las bobinas de repente y le cuesta arrancar.

Como hago para que acelere? lo he intentado pero o hace cosas raras el motor o acelera pero repite la aceleración...

Code:
//variables estaticas
//Declaracion de variables de pines de motor y botones
int motorPin1 = 8;    // Azul   - 28BYJ48 pin 1
int motorPin2 = 9;    // Rosa   - 28BYJ48 pin 2
int motorPin3 = 10;    // Amarillo - 28BYJ48 pin 3
int motorPin4 = 11;    // Naranja - 28BYJ48 pin 4
int botonDerechaRapido = 3;
int botonIzquierdaRapido = 5;
//Variables dinamicas
int estadoBotonDerechaRapido = 0;
int estadoBotonIzquierdaRapido = 0;

int esperaRapido = 5;

void setup() {
  //Declaracion de pines de entrada o salida
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(botonDerechaRapido, INPUT);
  pinMode(botonIzquierdaRapido, INPUT);
}

void loop(){
  estadoBotonDerechaRapido = digitalRead(botonDerechaRapido);
  estadoBotonIzquierdaRapido = digitalRead(botonIzquierdaRapido);
 
   
  if (estadoBotonDerechaRapido == HIGH) {
    acelerarVelocidadDerecha();
    derechaRapido();
  }
  else{
    Stop();
  }
 
 
 
  if (estadoBotonIzquierdaRapido == HIGH) {
    izquierdaRapido();
  }
  else{
    Stop();
  }
}

void Stop(){
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
}

void derechaRapido(){
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(esperaRapido);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(esperaRapido);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, HIGH);
  delay(esperaRapido);
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(esperaRapido);
}

void izquierdaRapido(){
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(esperaRapido);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, HIGH);
  delay(esperaRapido);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(esperaRapido);
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(esperaRapido);
}

void acelerarVelocidadDerecha(){
  for(int Delay=20;Delay>=4;Delay--){
    for(int i=0;i<=10;i++){
      digitalWrite(motorPin1,HIGH);
      digitalWrite(motorPin2,HIGH);
      digitalWrite(motorPin3,LOW);
      digitalWrite(motorPin4,LOW);
      delay(Delay);
      digitalWrite(motorPin1,LOW);
      digitalWrite(motorPin2,HIGH);
      digitalWrite(motorPin3,HIGH);
      digitalWrite(motorPin4,LOW);
      delay(Delay);
      digitalWrite(motorPin1,LOW);
      digitalWrite(motorPin2,LOW);
      digitalWrite(motorPin3,HIGH);
      digitalWrite(motorPin4,HIGH);
      delay(Delay);
      digitalWrite(motorPin1,HIGH);
      digitalWrite(motorPin2,LOW);
      digitalWrite(motorPin3,LOW);
      digitalWrite(motorPin4,HIGH);
      delay(Delay);
    }
  }
}

Asi es como lo tengo ahora, y primero acelera, y se repite la aceleracion constantemente, quiero que acelere y se quede a la velocidad maxima que en este caso es un delay de 5 entre paso y paso

A ver si me podeis ayudar a resolverlo
Logged

Ensenada, Mexico
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Que tal Alvaro,

Tal vez esta biblioteca te pueda ayudar: AccelStepper (http://www.airspayce.com/mikem/arduino/AccelStepper/). No soy experto en el tema, pero se que el manejo de las aceleraciones las hace 'automáticamente'.

Espeor que te sirva
Logged

Pages: [1]   Go Up
Jump to: