Moteurs pas à pas, bibliothèque pour Uno, Mega, Nano

Bonjour,

Je viens d'écrire ma bibliothèque QuickStep pour pouvoir gérer mes moteurs pas à pas à partir d'une Uno, Mega ou Nano (je n'ai pas d'autres cartes sous la main, je ne peux écrire que si je teste!). Les caractéristiques principales sont:

  • d'utiliser un code non bloquant pour réaliser la rotation des moteurs.
  • de pouvoir donner à l'avance différents ordres de rotations, ce qui permet de cumuler du temps pour exécuter un autre code même bloquant
  • de faire tourner un moteur à 3000tr/mn même en 16 microsteps pour un 200pas/tr... si il en a la force (je veux dire le couple)
  • de pouvoir utiliser des accélérations et des décélérations.

Les tests ont été faits en grande partie avec des moteurs Nema17 sous alimentés de moitié en courant et alimentés qu'en 12V. Il est donc facile d'avoir de meilleures performances que celles que j'ai obtenues.
J'arrive à faire tourner mon moteur à 2200tr/mn à vide

QuickStep utilise pour l'instant les timers 16 bits.
QuickStep utilise un fichier de configuration pour une question de performances (de la bibliothèque et du concepteur). Un exemple pour faire tourner un moteur un tour dans un sens, un tour dans l'autre à la vitesse de 1tr/s peut être:

/* Rappel de la configuration:
#define step1 2
#define dir1 6

ou

#define premBobine1 2
#define deuxBobine1 3

ou

#define premBobine1 2
#define deuxBobine1 3
#define troisBobine1 3
#define quatreBobine1 5
*/

#include "QuickStep.h"

#define microspas 16 // Pour 16 microspas, A corriger éventuellement
#define pasParTour 200 // Le grand classique
#define microsPasParTour pasParTour * microspas // Nombre de micros pas par tour
#define tempsDuPas (2000000 / (pasParTour * microspas)) // Pour tourner à 1 tr/s

void setup()
{
  quickStepInit(); // Obligatoire pour initialiser la bibliothèque
}

bool sens; // Sens de rotation du moteur
void loop()
{
  quickStepDeplacement1(microsPasParTour , sens, tempsDuPas);
  sens = !sens; // Inversion du sens pour le prochain déplacement
}

Une vidéo montrant quelques mesures peut être vue sur Youtube

Les pages permettant le chargement et toutes les explications démarrent à http://dansetrad.fr/Orgue_de_barbarie/QuickStep

Si je veux à l'avenir compléter la bibliothèque, je pense à:

  • utiliser les timers 8 bits pour faire la même chose
  • utiliser un seul timer pour faire tourner autant de moteurs que l'on souhaite
  • pour les applications lentes, passer le temps d'un pas en tant que réel (pour l'instant c'est un multiple entier du signal d'horloge
  • combiner les trois pour faire tourner autant de moteurs que l'on veut, avec du code non bloquant, avec des temps entre pas défini par un float, en utilisant le timer 0, sans toucher à delay, pour des vitesses jusqu'à 5tr/s
  • fumer le reste de ma moquette