Matériel nécessaire:
1) Un moteur pas à pas. Il peut être bipolaire (4 fils) ou unipolaire (5 ou 6 fils), ça n'a pas vraiment d'importance. De toute façon, nous ne brancherons que 4 fils.
2) Une carte STM32 Nucleo. J'ai utilisé le modèle d'entrée de gamme F030R8, mais n'importe laquelle fera l'affaire.
3) Un double pont en H L293D qui servira d'intermédiaire entre le microcontrôleurs de la carte Nucleo et le moteur (la carte Nucleo enverra des instructions au L293D, qui se chargera de faire circuler un courant d'intensité suffisante dans le moteur).
4) Une alimentation pour votre moteur (pile, alimentation ATX, etc.). Évitez d'alimenter votre moteur directement sur la pin 5 V de la carte, ça pourrait causer des problèmes en tirant trop de courant.
Comment on branche tout ça?
Le plus simple est d'illustrer le L293D, puisque tous les autres composants y sont reliés:
- Les pins 1, 9 et 16 du L293D sont branchées à la sortie 5V du STM32 Nucleo.
- Les pins 2, 7, 10 et 15 sont branchées respectivement aux sorties D2, D3, D4 et D5 du STM32 Nucleo.
- Votre moteur pas à pas est constitué de deux bobinages distincts. Les fils aux extrémités du premier bobinage sont reliés aux pins 3 et 6 du L293D, et les fils aux extrémités du deuxième bobinage sont reliés aux pins 11 et 14 du L293D. Si votre moteur est monopolaire, vous n'avez pas à brancher le ou les fils correspondant au centre des bobinage.
- Les pins 4, 5, 12 et 13 du L293D représentent la masse. Elles communiquent déjà entre elles, mais il est important d'y relier à la fois la masse (GND) du SMT32 Nucleo et la masse (borne négative) de la source d'alimentation du moteur.
- La borne positive de l'alimentation du moteur est branchée à la pin 8 du L293D.
Le script mbed pour le STM32 Nucleo
Voici un petit script mbed à télécharger dans la carte STM32 Nucleo pour faire tourner le moteur (il effectuera d'abord 200 pas dans un sens, rapidement, puis 20 pas dans l'autre sens, beaucoup plus lentement). Cet exemple ne nécessite aucune bibliothèque (sauf la bibliothèque de base de mbed), et il vous sera facile de le modifier pour qu'il réponde parfaitement à vos besoins.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************** | |
Contrôle d'un moteur pas à pas avec STM32 Nucleo et L293D. | |
http://electroniqueamateur.blogspot.com/2014/12/moteur-pas-pas-et-stm32-nucleo.html | |
***********************************************************/ | |
#include "mbed.h" | |
// intialisation des pins | |
DigitalOut pin_bobine_1_1(D2); | |
DigitalOut pin_bobine_1_2(D3); | |
DigitalOut pin_bobine_2_1(D4); | |
DigitalOut pin_bobine_2_2(D5); | |
void reglage_pins(int pin1, int pin2, int pin3, int pin4) | |
{ | |
pin_bobine_1_1 = pin1; | |
pin_bobine_1_2 = pin2; | |
pin_bobine_2_1 = pin3; | |
pin_bobine_2_2 = pin4; | |
} | |
void prochainStep(int numero) | |
{ | |
if (numero == 0) { | |
reglage_pins(1, 0, 1, 0); | |
} | |
if (numero == 1) { | |
reglage_pins(0, 1, 1, 0); | |
} | |
if (numero == 2) { | |
reglage_pins(0, 1, 0, 1); | |
} | |
if (numero == 3) { | |
reglage_pins(1, 0, 0, 1); | |
} | |
} | |
void marche_avant(float attente, int nombre_de_pas) | |
{ | |
for (int i=0; i <= nombre_de_pas; i++) { | |
prochainStep(i % 4); | |
wait(attente); | |
} | |
} | |
void marche_arriere(float attente, int nombre_de_pas) | |
{ | |
for (int i=0; i <= nombre_de_pas; i++) { | |
prochainStep(3 - (i % 4)); | |
wait(attente); | |
} | |
} | |
int main() | |
{ | |
while(1) { | |
// 200 pas en marche avant, rotation rapide | |
marche_avant(0.01, 200); | |
wait(1); | |
// 20 pas en marche arrière rotation lente | |
marche_arriere(.5, 20); | |
wait(1); | |
} | |
} | |
Aucun commentaire:
Enregistrer un commentaire