Der Schrittmotor. Control mit Arduino und Fahrer. Beispiel Bewegungsprogramm

Einen Motortyp, der verwendet wird, um die Position seiner Achse genau zu steuern, ist der Schrittmotor.
Motor mit Gleichstrom (DC) arbeitet, hat keine Bürste und kompakte Bauweise, ist widerstandsfähig und wirtschaftlich.
Wir in der Regel in kleinen Kraft und Abmessungen wie Drucker, Scanner, Magnetventile, CNC-Maschinen, und an anderer Stelle gefunden.
Der Name ist: "Stepper" kommt aus der Art, wie es funktioniert, so dass Gleichspannung ohne Änderung seiner Polarität ein einziges Winkelschritt vorgenommen wird. Eine typische Nummer ist 200 Schritte für eine volle Umdrehung.
Um den Motor erforderlich sind, müssen wir Treiberschaltung, die die notwendige Elektronik zu liefern und die Verbindung der beiden Spulen, die üblicherweise, in dem Stator in den Festabschnitt Spulen können in der Mitte des Motors zu steuern, ist das, was gemeinhin als ein Rotor .
  Normalerweise sind die Steuertreiber haben zwei getrennte Stromquellen, eine für die logische Partition, in der Regel in einem 5-Volt- und eine um den Motor anzutreiben, in der Regel von 12 bis 50 Volt, wird das Steuerprogramm üblicherweise Mikrocontroller

Das Video zeigt einen Schrittmotor von Arduino und Dual-Vollbrücken-PWM-Motortreiber AM2170 Board of Amtek gesteuert.
Der Motor und die Steuerung durch fehlerhafte Drucker demontiert.

//_________________________________________________________________
// From the arduino serial monitor the control environment we delay (in msec) among the four steps.
// A negative value changes the direction.
           
// Set pin of AM2170 connected to arduino uno
#define I01 5
#define I11 6
#define phase1 7
#define I02 8
#define I12 9
#define phase2 10

int xronos = 230; //msec.
int xrono;
int peristrofi = 1;

void setup()
{
   Serial.begin(9600);

//  Outputs
    pinMode(I01, OUTPUT);
    pinMode(I11, OUTPUT);
    pinMode(I02, OUTPUT);
    pinMode(I12, OUTPUT);
    pinMode(phase1, OUTPUT);
    pinMode(phase2, OUTPUT);

//   Initialization    
     digitalWrite(I01, HIGH);
     digitalWrite(I11, HIGH);
     digitalWrite(I02, HIGH);
     digitalWrite(I12, HIGH);
     digitalWrite(phase1, LOW);
     digitalWrite(phase2, LOW);

}

void loop()
{
    if (Serial.available() > 0)
    {

               xronos = Serial.parseInt();
           
               if (xronos > 0)
                    {
                     Serial.println(xronos);
                     peristrofi = 1;
                     }
               else
                  if (xronos == 0) // not 0 allowed
                    {
                     xronos = 1;
                     peristrofi = 1;
                     Serial.println(xronos);
                    }
               else
                   {
                    peristrofi = -1;
                    Serial.println(xronos);
                   }                    
    }

    if (peristrofi==1)
    {
// The four steps of the one-way
  digitalWrite(I01,LOW);
  digitalWrite(I02,HIGH);
  digitalWrite(phase1,HIGH);
  digitalWrite(phase2,LOW);
  delay(xronos);

  digitalWrite(I01,HIGH);
  digitalWrite(I02,LOW);
  delay(xronos);

  digitalWrite(I01,LOW);
  digitalWrite(I02,HIGH);
  digitalWrite(phase1,LOW);
  digitalWrite(phase2,HIGH);
  delay(xronos);

  digitalWrite(I01,HIGH);
  digitalWrite(I02,LOW);
  delay(xronos);
    }
    else
    {
    xrono=abs(xronos);

// The 4 steps of other direction
    digitalWrite(I01,HIGH);
    digitalWrite(I02,LOW);
    digitalWrite(phase1,LOW);
    digitalWrite(phase2,HIGH);
    delay(xrono);

    digitalWrite(I01,LOW);
    digitalWrite(I02,HIGH);
    delay(xrono);

    digitalWrite(I01,HIGH);
    digitalWrite(I02,LOW);
    digitalWrite(phase1,HIGH);
    digitalWrite(phase2,LOW);
    delay(xrono);

    digitalWrite(I01,LOW);
    digitalWrite(I02,HIGH);
    delay(xrono);
    }

}


// fur 2nd video
// Έλεγχος bipolar stepper μοτέρ με τον οδηγό ΑΜ2170 της ΑΜtek από
// το serial interface δίνοντας 3 νούμερα:
// αριθμός βημάτων, μέγιστη ταχύτητα, επιτάχυνση(+επιβράδυνση).
// http://greekelectrician.blogspot.gr/

#include <AccelStepper.h>

// Ορισμός pin του ΑΜ2170 που συνδέονται στο arduino uno
#define I01 5
#define I11 6
#define phase1 7
#define I02 8
#define I12 9
#define phase2 10

// Ορισμός του μοτέρ και των pin που συνδέεται.
AccelStepper stepper (2,phase1,phase2); // FULL2WIRE = 2 (2 pins) στα 7 και 10

int vimata; // Από -32768 έως 32767
float taxitita; //βήματα το sec
float epitaxinsi; // βήματα το sec^2
 
void setup()
{
    Serial.begin(9600);

    //  Ορισμοί εξόδων
    pinMode(I01, OUTPUT);
    pinMode(I11, OUTPUT);
    pinMode(I02, OUTPUT);
    pinMode(I12, OUTPUT);

    //   Αρχικοποίηση
    digitalWrite(I01, LOW);
    digitalWrite(I11, HIGH);
    digitalWrite(I02, LOW);
    digitalWrite(I12, HIGH);

    Serial.println("\nDose (+-)vimata,taxitita,epitaxinsi(ENTER)\n");
}

void loop()
{
  // Αν υπάρχουν διαθέσιμα νούμερα διαβασέτα:
  while (Serial.available() > 0)
  {
    // έλεγχος για τα επόμενα 3 έγκυρα νούμερα από την σειριακή είσοδο:
    vimata = Serial.parseInt();
    taxitita = Serial.parseFloat();
    epitaxinsi = Serial.parseFloat();

    taxitita = abs(taxitita); // όχι αρνητική
    epitaxinsi = abs(epitaxinsi); //όχι αρνητική
    if (taxitita == 0) taxitita = 0.1; //όχι μηδέν
    if (epitaxinsi == 0) epitaxinsi = 0.01; // όχι μηδέν

    // εμφάνιση στην οθόνη του Η/Υ
    Serial.print("vimata\t\t=\t");
    Serial.println(vimata,DEC);
    Serial.print("taxitita\t=\t");
    Serial.println(taxitita,2);
    Serial.print("epitaxinsi\t=\t");
    Serial.println(epitaxinsi,2);
   
    stepper.setMaxSpeed(taxitita);
    stepper.setAcceleration(epitaxinsi);
    stepper.move(vimata);
   
    while(stepper.distanceToGo() != 0)
    stepper.run();
   
    Serial.println("\n\nTelos kinisis\nDose (+-)vimata,taxitita,epitaxinsi(ENTER)\n");
  }
}

Keine Kommentare:

Kommentar veröffentlichen