Les moteurs pas à pas utilisé effectuent un tour complet en 200 pas. Par l’intermédiaire du shield de commande des moteurs (voir aussi fichiers techniques sur le shield de commande des moteurs pas à pas), il est possible d’exécuter un pas en envoyant une impulsion (front montant puis descendant) pendant une durée de 1 µs min (nous avons choisi une durée de 2 µs), sur la broche STEP de commande du circuit intégré qui gère chacun des moteurs. Afin de gérer l’envoi périodique du signal de commande sur l’entrée STEP de chaque circuit de commande, nous allons utiliser le mécanisme d’interruption du Timer 2, sur dépassement de capacité du registre de comptage de ce même timer (interruption sur timer overflow). L ‘intérêt de générer le signal de commande des moteurs par interruption Timer est de ne pas bloquer le programme sur cette tâche.
Le lien http://letsmakerobots.com/node/28278 permet d’accéder à un document assez accessible pour comprendre les interruptions générés par un timer. Il sera utile de compléter la lecture de la documentation du micro contrôleur ATmega328P présent sur la carte Arduino (http://www.atmel.com/devices/atmega328p.aspx) afin d’accéder à la configuration des timers.
L’utilisation des interruptions sur overflow des timers requiert les étapes suivantes :
– Dans le setup : initialisation des registres du timer2
– Ecriture de la routine d’interruption associée
– Selon la vitesse de rotation désirée, chargement du registre de comptage du Timer1 avec une valeur comprise entre 0 et 65535 (compteur 16 bits)
tout en gérant l’inhibition ou non des interruptions au travers du registres SREG.
Si des variables doivent être modifiées au sein de la routine d’interruption, elle doivent être déclarées en variable globale, avec le modificateur volatile.
Voir le fichier Cmde_MoteurPaP_Code en fichiers technique comme exemple de code associé.