Ce code fonctionne avec le A4988?
Je ne sais plus , mais en fait j'ai testé ainsi modifié:
/*
Name: Test_MPAPenable.ino
Created: 20.11.2024
Author: jpbbricole
*/
/*
AC A4988 + AccelStepper
*/
#include <AccelStepper.h> // https://github.com/waspinator/AccelStepper
//ATTENTION OPTO en l'air
const int dirPin = 3;
const int stepPin = 2;
const int enaPin = 12;
int nbMouv ;
int Mouv;
int cpt=0;
long distToGo=0;
boolean AR = true;
String chaine_caractere;
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
void setup() {
Serial.begin(115200);
while(!Serial);
Serial.print("Saisissez un nombre d'aller et de retour : ") ;
stepper.setEnablePin(enaPin); // Définition de la pin ENA
// DIR STEP ENA
stepper.setPinsInverted(false, false, true); // https://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ac62cae590c2f9c303519a3a1c4adc8ab
//digitalWrite(enaPin,LOW);
stepper.disableOutputs();
// stepper.moveTo(200);
}
void loop()
{
// If at the end of travel go to the other end
if (Serial.available() > 0) {
chaine_caractere = Serial.readStringUntil('\n');
// Affichage de la chaîne de caractères entrée par l'utilisateur sur le port série de l'Arduino.
Serial.print("Le nombre saisi est : ") ;
nbMouv = chaine_caractere.toInt();
Serial.println(nbMouv);
Mouv=1;
cpt=0;
stepper.setMaxSpeed(100);
stepper.setAcceleration(50);
//digitalWrite(enaPin,HIGH);delay(10);
stepper.enableOutputs();
stepper.setCurrentPosition(0);
delay(10);
stepper.moveTo(200);
}
if (nbMouv >0){
// Option 1
if (Mouv>nbMouv) {Mouv=1;nbMouv=0;Serial.println(" fini ");stepper.disableOutputs();} //
distToGo=stepper.distanceToGo();
if (distToGo == 0 && Mouv<=nbMouv) // stepper.disableOutputs();
{
//Serial.println(F("Stepper STOP"));
delay(500);
//Serial.print(F("Stepper START "));
Serial.print(Mouv);Serial.print(" ");Serial.print(stepper.targetPosition());Serial.print(" ");Serial.println(cpt);cpt=0;
//stepper.setCurrentPosition(0);
stepper.moveTo(-stepper.currentPosition());
Mouv++;
}
stepper.run();
if (stepper.distanceToGo()!= distToGo) {cpt++;}
// fin option 1
// Option 2
// Tourne(500,200,AR,100);
// delay(500);
// Mouv++;
// //AR= !AR;
// if (Mouv>nbMouv) nbMouv=0;
// fin option2
}
}
void Tourne (int Vit, int NbPas, boolean Sens, int Acc) {
digitalWrite(enaPin,HIGH);delay(10);
if( Sens) stepper.moveTo(NbPas); else stepper.moveTo(-NbPas);
while (true) {
if (stepper.distanceToGo() == 0 ) {
digitalWrite(enaPin,LOW);
stepper.setCurrentPosition(0);
break;
}
stepper.run();
}
}
Etant donné le nombre d'alertes sur la toile, concernant le UNO WF R4 , et l'alerte compatibilité AccelStepper, je pense qu'il y a un problème de ce coté, j'en ai un avec le LCD qui affiche bien, mais les touches KP ne sont pas opérationnelles
Faut démonter et mettre une UNO à la place derriere le DM320T pour confirmer.
Bonjour AC74
J'ai testé ton programme #181, "retouché" sur un UNO R4 Wifi et A4988 et il tourne sans problème.
Le programmme:
/*
Name: Test_MPAPenable.ino
Created: 20.11.2024
Author: jpbbricole
*/
/*
AC DM320T réglé
SW1 ON SW2 OFF SW3 OFF => 1.9A
SW4 ON SW5 ON SW6 ON => 400 pas/tour
OPTO en l'air
*/
#include <AccelStepper.h> // https://github.com/waspinator/AccelStepper
//ATTENTION OPTO en l'air
const int dirPin = 3;
const int stepPin = 2;
const int enaPin = 12;
int nbMouv ;
int Mouv;
int cpt=0;
long distToGo=0;
boolean AR = true;
String chaine_caractere;
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
void setup() {
Serial.begin(115200);
while(!Serial);
Serial.print("Saisissez un nombre d'aller et de retour : ") ;
stepper.setEnablePin(enaPin); // Définition de la pin ENA
// DIR STEP ENA
stepper.setPinsInverted(false, false, true); // https://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ac62cae590c2f9c303519a3a1c4adc8ab
digitalWrite(enaPin,LOW);
stepper.disableOutputs();
// stepper.moveTo(200);
}
void loop()
{
// If at the end of travel go to the other end
if (Serial.available() > 0) {
chaine_caractere = Serial.readStringUntil('\n');
// Affichage de la chaîne de caractères entrée par l'utilisateur sur le port série de l'Arduino.
Serial.print("Le nombre saisi est : ") ;
nbMouv = chaine_caractere.toInt();
Serial.println(nbMouv);
Mouv=1;
cpt=0;
stepper.setMaxSpeed(500);
stepper.setAcceleration(50);
//digitalWrite(enaPin,HIGH);delay(10);
stepper.enableOutputs();
stepper.setCurrentPosition(0);
delay(10);
stepper.moveTo(400);
}
if (nbMouv >0){
// Option 1
// if (Mouv>nbMouv) {Mouv=1;nbMouv=0;Serial.println(" fini ");digitalWrite(enaPin,LOW);} //
// distToGo=stepper.distanceToGo();
// if (distToGo == 0 && Mouv<=nbMouv) // stepper.disableOutputs();
// {
// //Serial.println(F("Stepper STOP"));
// delay(500);
// //Serial.print(F("Stepper START "));
// Serial.print(Mouv);Serial.print(" ");Serial.print(stepper.targetPosition());Serial.print(" ");Serial.println(cpt);cpt=0;
// //stepper.setCurrentPosition(0);
// stepper.moveTo(-stepper.currentPosition());
// Mouv++;
// }
// stepper.run();
// if (stepper.distanceToGo()!= distToGo) {cpt++;}
// fin option 1
// Option 2
Tourne(500,200,AR,100);
delay(500);
Mouv++;
//AR= !AR;
if (Mouv>nbMouv) nbMouv=0;
// fin option2
}
}
void Tourne (int Vit, int NbPas, boolean Sens, int Acc) {
//digitalWrite(enaPin,HIGH);delay(10);
stepper.enableOutputs();delay(10);
if( Sens) stepper.moveTo(NbPas); else stepper.moveTo(-NbPas);
while (stepper.distanceToGo() != 0 ) {
stepper.run();
}
stepper.disableOutputs();
stepper.setCurrentPosition(0);
}
Dans les retouches, j'ai surtout corrigé ceci:
//digitalWrite(enaPin,HIGH);delay(10);
stepper.enableOutputs();delay(10);
Tes digitalWrite
sur ENA étaient "à l'envers" et comme l'on utilise AccelStepper, autant utiliser ses fonctions.
Essaies ça, avec un A4988.
A+
jpbbricole
Ça marche très bien avec UNO + A4988
avec AR= !AR; et //AR= !AR;
Il faut que je démonte pour le tester sur UNO R4
Ca ne devrait poser aucun problème
Bonsoir,
Kes étudiants qui en ce moment font un tuto sur un p à p et un drivers équivaleny n'ont pas ce genre de pb (OPTO en l'air...)
C'est dommage de laisser de côté ce genre de matériel, j'espére pour vous qi'un jour vous regarderez à tête reposée pourquoi il y a un bug.
Juste un petit retour sur cette remarque.
Le constructeur est au contraire très clair.
ENABLE si :
- non connecté: comme la liaison se fait au travers d'un opto-coupleur donc en l'air pas de courant dans l'opto
- actif au niveau haut: le schéma d'application montre un commun des opto-coupleurs au +V, donc un niveau haut sur l'entrée revient à ne pas faire circuler de courant dans l'opto-coupleur
Donc, au final :
- si du courant circule dans l'opto le driver est désactivé
- si aucun courant dans l'opto-coupleur le driver est activé
Je ne contredis absolument pas cela et c'est d'ailleurs similaire à ce que vous écrivez.
Par contre, vous ne l'avez pas souligné (sans doute pas lu?) mais cela n'est valable (surtout pour les autres signaux) que si OPTO est relié au +5V.
Ce qui semble être contredit depuis au moins le post#166
Alors si OPTO, commun des OPTO, n'est pas à +5V, ENA est de toutes façons en l'air par défaut et PULL et DIR aussi.
Avec des anodes communes je vois mal où pourrait être le commun ailleurs qu'à un +
Test matinal
Avec UNO WIFI R4 + A4988
Avec prog #187
Il tourne bien ; j'ai testé avec et sans A/R (AR= !AR;), j'ai testé Options 1 et 2
Tout va bien, l'arbre est débloqué à la fin du test que le nombre soit pair ou non.
Ce qui prouve que la lib AccelStepper n'est pas en cause, que le UNO WF R4 accepte bien cette lib.
Donc mon DM320T est soit en panne d'optos, soit est en version modifiée (peu probable mais je l'ai déjà rencontré)
Je n'abandonne pas ce DM320T, il tourne à sa façon
Mais je comparerai quand j'en rentrerai un autre
Bonjour Il tourne bien
Super, le choix du A4988 était le bon!
Ton DM320T est surdimensionné pour ton projet, si tu veux un driver de cette "grosseur", choisi plutôt un TB6600.
Bonne journée!
jpbbricole
J'ai procédé à une série d'essais avec UNO R3 + DM320T
J'ai reproduit certaines des anomalies constatées avec le UNO Wifi R4 , à savoir le pair/impair.
La seule conclusion que je tire, c'est que la UNO Wifi R4 n'est pas la cause des problèmes.
J'observe qu'avec la UNO R3 on peut fonctionner avec OPTO à 5V
Mais si je refais les tests du tableau, j'obtiens des résultats différents ce qui signifie que le résultat dépend de ce qui s'est passé avant.
Il marche bizarrement mon DM320T
Bonsoir AC74
Il fait des chinoiseries
Ça fonctionne toujours bien avec le A4988 ?
Bonne soirée !
jpbbricole
Compte tenu que dans les conditions minimum à remplir pour un bon fonctionnement il y a
OPTO à 5V
Ça n'a rien de chinois si ça marche avec OPTO à +5V.
Par contre, votre derniére ligne du tableau, c'est un peu du chinois pour moi.
C'est quoi 1, 2, 3, 4, 5?
Vous avez écrit
1 tout est OK
2 tourne puis bloque si pair, débloque si impair
3 tourne puis bloque
4 ?
5 ?
Mon tableau est peut être un peu aride, et il était incomplet
J'ai voulu savoir comment marchait ce DM320T avec une ancienne UNO R3
Je me rends compte qu'il manquait 2 lignes sur mon précédent post
Signification
J'ai utilisé le dernier prg de test dans sa version option2 que voici :
/*
Name: Test_MPAPenable.ino
Created: 20.11.2024
Author: jpbbricole
*/
/*
AC DM320T réglé
SW1 ON SW2 OFF SW3 OFF => 1.9A
SW4 ON SW5 ON SW6 ON => 400 pas/tour
Modifié AC74
*/
#include <AccelStepper.h> // https://github.com/waspinator/AccelStepper
//ATTENTION OPTO
const int dirPin = 3;
const int stepPin = 2;
const int enaPin = 12;
int nbMouv ;
int Mouv;
int cpt=0;
long distToGo=0;
boolean AR = true;
String chaine_caractere;
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
void setup() {
Serial.begin(115200);
while(!Serial);
Serial.print("Saisissez un nombre d'aller et de retour : ") ;
stepper.setEnablePin(enaPin); // Définition de la pin ENA
// DIR STEP ENA // https://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ac62cae590c2f9c303519a3a1c4adc8ab
stepper.setPinsInverted(false, false, true); // cette ligne avec ENA true ou false
digitalWrite(enaPin,LOW); // ligne à annuler ou pas
//stepper.disableOutputs(); // ligne à annuler ou pas
}
void loop()
{
if (Serial.available() > 0) {
chaine_caractere = Serial.readStringUntil('\n');
// Affichage de la chaîne de caractères entrée par l'utilisateur sur le port série de l'Arduino.
Serial.print("Le nombre saisi est : ") ;
nbMouv = chaine_caractere.toInt();
Serial.println(nbMouv);
Mouv=1;
cpt=0;
stepper.setMaxSpeed(500);
stepper.setAcceleration(50);
stepper.setCurrentPosition(0);
delay(10);
//stepper.moveTo(200); // pour option 1
}
if (nbMouv >0){
digitalWrite(enaPin,HIGH); // ligne à annuler ou pas
//stepper.enableOutputs(); // ligne à annuler ou pas
Tourne(500,200,AR,100);
digitalWrite(enaPin,LOW); // ligne à annuler ou pas
//stepper.disableOutputs(); // ligne à annuler ou pas
Serial.println("Fini");
delay(500);
Mouv++;
AR= !AR;
if (Mouv>nbMouv) nbMouv=0;
}
}
void Tourne (int Vit, int NbPas, boolean Sens, int Acc) {
// //digitalWrite(enaPin,HIGH);delay(10); // enlevée pour éviter les accoups sur les A/R
// //stepper.enableOutputs();delay(10);
if( Sens) stepper.moveTo(NbPas); else stepper.moveTo(-NbPas);
while (stepper.distanceToGo() != 0 ) {
stepper.run();
}
// //digitalWrite(enaPin,LOW);delay(10); // enlevée pour éviter les accoups sur les A/R
// //stepper.disableOutputs();
stepper.setCurrentPosition(0);
}
Je manipule 3 paramètres :
- le false / true sur ENA dans le setup
- les différents digitalWrite(enaPin, HIGH/LOW annulés ou non
ou - les différents Outputs annulés ou non
- la borne OPTO raccordée ou non au 5V
et je regarde si la rotation est efective et si l'arbre est libéré à la fin
Si tourne et arbre libéré => 1 en vert
Si ne tourne pas => 4
reste 3 autres cas si tourne
* l'arbre est bloqué si la demande Série est paire ou impaire (nb de mouvements)
* larbre est débloqué si paire bloqué si impaire et l'inverse
RESULTAT
- Contrairement à UNO WF R4, UNO R3 le moteur tourne avec OPTO sur 5V
- J'observe que l'arbre peut être bloqué ou nom aprés x (pair/impair) mouvements comme s'il y avait un effet de bascule stable
- J'observe que ces résultats bloqué ou non varie selon l'ordre des tests, donc de l'état obtenu au test précédent (bascule stable ?)
- Si je reviens à la UNO WF R4 , je n'ai pas réussi à faire tourner avec OPTO sur 5V
Avec ça "comprenne qui pourra" , moi je me doute que mon DM320T ...
Test même programme sur UNO WF R4
Première ligne ENA sur false
Lignes digitalWrite(enaPin, activées
Lignes stepper.enab ou disableOutputs( désactivées
OPTO en l'air
Tourne résultat 2
Après setup => arbre bloqué (alors qu'il devrait être débloqué) , puis demande 1 mouvement => l'arbre est débloqué , puis demande 1 mouvement => arbre bloqué .... bloque , débloque si demande 1 mouvement
Il y a une situation ou l'arbre est débloqué sur setup puis le résulta est ineversé selon que la demande est paire ou impaire
Bonjour,
OK, c'est plus clair, merci.
Pour faire reference à "chinoiserie", peut-être que (moi je n'en suis pas certain) les chinois sont moins "carrés" que les américains et en ce sens se permettent des "chinoisseries" là où les américains n'oserez pas.
En tout cas, il est fort probable que si tu utilise leur matériel de façons non reconnues, les chinois ne garantissent rien du résultat.
Et OPTO CONNECTÉ A +5V est je pense le seul état reconnut et conseillé pour ce signal.
Ensuite, j'ai lu chez les anglosaxons
- If you want to enable the stepper with the AccelStepper library you should use:
stepper.enableOutputs();
. To disable the stepper you should usestepper.disableOutputs();
*
Ce qui explique que tu trouve si peu de 1 dans ton tableau je pense.