- Componenti richiesti
- Schema elettrico e collegamenti
- Dettagli pin SMT32F103C8
- Programmazione STM32 per servomotore
Nell'elettronica, i servomotori sono utilizzati principalmente nei progetti di robotica a causa della loro precisione e facilità d'uso. I servomotori sono di dimensioni inferiori e sono molto efficaci ed efficienti dal punto di vista energetico. Forniscono una coppia elevata e possono essere utilizzati per sollevare o spingere pesi in base alle specifiche del motore. In questo tutorial impareremo a conoscere il servomotore e come interfacciare il servo con la scheda STM32F103C8. Un potenziometro è anche interfacciato per variare la posizione dell'albero del servomotore e un LCD per visualizzare il valore dell'angolo.
Componenti richiesti
- Scheda STM32F103C8 (pillola blu)
- Servomotore (SG90)
- LCD (16x2)
- Potenziometro
- Breadboard
- Cavi per ponticelli
Schema elettrico e collegamenti
Dettagli pin SMT32F103C8
In STM32F103C8, abbiamo 10 pin ADC (PA0-PB1), e qui usiamo solo un pin (PA3) per analogread () per impostare la posizione dell'albero del motore tramite potenziometro. Anche tra i 15 pin PWM di STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), un pin verrà utilizzato per fornire impulsi al Servo pin PWM del motore (di solito è di colore arancione).
Puoi saperne di più su PWM e ADC leggendo di seguito articoli dettagliati:
- Come utilizzare ADC in STM32F103C8
- Modulazione di larghezza di impulso (PWM) in STM32F103C8
Collegamento tra STM32F103C8 e LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Al potenziometro PIN centrale | V0 |
PB0 | RS |
GND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | UN |
GND | K |
Collegamento tra servomotore e STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
ROSSO (+ 5V) |
PA0 |
ARANCIONE (pin PWM) |
GND |
MARRONE (GND) |
Collegamenti dei potenziometri
Abbiamo usato DUE potenziometri qui
1. Il potenziometro a destra viene utilizzato per variare il contrasto del display LCD. Ha tre pin, il pin sinistro è per + 5V e il destro è per GND e il pin centrale è collegato a V0 dell'LCD.
2. Il potenziometro a sinistra viene utilizzato per variare la posizione dell'albero del servomotore controllando la tensione di ingresso analogico, il pin sinistro ha l'ingresso 3,3 V e il destro ha GND e l'uscita centrale è collegata a (PA3) di STM32
Programmazione STM32 per servomotore
Come il nostro precedente tutorial, abbiamo programmato STM32F103C8 con Arduino IDE tramite porta USB senza utilizzare il programmatore FTDI. Possiamo procedere programmandolo come un Arduino. Il codice completo è fornito di seguito alla fine del progetto.
Per prima cosa abbiamo incluso i file di libreria per le funzioni servo e LCD:
#includere
Quindi ha dichiarato i pin per il display LCD e lo ha inizializzato. Dichiarate anche poche altre variabili per PWM e potenziometro:
const int rs = PB0, en = PB1, d4 = PB10, d5 = PB11, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); int servoPin = PA0; int potPin = PA3;
Qui abbiamo creato servo variabile con tipo di dati Servo e l'abbiamo collegato al pin PWM dichiarato in precedenza.
Servo servo; servo.attach (servoPin);
Quindi leggere il valore analogico dal pin PA3 poiché è un pin ADC che converte la tensione analogica (0-3,3) in forma digitale (0-4095)
analogRead (potPin);
Poiché l'uscita digitale ha una risoluzione di 12 bit, dobbiamo ottenere valori nell'intervallo di gradi (0-170), divide il valore ADC (0-4096) in base all'angolo massimo di 170 gradi, quindi dividiamo per 24.
angolo = (lettura / 24);
La seguente dichiarazione fa in modo che il servomotore ruoti l'albero all'angolo indicato.
servo.write (angolo);
Il codice completo è fornito di seguito e ben spiegato dai commenti.