Schrittmotor 28BYJ-48 mit ULN2003 Treiberplatine: Unterschied zwischen den Versionen
(115 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
'''Autoren:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]] | '''Autoren:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]] | ||
== Einleitung == | == Einleitung == | ||
Bei demSchrittmotor 28BYJ-48 handelt es sich um einen Motor, der sich speziell für kleine Anwendungen mit dem Arduino-Board eignet. Die Besonderheit liegt darin, dass er ohne eine externe Spannungsversorgung betrieben werden kann. Der Motor entwickelt dabei ein relativ hohes Drehmoment. Dies wird durch ein Getriebe realisiert, welches innerhalb des Metallgehäuses vor dem eigentlichen Schrittmotor verbaut wurde. Dadurch wird es in dieser kompakten Bauweise überhaupt erst möglich, dass sich eine ganze Umdrehung der Antriebswelle auf 2048 Einzelschritte aufteilen lässt. Ein kleiner daraus resultierender Nachteil ist die langsame maximale Drehgeschwindigkeit. | |||
Der Schrittmotor wird an die Motorsteuerungsplatine ULN2003 Treiberplatine angeschlossen. Diese versorgt den Motor mit ausreichend elektrischer Energie, damit die Leistung nicht von den digitalen Pins des Arduino-Boards aufgebracht werden muss. Die Steuerungsplatine gibt es in zwei Versionen, bei denen die seitlich angebrachten Pins entweder nach oben oder nach unten aus der Platine herausragen. Die Anschlussbelegung ist jedoch gleich. | |||
[[Datei:03480 5b.jpg|thumb|rigth|300px|Abb. 2: Schrittmotor 28BYJ-48]] | |||
[[Datei:ME015 03.jpg|thumb|rigth|300px|Abb. 3: ULN2003 Treiberplatine mit SMD bestückt]] | |||
[[Datei:Ansteuerung Schrittmotor.jpg|thumb|rigth|500px|Abb. 4: Ansteuerung des Schrittmotors]] | |||
== Technische Daten == | == Technische Daten == | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Tabelle 1: Technische Daten des Schrittmotor 28BYJ-48 mit ULN2003 Treiberplatine (5 V Motorvariante) | |||
|- | |- | ||
| | | Anzahl Phasen/Steuerleitungen || 4 | ||
|- | |- | ||
| | | Frequenz || 100 Hz, höchste Effektivität | ||
|- | |- | ||
| | | Getriebe || 64:1 (Untersetzung) | ||
|- | |- | ||
| | | Schritte pro Umdrehung || 2048 (Vollschritt-Modus) | ||
|- | |- | ||
| | | || 4096 (Halbschritt-Modus) | ||
|- | |- | ||
| Winkel pro Vollschritt || 11,25 ° | |||
|- | |||
| Winkel pro Halbschritt<sup>*</sup> || 5,625 ° | |||
|- | |||
| Drehmoment || 34.3 Nm | |||
|- | |||
| Nennspannung || 5 V | |||
|- | |||
| Stromaufnahme pro Spule ||100 mA | |||
|- | |||
| Stromaufnahme minimale Drehzahl ||300 mA | |||
|- | |||
| Stromaufnahme minimale Drehzahl ||170 mA | |||
|- | |||
| Spulenwiderstand ||50 Ω | |||
|- | |||
| Lautstärke || <40 dB | |||
|- | |||
| Kabellänge || 24 cm | |||
|- | |||
| Leehrlaufgeschwindigkeit || 17 UPM | |||
|- | |- | ||
| Abmessungen|| | | Außendurchmesser Motorgehäuse|| 28 mm | ||
|- | |||
| Abmessungen|| ⌀28 mm x 19 mm (ohne Schaft) | |||
|- | |||
| Gewicht|| 30 g | |||
|} | |} | ||
<sup>*</sup> Beispiel: <math>5,625^°\cdot4096/64=360^°</math> | |||
== Pinbelegung== | == Pinbelegung== | ||
[[Datei: | |||
[[Datei:28BYJ-48 Specs.jpg|thumb|rigth|300px|Abb. 5: Anschlussplan des Schrittmotors an die Treiberplatine]] | |||
[[Datei:Anschlussplan Schrittmotor.jpg|thumb|rigth|300px|Abb. 6: Anschlussplan für den Betrieb am Arduino]] | |||
{| class="wikitable" | |||
|+ Tabelle 2: Pinbelegung des Schrittmotors 28BYJ-48 | |||
! style="font-weight: bold;" | Pin | |||
! style="font-weight: bold;" | Belegung | |||
! style="font-weight: bold;" | Farbe | |||
|- | |||
| 1 || Spule 4 || Pink | |||
|- | |||
| 2 || Spule 2 || Blau | |||
|- | |||
| 3 || Versorgungsspannung (VCC, 5 V) || Rot | |||
|- | |||
| 4 || Spule 1 || Gelb | |||
|- | |||
| 5 || Spule 3 || Orange | |||
|} | |||
Hinweis: Farben können je nach Hersteller abweichen. | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ Tabelle 3: Pinbelegung des Molex-Verbinders P3 auf der ULN2003 Treiberplatine | |||
! style="font-weight: bold;" | Pin | ! style="font-weight: bold;" | Pin | ||
! style="font-weight: bold;" | Belegung | ! style="font-weight: bold;" | Belegung | ||
! style="font-weight: bold;" | Farbe | ! style="font-weight: bold;" | Farbe | ||
|- | |- | ||
| 1 ||Ausgang || | | 1 || Spule 2 || Blau | ||
|- | |||
| 2 || Spule 4 || Pink | |||
|- | |||
| 3 || Spule 1 || Gelb | |||
|- | |||
| 4 || Spule 3 || Orange | |||
|- | |||
| 5 || Versorgungsspannung (VCC, 5 V) || Rot | |||
|} | |||
== Treiberplatine ULN2003 == | |||
Die Treiberplatine ULN2003 gibt es ebenfalls in zwei Ausführungen: THT und SMD. Die Treiber-Platine fungiert als Verstärker und ist deshalb vonnöten, weil der PIC nur mit maximal 25mA belastet werden kann, der Schrittmotor aber - je nach Ausführung - zwischen ca. 140 mA und 300 mA benötigt. Man könnte das Modul durch eine Reihe von Transistoren oder Operationsverstärkern ersetzen. Zwischen Microcontroller und Treiber-Platine fließen übrigens im Betrieb lediglich 700µA. | |||
Bitte beachten: Die Treiber-Platine invertiert die Polarität. Wird vom Microcontroller her Plus eingespeist, dann liegt am Ausgang des ULN2003-Moduls Minus an. | |||
== Ansteuerung == | |||
Die Steuerung von Schrittmotoren erfolgt über elektrische Impulse mit einer bestimmten Frequenz, Sequenz und Länge. So wird bestimmt wie schnell, wie viele Schritte und in welche Richtung der Schrittmotor sich drehen soll. Der Treiber übersetzt die Impulse vom Controller und versorgt den Schrittmotor mit Spannung. | |||
Der Motor verfügt über 2 Spulen, die jeweils einen Mittelabgriff haben (vgl. Abb. 6). Der Mittelabgriff wird als roter Draht herausgeführt und an 5 V DC angeschlossen. Die Spulen werden entsprechend Tabelle 3 auf GND gezogen, was den Motor vorantreibt. Der Schrittmotor dreht sich, wenn die Ansteuerung in der angegebennen Schrittfolge erfolgt. Diese Schrittfolge wird mit dem Treibermodul ULN2003 erzeugt. Dieser IC besteht aus einer Anordnung von 7 Darlington Transistorpaaren von denen jeder seine Last von bis zu 500 mA und 50 V treiben kann. Mit dem verdrehsichernen Molex-Stecker (vgl. Tabelle 3) wird der Motor an das Treibermodul angeschlossen. Die LEDs zeigen die Stati in Tabelle 4 an. Es gibt einen on/off Jumper, um den Schrittmotor zu deaktivieren. Der Jumper leitet die an 5 V Betriebsspannung an den Motoren und LEDs weiter (vgl. Abb. 7). | |||
Der Motor verfügt über Spulen, die nacheinander mit Strom versorgt werden, um die magnetische Motorwelle in Drehung zu versetzen. Bei der Vollschrittmethode werden bei jedem Schritt 2 der 4 Spulen mit Strom versorgt. Die Standard-Stepper-Bibliothek, die mit der Arduino IDE vorinstalliert ist, verwendet diese Methode. Das 28BYH-48-Datenblatt gibt an, dass die bevorzugte Methode zum Antreiben dieses Schrittmotors die Verwendung der Halbschrittmethode ist, bei der wir zuerst nur Spule 1, dann Spule 1 und 2 zusammen, dann nur Spule 2 usw. mit Strom versorgen. Mit 4 Spulen bedeutet 8 verschiedene Signale, wie in der Tabelle unten. | |||
Zwischen den einzelnen Schritten liegt jeweils eine Pause zwischen 1 ms bis 4 ms, die die Drehgeschwindigkeit/Frequenz festlegt. | |||
{| class="wikitable" | |||
|+ Tabelle 4: Sequenz der Steuersignale für die 4 Anschlussdrähte, Vollschritt mit Drehung im Uhrzeigersinn | |||
! style="font-weight: bold;" style="border-right: medium solid;" | Schritt | |||
! style="font-weight: bold;" | IN1 | |||
! style="font-weight: bold;" | IN2 | |||
! style="font-weight: bold;" | IN3 | |||
! style="font-weight: bold;" style="border-right: medium solid;" | IN4 | |||
! style="font-weight: bold;" | D1 | |||
! style="font-weight: bold;" | D2 | |||
! style="font-weight: bold;" | D3 | |||
! style="font-weight: bold;" style="border-right: medium solid;"| D4 | |||
! style="font-weight: bold;" | P3 Pin1 | |||
! style="font-weight: bold;" | P3 Pin2 | |||
! style="font-weight: bold;" | P3 Pin3 | |||
! style="font-weight: bold;" | P3 Pin4 | |||
! style="font-weight: bold;" | P3 Pin5 | |||
|- | |||
|style="border-right: medium solid;"| 1 ||1 || 0 ||1 ||style="border-right: medium solid;"| 0 || 1 || 1 || 0 ||style="border-right: medium solid;" | 0 || 3 V || 3 V || 0,6 V || 0,6 V || 5 V | |||
|- | |||
|style="border-right: medium solid;"| 2 ||0 || 1 ||1 ||style="border-right: medium solid;"| 0 || 0 || 1 || 1 ||style="border-right: medium solid;"| 0 || 3 V || 0,6 V || 0,6 V || 3 V || 5 V | |||
|- | |||
|style="border-right: medium solid;"| 3 ||0 || 1 ||0 ||style="border-right: medium solid;"| 1 || 0 || 0 || 1 ||style="border-right: medium solid;"| 1 || 0,6 V || 0,6 V || 3 V || 3 V || 5 V | |||
|- | |||
|style="border-right: medium solid;"| 4 ||1 || 0 ||0 ||style="border-right: medium solid;"| 1 || 1 || 0 || 0 ||style="border-right: medium solid;"| 1 || 0,6 V || 3 V || 3 V || 0,6 V || 5 V | |||
|} | |||
{| class="wikitable" | |||
|+ Tabelle 5: Vollschritt mit Drehung gegen den Uhrzeigersinn | |||
! style="font-weight: bold;" style="border-right: medium solid;" | Schritt | |||
! style="font-weight: bold;" | IN1 | |||
! style="font-weight: bold;" | IN2 | |||
! style="font-weight: bold;" | IN3 | |||
! style="font-weight: bold;" style="border-right: medium solid;" | IN4 | |||
! style="font-weight: bold;" | D1 | |||
! style="font-weight: bold;" | D2 | |||
! style="font-weight: bold;" | D3 | |||
! style="font-weight: bold;" | D4 | |||
|- | |||
|style="border-right: medium solid;"| 1 || 1 || 0 || 0 ||style="border-right: medium solid;"| 1 || 1 || 0 || 0 || 1 | |||
|- | |||
|style="border-right: medium solid;"| 2 || 0 || 1 || 0 ||style="border-right: medium solid;"| 1 || 0 || 0 || 1 || 1 | |||
|- | |||
|style="border-right: medium solid;"| 3 || 0 || 1 || 1 ||style="border-right: medium solid;"| 0 || 0 || 1 || 1 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 4 || 1 || 0 || 1 ||style="border-right: medium solid;"| 0 || 1 || 1 || 0 || 0 | |||
|} | |||
{| class="wikitable" | |||
|+ Tabelle 6: Halbschritt mit Drehung im Uhrzeigersinn | |||
! style="font-weight: bold;" style="border-right: medium solid;" | Schritt | |||
! style="font-weight: bold;" | IN1 | |||
! style="font-weight: bold;" | IN2 | |||
! style="font-weight: bold;" | IN3 | |||
! style="font-weight: bold;" style="border-right: medium solid;" | IN4 | |||
! style="font-weight: bold;" | D1 | |||
! style="font-weight: bold;" | D2 | |||
! style="font-weight: bold;" | D3 | |||
! style="font-weight: bold;" | D4 | |||
|- | |||
|style="border-right: medium solid;"| 1 || 1 || 0 || 0 ||style="border-right: medium solid;"| 0 || 1 || 0 || 0 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 2 || 1 || 0 || 1 ||style="border-right: medium solid;"| 0 || 1 || 1 || 0 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 3 || 0 || 0 || 1 ||style="border-right: medium solid;"| 0 || 0 || 1 || 0 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 4 || 0 || 1 || 1 ||style="border-right: medium solid;"| 0 || 0 || 1 || 1 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 5 || 0 || 1 || 0 ||style="border-right: medium solid;"| 0 || 0 || 0 || 1 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 6 || 0 || 1 || 0 ||style="border-right: medium solid;"| 1 || 0 || 0 || 1 || 1 | |||
|- | |||
|style="border-right: medium solid;"| 7 || 0 || 0 || 0 ||style="border-right: medium solid;"| 1 || 0 || 0 || 0 || 1 | |||
|- | |||
|style="border-right: medium solid;"| 8 || 1 || 0 || 0 ||style="border-right: medium solid;"| 1 || 1 || 0 || 0 || 1 | |||
|} | |||
{| class="wikitable" | |||
|+ Tabelle 7: Halbschritt mit Drehung gegen den Uhrzeigersinn | |||
! style="font-weight: bold;" style="border-right: medium solid;" | Schritt | |||
! style="font-weight: bold;" | IN1 | |||
! style="font-weight: bold;" | IN2 | |||
! style="font-weight: bold;" | IN3 | |||
! style="font-weight: bold;" style="border-right: medium solid;" | IN4 | |||
! style="font-weight: bold;" | D1 | |||
! style="font-weight: bold;" | D2 | |||
! style="font-weight: bold;" | D3 | |||
! style="font-weight: bold;" | D4 | |||
|- | |- | ||
| 2 || | |style="border-right: medium solid;"| 1 || 1 || 0 || 0 ||style="border-right: medium solid;"| 1 || 1 || 0 || 0 || 1 | ||
|- | |||
|style="border-right: medium solid;"| 2 || 0 || 0 || 0 ||style="border-right: medium solid;"| 1 || 0 || 0 || 0 || 1 | |||
|- | |||
|style="border-right: medium solid;"| 3 || 0 || 1 || 0 ||style="border-right: medium solid;"| 1 || 0 || 0 || 1 || 1 | |||
|- | |||
|style="border-right: medium solid;"| 4 || 0 || 1 || 0 ||style="border-right: medium solid;"| 0 || 0 || 0 || 1 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 5 || 0 || 1 || 1 ||style="border-right: medium solid;"| 0 || 0 || 1 || 1 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 6 || 0 || 0 || 1 ||style="border-right: medium solid;"| 0 || 0 || 1 || 0 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 7 || 1 || 0 || 1 ||style="border-right: medium solid;"| 0 || 1 || 1 || 0 || 0 | |||
|- | |||
|style="border-right: medium solid;"| 8 || 1 || 0 || 0 ||style="border-right: medium solid;"| 0 || 1 || 0 || 0 || 0 | |||
|} | |||
[[Datei:Schaltplan4HTwlEdJ0sPyY.jpg|thumb|rigth|500px|Abb. 7: Schaltplan]] | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Stepper.h - Stepper library for Wiring/Arduino - Version 1.1.0 </strong> | |||
|- | |||
| <syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | |||
// ensure this library description is only included once | |||
#ifndef Stepper_h | |||
#define Stepper_h | |||
// library interface description | |||
class Stepper { | |||
public: | |||
// constructors: | |||
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2); | |||
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, | |||
int motor_pin_3, int motor_pin_4); | |||
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, | |||
int motor_pin_3, int motor_pin_4, | |||
int motor_pin_5); | |||
// speed setter method: | |||
void setSpeed(long whatSpeed); | |||
// mover method: | |||
void step(int number_of_steps); | |||
int version(void); | |||
private: | |||
void stepMotor(int this_step); | |||
int direction; // Direction of rotation | |||
unsigned long step_delay; // delay between steps, in ms, based on speed | |||
int number_of_steps; // total number of steps this motor can take | |||
int pin_count; // how many pins are in use. | |||
int step_number; // which step the motor is on | |||
// motor pin numbers: | |||
int motor_pin_1; | |||
int motor_pin_2; | |||
int motor_pin_3; | |||
int motor_pin_4; | |||
int motor_pin_5; // Only 5 phase motor | |||
unsigned long last_step_time; // time stamp in us of when the last step was taken | |||
}; | |||
#endif | |||
</syntaxhighlight> | |||
|- | |- | ||
|} | |} | ||
== | == Getriebe == | ||
[[Datei:28BYJ-48 Getriebe.jpg|thumb|rigth|300px|Abb. 8: Betriebe des Schrittmotors]] | |||
= | Der Motortreiber unterscheidet zwischen Voll- und Halbschrittmodus. Im '''Vollschrittmodus''' entspricht jeder Schritt einer Drehung von 11,25 °. Es gibt somit | ||
<math>360\,°/11,25\,°=32 </math> | |||
Schritte pro Umdrehung. | |||
Der Motor ist mit einem 64:1 Untersetzungsgetriebe ausgestattet (vgl. Tabelle , Abb. 8). | |||
<math>\frac{32}{9} \cdot \frac{22}{11} \cdot \frac{26}{9} \cdot \frac{31}{10} = 63,68395 </math> | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ Tabelle | |+ Tabelle 4: Untersetzungsgetriebe des 28BYJ-48 Motors | ||
! style="font-weight: bold;" | Motor | |||
! style="font-weight: bold;" | #1 | |||
! style="font-weight: bold;" | #2 | |||
| | ! style="font-weight: bold;" | #3 | ||
|- | ! style="font-weight: bold;" | #4 | ||
| | ! style="font-weight: bold;" | Multipl. | ||
|- | ! style="font-weight: bold;" | Übersetzung | ||
| | |- | ||
| | | Eingang ||32 ||22 ||26 || 31 || 567424|| 63,68395 | ||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |- | ||
| | | Ausgang ||9 || 11 ||9 || 10||8910|| | ||
|} | |} | ||
Im Vollschrittmodus gibt es <math>32\cdot63,68395=2037,8864 </math> Schritte. Je nach Getriebemodell rechnet man mit einer Übersetzung von 64:1 und 2048 Schritten pro Umdrehung. | |||
Im '''Halbschrittmodus''' entspricht jeder Schritt einer Drehung von 5,625 °. Es gibt somit | |||
<math>360\,°/5,625\,°=64 </math> Schritte pro Umdrehung. Inklusive Getriebe entspricht dies 4096 Schritte pro Umdrehung. | |||
== Demos == | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSchrittmotor28BYJ-48 SVN: DemoSchrittmotor28BYJ-48.ino] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSchrittmotor28BYJ_48_Vollschritt_V/DemoSchrittmotor28BYJ_48_Vollschritt_V.ino SVN: Vollschritt Ansteuerung - vorwärts] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSchrittmotor28BYJ_48_Vollschritt_V/DemoSchrittmotor28BYJ_48_Vollschritt_R.ino SVN: Vollschritt Ansteuerung - rückwärts] | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSchrittmotor28BYJ_48_Halbschritt_V/DemoSchrittmotor28BYJ_48_Halbschritt_V.ino SVN: Halbschritt Ansteuerung - vorwärts] | |||
== Videos == | == Videos == | ||
{{#ev:youtube|https://www.youtube.com/watch?v= | {{#ev:youtube|https://www.youtube.com/watch?v=COR39hNQQvw| 600 | | Video 1: Der 28BYJ-48 Schrittmotor einfach erklärt, mit drei Beispiele |frame}} | ||
{{#ev:youtube|https://www.youtube.com/watch?v= | {{#ev:youtube|https://www.youtube.com/watch?v=15K9N1yVnhc| 600 | | Video 2: 28BYJ-48 Stepper Motor Disassembly |frame}} | ||
{{#ev:youtube|https://www.youtube.com/watch?v= | {| class="wikitable" | ||
{{#ev:youtube|https://www.youtube.com/watch?v= | |{{#ev:youtube|https://www.youtube.com/watch?v=JFa0o2Yw18M| 300 | | Video 3: Arduino kurzgefasst - 28BYJ-48 der preiswerte Schrittmotor |frame}} | ||
|{{#ev:youtube|https://www.youtube.com/watch?v=avrdDZD7qEQ| 300 | | Video 4: 28BYJ-48 stepper motor and ULN2003 Arduino |frame}} | |||
|{{#ev:youtube|https://www.youtube.com/watch?v=HDxrrG1RFaw| 300 | | Video 5: The Cheapest Stepper Motor And How You Use It |frame}} | |||
|} | |||
== Hilfreiche Links== | == Hilfreiche Links== | ||
Zeile 74: | Zeile 313: | ||
* [https://www.arduino.cc/reference/en/libraries/stepper/ Arduino Reference: Stepper] | * [https://www.arduino.cc/reference/en/libraries/stepper/ Arduino Reference: Stepper] | ||
* [https://cyaninfinite.com/moving-the-28byj-48-stepper-motor/ Moving the 28BYJ-48 Stepper Motor] | * [https://cyaninfinite.com/moving-the-28byj-48-stepper-motor/ Moving the 28BYJ-48 Stepper Motor] | ||
* [https://www.roboter-bausatz.de/projekte/schrittmotor-mit-arduino-ansteuern Marc Schmidt: Schrittmotor mit Arduino ansteuern] | |||
* [https://docs.arduino.cc/learn/electronics/stepper-motors?_gl=1*1mwlt3c*_ga*ODg2MDA4MTAyLjE3MDA0NzgwMjY.*_ga_NEXN8H46L5*MTcwMDQ3ODAyNS4xLjEuMTcwMDQ3ODA0MS4wLjAuMA..*_fplc*b1RXaFl0bjklMkZaRVNuNWU5UlJ5JTJCOFhnTHUzc3NGNkxHbHZKRWRjYzRycEZScFphSWNZT1RxYlJaZXZKRTk3blFXMGZRZG5pJTJCYTB2Z2VNZ3Jhck13OGJ4UmdjWmNnYWtvQ1JRSU01YkxjU0U3TVZERjdjc0xSQ3VOaSUyRnNiYmclM0QlM0Q.#bipolar-stepper-circuit-and-schematic Arduino and Stepper Motor Configurations] | |||
*[http://www.afug-info.de/Schaltungen-Eigenbau/Schrittmotor_28BYJ-48/ Schrittmotor 28BYJ-48 ansteuern / testen] | |||
== Datenblatt == | == Datenblatt == | ||
* [[Medium:ME071UPDATE.pdf|Datenblatt: Schrittmotor 28BYJ-48]] | * [[Medium:ME071UPDATE.pdf|Datenblatt: Schrittmotor 28BYJ-48]] | ||
* [[Medium:Uln2001.pdf|Datenblatt: ULN2003 Treiberplatine]] | * [[Medium:Uln2001.pdf|Datenblatt: ULN2003 Treiberplatine]] | ||
* [https://components101.com/motors/28byj-48-stepper-motor 28BYJ-48 - 5V Stepper Motor] | |||
== Literatur == | == Literatur == |
Aktuelle Version vom 27. November 2023, 12:36 Uhr
![](/wiki/images/thumb/d/df/28BYJ-48.jpg/300px-28BYJ-48.jpg)
Autoren: Prof. Dr.-Ing. Schneider
Einleitung
Bei demSchrittmotor 28BYJ-48 handelt es sich um einen Motor, der sich speziell für kleine Anwendungen mit dem Arduino-Board eignet. Die Besonderheit liegt darin, dass er ohne eine externe Spannungsversorgung betrieben werden kann. Der Motor entwickelt dabei ein relativ hohes Drehmoment. Dies wird durch ein Getriebe realisiert, welches innerhalb des Metallgehäuses vor dem eigentlichen Schrittmotor verbaut wurde. Dadurch wird es in dieser kompakten Bauweise überhaupt erst möglich, dass sich eine ganze Umdrehung der Antriebswelle auf 2048 Einzelschritte aufteilen lässt. Ein kleiner daraus resultierender Nachteil ist die langsame maximale Drehgeschwindigkeit.
Der Schrittmotor wird an die Motorsteuerungsplatine ULN2003 Treiberplatine angeschlossen. Diese versorgt den Motor mit ausreichend elektrischer Energie, damit die Leistung nicht von den digitalen Pins des Arduino-Boards aufgebracht werden muss. Die Steuerungsplatine gibt es in zwei Versionen, bei denen die seitlich angebrachten Pins entweder nach oben oder nach unten aus der Platine herausragen. Die Anschlussbelegung ist jedoch gleich.
![](/wiki/images/thumb/3/36/03480_5b.jpg/300px-03480_5b.jpg)
![](/wiki/images/c/cc/ME015_03.jpg)
![](/wiki/images/thumb/d/dd/Ansteuerung_Schrittmotor.jpg/500px-Ansteuerung_Schrittmotor.jpg)
Technische Daten
Anzahl Phasen/Steuerleitungen | 4 |
Frequenz | 100 Hz, höchste Effektivität |
Getriebe | 64:1 (Untersetzung) |
Schritte pro Umdrehung | 2048 (Vollschritt-Modus) |
4096 (Halbschritt-Modus) | |
Winkel pro Vollschritt | 11,25 ° |
Winkel pro Halbschritt* | 5,625 ° |
Drehmoment | 34.3 Nm |
Nennspannung | 5 V |
Stromaufnahme pro Spule | 100 mA |
Stromaufnahme minimale Drehzahl | 300 mA |
Stromaufnahme minimale Drehzahl | 170 mA |
Spulenwiderstand | 50 Ω |
Lautstärke | <40 dB |
Kabellänge | 24 cm |
Leehrlaufgeschwindigkeit | 17 UPM |
Außendurchmesser Motorgehäuse | 28 mm |
Abmessungen | ⌀28 mm x 19 mm (ohne Schaft) |
Gewicht | 30 g |
* Beispiel:
Pinbelegung
![](/wiki/images/thumb/1/1b/28BYJ-48_Specs.jpg/300px-28BYJ-48_Specs.jpg)
![](/wiki/images/thumb/a/a1/Anschlussplan_Schrittmotor.jpg/300px-Anschlussplan_Schrittmotor.jpg)
Pin | Belegung | Farbe |
---|---|---|
1 | Spule 4 | Pink |
2 | Spule 2 | Blau |
3 | Versorgungsspannung (VCC, 5 V) | Rot |
4 | Spule 1 | Gelb |
5 | Spule 3 | Orange |
Hinweis: Farben können je nach Hersteller abweichen.
Pin | Belegung | Farbe |
---|---|---|
1 | Spule 2 | Blau |
2 | Spule 4 | Pink |
3 | Spule 1 | Gelb |
4 | Spule 3 | Orange |
5 | Versorgungsspannung (VCC, 5 V) | Rot |
Treiberplatine ULN2003
Die Treiberplatine ULN2003 gibt es ebenfalls in zwei Ausführungen: THT und SMD. Die Treiber-Platine fungiert als Verstärker und ist deshalb vonnöten, weil der PIC nur mit maximal 25mA belastet werden kann, der Schrittmotor aber - je nach Ausführung - zwischen ca. 140 mA und 300 mA benötigt. Man könnte das Modul durch eine Reihe von Transistoren oder Operationsverstärkern ersetzen. Zwischen Microcontroller und Treiber-Platine fließen übrigens im Betrieb lediglich 700µA.
Bitte beachten: Die Treiber-Platine invertiert die Polarität. Wird vom Microcontroller her Plus eingespeist, dann liegt am Ausgang des ULN2003-Moduls Minus an.
Ansteuerung
Die Steuerung von Schrittmotoren erfolgt über elektrische Impulse mit einer bestimmten Frequenz, Sequenz und Länge. So wird bestimmt wie schnell, wie viele Schritte und in welche Richtung der Schrittmotor sich drehen soll. Der Treiber übersetzt die Impulse vom Controller und versorgt den Schrittmotor mit Spannung.
Der Motor verfügt über 2 Spulen, die jeweils einen Mittelabgriff haben (vgl. Abb. 6). Der Mittelabgriff wird als roter Draht herausgeführt und an 5 V DC angeschlossen. Die Spulen werden entsprechend Tabelle 3 auf GND gezogen, was den Motor vorantreibt. Der Schrittmotor dreht sich, wenn die Ansteuerung in der angegebennen Schrittfolge erfolgt. Diese Schrittfolge wird mit dem Treibermodul ULN2003 erzeugt. Dieser IC besteht aus einer Anordnung von 7 Darlington Transistorpaaren von denen jeder seine Last von bis zu 500 mA und 50 V treiben kann. Mit dem verdrehsichernen Molex-Stecker (vgl. Tabelle 3) wird der Motor an das Treibermodul angeschlossen. Die LEDs zeigen die Stati in Tabelle 4 an. Es gibt einen on/off Jumper, um den Schrittmotor zu deaktivieren. Der Jumper leitet die an 5 V Betriebsspannung an den Motoren und LEDs weiter (vgl. Abb. 7).
Der Motor verfügt über Spulen, die nacheinander mit Strom versorgt werden, um die magnetische Motorwelle in Drehung zu versetzen. Bei der Vollschrittmethode werden bei jedem Schritt 2 der 4 Spulen mit Strom versorgt. Die Standard-Stepper-Bibliothek, die mit der Arduino IDE vorinstalliert ist, verwendet diese Methode. Das 28BYH-48-Datenblatt gibt an, dass die bevorzugte Methode zum Antreiben dieses Schrittmotors die Verwendung der Halbschrittmethode ist, bei der wir zuerst nur Spule 1, dann Spule 1 und 2 zusammen, dann nur Spule 2 usw. mit Strom versorgen. Mit 4 Spulen bedeutet 8 verschiedene Signale, wie in der Tabelle unten.
Zwischen den einzelnen Schritten liegt jeweils eine Pause zwischen 1 ms bis 4 ms, die die Drehgeschwindigkeit/Frequenz festlegt.
Schritt | IN1 | IN2 | IN3 | IN4 | D1 | D2 | D3 | D4 | P3 Pin1 | P3 Pin2 | P3 Pin3 | P3 Pin4 | P3 Pin5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 3 V | 3 V | 0,6 V | 0,6 V | 5 V |
2 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 3 V | 0,6 V | 0,6 V | 3 V | 5 V |
3 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0,6 V | 0,6 V | 3 V | 3 V | 5 V |
4 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0,6 V | 3 V | 3 V | 0,6 V | 5 V |
Schritt | IN1 | IN2 | IN3 | IN4 | D1 | D2 | D3 | D4 |
---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
2 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
3 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
4 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
Schritt | IN1 | IN2 | IN3 | IN4 | D1 | D2 | D3 | D4 |
---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
2 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
3 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
5 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
6 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
7 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
8 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
Schritt | IN1 | IN2 | IN3 | IN4 | D1 | D2 | D3 | D4 |
---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
3 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
4 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
5 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
6 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
7 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
8 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
![](/wiki/images/thumb/8/89/Schaltplan4HTwlEdJ0sPyY.jpg/500px-Schaltplan4HTwlEdJ0sPyY.jpg)
Stepper.h - Stepper library for Wiring/Arduino - Version 1.1.0 |
// ensure this library description is only included once
#ifndef Stepper_h
#define Stepper_h
// library interface description
class Stepper {
public:
// constructors:
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2);
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2,
int motor_pin_3, int motor_pin_4);
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2,
int motor_pin_3, int motor_pin_4,
int motor_pin_5);
// speed setter method:
void setSpeed(long whatSpeed);
// mover method:
void step(int number_of_steps);
int version(void);
private:
void stepMotor(int this_step);
int direction; // Direction of rotation
unsigned long step_delay; // delay between steps, in ms, based on speed
int number_of_steps; // total number of steps this motor can take
int pin_count; // how many pins are in use.
int step_number; // which step the motor is on
// motor pin numbers:
int motor_pin_1;
int motor_pin_2;
int motor_pin_3;
int motor_pin_4;
int motor_pin_5; // Only 5 phase motor
unsigned long last_step_time; // time stamp in us of when the last step was taken
};
#endif
|
Getriebe
![](/wiki/images/thumb/9/90/28BYJ-48_Getriebe.jpg/300px-28BYJ-48_Getriebe.jpg)
Der Motortreiber unterscheidet zwischen Voll- und Halbschrittmodus. Im Vollschrittmodus entspricht jeder Schritt einer Drehung von 11,25 °. Es gibt somit Schritte pro Umdrehung.
Der Motor ist mit einem 64:1 Untersetzungsgetriebe ausgestattet (vgl. Tabelle , Abb. 8).
Motor | #1 | #2 | #3 | #4 | Multipl. | Übersetzung |
---|---|---|---|---|---|---|
Eingang | 32 | 22 | 26 | 31 | 567424 | 63,68395 |
Ausgang | 9 | 11 | 9 | 10 | 8910 |
Im Vollschrittmodus gibt es Schritte. Je nach Getriebemodell rechnet man mit einer Übersetzung von 64:1 und 2048 Schritten pro Umdrehung.
Im Halbschrittmodus entspricht jeder Schritt einer Drehung von 5,625 °. Es gibt somit Schritte pro Umdrehung. Inklusive Getriebe entspricht dies 4096 Schritte pro Umdrehung.
Demos
- SVN: DemoSchrittmotor28BYJ-48.ino
- SVN: Vollschritt Ansteuerung - vorwärts
- SVN: Vollschritt Ansteuerung - rückwärts
- SVN: Halbschritt Ansteuerung - vorwärts
Videos
Hilfreiche Links
- Funduino Anleitung
- Arduino.cc: Stepper
- Arduino Reference: Stepper
- Moving the 28BYJ-48 Stepper Motor
- Marc Schmidt: Schrittmotor mit Arduino ansteuern
- Arduino and Stepper Motor Configurations
- Schrittmotor 28BYJ-48 ansteuern / testen