Kleiner Steppermotor


Bastelseite Display + Antriebe Sensoren C++



Ein Motor mit 5 Volt und ULN2003-Treiberplatine

Kleiner Stepper- / Schrittmotor

Unser kleiner Schrittmotor mit Namen "28BYJ-48" läuft mit 5 Volt Betriebsspannung und hat 5 Anschlüsse. Diese werden über einen Stecker direkt in die Treiberplatine gersteckt, auf der ein IC "ULN2003" seine Arbeit verrichtet.

Externe englische, aber ausführliche, Seite extern: https://components101.com/motors/28byj-48-stepper-motor
... und auf Deutsch: https://elektro.turanis.de/html/prj143/index.html

Ein Steppermotor



Anschlusskabel

Dieser unipolare Motor besitzt vier Spulen, die jeweils an einem Ende mit Plus (+5Volt, dem roten Kabel) verbunden sind. Die anderen Enden bezeichnen jeweils die einzelnen Spulen in den angegebenen Farben: #1 ist orange, #2 pink, #3 gelb und #4 dann blau. Die Anschlüsse sind in diesen Kabelfarben herausgeführt.

28BYJ-48
Technische Daten des Schrittmotors:
Nennspannung: 5V Gleichstrom
Anzahl der Phasen: 4
Schrittwinkel: 5,625 ° / 64
Spule: Unipolare 5-Leiter-Spule

Schaltbild von einem Steppermotor


ULN2003-Treiberplatine

Treiberplatine

Die Eingänge der Platine werden über 4 Kabel mit dem Arduino verbunden: IN1 kommt an Pin 8, IN2 an 9, IN3 an 10 und IN4 an 11. Zusätzlich wird noch eine Betriebsspannung von 5 Volt benötigt, die am Arduino direkt abgegriffen werden kann. Für Versuche ohne Last geht das - jedoch ist bei Motoren immer eine externe Stromversorgung besser! Hier sollte allerdings darauf geachtet werden, daß auch die Masse/GND/Minus vom Arduino mit der Masse der externen Spannungsquelle verbunden ist - nur Masse / Minus!

Anschluss-Platine


VollSchritt-Modus

Der kleine Stepper benötigt 32 Schritte für eine Umdrehung der Motorwelle vor dem Getriebe. Das Getriebe hat eine Untersetzung von 64. Der Motor muss sich also 64 mal drehen, damit nach dem Getriebe eine ganze Umdrehung heraus kommt. 32 Schritte mal 64 Untersetzung = 2048 Schritte pro Umdrehung nach dem Getriebe!

Die vier Leitungen (Leitung 5 ist Masse) werden von der Treiberplatine mit ULN2003 geschaltet. Die Steuerung dafür übernimmt unser Arduino.


Der Sketch dazu:

Unser kleiner Stepper 28BYJ-48 ist ein Getriebemotor. Er benötigt 2048 Schritte für eine ganze Umdrehung.

Als erstes wird die Bibliothek "Stepper.h" eingebunden. Dann werden die 2048 Schrittchen an die Variable "Schritte" übergeben.

Öffnet den Sketch in einem eigenen TAB:  k-stepper-uln2003.ino     Und hier der Sketch dazu:

// vollschritt-modus.ino
//
// Kleiner Stepper 28BYJ-48 mit 5 Volt 
// an ULN 2003 am Arduino
//
// Treiberplatinen - Anschluss: 
// IN1 an Pin 8, IN2 an Pin 9; IN3 an Pin 10 und IN4 an Pin 11 
//

#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11

//
// VollSchritt-Modus
//

int Umin = 12;
int StepsPerCycle = 512;
int ZeitDelay;
int VollSchritt[4] = {B01100, B00110, B00011, B01001};

// Motorpins als Ausgänge definieren

void setup() 
{
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  ZeitDelay = 29300 / Umin;            
}

//
// Funktion läßt den Motor im Uhrzeiger-Sinn laufen
//
void ImUhrZeiger(int count)
{
  for(int x = 0; x < count; x++)
  {
     for(int y = 0; y < StepsPerCycle; y++)
     {
        for(int i = 4; i >= 0; i--)
        {
           SendPulse(i);
           delayMicroseconds(ZeitDelay);
        }
     }
  }
}

//
// Funktion läßt den Motor gegen den Uhrzeiger-Sinn laufen
//
void GegenUhrZeiger(int count)
{
  for(int x = 0; x < count; x++)
  {
     for(int y = 0; y < StepsPerCycle; y++)
     {
        for(int i = 0; i < 4; i++)
        {
           SendPulse(i);
          delayMicroseconds(ZeitDelay);
        }
     }
  }
}

//
// VollSchritt-Modus an den Motor senden
//
void SendPulse(int v)
{
   digitalWrite(IN1, bitRead(VollSchritt[v], 0));
   digitalWrite(IN2, bitRead(VollSchritt[v], 1));
   digitalWrite(IN3, bitRead(VollSchritt[v], 2));
   digitalWrite(IN4, bitRead(VollSchritt[v], 3));
}

//
// Hauptprogramm (loop) :
// läßt den Motor 2 mal im UhrZeiger-Sinn laufen, 2 Sekunden Pause
// dann den Motor 2 mal gegen den UhrZeiger-Sinn, 2 Sekunden Pause
// Beginn wieder von vorn
// 
void loop() 
{
  ImUhrZeiger(2);
  delay(2000);
  GegenUhrZeiger(2);
  delay(2000);
}





Übersicht Seiten Anfang


brixelweb.de