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
19.01.2019, 22:25 (Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2019 22:29 von Franz54.)
Beitrag #9
RE: Schrittmotor Steuerung
Jetzt habe ich mal noch eine Rampe eingebaut.

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 (9600)
//------Steuerung für den ersten Schrittmotor------------------
word x1 = 0;
byte Dir1 = HIGH;
byte schrittzaehler1 = 0;
word schritte1 = 6400;
// 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;
unsigned long mini1 = rampenstart1;
unsigned long maxi1 = rampenende1;

//--------------------------------------------------------------
//------Steuerung für den zweiten Schrittmotor------------------
word x2 = 0;
byte Dir2 = HIGH;
byte schrittzaehler2 = 0;
word schritte2 = 6400;
// 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;
unsigned long mini2 = rampenstart2;
unsigned long maxi2 = rampenende2;
//--------------------------------------------------------------
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");
  //----------Steuerpins für den ersten Treiber aktivieren-------
  Serial.begin(BAUD);
  pinMode(6, OUTPUT); // Enable1
  pinMode(5, OUTPUT); // Step1
  pinMode(4, OUTPUT); // Dir1
  digitalWrite(6, LOW); // Set Enable1 low
  //---------------------------------------------------------------
  //----------Steuerpins für den zweiten Treiber aktivieren--------
  Serial.begin(BAUD);
  pinMode(10, OUTPUT); // Enable2
  pinMode(9, OUTPUT); // Step2
  pinMode(8, OUTPUT); // Dir2
  digitalWrite(10, LOW); // Set Enable2 low
  //---------------------------------------------------------------
}

void loop()
{
  //---------------------------------------------------------------------
  //----------Treiber eins aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(6, HIGH); // Set Enable high
  digitalWrite(4, Dir1); // Set Dir
  if (x1 < schritte1)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 1----------------------------------------
    //---------------------Schritt 0---------------------------------------
    if ((schrittzaehler1 == 0) && (micros() - whablauf1 >= mini1)) {
      digitalWrite(5, HIGH); // Step auf high
      schrittzaehler1 = 1;  // Steuerung für Schritt 1 einstellen
      pwablauf1 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 1----------------------------------------
    //---------------------Schritt 1---------------------------------------
    if ((schrittzaehler1 == 1) && (micros() - pwablauf1 >= mini1)) {
      digitalWrite(5, LOW); // Step auf low
      schrittzaehler1 = 0;  // Steuerung für Schritt 0 einstellen
      whablauf1 = micros(); // Timer für Schritt 0 starten
      x1++;
      if (mini1 > maxi1) {
        mini1 = mini1 - 1; // Rampe für Motor 1 Gas geben
      }
    }
  }
  //-------------------------Motor 1-------------------------------------
  //----------------------Ziel erreicht ?--------------------------------
  if (x1 == schritte1) {
    x1 = 0;
    Dir1 = !Dir1; // Dir Richtung wechseln
    mini1 = rampenstart1; //Rampe für Motor 1 Neustart
    mini2 = rampenstart2; //Rampe für Motor 2 Neustart
  }
  //---------------------------------------------------------------------
  //----------Treiber zwei aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(10, HIGH); // Set Enable high
  digitalWrite(8, Dir2); // Set Dir
  if (x2 < schritte2)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 2----------------------------------------
    //---------------------Schritt 0---------------------------------------
    if ((schrittzaehler2 == 0) && (micros() - whablauf2 >= mini2)) {
      digitalWrite(9, HIGH); // Step auf high
      schrittzaehler2 = 1;  // Steuerung für Schritt 1 einstellen
      pwablauf2 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 2----------------------------------------
    //---------------------Schritt 1---------------------------------------
    if ((schrittzaehler2 == 1) && (micros() - pwablauf2 >= mini2)) {
      digitalWrite(9, LOW); // Step auf low
      schrittzaehler2 = 0;  // Steuerung für Schritt 0 einstellen
      whablauf2 = micros(); // Timer für Schritt 0 starten
      x2++;
      if (mini2 > maxi2) {
        mini2 = mini2 - 1; // Rampe für Motor 2 Gas geben
      }
    }
  }
  //-------------------------Motor 2-------------------------------------
  //----------------------Ziel erreicht ?--------------------------------
  if (x2 == schritte1) {
    x2 = 0;
    Dir2 = !Dir2; // Dir Richtung wechseln
    delay(1000); // Eine Sekunde Pause
  }
}

Als die beiden Motoren ohne Rampe zum Test parallel gelaufen sind hatte ich nach 1-2 Std. hin und her schon eine kleine Abweichung zwischen den beiden Motoren.

Jetzt laufen sie mit der Startrampe wieder zum Test Shy

Servus
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
20.01.2019, 10:30
Beitrag #10
RE: Schrittmotor Steuerung
Ja, bis jetzt laufen die zwei Motoren schon recht gut. Mit der rampe ist die Abweichung sehr gering. Ich bin mir nicht sicher ob da eine Abweichung ist. Bei 6400 Schritten für eine Umdrehung ist die kleinste Abweichung von einem Schritt wohl mit meinen Kontrollmöglichkeiten nicht sichtbar. Ich habe nur eine Fahne mit einem Tesaband auf der Achse, und darunter am Motorgehäuse eine Markierung. Confused

Kann es doch sein, dass auch beim bremsen eine Rampe empfehlenswert ist?

Ich habe zwischen den Schritten und zwischen den Umpolungen zur Zeit am höchsten Tempo jeweils 50 micro. Beim anfahren sind es 500 micro. Das geht nach jedem Schritt um ein Micro zurück. So dass die Motoren nach 450 Schritten Vollgas erreichen.

Ich werde jetzt mal die selbe Rampe zum Bremsen einbauen.

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
20.01.2019, 17:07 (Dieser Beitrag wurde zuletzt bearbeitet: 20.01.2019 19:32 von Franz54.)
Beitrag #11
RE: Schrittmotor Steuerung
Jetzt habe ich erweitert auf die zweite Rampe. Also jetzt mit Start- und Stopprampe.
wie synchron die Motoren jetzt laufen muß ich erst noch testen. Big Grin

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 Dir1 = HIGH;
byte schrittposition1 = 0;
// 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;

//--------------------------------------------------------------
//------Steuerung für den zweiten Schrittmotor------------------
word x2 = 0;
word schritte2 = 6400;
byte Dir2 = HIGH;
byte schrittposition2 = 0;
// 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;
//--------------------------------------------------------------
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");
  //----------Steuerpins für den ersten Treiber aktivieren-------
  Serial.begin(BAUD);
  pinMode(6, OUTPUT); // Enable1
  pinMode(5, OUTPUT); // Step1
  pinMode(4, OUTPUT); // Dir1
  digitalWrite(6, LOW); // Set Enable1 low
  //---------------------------------------------------------------
  //----------Steuerpins für den zweiten Treiber aktivieren--------
  Serial.begin(BAUD);
  pinMode(10, OUTPUT); // Enable2
  pinMode(9, OUTPUT); // Step2
  pinMode(8, OUTPUT); // Dir2
  digitalWrite(10, LOW); // Set Enable2 low
  //---------------------------------------------------------------
}

void loop()
{
  //---------------------------------------------------------------------
  //----------Treiber eins aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(6, HIGH); // Set Enable high
  digitalWrite(4, Dir1); // Set Dir
  if (x1 < schritte1)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 1----------------------------------------
    //---------------------Schritt 0---------------------------------------
    if ((schrittposition1 == 0) && (micros() - whablauf1 >= mini1)) {
      digitalWrite(5, HIGH); // Step auf high
      schrittposition1 = 1;  // Steuerung für Schritt 1 einstellen
      pwablauf1 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 1----------------------------------------
    //---------------------Schritt 1---------------------------------------
    if ((schrittposition1 == 1) && (micros() - pwablauf1 >= mini1)) {
      digitalWrite(5, LOW); // Step auf low
      schrittposition1 = 0;  // 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;
    Dir1 = !Dir1; // Dir Richtung wechseln
    mini1 = rampenstart1; //Rampe für Motor 1 Neustart
    mini2 = rampenstart2; //Rampe für Motor 2 Neustart
  }
  //---------------------------------------------------------------------


  //---------------------------------------------------------------------
  //----------Treiber zwei aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(10, HIGH); // Set Enable high
  digitalWrite(8, Dir2); // Set Dir
  if (x2 < schritte2)    // Ziel noch nicht erreicht?
  {
    //----------------------Motor 2--------------------------------------
    //---------------------Schritt 0-------------------------------------
    if ((schrittposition2 == 0) && (micros() - whablauf2 >= mini2)) {
      digitalWrite(9, HIGH); // Step auf high
      schrittposition2 = 1;  // Steuerung für Schritt 1 einstellen
      pwablauf2 = micros(); // Timer für Schritt 1 starten
    }
    //----------------------Motor 2--------------------------------------
    //---------------------Schritt 1-------------------------------------
    if ((schrittposition2 == 1) && (micros() - pwablauf2 >= mini2)) {
      digitalWrite(9, LOW); // Step auf low
      schrittposition2 = 0;  // 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 == schritte1) {
    x2 = 0;
    Dir2 = !Dir2; // Dir Richtung wechseln
    delay(1000); // Eine Sekunde Pause
  }
}

Bis jetzt ist es ein super Gleichlauf der beiden Motoren.
Jetzt muss ich mir mal ansehen, welche Daten da an eine CNC übergeben werden, und wie der Datensatz aussieht. Da habe ich noch Null Ahnung.

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
21.01.2019, 17:21 (Dieser Beitrag wurde zuletzt bearbeitet: 21.01.2019 17:22 von Franz54.)
Beitrag #12
RE: Schrittmotor Steuerung
Habe mal nen Video angehängt. So laufen die beiden Nemo17 seit heute morgen Big Grin

Rein Optisch betrachtet würde ich mal sagen ohne Schrittfehler. Aber bei 6400 Schritte pro Umdrehung kann schon sein dass man da ein paar Schritte weniger oder mehr nicht erkennt.

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
27.01.2019, 22:33 (Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2019 22:52 von Franz54.)
Beitrag #13
RE: Schrittmotor Steuerung
Ich hatte die beiden Nema17 Motoren immer auf 1,2 Ampere laufen. Jetzt habe ich sie auf 1,7 Ampere umgeschalten. Auf 1,2 Ampere wurden die Motoren gerade mal warm. Jetzt mit 1,7 Ampere werden sie wesentlich wärmer. Die sind jetzt nach höchstens einer Std. laufen auf 48 Grad. Weiß jemand, wieviel Wärme für diese Motoren noch unbedenklich ist?

Was mich jetzt gerade wundert, die Stromaufnahme der Motoren ist entschieden höher (fast 4x höher) wenn sie langsam laufen. Also wenn sie in der Anfahr- und Startrampe laufen 4 mal soviel Strom, als wenn sie vollgas laufen.

PS: Ich habe jetzt gerade wo gelesen, dass bis 80 Grad auf Dauer in Ordnung ist. 100 Grad kurzzeitig. Das ist ganz schön hoch. Da suche ich mal nach weiteren Infos dazu.

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
02.02.2019, 17:10 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2019 17:14 von Franz54.)
Beitrag #14
RE: Schrittmotor Steuerung
Ich denke ich bei ein wenig blind. Ich finde den Grund nicht, warum das Programm sobald die Erweiterung um den drittel Schrittmotor erweitert ist Mist macht.
Wenn der Teil unten im Programm für Motor 3 zum Arduino Mega mit übertragen wird, laffen die Motoren 1 und 2 nicht mehr so wie ich das will. Ohne dass der dritte Motor angeschlossen ist!! Also die Kabel zum Motor können es nicht sein. Wenn der dritte Motor auch angeschlossen ist, laufen die drei teilweise korrekt, teiweise machen sie Dinge die ich nicht nochvollziehen kann.

Hier mal das Programm dazu:
Der ganze Motor 3 Teil ist hier unten auskommentiert. So läuft das Programm wunderbar. Wenn ich diese /* Programm Motor3 */ rausnehme, so dass der Teil auch auf den Mega übertragen wird, passiert dieser undefinierbare Mist AngryBlushConfused

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;// Pulswechselablaufzeit2
unsigned long whablauf3 = 0;// Wiederhohlablaufzeit2
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");
  //----------Steuerpins für den ersten Treiber aktivieren-------
  Serial.begin(BAUD);
  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) {
    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) {
    x2 = 0;
    richtung2 = !richtung2; // Dir Richtung wechseln
  }
  //--------------------------------------------------------------------

/*
  //---------------------------------------------------------------------
  //----------Treiber drei aktivieren------------------------------------
  //---------------------------------------------------------------------
  digitalWrite(enabl3, LOW); // Set Enable high
  digitalWrite(dir3, richtung2); // 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;
    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
02.02.2019, 17:14
Beitrag #15
RE: Schrittmotor Steuerung
Ohne jetzt den Code zu analysieren, das Netztzeil schafft alle 3 Motoren?

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, 17:16 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2019 17:17 von Franz54.)
Beitrag #16
RE: Schrittmotor Steuerung
Das das schafft es locker. Aber der dritte Motor muss nicht mal angeschlossen sein. Dann Passiert der Mist auch schon.

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.228 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