Hallo,
für diejenigen, die das Projekt AdeTeK interessiert, hier nun die Prozedur, mit der ihr drei Stepper-Motoren synchron ansteuern könnt. Es ist alles in Echtzeit programmiert, so dass ihr jeden Arduino dafür benutzen könnt. Nähere Einzelheiten findet ihr auf meinem YouTube-Kanal, insbesondere das Video Nr. 16.
Hier der Link:
Hier der erste Teil des Codes:
const int ANZAHL_FELDER = 5;//Werte durch "," getrennt
int feldIndex = 0;
float values[ANZAHL_FELDER];
//-----------------------------------------
int HauptMotorDir = 0;
int HauptMotorStep = 0;
int NebenMotor1Dir = 0;
int NebenMotor1Step = 0;
int NebenMotor2Dir = 0;
int NebenMotor2Step = 0;
int Mot1Step = 2; //Mot1 Step X
int Mot1Dir = 3; //Mot1 DIR X
int Mot2Step = 4; //Mot2 Step Y
int Mot2Dir = 5; //Mot2 DIR Y
int Mot3Step = 6; //Mot3 Step Z
int Mot3Dir = 7; //Mot3 DIR Z
int LED_Pin13 = 13;
//-----------------------------------------
//-----------------------------------------
int PulseDelay = 80; //Delay zwischen Step HIGH/LOW Mikrosekunden
float BeschleunigungsFaktor = 3;
float amSchnellsten = 200.0; //uS
float Highspeed = amSchnellsten; //Mikrosekunden
float Beschleunigung = Highspeed * BeschleunigungsFaktor;
//-----------------------------------------
//##### Anfang lineare Rampe ####
int ArrayIndex = 300; //Rampenlaenge insgesamt (Anfahrt + Bremse) = ArrayIndex * 2
float MinimalWeg = 2000;
float Rampenlaenge = float(ArrayIndex);
float RampenCoeff = float(Beschleunigung / Rampenlaenge);
//##### Ende lineare Rampe ######
//-----------------------------------------
void setup()
{
pinMode(Mot1Dir, OUTPUT); //Pin 2
pinMode(Mot1Step, OUTPUT); //Pin 3
pinMode(Mot2Dir, OUTPUT); //Pin 4
pinMode(Mot2Step, OUTPUT); //Pin 5
pinMode(Mot3Dir, OUTPUT); //Pin 6
pinMode(Mot3Step, OUTPUT); //Pin 7
pinMode(LED_Pin13, OUTPUT); //Pin 13
digitalWrite(Mot1Dir, LOW); //counterclockwise
digitalWrite(Mot2Dir, LOW); //counterclockwise
digitalWrite(Mot3Dir, LOW); //counterclockwise
Serial.begin(9600);
}//Ende:.void setup()
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
void loop()
{
if( Serial.available())
{
for(feldIndex = 0; feldIndex < ANZAHL_FELDER; feldIndex ++)
{
values[feldIndex] = Serial.parseFloat();
}//Ende:.for(fieldIndex = 0; fieldIndex < 5; fieldIndex ++)
switch (int(values[0])) //Funktionszuordnung werden abgefragt
{
case 1:
Blink_13(int(values[1]),int(values[2]));
break;
case 3:
FahrtXYZ(int(values[1]), int(values[2]), int(values[3]));
break;
case 12:
Kaufmann(float (values[1]));
break;
}//Ende:.switch (int(values[0]))
feldIndex = 0;
values[0] = 0;
values[1] = 0;
values[2] = 0;
values[3] = 0;
values[4] = 0;// ready to start over
while (Serial.read() != -1);
}//Ende:.if( Serial.available())
}//Ende:...void loop()
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
void Blink_13(int x_mal, int bl_freq)
{
for (int i = 1; i <= x_mal; i++)
{
digitalWrite(LED_Pin13, HIGH);
delay(bl_freq);
digitalWrite(LED_Pin13, LOW);
delay(bl_freq);
}
}//Ende:.void Blink_12(int x_mal, int bl_freq)
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
int runden(float number) //kaufmaennisches Runden
{
int x;
x = (int)number;
if (number - x >= 0.5)
{
x += 1;
}
else
{
x = (int)number;
}
return x;
}//Ende: int runden(float number)
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
void Kaufmann(float dezimalzahl)
{
int gerundeteZahl = runden(dezimalzahl);
Serial.print("Dezimalzahl = "); Serial.println(dezimalzahl);
Serial.print("gerundete Zahl = "); Serial.println(gerundeteZahl);
}//Ende: void Kaufmann(float dezimalzahl)
//---------------------------------------------------------------------------------------