- Components necessaris
- Diagrama de circuits i connexions
- Detalls del pin SMT32F103C8
- Programació STM32 per Servomotor
En electrònica, els servomotors s’utilitzen principalment en projectes de robòtica per la seva precisió i fàcil maneig. Els servomotors tenen una mida més petita i són molt eficaços i energèticament eficients. Proporcionen un parell elevat i es poden utilitzar per aixecar o empènyer peses segons les especificacions dels motors. En aquest tutorial coneixerem el Servo Motor i la interfície del Servo amb la placa STM32F103C8. També es connecta un potenciòmetre per variar la posició de l’eix del servomotor i una pantalla LCD per mostrar el valor de l’angle.
Components necessaris
- Tauler STM32F103C8 (Blue Pill)
- Servomotor (SG90)
- LCD (16x2)
- Potenciòmetre
- Taula de pa
- Jumper Wires
Diagrama de circuits i connexions

Detalls del pin SMT32F103C8
A STM32F103C8, tenim 10 pins ADC (PA0-PB1), i aquí només fem servir un pin (PA3) per llegir analògicament () per configurar la posició de l’eix del motor mitjançant un potenciòmetre. També entre els 15 pins PWM de STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), s’utilitzarà un pin per proporcionar impulsos al Servo pin PWM del motor (normalment és de color taronja).
Podeu obtenir més informació sobre PWM i ADC llegint articles detallats a continuació:
- Com utilitzar ADC a STM32F103C8
- Modulació d'amplada de pols (PWM) a STM32F103C8
Connexió entre STM32F103C8 i LCD
| STM32F103C8 | LCD |
| GND | VSS |
| + 5V | VDD |
| Al PIN del Potentiometer Center | V0 |
| PB0 | RS |
| GND | RW |
| PB1 | E |
| PB10 | D4 |
| PB11 | D5 |
| PC13 | D6 |
| PC14 | D7 |
| + 5V | A |
| GND | K |
Connexió entre servomotor i STM32F103C8
|
STM32F103C8 |
SERVO |
|
+ 5V |
VERMELL (+ 5 V) |
|
PA0 |
TARONJA (pin PWM) |
|
GND |
MARRÓ (GND) |
Connexions de potenciòmetres
Aquí hem utilitzat DOS potenciòmetres
1. El potenciòmetre de la dreta serveix per variar el contrast de la pantalla LCD. Té tres pins, el pin esquerre és per a + 5 V i el dret és per a GND i el pin central està connectat a V0 de la pantalla LCD.
2. El potenciòmetre de l'esquerra s'utilitza per variar la posició de l'eix del servomotor controlant la tensió d'entrada analògica, el pin esquerre té entrada 3.3V i el dret té GND i la sortida central està connectada a (PA3) de STM32

Programació STM32 per Servomotor
Igual que el nostre tutorial anterior, vam programar el STM32F103C8 amb Arduino IDE a través del port USB sense utilitzar el programador FTDI. Podem continuar programant-lo com un Arduino. A continuació es dóna el codi complet al final del projecte.
Primer hem inclòs fitxers de biblioteca per a funcions de servo i LCD:
#incloure
A continuació, es van declarar els pins per a la pantalla LCD i es va inicialitzar. També s'han declarat poques altres variables per a PWM i potenciòmetre:
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;
Aquí hem creat un servo variable amb Servo tipus de dades i l’hem adjuntat al pin PWM declarat prèviament.
Servo servo; servo.attach (servoPin);
A continuació, llegiu el valor analògic del pin PA3 ja que és un pin ADC que converteix el voltatge analògic (0-3,3) en forma digital (0-4095)
analogRead (potPin);
Com que la sortida digital té una resolució de 12 bits, hem d’obtenir valors en el rang de grau (0-170), divideix el valor ADC (0-4096) segons l’angle màxim de 170 graus, de manera que dividim amb 24.
angle = (lectura / 24);
La següent afirmació fa que el servomotor giri l'eix en l'angle indicat.
servo.write (angle);
A continuació es dóna el codi complet i s’explica bé amb comentaris.
