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
14.02.2019, 08:35 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2019 13:21 von Franz54.)
Beitrag #25
RE: Schrittmotor Steuerung
Ich habe hier mal ein grasses Beispiel einer Rampe getestet. Die geht im Tempo runter bis 3 Millisek pro Polwechsel, was bei 3200 Schritten je Umdrehung sehr langsamm ist und die hohe Geschwindigkeit macht dann die 150 Microsekunden Polwechsel. Die Rampe braucht in dem Fall fast eine Umdrehung. Habe auf 32000 Schritte eingestellt, also 10 Umdrehungen, von denen die Motoren 8 mit Vollgas fahren, die erste und die letzte Umdrehung sind die beiden Rampen.

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 = 32000;
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 = 3000;
unsigned long rampenende1 = 150;
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 = 32000;
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 = 3000;
unsigned long rampenende2 = 150;
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 = 32000;
byte richtung3 = HIGH;
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 = 3000;
unsigned long rampenende3 = 150;
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 + 1; // 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
  }
  //---------------------------------------------------------------------


  //---------------------------------------------------------------------
  //----------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 + 1; // 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, HIGH); // 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 + 1; // 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
    delay(5000);
  }
  //--------------------------------------------------------------------

}

Franz

Edit: Ich habe das Höchsttempo auf 150 micros Polwechselzeit geändert. Bei den vorher benutzten 50 micros gingen Schritte verloren.

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 


Nachrichten in diesem Thema
Schrittmotor Steuerung - Franz54 - 06.01.2019, 18:40
RE: Schrittmotor Steuerung - Franz54 - 07.01.2019, 14:28
RE: Schrittmotor Steuerung - Franz54 - 15.01.2019, 15:06
RE: Schrittmotor Steuerung - Tommy56 - 15.01.2019, 16:36
RE: Schrittmotor Steuerung - Franz54 - 24.02.2019, 22:08
RE: Schrittmotor Steuerung - Franz54 - 15.01.2019, 22:53
RE: Schrittmotor Steuerung - Tommy56 - 15.01.2019, 23:15
RE: Schrittmotor Steuerung - Franz54 - 15.01.2019, 23:28
RE: Schrittmotor Steuerung - Franz54 - 18.01.2019, 15:17
RE: Schrittmotor Steuerung - Franz54 - 19.01.2019, 22:25
RE: Schrittmotor Steuerung - Franz54 - 20.01.2019, 10:30
RE: Schrittmotor Steuerung - Franz54 - 20.01.2019, 17:07
RE: Schrittmotor Steuerung - Franz54 - 21.01.2019, 17:21
RE: Schrittmotor Steuerung - Franz54 - 27.01.2019, 22:33
RE: Schrittmotor Steuerung - Franz54 - 02.02.2019, 17:10
RE: Schrittmotor Steuerung - Tommy56 - 02.02.2019, 17:14
RE: Schrittmotor Steuerung - Franz54 - 02.02.2019, 17:16
RE: Schrittmotor Steuerung - Tommy56 - 02.02.2019, 18:05
RE: Schrittmotor Steuerung - Franz54 - 02.02.2019, 23:15
RE: Schrittmotor Steuerung - Franz54 - 03.02.2019, 18:52
RE: Schrittmotor Steuerung - Franz54 - 04.02.2019, 13:54
RE: Schrittmotor Steuerung - Franz54 - 12.02.2019, 08:28
RE: Schrittmotor Steuerung - Franz54 - 12.02.2019, 19:58
RE: Schrittmotor Steuerung - Tommy56 - 12.02.2019, 20:39
RE: Schrittmotor Steuerung - Franz54 - 12.02.2019, 21:51
RE: Schrittmotor Steuerung - Franz54 - 14.02.2019 08:35
RE: Schrittmotor Steuerung - Franz54 - 18.02.2019, 14:18
RE: Schrittmotor Steuerung - Chopp - 19.02.2019, 13:20
RE: Schrittmotor Steuerung - Franz54 - 19.02.2019, 17:43
RE: Schrittmotor Steuerung - Franz54 - 20.02.2019, 19:27
RE: Schrittmotor Steuerung - Franz54 - 27.02.2019, 20:16
RE: Schrittmotor Steuerung - Franz54 - 14.03.2019, 22:47
RE: Schrittmotor Steuerung - Franz54 - 15.03.2019, 14:46
RE: Schrittmotor Steuerung - Franz54 - 17.03.2019, 15:57
RE: Schrittmotor Steuerung - Franz54 - 31.03.2019, 08:56

Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Digitalservo oder schrittmotor, mit keypad in 16 prositionen Alpine4 11 1.152 11.11.2019 20:48
Letzter Beitrag: MicroBahner
  Raumklimamessung und -steuerung ml2k5 14 3.093 22.08.2019 01:19
Letzter Beitrag: ml2k5
  use-cases: DC- und Schrittmotor mit L298N - oder aber mit dem DAYPOWER L9110 dilbert 7 1.590 25.07.2019 21:55
Letzter Beitrag: MicroBahner
  Schrittmotor ruckelt jay35 21 3.416 08.05.2019 20:34
Letzter Beitrag: MicroBahner
  Fünf Phasen Schrittmotor? Holzwurm56 1 1.163 05.02.2019 13:49
Letzter Beitrag: Chopp
  Schrittmotor a4988 Problem iceweasel7 15 4.741 02.01.2018 16:16
Letzter Beitrag: iceweasel7
  12V Schrittmotor mit Arduino ansteuern niggo 4 4.632 21.06.2017 11:09
Letzter Beitrag: Binatone
  Bluetooth-Steuerung mit elegoo uno funktioniert nicht Matthias_Arduino 0 2.702 01.11.2016 19:47
Letzter Beitrag: Matthias_Arduino
  Welcher Schrittmotor ? Welches Motorshield? Binatone 0 1.883 22.09.2016 12:22
Letzter Beitrag: Binatone
  Schrittmotor ruckelt beim Start und im laufenden Betrieb - Arduino+Motor Shield grt35a 3 4.423 21.09.2016 06:56
Letzter Beitrag: Bitklopfer

Gehe zu:


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