- Composants requis
- Schéma de circuit et connexions
- Détails des broches SMT32F103C8
- Programmation STM32 pour servomoteur
En électronique, les servomoteurs sont principalement utilisés dans les projets de robotique en raison de leur précision et de leur manipulation facile. Les servomoteurs sont de plus petite taille et ils sont très efficaces et économes en énergie. Ils fournissent un couple élevé et peuvent être utilisés pour soulever ou pousser des poids selon les spécifications des moteurs. Dans ce didacticiel, nous en apprendrons davantage sur le servomoteur et sur la manière d'interfacer le servo avec la carte STM32F103C8. Un potentiomètre est également interfacé pour faire varier la position de l'arbre du servomoteur et un écran LCD pour afficher la valeur de l'angle.
Composants requis
- Tableau STM32F103C8 (Blue Pill)
- Servomoteur (SG90)
- Écran LCD (16x2)
- Potentiomètre
- Planche à pain
- Fils de cavalier
Schéma de circuit et connexions
Détails des broches SMT32F103C8
Dans STM32F103C8, nous avons 10 broches ADC (PA0-PB1), et ici nous n'utilisons qu'une seule broche (PA3) pour la lecture analogique () pour régler la position de l'arbre du moteur par potentiomètre. Également parmi 15 broches PWM de STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), une broche sera utilisée pour fournir des impulsions au servo la broche PWM du moteur (généralement de couleur orange).
Vous pouvez en savoir plus sur PWM et ADC en lisant ci-dessous des articles détaillés:
- Comment utiliser ADC dans STM32F103C8
- Modulation de largeur d'impulsion (PWM) dans STM32F103C8
Connexion entre STM32F103C8 et LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Vers le code PIN du centre du potentiomètre | V0 |
PB0 | RS |
GND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | UNE |
GND | K |
Connexion entre le servomoteur et le STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
ROUGE (+ 5V) |
PA0 |
ORANGE (broche PWM) |
GND |
MARRON (GND) |
Connexions potentiomètres
Nous avons utilisé DEUX potentiomètres ici
1. Le potentiomètre de droite sert à faire varier le contraste de l'écran LCD. Il a trois broches, la broche gauche est pour + 5V et droite pour GND et la broche centrale est connectée à V0 de l'écran LCD.
2. Le potentiomètre à gauche est utilisé pour faire varier la position de l'arbre du servomoteur en contrôlant la tension d'entrée analogique, la broche gauche a une entrée 3,3 V et la droite a GND et la sortie centrale est connectée à (PA3) de STM32
Programmation STM32 pour servomoteur
Comme notre précédent tutoriel, nous avons programmé le STM32F103C8 avec Arduino IDE via le port USB sans utiliser le programmeur FTDI. Nous pouvons procéder à sa programmation comme un Arduino. Le code complet est donné ci-dessous à la fin du projet.
Nous avons d'abord inclus des fichiers de bibliothèque pour les fonctions servo et LCD:
#comprendre
Puis déclaré les broches pour l'affichage LCD et initialisé. Également déclaré quelques autres variables pour PWM et potentiomètre:
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;
Ici, nous avons créé un servo variable avec un type de données Servo et l' avons attaché à la broche PWM précédemment déclarée.
Servo servo; servo.attach (servoPin);
Ensuite, lisez la valeur analogique de la broche PA3 car il s'agit d'une broche ADC, elle convertit la tension analogique (0-3,3) en forme numérique (0-4095)
analogRead (potPin);
Comme la sortie numérique a une résolution de 12 bits, nous devons obtenir des valeurs dans la plage de degrés (0-170), elle divise la valeur ADC (0-4096) en fonction de l'angle maximal de 170 degrés, donc nous divisons par 24.
angle = (lecture / 24);
L'instruction ci-dessous oblige le servomoteur à faire tourner l'arbre à l'angle donné.
servo.write (angle);
Le code complet est donné ci-dessous et bien expliqué par des commentaires.