- Nødvendige materialer
- Trinmotor (28BYJ-48)
- ULN2003 Motor Driver IC
- Kredsløbsdiagram og forbindelser
- Roterende trinmotor med STM32F103C8
- PROGRAMMERING STM32 til trinmotor
Trinmotor er børsteløs DC-motor, som kan drejes i små vinkler, disse vinkler kaldes trin. Generelt bruger trinmotor 200 trin til at fuldføre 360 graders rotation, hvilket betyder, at den roterer 1,8 grader pr. Trin. Stepper motor bruges i mange enheder, der har brug for præcis rotationsbevægelse som robotter, antenner, harddiske osv. Vi kan rotere stepper motor til en bestemt vinkel ved at give den de rette instruktioner. Der findes hovedsagelig to typer trinmotorer, Unipolar og Bipolar. Unipolar er lettere at betjene, kontrollere og også lettere at få. Her i denne tutorial interfacer vi Stepper Motor med STM32F103C8 (Blue pill) -kort.
Nødvendige materialer
- STM32F103C8 (blå pille)
- Trinmotor (28BYJ-48)
- ULN2003 IC
- Potentiometer 10k
- Brødbræt
- Jumper ledninger
Trinmotor (28BYJ-48)
28BYJ-48 er en unipolær trinmotor, der kræver 5V forsyning. Motoren har et unipolært arrangement med 4 spoler, og hver spole er klassificeret til + 5V, derfor er det relativt let at kontrollere med alle mikrocontrollere som Arduino, Raspberry Pi også STM32, men vi har brug for en Motor Drive IC som ULN2003 for at drive den, fordi stepper motorer forbruge høj strøm, og det kan beskadige mikrokontrollere.
En anden vigtig data, der skal bemærkes, er Stride Angle: 5.625 ° / 64. Dette betyder, at motoren, når den kører i 8-trins sekvens, bevæger sig 5,625 grader for hvert trin, og det tager 64 trin (5,625 * 64 = 360) for at fuldføre en fuld rotation. Andre specifikationer findes i nedenstående datablad:
Kontroller også grænsefladen til trinmotor med andre mikrocontrollere:
- Interfacing trinmotor med Arduino Uno
- Stepper Motor Control med Raspberry Pi
- Stepper Motor Interfacing med 8051 Microcontroller
- Interfacing trinmotor med PIC Microcontroller
Trinmotor kan også styres uden mikrokontroller, se dette trinmotorkørerkredsløb.
ULN2003 Motor Driver IC
Det bruges til at køre motoren i henhold til impulser modtaget fra mikrocontroller. Nedenfor er billeddiagrammet for ULN2003:
Pins (IN1 til IN7) er input pins og (OUT 1 til OUT 7) er tilsvarende output pins. COM gives Positiv kildespænding krævet til outputenheder. Yderligere tilslutninger til trinmotor er angivet nedenfor i kredsløbsdiagramafsnittet.
Kredsløbsdiagram og forbindelser
Nedenfor er forbindelsesforklaringen til ovenstående kredsløbsdiagram.
STM32F103C8 (blå pille)
Som vi kan se i nedenstående diagram, er PWM-benene angivet i bølgeformat (~), der er 15 sådanne ben, der kan bruges til pulsudgang til trinmotor. Vi har kun brug for fire ben, vi bruger (PA0 til PA3).
STM32F103C8 med ULN2003 Motor Driver IC
Stifter (PA0 til PA3) betragtes som udgangsstifter, der er forbundet med indgangsstifter (IN1-IN4) på ULN2003 IC.
STIFTER TIL STM32F103C8 |
PIN-KODER FOR ULN2003 IC |
PA0 |
IN1 |
PA1 |
IN2 |
PA2 |
IN3 |
PA3 |
IN4 |
5V |
COM |
GND |
GND |
ULN2003 IC med trinmotor (28BYJ-48)
Udgangsstifterne (OUT1-OUT4) på ULN2003 IC er tilsluttet trinmotorens ben (orange, gul, lyserød og blå).
PIN-KODER FOR ULN2003 IC |
STIFTMOTORS STIFT |
UD1 |
ORANGE |
OUT2 |
GUL |
UD3 |
LYSERØD |
OUT4 |
BLÅ |
COM |
RØD |
STM32F103C8 med potentiometer
Et potentiometer bruges til at indstille trinmotorens hastighed.
POTENTIOMETER |
STM32F103C8 |
VENSTRE (INDGANG) |
3.3 |
CENTRUM (UDGANG) |
PA4 |
HØJRE (GND) |
GND |
Roterende trinmotor med STM32F103C8
Nedenfor er nogle få trin til betjening af trinmotoren:
- Indstil hastigheden på trinmotor ved at variere potentiometer.
- Indtast derefter manuelt trin til rotation enten i urets retning (+ værdier) eller mod urets retning (-værdier) via SERIAL MONITER til stede i ARDUINO IDE (Værktøj-> Seriel skærm) eller CTRL + SKIFT + M.
- Ifølge inputværdien angivet i seriel skærm finder visse rotationstrin sted i trinmotor.
For eksempel
VÆRDI GIVET I SERIEMONITER |
ROTATION |
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 |
PROGRAMMERING STM32 til trinmotor
Som den foregående tutorial programmerede vi STM32F103C8 med Arduino IDE gennem USB-port uden at bruge FTDI-programmerer. For at lære om programmering af STM32 med Arduino IDE, følg linket. Vi kan fortsætte med at programmere det som en Arduino. Komplet kode gives i slutningen af projektet.
Først skal vi inkludere stepper-biblioteksfilerne #include
#omfatte
Så definerer vi nej. af trin, der skal gennemføres ved rotation, her bruger vi 32, fordi vi bruger Full-Step (4 trin-sekvens) så (360/32 = 11,25 grader). Så i et trin bevæger skaftet sig 11,25 grader, hvilket er skridtvinklen. I 4-trins sekvens kræves 4 trin for en komplet rotation.
#definer TRIN 32
Vi kan også bruge Half step mode, hvor der er 8-trins sekvens (360/64 = 5.625) skridtvinkel.
Trin pr. Omdrejning = 360 / TRINVINKEL
Når vi indstiller hastighed, skal vi tage en analog værdi fra PA4, der er forbundet til potentiometer. Så vi må erklære pin for det
const int speedm = PA4
Derefter har vi konverteret den analoge værdi til digital ved at gemme disse værdier i variabel af heltalstype, derefter skal vi kortlægge ADC-værdierne for at indstille hastighed, så vi bruger nedenstående sætning. Lær mere om brug af ADC med STM32 her.
int adc = analogRead (speedm); int-resultat = kort (adc , 0, 4096, 1, 1023);
For at indstille hastighed bruger vi stepper.setSpeed (resultat); Vi har et hastighedsområde på (1-1023).
Vi skal oprette en instans som nedenfor for at indstille de ben, der er forbundet til motoren. Vær forsigtig i disse trin, da de fleste af dem laver en fejl her i dette mønster. De giver et forkert mønster, og derfor kan spoler ikke få energi.
Stepper step (STEPS, PA0, PA2, PA1, PA3);
Nedenstående erklæring bruges til at få værdien af trin fra seriel skærm. For eksempel har vi brug for 2048 værdier for en fuld rotation (32 * 64 = 2048), dvs. 64 vil være gearforholdet, og 32 vil være en halvtrins sekvens for en rotation.
rotere = Serial.parseInt ();
Nedenstående kode bruges til at kalde forekomsten og køre motoren. Hvis rotationsværdien er 1, kalder den funktionstrin en gang, og et træk er udført.
stepper.step (roter);
Komplet kode med demonstrationsvideo er angivet nedenfor. Tjek også alle trinmotorrelaterede projekter her med grænseflade til forskellige andre mikrocontrollere