Voici le compte rendu de quelques essais de mise en œuvre avec l’objectif de motoriser un pont tournant.
Le matériel
Afin d’avoir la meilleure résolution possible, le moteur pas-à-pas bipolaire choisi est un moteur 400 pas par tour vendu par Selectronic. Il s’agit de ce modèle.
Ce moteur est prévu pour être alimenté en 12V. Les bobines ont une résistance de 40Ω et par conséquent chaque bobine consomme 300mA. Le couple de maintien est de 3,5 kg/cm.
J’ai fixé sur l’arbre une latte en bois de 40 cm de longueur et donc un rayon de 20cm. Cette longueur est de 30% supérieure à la longueur d’un pont tournant en H0 et plus de 2 fois plus long qu’un pont tournant en N. Cela permet de visualiser la rotation et plus particulièrement les défauts.
En combinant les 400 pas par tour du moteur et les 8 µpas de l’EasyDriver, on arrive à 3200 positions sur le cercle. Avec un diamètre de 30cm, typiquement un pont tournant en H0, cela nous donne un pas d’environ 0,3mm en bout de pont. Avec un diamètre de 15cm qui correspond au pont tournant PECO en N, cela nous donne un pas de 0,15mm en bout de pont.
La connexion de l’Arduino à l’EasyDriver est particulièrement simple. Comme on la vu dans « L’Easydriver v4.4 », la plupart des broches de l’EasyDriver ont la configuration adéquate quand on les laisse tout simplement non connectées.
Les sorties numériques 2 et 3 de l’Arduino sont employées pour piloter le moteur. On garde les alimentations séparées. L’EasyDriver est alimenté en 12V continu et, pour les essais, l’Arduino reste alimenté via l’USB.
Influence de la limitation de courant
Plus le courant maximum Imax, c’est à dire le courant correspondant à 100% d’alimentation d’une bobine, est élevé et plus le passage d’un µPas au suivant est rapide et franc. Comme on veut le passage le plus doux possible, il faut régler le courant maximum à la valeur la plus basse possible.
Les indications de sens de rotation du potentiomètre sur l’EasyDriver 4.4 sont fausses. La valeur minimum correspond en fait à une rotation dans le sens trigonométrique (à gauche) et la valeur maximum à une rotation dans le sens horaire (à droite).
D’après la schématique, le Imax minimum possible est de 166mA pour Vref = 1V, ce qui correspond à la valeur minimum que l’on trouve dans la documentation de l’Allegro A3967. En réalité, le Vref minimum mesuré est de 1,59V au lieu des 1V annoncés. Par ailleurs, j’ai mesuré une valeur de 1,2Ω pour les résistances de capture de courant au lieu des 0,75Ω annoncés dans la schématique. Le rapport Vref / Rs est quasiment le même et le Imax pour Vref = 1,59V est donc bien de 166mA.
Voici une vidéo montrant l’influence de la limitation de courant sur la fluidité de la rotation pour les valeurs suivantes de Imax : 280mA (Vref = 2,69V), 224mA (Vref = 2,15V) et 166mA (Vref = 1,59V). La vitesse de rotation est de 1 tour en 2 minutes.
On voit effectivement que le réglage Imax au minimum donne le meilleur résultat en terme de fluidité de mouvement même si la vidéo gomme les petites vibrations qui sont observables à des Imax plus élevés. Le couple reste largement suffisant.
Le logiciel
La pilotage du moteur pas-à-pas est très facile. La broche 2 de l’Arduino connectée à l’entrée DIR de l’EasyDriver permet de fixer le sens de rotation et la broche 3 connectée à l’entrée STEP de l’EasyDriver permet d’avancer d’un µPas. Ces deux broches sont donc mises en sortie dans setup()
comme ceci.
const int pinSens = 2;
const int pinMicroPas = 3;
void setup()
{
pinMode(pinSens, OUTPUT);
pinMode(pinMicroPas, OUTPUT);
}
Le jeu consiste ensuite à choisir un sens de rotation en mettant pinSens
à HIGH ou LOW puis à enchaîner à une certaine cadence des HIGH et des LOW sur pinMicroPas
.
La cadence est déterminée par le délai d’attente entre deux bagottages sur pinMicroPas
. Par exemple, si l’on veut que le pont accomplisse un tour complet en 2 minutes, soit 120 s, on calcule ce temps d’attente de la manière suivante : 3200 µPas en 120 s donne un délai de 120/3200 = 37,5 ms ≃ 37 ms.
Ainsi le programme le plus simple possible consiste à faire tourner le moteur en permanence dans loop()
.
void loop()
{
digitalWrite(pinMicroPas, LOW);
digitalWrite(pinMicroPas, HIGH);
delay(37);
}
Voici une vidéo qui montre l’exécution d’une séquence de déplacement : positionnement en 100, puis 300, puis 200, puis 800, puis 1600, puis 1000 et enfin 2400. Dans la première partie, un délai de 36ms entre deux µPas est utilisé. Les µPas ne sont pas visibles. Dans la seconde on passe à un délai de 99ms, les µPas deviennent visibles. Enfin dans la 3e partie, le mouvement d’une position à l’autre a une phase d’accélération pendant 0,5s en passant d’un délai de 78ms à 36ms par décrément de 3ms et une phase de décélération pendant 0,75s en passant d’un délai de 36ms à 99ms par incrément de 3. Les phases d’accélération et de décélération sont légèrement hachées.
L’EasyDriver remplit son office mais montre quelques limites pour les très faibles vitesses qui sont utilisées dans les phases d’accélération et de décélération. D’autres breakout boards existent et la prochaine fois, nous verrons celle développée par Pololu qui utilise un Texas Instruments DRV8824 permettant 32 µPas.