Je suis entrain de fabriquer une horloge à poser imprimé en 3D.
Celle-ci sera mis en mouvement pas un moteur pas à pas (Nema14), un arduino et un driver ( A4988).
Je vous mettrais par la suite des images de l'horloge et le projet fini, les fichier STEP pour ceux qui souhaite imprimer en 3D ce projet.
J'ai donc besoin d'une rotation précise du moteur pas à pas.
Mais je n'arrive pas à mettre en rotation mon moteur pas à pas.
Voici ci dessus mon schéma de câblage, (comme tout les tuto Moteur pas à pas bipolaire).
Mon moteur est alimenté en 9v ou 12v (je choisi sur mon alimentation). (le moteur fonctionne sur la datasheep en 10v).
Pour ce qui est bobine de câblage, j'ai vérifié les bobines, et j'ai même inversé le sens j'ai toujours le même problème.
Je ne sens pas de vibrations ni de bruit "électrique" du moteur.
Lorsque je met le programme, rien ne se passe, hormis le fait qu'il semble bloqué. Hors tension l'axe est libre et lorsqu'il est sous tensions avec le programme et le driver.. il est bloqué. l'axe est beaucoup plus dur. ( bien sur à la main je le fais tourner, mais il est plus dur sous tension)
Ne pas oublier de faire le pont entre RESET et SLEEP
Gilbert
[// --- Commande d'un StepStick/Driver A4988 ----------------------
// A4988_Test.ino
//
// Commande d'un moteur pas-à-pas à l'aide d'un pilote A4988 avec
// Arduino.
//
// Un projet www.mchobby.be (vente de kit et composant)
// Meurisse D. - Licence CC-SA-BY
//
#define pinEnable 13 // Activation du driver/pilote
#define pinStep 9 // Signal de PAS (avancement)
#define pinDir 8 // Direction
int pas=200;
int temps=10;
void setup()
{
Serial.begin(19200);
Serial.println("Test A4988");
pinMode( pinEnable, OUTPUT );
pinMode( pinDir , OUTPUT );
pinMode( pinStep , OUTPUT );
}
void loop()
{
avant();
arriere();
}
void avant()
{
digitalWrite( pinDir , HIGH); // Direction avant
digitalWrite( pinStep , LOW); // Initialisation de la broche step
// Avance de x pas
for(int i=0; i<pas; i++){
Serial.println( i );
digitalWrite( pinStep, HIGH );
delay( temps );
digitalWrite( pinStep, LOW );
delay( temps );
}
delay(2000);
}
void arriere()
{
// Changer de direction
digitalWrite( pinDir , LOW); // Direction avant
// Refaire x pas dans l'autre sens
for(int i=pas; i>0; i--)
{
Serial.println( i );
digitalWrite( pinStep, HIGH );
delay( temps );
digitalWrite( pinStep, LOW );
delay( temps );
}
// Pas de step et pas d'ordre...
// l'axe du moteur est donc bloqué
Serial.println("Axe bloque + attendre 3 sec");
delay( 3000 );
// déblocage de l'axe moteur
Serial.println("Deblocage axe");
digitalWrite( pinEnable, HIGH ); // logique inversée
fin ();
}
void fin()
{
// Fin et blocage du programme
// Presser reset pour recommander
Serial.println("Fin de programme");
Serial.println("Presser reset pour recommander");
while(1==1);{}
}
Mon problème venait, du fais que mon driver était mort.
Donc maintenant j'ai mon mouvement qui fonctionne parfaitement. Cependant j'ai un décalage de plusieurs secondes après 24H.
J'ai donc acheté un module RTC I2c, pour régler ce dernier problème.
Je cherche donc à avoir un signal / impulsion chaque minute par exemple.
Mais jai des problèmes avec cela. Bien évidemment des regardé quantité de tutoriels.
Je m'en remet donc à votre aide.
Je chercher un programme pour ma carte arduino micro qui me donne un ordre au driver du moteur chaques minutes. Oui oui simplement ça... Merci d'avance
Dans mon code, je compte alors les impulsions et toutes les 30 impulsions dans mon cas je génère une impulsion de commande du moteur de mon horloge (une horloge Bodet en l'occurence. Le code est opensource ici ). J'utilise aussi les interruptions pour le comptage, mais on peut s'en passer si on ne maitrise pas le truc.
L'autre méthode est de programmer une alarme dans la RTC à t0 + 60s (à refaire à chaque déclenchement d'une alarme pour programmer la prochaine).
Il faudrait aussi que tu te donnes la peine de lire les datasheets
Extrait de celle du DS1307:
SQW/OUT (Square Wave/Output Driver) – When enabled, the SQWE bit set to 1, the SQW/OUT pin
outputs one of four square wave frequencies (1Hz, 4kHz, 8kHz, 32kHz). The SQW/OUT pin is open
drain and requires an external pull-up resistor. SQW/OUT will operate with either Vcc or Vbat applied
Donc oui la méthode utilisant le signal de 1Hz sur SQW fonctionne. Mais pas celle utilisant les alarmes car ce circuit ne les gère pas.