Paso 4: Segunda ronda de código para motor de pasos alternativos y controlador
Usé el EasyDriver de SparkFun junto con un motor de pasos NEME17 durante mi prueba inicial.
Tengo un tablero más grande de motor y conductor de mi viejo RepStrap, (NEM23 paso a paso con RepRap v1.2 de controlador de motor paso a paso por Zach Hoeken). Esto requiere dos adujstemnts menores al código.
1 - los pernos permiten son opuestos.
EasyDriver: Baja = habilitar
Steper Driver v1.2: alta = habilitar
2 - me parece, no puedo conducir tan rápido como el NEM17 el NEM23. Ambas tarjetas le permiten cambiar entre full y medio paso. Probablemente soy mitad paso a paso el NEM23 y completo paso a paso el NEM17. En lugar de averiguar la diferencia real, sólo he ajustado la demora entre los pasos en el código.
Aquí está el código. He añadido notas al código a ver donde he hecho cambios.
//////////////////// ARDUINO CODE /////////////////////////////////////
joystickj con 2 potes para controlar un paso a paso y dirección y velocidad del motor DC *** / /
Nota: modificado para ejecutar NEM23 paso a paso con controlador de Motor paso a paso v1.2 de RepRap
declarar pines para paso a paso
int potPin_X = 1;
int Step_X = 13;
int Dir_X = 12;
int Enable_X = 8;
declarar valores de paso a paso
int Speed_X = 0; velocidad de paso (demora entre los pasos)
int val_X = 0;
int h = 0;
declarar los pernos para el motor DC A
int potPin_A = 2; Seleccione la entrada de pin para el potenciómetro
int val_A = 0; variable para almacenar el valor que viene desde el sensor
Declarar variables de DC A
int j = 0;
int Dir_A = 4;
int Speed_A = 5;
void setup() {}
configuración de pines de paso a paso
pinMode (Step_X, salida);
pinMode (Dir_X, salida);
pinMode (Enable_X, salida);
pines de configuración CC motor A
pinMode (Dir_A, salida);
pinMode (Speed_A, salida);
Serial.Begin(9600); Observe que eso comm serial se puede utilizar para depurar
Pero reducir el código y ralentizar mucho el motor paso a paso (y ser confuso para mí)
}
void loop() {}
LEA PASO A PASO Y CONTROL / / /
Lea la ubicación de la palanca de mando y calcular valores para motor paso a paso
val_X = analogRead(potPin_X); leer el valor del sensor
h = val_X - 517; ¿517 es centro - cuán lejos del centro?
h = abs(h); valor absoluto
Speed_X = 70000/h; Esta matemática invierte el valor y escala como sea necesario (valor encontrado mediante prueba y error)
La demora entre los pasos determinará la velocidad del motor
Por lo tanto, retrasar hasta = velocidad abajo
Nota: Speed_X = 70000/h trabajado bien para esta combinación: EasyDriver -> paso a paso NEM17
Speed_X = 160000/h; Nota: El cálculo de la velocidad de paso a paso Motor Driver V1-2 (RepRap) -> NEM23 paso a paso
controlar el motor paso a paso / /
NOTA:
para EasyDriver: alta = desactivar
para RepReap paso a paso driver v1.2: baja = desactivar
Si (val_X > = 530) {}
digitalWrite(Enable_X,HIGH); permiten
digitalWrite (Dir_X, alto); Sistema de dirección
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Si (val_X < = 500) {}
digitalWrite(Enable_X,HIGH); / / habilitar
digitalWrite (Dir_X, bajo); Otra dirección
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Si (val_X < = 530 & & val_X > = 500) {}
digitalWrite(Enable_X,LOW); desactivar el motor paso a paso si el joystic está en el centro
para EasyStepper: alta = desactivar
para RepReap paso a paso driver v1.2: baja = desactivar
}
UN MOTOR DC - LEER Y CONTROLAR / / /
Lea la ubicación de la palanca de mando y calcular la distancia y del centro de
val_A = analogRead(potPin_A); leer el valor del sensor
j = val_A - 517; 517 es centro - cuán lejos del centro de
j = abs(j); valor absoluto
poner algunos límites en j para mantener valores PWM útil
por debajo de 100 no se mueva el motor y PWM máximo es 255
Si (j > = 510) {}
j = 510; lo más que puede hacer el pin PWM es de 255
}
Si (j < = 200 & & j > = 10) {}
j = 200; por debajo de 100 PWM el motor hace un pich alta sonido y no se mueve
}
Si (j < = 10) {}
j = 0; debajo de 10 el joystick es muy cercano al centro
}
Funcionamiento motor de DC A basado en las entradas analógicas de joystick
Si (val_A > = 530) {}
digitalWrite (Dir_A, alto); otra dirección
analogWrite (Speed_A, j/2); PWM salida (dividir por 2, ya que máximo es 255)
}
Si (val_A < = 500) {}
digitalWrite (Dir_A, LOW); //
analogWrite (Speed_A, j/2); //
}
Si (val_A < = 530 & & val_A > = 500) {}
analogWrite (Speed_A, 0); Apagar si el joystick está en el centro
}
imprimir valores para la depuración
Serial.Print(val_A); Enviar números de PC por lo que se puede ver lo que pasa
Serial.Print(",");
Serial.println(j);
}