- Materiali richiesti
- Motore passo-passo (28BYJ-48)
- IC driver motore ULN2003
- Schema elettrico e collegamenti
- Motore passo-passo rotante con STM32F103C8
- PROGRAMMAZIONE STM32 per motore passo-passo
Il motore passo-passo è un motore CC senza spazzole, che può essere ruotato di piccoli angoli, questi angoli sono chiamati gradini. Generalmente il motore passo-passo utilizza 200 passi per completare la rotazione di 360 gradi, significa che ruota di 1,8 gradi per passo. Il motore passo-passo viene utilizzato in molti dispositivi che richiedono un movimento rotatorio preciso come robot, antenne, dischi rigidi, ecc. Possiamo ruotare il motore passo-passo a qualsiasi angolazione particolare dandogli istruzioni appropriate. Sono disponibili principalmente due tipi di motori passo-passo, unipolare e bipolare. Unipolare è più facile da usare, controllare e anche più facile da ottenere. Qui in questo tutorial stiamo interfacciando il motore passo-passo con la scheda STM32F103C8 (pillola blu).
Materiali richiesti
- STM32F103C8 (pillola blu)
- Motore passo-passo (28BYJ-48)
- ULN2003 IC
- Potenziometro 10k
- Breadboard
- Cavi jumper
Motore passo-passo (28BYJ-48)
28BYJ-48 è un motore passo-passo unipolare che richiede un'alimentazione di 5V. Il motore ha una disposizione unipolare a 4 bobine e ogni bobina è classificata per + 5V, quindi è relativamente facile da controllare con qualsiasi microcontrollore come Arduino, Raspberry Pi anche STM32.Ma abbiamo bisogno di un IC Motor Drive come ULN2003 per guidarlo, perché i motori passo-passo consuma corrente elevata e potrebbe danneggiare i microcontrollori.
Un altro dato importante da notare è l' angolo di falcata: 5.625 ° / 64. Ciò significa che il motore, quando funziona in una sequenza di 8 fasi, si muoverà di 5,625 gradi per ogni fase e saranno necessari 64 passaggi (5,625 * 64 = 360) per completare una rotazione completa. Altre specifiche sono fornite nella scheda tecnica di seguito:
Verificare anche l'interfacciamento con il motore passo-passo con altri microcontrollori:
- Interfacciamento del motore passo-passo con Arduino Uno
- Controllo motore passo-passo con Raspberry Pi
- Interfacciamento motore passo-passo con microcontrollore 8051
- Interfacciamento del motore passo-passo con il microcontrollore PIC
Il motore passo-passo può anche essere controllato senza alcun microcontrollore, vedere questo circuito del driver del motore passo-passo.
IC driver motore ULN2003
Viene utilizzato per pilotare il motore in base agli impulsi ricevuti dal microcontrollore. Di seguito è riportato il diagramma dell'immagine di ULN2003:
I pin (da IN1 a IN7) sono pin di ingresso e (da OUT 1 a OUT 7) sono pin di uscita corrispondenti. COM viene fornito Tensione sorgente positiva richiesta per i dispositivi di uscita. Ulteriori collegamenti per il motore passo-passo sono riportati di seguito nella sezione schema elettrico.
Schema elettrico e collegamenti
Di seguito è riportata la spiegazione dei collegamenti per lo schema elettrico sopra.
STM32F103C8 (pillola blu)
Come possiamo vedere nel diagramma sottostante, i pin PWM sono indicati in formato wave (~), ci sono 15 pin di questo tipo che possono essere utilizzati per l'uscita degli impulsi al motore passo-passo. Abbiamo bisogno solo di quattro pin, usiamo (PA0 toPA3).
STM32F103C8 con IC driver motore ULN2003
I pin (da PA0 a PA3) sono considerati pin di uscita collegati ai pin di ingresso (IN1-IN4) dell'IC ULN2003.
SPINE DI STM32F103C8 |
PERNI DI ULN2003 IC |
PA0 |
IN 1 |
PA1 |
IN 2 |
PA2 |
IN3 |
PA3 |
IN4 |
5V |
COM |
GND |
GND |
ULN2003 IC con motore passo-passo (28BYJ-48)
I pin di uscita (OUT1-OUT4) dell'IC ULN2003 sono collegati ai pin dei motori passo-passo (arancione, giallo, rosa e blu).
PERNI DI ULN2003 IC |
PERNI DEL MOTORE PASSO-PASSO |
OUT1 |
ARANCIA |
OUT2 |
GIALLO |
OUT3 |
ROSA |
OUT4 |
BLU |
COM |
ROSSO |
STM32F103C8 con potenziometro
Un potenziometro viene utilizzato per impostare la velocità del motore passo-passo.
POTENZIOMETRO |
STM32F103C8 |
SINISTRA (INGRESSO) |
3.3 |
CENTRO (USCITA) |
PA4 |
DESTRA (GND) |
GND |
Motore passo-passo rotante con STM32F103C8
Di seguito sono riportati alcuni passaggi per azionare il motore passo-passo:
- Impostare la velocità del motore passo-passo variando il potenziometro.
- Quindi inserire manualmente i passi per la rotazione in senso orario (+ valori) o antiorario (-valori) tramite SERIAL MONITER presente in ARDUINO IDE (Strumenti-> Serial monitor) o CTRL + SHIFT + M.
- In base al valore di ingresso fornito nel monitor seriale, alcune fasi di rotazione avvengono nel motore passo-passo.
Per esempio
VALORE DATO NEL MONITER SERIALE |
ROTAZIONE |
2048 |
(360) CLK SAGGIO |
1024 |
(180) CLK SAGGIO |
512 |
(90) CLK SAGGIO |
-2048 |
(-360) ANTI CLK WISE |
-1024 |
(-180) ANTI CLK WISE |
-512 |
(-90) ANTI CLK WISE |
PROGRAMMAZIONE STM32 per motore passo-passo
Come il tutorial precedente, abbiamo programmato STM32F103C8 con Arduino IDE tramite porta USB senza utilizzare il programmatore FTDI. Per conoscere la programmazione di STM32 con Arduino IDE segui il link. Possiamo procedere programmandolo come un Arduino. Il codice completo viene fornito alla fine del progetto.
Per prima cosa dobbiamo includere i file della libreria stepper #include
#includere
Quindi definiamo no. di passaggi da completare in rotazione, qui usiamo 32 perché stiamo usando Full-Step (4 Step-sequence) quindi (360/32 = 11,25 gradi). Quindi, per un passo, l'asta si muove di 11,25 gradi che è l'angolo di falcata. Nella sequenza a 4 fasi, sono necessarie 4 fasi per una rotazione completa.
#define PASSAGGI 32
Possiamo anche usare la modalità Half step dove c'è una sequenza di 8 passi (360/64 = 5.625) angolo di falcata.
Passi per giro = 360 / ANGOLO DEL PASSO
Dato che stiamo impostando la velocità dobbiamo prendere il valore analogico da PA4 che è collegato al potenziometro. Quindi dobbiamo dichiarare pin per quello
const int speedm = PA4
Quindi abbiamo convertito il valore analogico in digitale memorizzando quei valori in una variabile di tipo intero, dopodiché dobbiamo mappare i valori dell'ADC per impostare la velocità in modo da utilizzare l'istruzione seguente. Ulteriori informazioni sull'utilizzo di ADC con STM32 qui.
int adc = analogRead (speedm); int risultato = mappa (adc , 0, 4096, 1, 1023);
Per impostare la velocità, usiamo stepper.setSpeed (risultato); Abbiamo una gamma di velocità di (1-1023).
Dobbiamo creare un'istanza come di seguito per impostare i pin che sono collegati al motore. Fai attenzione in questi passaggi poiché la maggior parte di loro commette un errore qui in questo schema. Danno uno schema sbagliato e per questo motivo le bobine non possono essere energizzate.
Stepper passo-passo (STEPS, PA0, PA2, PA1, PA3);
L'istruzione seguente viene utilizzata per ottenere il valore dei passaggi dal monitor seriale. Ad esempio, abbiamo bisogno di 2048 valori per una rotazione completa (32 * 64 = 2048), ovvero 64 sarà il rapporto di trasmissione e 32 sarà la sequenza di mezzo passo per una rotazione.
rotate = Serial.parseInt ();
Il codice seguente viene utilizzato per chiamare l'istanza ed eseguire il motore. Se il valore di rotazione è 1, chiama la funzione stepper una volta e viene eseguita una mossa.
stepper.step (ruota);
Di seguito viene fornito il codice completo con il video dimostrativo. Controlla anche tutti i progetti relativi al motore passo-passo qui, con l'interfacciamento con vari altri microcontrollori