INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 4 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Schrittmotor Steuerung
02.02.2019, 18:05
Beitrag #17
RE: Schrittmotor Steuerung
(02.02.2019 17:16)Franz54 schrieb:  Das das schafft es locker. Aber der dritte Motor muss nicht mal angeschlossen sein. Dann Passiert der Mist auch schon.
Ok. Ich bin nicht so der Motorenspezialist. Da können Andere mehr helfen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2019, 23:15 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2019 23:18 von Franz54.)
Beitrag #18
RE: Schrittmotor Steuerung
Mit den Motoren hat das gar nichts zu tun. Es müßten eigentlich Werte verändert werden. Und zwar die drei Werte schritte / rampenstart / rampenende. von Motor 1 und 2. Das sind eigentlich Werte die nur gelesen werden und nicht verändert. Nur beim Einstellen bevor man das Programm startet kann man sie verändern. Huh

Ich muss mal Serial.prints reinhängen um die Werte immer wieder auszugeben.


Code:
//------Steuerung für den ersten Schrittmotor------------------
word x1 = 0;
word schritte1 = 6400;
byte richtung1 = HIGH;
byte schrittposition1 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !
unsigned long pwablauf1 = 0;// Pulswechselablaufzeit1
unsigned long whablauf1 = 0;// Wiederhohlablaufzeit1
unsigned long rampenstart1 = 500;
unsigned long rampenende1 = 50;
word rampenrichtung1 = 1;
unsigned long mini1 = rampenstart1;
unsigned long maxi1 = rampenende1;
byte enabl1 = 6;
byte dir1 = 5;
byte puls1 = 4;
//--------------------------------------------------------------
//------Steuerung für den zweiten Schrittmotor------------------
word x2 = 0;
word schritte2 = 6400;
byte richtung2 = HIGH;
byte schrittposition2 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwablauf2 = 0;// Pulswechselablaufzeit2
unsigned long whablauf2 = 0;// Wiederhohlablaufzeit2
unsigned long rampenstart2 = 500;
unsigned long rampenende2 = 50;
word rampenrichtung2 = 1;
unsigned long mini2 = rampenstart2;
unsigned long maxi2 = rampenende2;
byte enabl2 = 10;
byte dir2 = 9;
byte puls2 = 8;
//--------------------------------------------------------------

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.02.2019, 18:52 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2019 18:53 von Franz54.)
Beitrag #19
RE: Schrittmotor Steuerung
Ich habe jetzt mal Serial.println() an den drei wichtigen Stellen eingebaut. Also es werden keine Speicherstellen überschrieben wie ich befürchtet habe, sondern es läuft nicht sauber ab.

Da muss ich mal die Reihenfolge der Abläufe genau ansehen, da scheint das Problem zu sein.

Franz

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.02.2019, 13:54 (Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2019 13:56 von Franz54.)
Beitrag #20
RE: Schrittmotor Steuerung
Es läuft nicht der reihe nach ab. Also Programmteil Motor1 dann Motor2 dann Motor3.

Wenn ich Motor3 raus lasse, läuft es immer super sauber ab. Also Motor 1 schritt 1, Motor 2 Schritt 1, dann Motor 1 Schritt 2, dann Motor2 Schritt 2, bis Schritt 6400. Dann geht es mit Motor 1 Schritt 1 wieder los. Also alles gut.

Wenn der Programmteil Motor 3 dazu kommt, dann läuft es im ersten durchgang noch motor 1 - Motor 2 - Motor 3 - Schritt 1 bis 6400 ab. Und dann wars das. Dann kommt das Programm nur noch selten bis Motor 3, also Motor 1 - Motor 2 - Motor 1 - u.s.w.

Den Grund habe ich noch nicht gefunden. Man kann das Programm auch völlig ohne externe Hardware auf dem Mega laufen lassen!! Also falls jemand lust hat, mir bei der Suche behilflich zu sein ConfusedBlush

Hier nochmal das aktuelle Programm: (Motor 3 ganz unten ist auskommentiert!)

Code:
/*
  Einstellungen am TB6600 für 6400 Schritte pro Umdrehung
  und für den Nema 17 Motor mit 1,0 bis 1,2 Amp.
  Dippschalter 6   5   4   3   2   1
  Stellungen   0n  off on  off off off
  und für den Nema 17 Motor mit 1,5 bis 1,7 Amp.
  Dippschalter 6   5   4   3   2   1
  Stellungen   off on  on  off off off
*/
#include <Wire.h> // Kommunikation mit Arduino IDE
#include <LiquidCrystal_I2C.h> // LCD Display

// LCD Display´s haben Adresse 0x27 oder 0x3F !!
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define BAUD (115200)
//------Steuerung für den ersten Schrittmotor------------------
word x1 = 0;
word schritte1 = 6400;
byte richtung1 = HIGH;
byte schrittposition1 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !
unsigned long pwablauf1 = 0;// Pulswechselablaufzeit1
unsigned long whablauf1 = 0;// Wiederhohlablaufzeit1
unsigned long rampenstart1 = 500;
unsigned long rampenende1 = 50;
word rampenrichtung1 = 1;
unsigned long mini1 = rampenstart1;
unsigned long maxi1 = rampenende1;
byte enabl1 = 6;
byte dir1 = 5;
byte puls1 = 4;
//--------------------------------------------------------------
//------Steuerung für den zweiten Schrittmotor------------------
word x2 = 0;
word schritte2 = 6400;
byte richtung2 = HIGH;
byte schrittposition2 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwablauf2 = 0;// Pulswechselablaufzeit2
unsigned long whablauf2 = 0;// Wiederhohlablaufzeit2
unsigned long rampenstart2 = 500;
unsigned long rampenende2 = 50;
word rampenrichtung2 = 1;
unsigned long mini2 = rampenstart2;
unsigned long maxi2 = rampenende2;
byte enabl2 = 10;
byte dir2 = 9;
byte puls2 = 8;
//--------------------------------------------------------------
//------Steuerung für den dritten Schrittmotor------------------
word x3 = 0;
word schritte3 = 6400;
byte richtung3 = LOW;
byte schrittposition3 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwablauf3 = 0;// Pulswechselablaufzeit3
unsigned long whablauf3 = 0;// Wiederhohlablaufzeit3
unsigned long rampenstart3 = 500;
unsigned long rampenende3 = 50;
word rampenrichtung3 = 1;
unsigned long mini3 = rampenstart3;
unsigned long maxi3 = rampenende3;
byte enabl3 = 45;
byte dir3 = 44;
byte puls3 = 43;
//--------------------------------------------------------------
void setup()
{
  Wire.begin();
  lcd.begin(20, 4);  // initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight();   // LCD Beleuchtung ein
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Motor1 ");
  lcd.print(schritte1);
  lcd.print(" Schritte");
  lcd.setCursor(0, 1);
  lcd.print("Tempo1 ");
  lcd.print(rampenstart1);
  lcd.print("-");
  lcd.print(rampenende1);
  lcd.print(" Micro");
  lcd.setCursor(0, 2);
  lcd.print("Motor2 ");
  lcd.print(schritte2);
  lcd.print(" Schritte");
  lcd.setCursor(0, 3);
  lcd.print("Tempo2 ");
  lcd.print(rampenstart2);
  lcd.print("-");
  lcd.print(rampenende2);
  lcd.print(" Micro");
  Serial.begin(BAUD);
  //----------Steuerpins für den ersten Treiber aktivieren-------
  pinMode(enabl1, OUTPUT); // Enable1
  pinMode(dir1, OUTPUT); // Step1
  pinMode(puls1, OUTPUT); // Dir1
  digitalWrite(enabl1, LOW); // Set Enable1 low
  //---------------------------------------------------------------
  //----------Steuerpins für den zweiten Treiber aktivieren--------
  pinMode(enabl2, OUTPUT); // Enable2
  pinMode(dir2, OUTPUT); // Step2
  pinMode(puls2, OUTPUT); // Dir2
  digitalWrite(enabl2, LOW); // Set Enable2 low
  //---------------------------------------------------------------
  //----------Steuerpins für den dritten Treiber aktivieren--------
  pinMode(enabl3, OUTPUT); // Enable3
  pinMode(dir3, OUTPUT); // Step3
  pinMode(puls3, OUTPUT); // Dir3
  digitalWrite(enabl3, HIGH); // Set Enable3 low
  //---------------------------------------------------------------
}

void loop()
{
  //---------------------------------------------------------------------
  //----------Treiber eins aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(enabl1, HIGH); // Set Enable high
  digitalWrite(dir1, richtung1); // Set Dir
  if (x1 < schritte1)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 1----------------------------------------
    //---------------------Schritt 1---------------------------------------
    if ((schrittposition1 == 1) && (micros() - whablauf1 >= mini1)) {
      digitalWrite(puls1, HIGH); // Step auf high
      schrittposition1 = 2;  // Steuerung für Schritt 1 einstellen
      pwablauf1 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 1----------------------------------------
    //---------------------Schritt 2---------------------------------------
    if ((schrittposition1 == 2) && (micros() - pwablauf1 >= mini1)) {
      digitalWrite(puls1, LOW); // Step auf low
      schrittposition1 = 1;  // Steuerung für Schritt 0 einstellen
      whablauf1 = micros(); // Timer für Schritt 0 starten
      x1++;
      //-----------------------------------------------------------------
      //-----------------Rampensteuerung Motor1--------------------------
      if (x1 <= rampenstart1) {
        rampenrichtung1 = HIGH;
      } else {
        rampenrichtung1 = LOW;
      }
      if (rampenrichtung1 == HIGH) {
        if (mini1 > maxi1) {
          mini1 = mini1 - 1; // Rampe für Motor 1 Gas geben
        }
      }
      if (rampenrichtung1 == LOW) {
        if (x1 + rampenstart1 > schritte1) {
          mini1 = mini1 + 2; // Rampe für Motor 1 bremsen
        }
      }
      //-----------------------------------------------------------------
    }
  }
  //-------------------------Motor 1-------------------------------------
  //----------------------Ziel erreicht ?--------------------------------
  if (x1 == schritte1) {
    Serial.println("Motor1");
    Serial.println(x1);
    Serial.println(x2);
    Serial.println(x3);
    Serial.println("------");
    x1 = 0;
    richtung1 = !richtung1; // Dir Richtung wechseln
    mini1 = rampenstart1; //Rampe für Motor 1 Neustart
    mini2 = rampenstart2; //Rampe für Motor 2 Neustart
  }
  //---------------------------------------------------------------------


  //---------------------------------------------------------------------
  //----------Treiber zwei aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(enabl2, HIGH); // Set Enable high
  digitalWrite(dir2, richtung2); // Set Dir
  if (x2 < schritte2)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 2--------------------------------------
    //---------------------Schritt 1-------------------------------------
    if ((schrittposition2 == 1) && (micros() - whablauf2 >= mini2)) {
      digitalWrite(puls2, HIGH); // Step auf high
      schrittposition2 = 2;  // Steuerung für Schritt 1 einstellen
      pwablauf2 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 2--------------------------------------
    //---------------------Schritt 2-------------------------------------
    if ((schrittposition2 == 2) && (micros() - pwablauf2 >= mini2)) {
      digitalWrite(puls2, LOW); // Step auf low
      schrittposition2 = 1;  // Steuerung für Schritt 0 einstellen
      whablauf2 = micros(); // Timer für Schritt 0 starten
      x2++;
      //-----------------------------------------------------------------
      //-----------------Rampensteuerung Motor2--------------------------
      if (x2 <= rampenstart2) {
        rampenrichtung2 = HIGH;
      } else {
        rampenrichtung2 = LOW;
      }
      if (rampenrichtung2 == HIGH) {
        if (mini2 > maxi2) {
          mini2 = mini2 - 1; // Rampe für Motor 1 Gas geben
        }
      }
      if (rampenrichtung2 == LOW) {
        if (x2 + rampenstart2 > schritte2) {
          mini2 = mini2 + 2; // Rampe für Motor 1 bremsen
        }
      }
      //----------------------------------------------------------------
    }
  }
  //-------------------------Motor 2------------------------------------
  //----------------------Ziel erreicht ?-------------------------------
  if (x2 == schritte2) {
    Serial.println("Motor2");
    Serial.println(x1);
    Serial.println(x2);
    Serial.println(x3);
    Serial.println("------");
    x2 = 0;
    richtung2 = !richtung2; // Dir Richtung wechseln
  }
  //--------------------------------------------------------------------

/*
  //---------------------------------------------------------------------
  //----------Treiber drei aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(enabl3, LOW); // Set Enable high
  digitalWrite(dir3, richtung3); // Set Dir
  if (x3 < schritte3)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 3--------------------------------------
    //---------------------Schritt 1-------------------------------------
    if ((schrittposition3 == 1) && (micros() - whablauf3 >= mini3)) {
      digitalWrite(puls3, HIGH); // Step auf high
      schrittposition3 = 2;  // Steuerung für Schritt 1 einstellen
      pwablauf3 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 3--------------------------------------
    //---------------------Schritt 2-------------------------------------
    if ((schrittposition3 == 2) && (micros() - pwablauf3 >= mini3)) {
      digitalWrite(puls3, LOW); // Step auf low
      schrittposition3 = 1;  // Steuerung für Schritt 0 einstellen
      whablauf3 = micros(); // Timer für Schritt 0 starten
      x3++;
      //-----------------------------------------------------------------
      //-----------------Rampensteuerung Motor3--------------------------
      if (x3 <= rampenstart3) {
        rampenrichtung3 = HIGH;
      } else {
        rampenrichtung3 = LOW;
      }
      if (rampenrichtung3 == HIGH) {
        if (mini3 > maxi3) {
          mini3 = mini3 - 1; // Rampe für Motor 1 Gas geben
        }
      }
      if (rampenrichtung3 == LOW) {
        if (x3 + rampenstart3 > schritte3) {
          mini3 = mini3 + 2; // Rampe für Motor 1 bremsen
        }
      }
      //----------------------------------------------------------------
    }
  }
  //-------------------------Motor 3------------------------------------
  //----------------------Ziel erreicht ?-------------------------------
  if (x3 == schritte3) {
    Serial.println("Motor3");
    Serial.println(x1);
    Serial.println(x2);
    Serial.println(x3);
    Serial.println("------");
    x3 = 0;
    richtung3 = !richtung3; // Dir Richtung wechseln
  }
  //--------------------------------------------------------------------

}
*/

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.02.2019, 08:28 (Dieser Beitrag wurde zuletzt bearbeitet: 12.02.2019 17:24 von Franz54.)
Beitrag #21
RE: Schrittmotor Steuerung
Heute kam mir die Erleuchtung warum die Schrittmotoren in dem Programm bei drei Motoren aus dem Tackt kamen. Es war ein Zeitproblem. Das war ja eigentlich klar, weil es bei 2 Motoren noch klappte, aber bei drei Motoren nicht mehr.
Ich habe jetzt mal die Zeiten zwischen den plus und minus Impulsen beim schnellen Lauf von 50micro auf 250micro hochgestellt und den langsammen Lauf bei der Rampe von 500micro auf 750micro. Dann die Schritte pro Umdrehung von 6400 runter auf 3200. Jetzt laufen die drei Motoren wieder synchron. Big Grin

Hier das Programm für die drei Motoren mit den umgestellten Zeiten.

Code:
/*
  Einstellungen am TB6600 für 3200 Schritte pro Umdrehung
  und für den Nema 17 Motor mit 1,0 bis 1,2 Amp.
  Dippschalter 6   5   4   3   2   1
  Stellungen   0n  off on  on off off
  und für den Nema 17 Motor mit 1,5 bis 1,7 Amp.
  Dippschalter 6   5   4   3   2   1
  Stellungen   off on  on  on off off
*/
#include <Wire.h> // Kommunikation mit Arduino IDE
#include <LiquidCrystal_I2C.h> // LCD Display

// Meine LCD Display´s haben Adresse 0x27 oder 0x3F !!
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define BAUD (115200)
//------Steuerung für den ersten Schrittmotor------------------
word x1 = 0;
word schritte1 = 3200;
byte richtung1 = HIGH;
byte schrittposition1 = 1;
// Der Microwert für pwzeit & whzeit bei drei Motoren nicht unter 250 !
unsigned long pwablauf1 = 0;// Pulswechselablaufzeit1
unsigned long whablauf1 = 0;// Wiederhohlablaufzeit1
unsigned long rampenstart1 = 700;
unsigned long rampenende1 = 250;
word rampenrichtung1 = 1;
unsigned long mini1 = rampenstart1;
unsigned long maxi1 = rampenende1;
byte enabl1 = 6;
byte dir1 = 5;
byte puls1 = 4;
//--------------------------------------------------------------
//------Steuerung für den zweiten Schrittmotor------------------
word x2 = 0;
word schritte2 = 3200;
byte richtung2 = HIGH;
byte schrittposition2 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwablauf2 = 0;// Pulswechselablaufzeit2
unsigned long whablauf2 = 0;// Wiederhohlablaufzeit2
unsigned long rampenstart2 = 700;
unsigned long rampenende2 = 250;
word rampenrichtung2 = 1;
unsigned long mini2 = rampenstart2;
unsigned long maxi2 = rampenende2;
byte enabl2 = 10;
byte dir2 = 9;
byte puls2 = 8;
//--------------------------------------------------------------
//------Steuerung für den dritten Schrittmotor------------------
word x3 = 0;
word schritte3 = 3200;
byte richtung3 = LOW;
byte schrittposition3 = 1;
// Der Microwert für pwzeit & whzeit nicht unter 200 !!
unsigned long pwablauf3 = 0;// Pulswechselablaufzeit3
unsigned long whablauf3 = 0;// Wiederhohlablaufzeit3
unsigned long rampenstart3 = 700;
unsigned long rampenende3 = 250;
word rampenrichtung3 = 1;
unsigned long mini3 = rampenstart3;
unsigned long maxi3 = rampenende3;
byte enabl3 = 45;
byte dir3 = 44;
byte puls3 = 43;
//--------------------------------------------------------------
void setup()
{
  Wire.begin();
  lcd.begin(20, 4);  // initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight();   // LCD Beleuchtung ein
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Motor1 ");
  lcd.print(schritte1);
  lcd.print(" Schritte");
  lcd.setCursor(0, 1);
  lcd.print("Tempo1 ");
  lcd.print(rampenstart1);
  lcd.print("-");
  lcd.print(rampenende1);
  lcd.print(" Micro");
  lcd.setCursor(0, 2);
  lcd.print("Motor2 ");
  lcd.print(schritte2);
  lcd.print(" Schritte");
  lcd.setCursor(0, 3);
  lcd.print("Tempo2 ");
  lcd.print(rampenstart2);
  lcd.print("-");
  lcd.print(rampenende2);
  lcd.print(" Micro");
  Serial.begin(BAUD);
  //----------Steuerpins für den ersten Treiber aktivieren-------
  pinMode(enabl1, OUTPUT); // Enable1
  pinMode(dir1, OUTPUT); // Step1
  pinMode(puls1, OUTPUT); // Dir1
  digitalWrite(enabl1, LOW); // Set Enable1 low
  //---------------------------------------------------------------
  //----------Steuerpins für den zweiten Treiber aktivieren--------
  pinMode(enabl2, OUTPUT); // Enable2
  pinMode(dir2, OUTPUT); // Step2
  pinMode(puls2, OUTPUT); // Dir2
  digitalWrite(enabl2, LOW); // Set Enable2 low
  //---------------------------------------------------------------
  //----------Steuerpins für den dritten Treiber aktivieren--------
  pinMode(enabl3, OUTPUT); // Enable3
  pinMode(dir3, OUTPUT); // Step3
  pinMode(puls3, OUTPUT); // Dir3
  digitalWrite(enabl3, HIGH); // Set Enable3 low
  //---------------------------------------------------------------
}

void loop()
{
  //---------------------------------------------------------------------
  //----------Treiber 1 aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(enabl1, HIGH); // Set Enable high
  digitalWrite(dir1, richtung1); // Set Dir
  if (x1 < schritte1)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 1----------------------------------------
    //---------------------Schritt 1---------------------------------------
    if ((schrittposition1 == 1) && (micros() - whablauf1 >= mini1)) {
      digitalWrite(puls1, HIGH); // Step auf high
      schrittposition1 = 2;  // Steuerung für Schritt 1 einstellen
      pwablauf1 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 1----------------------------------------
    //---------------------Schritt 2---------------------------------------
    if ((schrittposition1 == 2) && (micros() - pwablauf1 >= mini1)) {
      digitalWrite(puls1, LOW); // Step auf low
      schrittposition1 = 1;  // Steuerung für Schritt 0 einstellen
      whablauf1 = micros(); // Timer für Schritt 0 starten
      x1++;
      //-----------------------------------------------------------------
      //-----------------Rampensteuerung Motor1--------------------------
      if (x1 <= rampenstart1) {
        rampenrichtung1 = HIGH;
      } else {
        rampenrichtung1 = LOW;
      }
      if (rampenrichtung1 == HIGH) {
        if (mini1 > maxi1) {
          mini1 = mini1 - 1; // Rampe für Motor 1 Gas geben
        }
      }
      if (rampenrichtung1 == LOW) {
        if (x1 + rampenstart1 > schritte1) {
          mini1 = mini1 + 2; // Rampe für Motor 1 bremsen
        }
      }
      //-----------------------------------------------------------------
    }
  }
  //-------------------------Motor 1-------------------------------------
  //----------------------Ziel erreicht ?--------------------------------
  if (x1 == schritte1) {
    x1 = 0;
    mini1 = rampenstart1; //Rampe für Motor 1 Neustart
    richtung1 = !richtung1; // Dir Richtung wechseln
  }
  //---------------------------------------------------------------------


  //---------------------------------------------------------------------
  //----------Treiber 2 aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(enabl2, HIGH); // Set Enable high
  digitalWrite(dir2, richtung2); // Set Dir
  if (x2 < schritte2)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 2--------------------------------------
    //---------------------Schritt 1-------------------------------------
    if ((schrittposition2 == 1) && (micros() - whablauf2 >= mini2)) {
      digitalWrite(puls2, HIGH); // Step auf high
      schrittposition2 = 2;  // Steuerung für Schritt 1 einstellen
      pwablauf2 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 2--------------------------------------
    //---------------------Schritt 2-------------------------------------
    if ((schrittposition2 == 2) && (micros() - pwablauf2 >= mini2)) {
      digitalWrite(puls2, LOW); // Step auf low
      schrittposition2 = 1;  // Steuerung für Schritt 0 einstellen
      whablauf2 = micros(); // Timer für Schritt 0 starten
      x2++;
      //-----------------------------------------------------------------
      //-----------------Rampensteuerung Motor2--------------------------
      if (x2 <= rampenstart2) {
        rampenrichtung2 = HIGH;
      } else {
        rampenrichtung2 = LOW;
      }
      if (rampenrichtung2 == HIGH) {
        if (mini2 > maxi2) {
          mini2 = mini2 - 1; // Rampe für Motor 1 Gas geben
        }
      }
      if (rampenrichtung2 == LOW) {
        if (x2 + rampenstart2 > schritte2) {
          mini2 = mini2 + 2; // Rampe für Motor 1 bremsen
        }
      }
      //----------------------------------------------------------------
    }
  }
  //-------------------------Motor 2------------------------------------
  //----------------------Ziel erreicht ?-------------------------------
  if (x2 == schritte2) {
    x2 = 0;
    mini2 = rampenstart2; //Rampe für Motor 2 Neustart
    richtung2 = !richtung2; // Dir Richtung wechseln
  }
  //--------------------------------------------------------------------

  //---------------------------------------------------------------------
  //----------Treiber 3 aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(enabl3, LOW); // Set Enable high
  digitalWrite(dir3, richtung3); // Set Dir
  if (x3 < schritte3)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 3--------------------------------------
    //---------------------Schritt 1-------------------------------------
    if ((schrittposition3 == 1) && (micros() - whablauf3 >= mini3)) {
      digitalWrite(puls3, HIGH); // Step auf high
      schrittposition3 = 2;  // Steuerung für Schritt 1 einstellen
      pwablauf3 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 3--------------------------------------
    //---------------------Schritt 2-------------------------------------
    if ((schrittposition3 == 2) && (micros() - pwablauf3 >= mini3)) {
      digitalWrite(puls3, LOW); // Step auf low
      schrittposition3 = 1;  // Steuerung für Schritt 0 einstellen
      whablauf3 = micros(); // Timer für Schritt 0 starten
      x3++;
      //-----------------------------------------------------------------
      //-----------------Rampensteuerung Motor3--------------------------
      if (x3 <= rampenstart3) {
        rampenrichtung3 = HIGH;
      } else {
        rampenrichtung3 = LOW;
      }
      if (rampenrichtung3 == HIGH) {
        if (mini3 > maxi3) {
          mini3 = mini3 - 1; // Rampe für Motor 1 Gas geben
        }
      }
      if (rampenrichtung3 == LOW) {
        if (x3 + rampenstart3 > schritte3) {
          mini3 = mini3 + 2; // Rampe für Motor 1 bremsen
        }
      }
      //----------------------------------------------------------------
    }
  }
  //-------------------------Motor 3------------------------------------
  //----------------------Ziel erreicht ?-------------------------------
  if (x3 == schritte3) {
    x3 = 0;
    mini3 = rampenstart3; //Rampe für Motor 3 Neustart
    richtung3 = !richtung3; // Dir Richtung wechseln
  }
  //--------------------------------------------------------------------

}

Auf 6400 Schritte pro Umdrehung wären die Motoren mit diesen Zeiten jetzt sehr langsamm. Deshalb die 3200 Schritte.

Franz

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.02.2019, 19:58 (Dieser Beitrag wurde zuletzt bearbeitet: 12.02.2019 20:17 von Franz54.)
Beitrag #22
RE: Schrittmotor Steuerung
Ich habe auch noch einen Fehler im Programm gefunden. Durch den endete die Bremsrampe nicht. Der Motor wurde langsammer und langsammer. Aber das habe ich bei dem letzten hier abgelegten Programmteil schon ausgemerzt. Also wenn man drei Achsen CNC Steuern möchte, dann wirds mit den Zeiten beim Arduino sehr eng, würde ich sagen. Confused

Ich möchte jetzt mal noch erweitern dass ich Daten einspeise, die für jede x/y/z Richtung die Schrittzahl und die Geschwindigkeit vorgeben.

Ich möchte aber gleich sagen, das Ziel ist es nicht eine CNC Maschine zu bauen. Warum soll man das Rad nochmal erfinden. Aber ich finde es interessant, mal was in dieser Richtung zu machen. Einfach als paraktische Lernaufgabe. Shy

Weiß eigentlich jemand, wie man die X/Y Bewegung bei einem Radius berechnen kann, dass man dann weiß wieviele schritte in X Richtung und wieviele Schritte in Y Richtung jeweils gefahren werden müßen, dass man eine Saubere runde Kurve fährt?? Ich habe mir mal einen Radius mit dem Zirkel auf Milimeterpapier gezogen und gesehen dass das sicher nicht einfach ist.

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.02.2019, 20:39
Beitrag #23
RE: Schrittmotor Steuerung
(12.02.2019 19:58)Franz54 schrieb:  Weiß eigentlich jemand, wie man die X/Y Bewegung bei einem Radius berechnen kann, dass man dann weiß wieviele schritte in X Richtung und wieviele Schritte in Y Richtung jeweils gefahren werden müßen, dass man eine Saubere runde Kurve fährt?? Ich habe mir mal einen Radius mit dem Zirkel auf Milimeterpapier gezogen und gesehen dass das sicher nicht einfach ist.

Die x-Koordinate ist cos(Winkel) und die Y-Koordinate ist sin(Winkel). Suche mal nach "Einheitskreis".

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.02.2019, 21:51
Beitrag #24
RE: Schrittmotor Steuerung
Danke dir.

Franz

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Raumklimamessung und -steuerung ml2k5 14 1.296 22.08.2019 01:19
Letzter Beitrag: ml2k5
  use-cases: DC- und Schrittmotor mit L298N - oder aber mit dem DAYPOWER L9110 dilbert 7 1.096 25.07.2019 21:55
Letzter Beitrag: MicroBahner
  Schrittmotor ruckelt jay35 21 2.702 08.05.2019 20:34
Letzter Beitrag: MicroBahner
  Fünf Phasen Schrittmotor? Holzwurm56 1 957 05.02.2019 13:49
Letzter Beitrag: Chopp
  Schrittmotor a4988 Problem iceweasel7 15 4.302 02.01.2018 16:16
Letzter Beitrag: iceweasel7
  12V Schrittmotor mit Arduino ansteuern niggo 4 4.227 21.06.2017 11:09
Letzter Beitrag: Binatone
  Bluetooth-Steuerung mit elegoo uno funktioniert nicht Matthias_Arduino 0 2.447 01.11.2016 19:47
Letzter Beitrag: Matthias_Arduino
  Welcher Schrittmotor ? Welches Motorshield? Binatone 0 1.764 22.09.2016 12:22
Letzter Beitrag: Binatone
  Schrittmotor ruckelt beim Start und im laufenden Betrieb - Arduino+Motor Shield grt35a 3 4.099 21.09.2016 06:56
Letzter Beitrag: Bitklopfer
  Steuerung eines Schrittmotor und eines Lüfters auf einem Shield phischmi 7 2.500 18.08.2016 20:58
Letzter Beitrag: phischmi

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste