Controlar un motor paso a paso con un controlador de motor y Arduino

1

Estoy intentando controlar un paso a paso Nema 34 con un motrordriver (EM-314) y Arduino Uno.

He conseguido que el motor gire (lentamente) al ajustar el pin 5 en el Arduino a alto. Pin 5 está conectado a Preset 4 en el controlador de motor. Me gustaría que se acelerara, pero no estoy seguro de cómo hacerlo.

¿Alguno de ustedes sabe cómo puedo acelerarlo?

Hoja de datos para el controlador de motor: enlace

Actualmente estoy usando una fuente de alimentación de 0-48V 10A.

¡Se responde cada respuesta!

Editar:

Pin 7 en arduino está conectado a STEP IN Pin 6 está conectado a DIR / STOP / RESET Y estoy usando un potenciómetro para controlar la velocidad.

Aquí está el código que estoy usando en Arduino.

int sensorPin = A0;
int sensorValue = 0;

void setup() {
  //Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);


  }

void loop() {

 sensorValue = analogRead(sensorPin);
 sensorValue = map(sensorValue, 0, 1023, 3600, 1);
 //Serial.print(sensorValue);
 //Serial.print("\n");
  if(sensorValue > 3000){
    digitalWrite(7, LOW);
   }
 if (sensorValue < 3000){
 digitalWrite(7, HIGH);
 delayMicroseconds (sensorValue);
 digitalWrite(7, LOW);
 delayMicroseconds(sensorValue);
 }
 }  
    
pregunta naSSa

2 respuestas

0
  

Me gustaría que se acelerara, pero no estoy seguro de cómo hacerlo.

Respuesta corta:
De la hoja de datos:

  

STEP IN es la entrada para pasos de pulsos. Un paso se hace con la   borde positivo del pulso de entrada.

     

La entrada DIR / STOP / RESET se usa normalmente para elegir la rotación   dirección.

Eso es todo. En realidad no necesitas más señales de control.
La velocidad del motor depende del modo de paso y la frecuencia de su señal STEP, que podría ser una señal PWM de su Arduino.
Con la señal DIR puede cambiar la dirección de rotación. Tenga en cuenta que no debe exceder la velocidad de arranque / parada / velocidad máxima especificada por el motor, de lo contrario, se producirá una descarga rápida.

    
respondido por el mic
0

Usted controla la velocidad de un motor paso a paso al controlar la frecuencia del pulso de paso. Desde su código, parece que está usando un "sensor" pero es más probable que un potenciómetro controle la velocidad.

void loop() {
    sensorValue = analogRead(sensorPin);               // returns 0 to 1023
    sensorValue = map(sensorValue, 0, 1023, 3600, 1);  // returns 3600 to 1
    if(sensorValue > 3000){
        digitalWrite(7, LOW);
    }
    if (sensorValue < 3000){
        digitalWrite(7, HIGH);
        delayMicroseconds (sensorValue);     // delay depends on sensor
        digitalWrite(7, LOW);
        delayMicroseconds(sensorValue);      // delay depends on sensor
    }
 }  
  • Si el voltaje de control del "sensor" es bajo, entonces la función map () establece el retardo de paso en el valor más largo de 3.6 ms.
  • A medida que se aumenta la tensión de control hacia el máximo, el retraso se reducirá a un mínimo de 1 µs.

Sospecho que su potenciómetro no está conectado correctamente. Habilite nuevamente la función de impresión en serie para verificar. (Esto arruinará completamente el tiempo del resto del programa y ralentizará la secuencia de pasos).

    
respondido por el Transistor

Lea otras preguntas en las etiquetas