- Erforderliche Materialien
- Schrittmotor (28BYJ-48)
- ULN2003 Motortreiber-IC
- Schaltplan und Anschlüsse
- Rotierender Schrittmotor mit STM32F103C8
- PROGRAMMIERUNG STM32 für Schrittmotor
Der Schrittmotor ist ein bürstenloser Gleichstrommotor, der in kleinen Winkeln gedreht werden kann. Diese Winkel werden als Stufen bezeichnet. Im Allgemeinen verwendet ein Schrittmotor 200 Schritte, um eine 360-Grad-Drehung durchzuführen, dh eine Drehung von 1,8 Grad pro Schritt. Der Schrittmotor wird in vielen Geräten verwendet, die präzise Drehbewegungen erfordern, z. B. Roboter, Antennen, Festplatten usw. Wir können den Schrittmotor in einen bestimmten Winkel drehen, indem wir ihm die richtigen Anweisungen geben. Es stehen hauptsächlich zwei Arten von Schrittmotoren zur Verfügung, unipolar und bipolar. Unipolar ist einfacher zu bedienen, zu steuern und auch einfacher zu bekommen. Hier in diesem Tutorial verbinden wir den Schrittmotor mit der STM32F103C8-Platine (blaue Pille).
Erforderliche Materialien
- STM32F103C8 (blaue Pille)
- Schrittmotor (28BYJ-48)
- ULN2003 IC
- Potentiometer 10k
- Steckbrett
- Überbrückungsdrähte
Schrittmotor (28BYJ-48)
28BYJ-48 ist ein unipolarer Schrittmotor, der eine 5-V-Versorgung benötigt. Der Motor hat eine unipolare Anordnung mit 4 Spulen und jede Spule ist für +5 V ausgelegt, daher ist die Steuerung mit Mikrocontrollern wie Arduino, Raspberry Pi und STM32 relativ einfach. Wir benötigen jedoch einen Motorantriebs-IC wie ULN2003, um ihn anzutreiben, da Schrittmotoren verbrauchen hohen Strom und es kann Mikrocontroller beschädigen.
Ein weiteres wichtiges Datenelement ist der Schrittwinkel: 5,625 ° / 64. Dies bedeutet, dass sich der Motor, wenn er in einer 8-Schritt-Sequenz arbeitet, für jeden Schritt um 5,625 Grad bewegt und 64 Schritte (5,625 * 64 = 360) benötigt, um eine volle Umdrehung durchzuführen. Weitere Spezifikationen finden Sie im folgenden Datenblatt:
Überprüfen Sie auch die Schnittstelle zum Schrittmotor mit anderen Mikrocontrollern:
- Schrittmotor mit Arduino Uno verbinden
- Schrittmotorsteuerung mit Raspberry Pi
- Schrittmotor-Schnittstelle mit 8051-Mikrocontroller
- Schrittmotor mit PIC-Mikrocontroller verbinden
Der Schrittmotor kann auch ohne Mikrocontroller gesteuert werden, siehe diese Schrittmotortreiberschaltung.
ULN2003 Motortreiber-IC
Es wird verwendet, um den Motor gemäß den vom Mikrocontroller empfangenen Impulsen anzutreiben. Unten ist das Bilddiagramm von ULN2003:
Die Pins (IN1 bis IN7) sind Eingangspins und (OUT 1 bis OUT 7) sind entsprechende Ausgangspins. COM erhält eine positive Quellenspannung, die für Ausgabegeräte erforderlich ist. Weitere Anschlüsse für den Schrittmotor finden Sie weiter unten im Schaltplan.
Schaltplan und Anschlüsse
Unten finden Sie die Anschlusserklärung für den obigen Schaltplan.
STM32F103C8 (blaue Pille)
Wie wir im folgenden Diagramm sehen können, sind die PWM-Pins im Wellenformat (~) angegeben. Es gibt 15 solcher Pins, die für die Impulsausgabe an den Schrittmotor verwendet werden können. Wir brauchen nur vier Pins, die wir verwenden (PA0 bis PA3).
STM32F103C8 mit Motortreiber-IC ULN2003
Die Pins (PA0 bis PA3) werden als Ausgangspins betrachtet, die mit den Eingangspins (IN1-IN4) des ULN2003-IC verbunden sind.
PINS VON STM32F103C8 |
PINS VON ULN2003 IC |
PA0 |
IN 1 |
PA1 |
IN 2 |
PA2 |
IN3 |
PA3 |
IN4 |
5V |
COM |
GND |
GND |
ULN2003 IC mit Schrittmotor (28BYJ-48)
Die Ausgangspins (OUT1-OUT4) des ULN2003 IC sind mit den Pins der Schrittmotoren (Orange, Gelb, Pink und Blau) verbunden.
PINS VON ULN2003 IC |
PINS DES SCHRITTMOTORS |
OUT1 |
ORANGE |
OUT2 |
GELB |
OUT3 |
ROSA |
OUT4 |
BLAU |
COM |
ROT |
STM32F103C8 mit Potentiometer
Ein Potentiometer dient zur Einstellung der Drehzahl des Schrittmotors.
POTENTIOMETER |
STM32F103C8 |
LINKS (EINGANG) |
3.3 |
ZENTRUM (AUSGANG) |
PA4 |
RECHTS (GND) |
GND |
Rotierender Schrittmotor mit STM32F103C8
Im Folgenden finden Sie einige Schritte zum Betreiben des Schrittmotors:
- Stellen Sie die Drehzahl des Schrittmotors durch Variieren des Potentiometers ein.
- Geben Sie dann manuell Schritte für die Drehung entweder im Uhrzeigersinn (+ Werte) oder gegen den Uhrzeigersinn (-Werte) über SERIAL MONITER in ARDUINO IDE (Tools-> Serial Monitor) oder STRG + UMSCHALT + M ein.
- Entsprechend dem im seriellen Monitor angegebenen Eingabewert finden im Schrittmotor bestimmte Drehschritte statt.
Zum Beispiel
WERT IN SERIAL MONITER GEGEBEN |
DREHUNG |
2048 |
(360) CLK WISE |
1024 |
(180) CLK WISE |
512 |
(90) CLK WISE |
-2048 |
(-360) ANTI CLK WISE |
-1024 |
(-180) ANTI CLK WISE |
-512 |
(-90) ANTI CLK WISE |
PROGRAMMIERUNG STM32 für Schrittmotor
Wie im vorherigen Tutorial haben wir den STM32F103C8 mit Arduino IDE über den USB-Anschluss ohne Verwendung des FTDI-Programmiergeräts programmiert. Um mehr über die Programmierung von STM32 mit Arduino IDE zu erfahren, folgen Sie dem Link. Wir können es wie ein Arduino programmieren. Der vollständige Code wird am Ende des Projekts angegeben.
Zuerst müssen wir die Stepper-Bibliotheksdateien #include einschließen
#einschließen
Dann definieren wir nein. von Schritten, die bei Drehung ausgeführt werden müssen, verwenden wir hier 32, da wir also Vollschritt (4-Schritt-Sequenz) verwenden (360/32 = 11,25 Grad). Für einen Schritt bewegt sich die Welle also um 11,25 Grad, was einem Schrittwinkel entspricht. In der 4-Schritt-Sequenz sind 4 Schritte für eine vollständige Umdrehung erforderlich.
# SCHRITTE definieren 32
Wir können auch den Halbschrittmodus verwenden, bei dem ein Schrittwinkel von 8 Schritten (360/64 = 5,625) vorliegt.
Schritte pro Umdrehung = 360 / SCHRITTWINKEL
Während wir die Geschwindigkeit einstellen, müssen wir den Analogwert von PA4 nehmen, das an das Potentiometer angeschlossen ist. Also müssen wir den Pin dafür deklarieren
const int speedm = PA4
Dann haben wir den analogen Wert in einen digitalen Wert umgewandelt, indem wir diese Werte in einer Variablen vom Typ Integer gespeichert haben. Danach müssen wir die ADC-Werte für die Einstellung der Geschwindigkeit abbilden, damit wir die folgende Anweisung verwenden. Weitere Informationen zur Verwendung von ADC mit STM32 finden Sie hier.
int adc = analogRead (speedm); int result = map (adc , 0, 4096, 1, 1023);
Um die Geschwindigkeit einzustellen, verwenden wir stepper.setSpeed (Ergebnis); Wir haben einen Geschwindigkeitsbereich von (1-1023).
Wir müssen eine Instanz wie unten erstellen, um die Pins zu setzen, die mit dem Motor verbunden sind. Seien Sie bei diesen Schritten vorsichtig, da die meisten hier in diesem Muster einen Fehler machen. Sie geben ein falsches Muster und deshalb können die Spulen nicht erregt werden.
Schrittschritt (SCHRITTE, PA0, PA2, PA1, PA3);
Die folgende Anweisung wird verwendet, um den Wert der Schritte vom seriellen Monitor abzurufen. Zum Beispiel benötigen wir 2048 Werte für eine volle Umdrehung (32 * 64 = 2048), dh 64 ist das Übersetzungsverhältnis und 32 ist eine Halbschrittfolge für eine Umdrehung.
drehen = Serial.parseInt ();
Im Folgenden Code verwendet wird, um die Instanz zu rufen und den Motor.Wenn laufen dreht Wert 1 ist es die Funktion Schritt einer Zeit und eine Bewegung ruft erfolgt.
stepper.step (drehen);
Der vollständige Code mit dem Demonstrationsvideo ist unten angegeben. Überprüfen Sie hier auch alle Projekte im Zusammenhang mit Schrittmotoren mit Schnittstellen zu verschiedenen anderen Mikrocontrollern