samedi 27 décembre 2014

Moteur pas à pas et STM32 Nucleo

Voici donc un cinquième tutoriel mettant en vedette la carte STM32 Nucleo de ST Microelectronics, et l'environnement de programmation en ligne mbed.  Au cours des derniers mois, nous avons vu comment allumer des LEDs et lire l'état de boutons, comment afficher les données à l'écran d'un ordinateur ou sur un afficheur LCD, et comment contrôler un simple moteur cc.  Aujourd'hui, comme vous l'avez certainement deviné en lisant le titre de cet article, nous allons utiliser  la carte STM32 Nucleo pour contrôler un moteur pas à pas.



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.

/**********************************************************
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);
}
}
view raw moteur_p_a_p.c hosted with ❤ by GitHub
Yves Pelletier (Twitter:  @ElectroAmateur)



Aucun commentaire:

Enregistrer un commentaire