Go Down

Topic: Zwei Befehle für Schrittmotoren Parallel Laufen lassen  (Read 140 times) previous topic - next topic

maho12

Mar 13, 2018, 02:12 am Last Edit: Mar 13, 2018, 09:35 am by uwefed Reason: add CODE TAGS </>
Hallo,

Ich bin ein Architekturstudent und arbeite an einem Projekt. Ich muss zwei Befehle voneinander unabhängig parallel laufen lassen.

ich benutze Arduino Uno mit v3.0 grbl Shield. Ich habe ein Sketch aber die Befehle laufen nacheinander.

Ich Hoffe, dass mir Jemand helfen kann

Sketch Sieht so aus :
Code: [Select]
#include <grblmain.h>
#define EN        8       // stepper motor enable, low level effective
#define X_DIR     5       //X axis, stepper motor direction control
#define Y_DIR     6       //y axis, stepper motor direction control
#define Z_DIR     7       //zaxis, stepper motor direction control
#define X_STP     2       //x axis, stepper motor control
#define Y_STP     3       //y axis, stepper motor control
#define Z_STP     4       //z axis, stepper motor control
/*
// Function: step   -control the direction and number of steps of the stepper motor
// Parameter: dir  -direction control, dirPin corresponds to DIR pin, stepperPin corresponds to


step pin, steps is the number of steps.
// no return value
*/
void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{
 digitalWrite(dirPin, dir);
 delay(50);
 for (int i = 0; i < steps; i++) {
   digitalWrite(stepperPin, HIGH);
   delayMicroseconds(50);  
   digitalWrite(stepperPin, LOW);
   delayMicroseconds(50);  
 }
}
void setup(){// set the IO pins for the stepper motors as output
 pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
 pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
 pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);
 pinMode(EN, OUTPUT);
 digitalWrite(EN, LOW);
}
void loop(){
 step(false, X_DIR, X_STP, 20000 ) ;// x axis motor rotates CCW for 1 circle, as in 200 steps
{
   digitalWrite(stepperPin, HIGH);
   delayMicroseconds(50);  
   digitalWrite(stepperPin, LOW);
   delayMicroseconds(50);  
 }
 step(true, X_DIR, X_STP, 20000);
 step(false, Y_DIR, Y_STP, 20000); // y axis motor rotates CCW for 1 circle, as in 200 steps
 step(false, Z_DIR, Z_STP, 20000); // z axis motor rotates CCW for 1 circle, as in 200 steps
 delay(1000);
 step(true, X_DIR, X_STP, 20000); // X axis motor rotates CW for 1 circle, as in 200 steps
 step(true, Y_DIR, Y_STP, 20000); // y axis motor rotates CW for 1 circle, as in 200 steps
 step(true, Z_DIR, Z_STP, 20000); // z axis motor rotates CW for 1 circle, as in 200 steps
 delay(1000);
}

HotSystems

Der Arduino (Atmega328) ist nicht multitaskingfähig, somit laufen die Anweisungen nie gleichzeitig, sondern immer nacheinander.

Oder du setzt eine Library ein, die das besser macht.
Die Accelstepper kann das, soweit mir bekannt ist.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

agmue

Die Accelstepper kann das, soweit mir bekannt ist.
Ja, kann sie, drei Motoren sollten gehen :)

Go Up