Muy buenos dias, estoy realizando un proyecto sobre una impresora 3d. El tema esta en que el programa debo de realizar yo y estoy tratando de mover los motores de paso y no estoy consiguiendo.
Mi algoritmo esta diseñado para realizar un cubo, al ejecutar el programa el motor hace un ruido y no gira. Alguna ayuda por favor? adjunto aca mi algoritmo
#define VELOCIDAD 1700 //Define la velocidad del motor, cuanto mas bajo mas rapido
#define VELOCIDAD2 2000 //Define la velocidad del motor, cuanto mas bajo mas rapido
// definimos todas los motores, los llamamos X, Y(2), Z y E
#define X_STEP_PIN 54//A0
#define X_DIR_PIN 55//A1
#define X_ENABLE_PIN 38
#define X_MIN_PIN 3
#define X_MAX_PIN 2
#define Y_STEP_PIN A6
#define Y_DIR_PIN A7
#define Y_ENABLE_PIN A2
#define Y_MIN_PIN 14
#define Y_MAX_PIN 15
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN A8
#define Z_MIN_PIN 18
#define Z_MAX_PIN 19
#define E_STEP_PIN 26
#define E_DIR_PIN 28
#define E_ENABLE_PIN 24
//Introducimos las variables que se iran modificando de acuerdo a nuestro interes
int i=0;
int aux=0;
int c=0;
int pasos = 1800;
int pasitos = 200;
void setup()
{
Serial.begin(9600);
pinMode(X_STEP_PIN, OUTPUT); // configura el 'pin' como salida
pinMode(X_DIR_PIN, OUTPUT); // configura el 'pin' como salida
pinMode(X_ENABLE_PIN, OUTPUT); // configura el 'pin' como salida
pinMode(Y_STEP_PIN , OUTPUT); // configura el 'pin' como salida
pinMode(Y_DIR_PIN, OUTPUT); // configura el 'pin' como salida
pinMode(Y_ENABLE_PIN, OUTPUT); // configura el 'pin' como salida
pinMode(Z_STEP_PIN , OUTPUT); // configura el 'pin' como salida
pinMode(Z_DIR_PIN , OUTPUT); // configura el 'pin' como salida
pinMode(Z_ENABLE_PIN, OUTPUT); // configura el 'pin' como salida
pinMode(E_STEP_PIN, OUTPUT); // configura el 'pin' como salida
pinMode(E_DIR_PIN, OUTPUT); // configura el 'pin' como salida
pinMode(E_ENABLE_PIN, OUTPUT); // configura el 'pin' como salida
}
//Aqui desarrollamos nuestra logica o ciclos de repeticion donde inicaremos la impresion
void loop()
{
while(c<=5)
{c++;
pasos = 1800;
while(pasos>=0)
{
/*En esta sesion vamos a imprimir en el eje x, primero lo habilitamos
luego marcamos la direccion para luego en el ciclo for imprimirlo*/
digitalWrite(X_ENABLE_PIN, LOW);//habilita el motor x
delay(100);
digitalWrite(X_ENABLE_PIN, HIGH);//habilita el motor x
digitalWrite(X_DIR_PIN, HIGH);
digitalWrite(E_ENABLE_PIN, LOW);//habilita el motor x
delay(100);
digitalWrite(E_ENABLE_PIN, HIGH);//habilita el motor x
digitalWrite(E_DIR_PIN, HIGH);
for(int i=0; i<pasos; i++) // hace girar el motor en sentido +x
{
digitalWrite(X_STEP_PIN, HIGH);
delayMicroseconds(VELOCIDAD);//velocidad de giro declarado al inicio
digitalWrite(X_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD);//velocidad de giro declarado al inicio
Serial.print(VELOCIDAD);
digitalWrite(E_STEP_PIN, HIGH);
delayMicroseconds(VELOCIDAD2);//velocidad de giro declarado al inicio
digitalWrite(E_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD2);//velocidad de giro declarado al inicio
Serial.println(i);
Serial.print(VELOCIDAD2);
}
digitalWrite(X_ENABLE_PIN, LOW);//desabilita el motor x
/*En esta sesion vamos a imprimir en el eje y, primero lo habilitamos
luego marcamos la direccion para luego en el ciclo imprimirlo*/
digitalWrite(Y_ENABLE_PIN, HIGH);//habilita el motor y
digitalWrite(Y_DIR_PIN, HIGH);
for(int i=0; i<pasos; i++)// hace girar el motor en sentido +y
{
digitalWrite(Y_STEP_PIN, HIGH);
digitalWrite(Y_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD);//velocidad de giro declarado al inicio
digitalWrite(E_STEP_PIN, HIGH);
digitalWrite(E_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD2);//velocidad de giro del estrusor
}
digitalWrite(Y_ENABLE_PIN, LOW); //desabilita el motor y
digitalWrite(X_ENABLE_PIN, HIGH);//habilita el motor x
digitalWrite(X_DIR_PIN, LOW);
/*En esta sesion vamos a imprimir en el eje -X, primero lo habilitamos
luego marcamos la direccion para luego en el ciclo imprimirlo*/
for(int i=0; i<pasos; i++)//hace girar el motor el -x
{
digitalWrite(X_STEP_PIN, LOW);
digitalWrite(X_STEP_PIN, HIGH);
delayMicroseconds(VELOCIDAD);//velocidad del motor declarado al inicio
digitalWrite(E_STEP_PIN, HIGH);
digitalWrite(E_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD2);//velocidad de giro del estrusor
}
digitalWrite(X_ENABLE_PIN, LOW);//desabilida el motor x
/*En esta sesion vamos a imprimir en el eje -y, primero lo habilitamos
luego marcamos la direccion para luego en el ciclo imprimirlo*/
digitalWrite(Y_ENABLE_PIN, HIGH);//habilita el motor y
digitalWrite(Y_DIR_PIN, LOW);
for(int i=0; i<pasos; i++)//hace girar el motor en -y
{
digitalWrite(Y_STEP_PIN, LOW);
digitalWrite(Y_STEP_PIN, HIGH);
delayMicroseconds(VELOCIDAD);//velocidad declarado al inicio
digitalWrite(E_STEP_PIN, HIGH);
digitalWrite(E_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD2);//velocidad de giro del estrusor
}
digitalWrite(Y_ENABLE_PIN, LOW);//desabilita el motor y
pasos = pasos-200;
/*En este bloque moveremos los motores X, Y y E. Los motores
X e y se moveran en diagonal en cambio el motor E se mueve en
sentido contrario chupando un poco el abs */
digitalWrite(X_ENABLE_PIN, HIGH);//habilita el motor x
digitalWrite(X_DIR_PIN, HIGH);
digitalWrite(Y_ENABLE_PIN, HIGH);//habilita el motor y
digitalWrite(Y_DIR_PIN, HIGH);
digitalWrite(E_DIR_PIN, LOW);
for(int i=0; i<pasos; i++) // hace girar el motor en sentido "+x" y "+y"
{
digitalWrite(X_STEP_PIN, HIGH);
digitalWrite(X_STEP_PIN, LOW);
digitalWrite(Y_STEP_PIN, HIGH);
digitalWrite(Y_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD);//velocidad de giro declarado al inicio
digitalWrite(E_STEP_PIN, HIGH);
digitalWrite(E_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD2);//velocidad de giro del estrusor
}
digitalWrite(X_ENABLE_PIN, LOW);//desabilita el motor x
digitalWrite(Y_ENABLE_PIN, LOW); //desabilita el motor y
digitalWrite(E_ENABLE_PIN, LOW); //desabilita el motor del estrusor
}
/*En este bloque el motor Z se mueve para arriba y los motores X e Y se moveran
en digonal pero en sentido contrario de manera a volver en el punto inicial */
digitalWrite(Z_ENABLE_PIN, HIGH);
digitalWrite(Z_DIR_PIN, LOW);
for(int i=0; i<pasitos; i++)
{
digitalWrite(Z_STEP_PIN, HIGH);
digitalWrite(Z_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD);
}
digitalWrite(Z_ENABLE_PIN, LOW);
digitalWrite(X_ENABLE_PIN, HIGH);//habilita el motor -x
digitalWrite(X_DIR_PIN, LOW);
digitalWrite(Y_ENABLE_PIN, HIGH);//habilita el motor -y
digitalWrite(Y_DIR_PIN, LOW);
for(int i=0; i<(pasos/2); i++) // hace girar el motor en sentido "-x" y "-y"
{
digitalWrite(X_STEP_PIN, HIGH);
digitalWrite(X_STEP_PIN, LOW);
digitalWrite(Y_STEP_PIN, HIGH);
digitalWrite(Y_STEP_PIN, LOW);
delayMicroseconds(VELOCIDAD);//velocidad de giro declarado al inicio
}
digitalWrite(X_ENABLE_PIN, LOW);//desabilita el motor x
digitalWrite(Y_ENABLE_PIN, LOW); //desabilita el motor y
}
}