StepperonLine DM320T

Avant de travaille le #81 je viens de faire une découverte qui permet de débrayer l'arbre
J'ai OPTO sur D3

Premier essai :`
#include <AccelStepper.h> // GitHub - waspinator/AccelStepper: Fork of AccelStepper

const int dirPin = 5;
const int pulsPin = 2;
const int enaPin = 4;

AccelStepper Moteur(AccelStepper::DRIVER, pulsPin, dirPin);

void setup() {
// put your setup code here, to run once:

Serial.begin(115200);
delay(10);

Moteur.setEnablePin(enaPin); // Définition de la pin ENA
Moteur.disableOutputs();

Moteur.moveTo(1);

//                       DIR    STEP   ENA
//Moteur.setPinsInverted(false, false, true); // https://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ac62cae590c2f9c303519a3a1c4adc8ab

}
void loop() {
// put your main code here, to run repeatedly:
Moteur.run();
}

Le moteur est libre

Deuxiéme essai :`
#include <AccelStepper.h> // GitHub - waspinator/AccelStepper: Fork of AccelStepper

const int dirPin = 5;
const int pulsPin = 2;
const int enaPin = 4;

AccelStepper Moteur(AccelStepper::DRIVER, pulsPin, dirPin);

void setup() {
// put your setup code here, to run once:

Serial.begin(115200);
delay(10);

Moteur.setEnablePin(enaPin); // Définition de la pin ENA
Moteur.disableOutputs();

//Moteur.moveTo(1);

//                       DIR    STEP   ENA
//Moteur.setPinsInverted(false, false, true); // https://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ac62cae590c2f9c303519a3a1c4adc8ab

}
void loop() {
// put your main code here, to run repeatedly:
//Moteur.run();
}`

J'annule 2 lignes => moteur bloqué`

Bonjour AC74
Est tu bien câblé comme au post#69 ?
Fais le test du #81, ça élimine l'Arduino.

A+
jpbbricole

ENA à grd Test => Tourne pas

ENA à +5V Test => Tourne

Et

La remarque de jpbbricole est importante, faites les choses de façon "blindée", mettez une fois pour toutes OPTO sur un vrai +5V qu'on en parle plus.

Ensuite, ENA en l'air (non cablé) si vous ne voulez JAMAIS INHIBER le moteur.

Ou ENA sur une sortie
HIGH = ENABLE
LOW = DISABLE
Ces sont les données fabricant.

Super !
Quand tu dis:

Tourne à la main ou par le programme?

Recables comme #69.
Pour les paramètres:
Si c'est à la main ENA à grd Test => Tourne pas:
stepper.setPinsInverted(false, false, true);

Si c'est par programme ENA à grd Test => Tourne pas:
stepper.setPinsInverted(false, false, false);

et lances le programme de test.
Important le 3ème à false.

A+
jpbbricole

Je précise:

bien cablé comme #69
quand je dis ENA à grd Test => Tourne pas , je fais le test, le moteur ne tourne pas
ENA à +5V Test => Tourne , le moteur tourne

Dans mon post #83
le test (selon programme affiché) ne fait pas tourner le moteur mais l'arbre est bloqué ou non, c'était ma question initiale

Essaies ce programme (c'est celui du post #57 retouché)

/*
Name:       Test_MPAPenable.ino
Created:	20.11.2024
Author:     jpbbricole
*/

#include <AccelStepper.h> // https://github.com/waspinator/AccelStepper

const int dirPin = 5; // Schéma post #69
const int stepPin = 2;
const int enaPin = 4;
int nbPas=1;

AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin); // identique à AccelStepper stepper(1, stepPin, dirPin);

void setup()
{
	Serial.begin(115200);
	delay(10);
	
	stepper.setEnablePin(enaPin); // Définition de la pin ENA
	//                       DIR    STEP   ENA
	stepper.setPinsInverted(false, false, false); // https://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ac62cae590c2f9c303519a3a1c4adc8ab
	
	stepper.enableOutputs(); // Activer le moteur

	stepper.setMaxSpeed(800);
	stepper.setAcceleration(160);
	stepper.moveTo(100);
}


void loop()
{
	if (stepper.distanceToGo() == 0)
	{
		Serial.println(F("Stepper STOP"));
		stepper.disableOutputs(); // Désactiver le moteur
		delay(1000);
		

		Serial.print(F("Stepper START "));
		stepper.enableOutputs(); // Activer le moteur
		stepper.moveTo(-stepper.currentPosition());
		Serial.println(nbPas);
		nbPas++;
	}

	stepper.run();
}

Tu as 2 solutions, ou le moteur tourne périodiquement et à l'arrêt le moteur est libre, alors c'est tout bon ou le moteur ne tourne pas et en le tournant à la main il est périodiquement libre ou bloqué.

Redis moi
A+
jpbbricole

Un rappel des faits:

Ci dessous gros bug à résoudre car CE N'EST PAS LOGIQUE

Il DOIT fonctionner avec OPTO sur +5V!

Bref, on ne se comprend pas.

Il faut que:

  • OPTO soit en permanence sur +5V, c'est à dire LE +5V de la carte Arduino

  • Si vous voulez utiliser ENA, le relier à une sortie Arduino, SINON le laisser en l'air.
    ENA LOW = NON validé
    ENA HIGH = validé

On progresse ...
Avec programme #89
Le moteur vibre mais ne tourne pas , l'arbre est alternativement bloqué / débloqué

EST-CE LE CAS OUI OU NON?

Super! donc la "mécanique" blocage/déblocage fonctionne!

Regardes du côté de la vitesse.

Bonne avancée!

En #91 OPTO était sur D3

Je refais le même test avec OPTO sur +5V de l'Ariduino même résultat

C'est plus normal de mettre sur 5V vu que c'est l'alimentation des optocoupleurs.

Je pense que @jpbbricole est OK sur ce point, OPTO doit fonctionner câblé sur +5V si c'est le +5V de l'arduino.

J'ai lus un peu vite, si le moteur se déverrouille alternativement, c'est effectivement une bonne avancée.

Personnellement pour éviter les faux contacts avec la carte arduino, j'utilise un support carte de ce type (la carte s'enfiche sur le support, et les fils extérieurs viennent se viser dans les borniers)

PS:
J'ai fais un petit topo, je le termine et le poste, AC74 tu en ferra ce que tu veux, je n'y parle que câblage, pas du code.

Peut être mais si on arrive à débloquer l'arbre, le programme de test initial ou celui du #89 , le moteur ne tourne pas mais l'arbre est alternativement bloqué/débloqué

La seule façon que j'ai pour faire tourner ce moteur est avec OPTO sur D ou en l'air

J'ai réussi à faire tourner mon moteur de différentes manières (nb de pas, av ar , vit, accel) puis débloquer l'arbre quand moteur arrété et repartir

Mais j'ai une autre question (après le repas)

Je te crois, mais si

C'est qu'il y a un probléme, c'est théoriquement impossible que cela se passe ainsi...
Ou le DM320 est très mal conçut, il va falloir sortir le stéthoscope (voltmétre).

Bon appétit, nous on a traîné et brunché déja...

Donc il faut inverser la 3ème booléenne:
Si tu as:
stepper.setPinsInverted(false, false, false);
mets:
stepper.setPinsInverted(false, false, true);
ou l'inverse.
Dixit AccelStepper

Donc pour résumer j'arrive à :

`#include <AccelStepper.h> // GitHub - waspinator/AccelStepper: Fork of AccelStepper
const int dirPin = 5;
const int pulsPin = 2;
const int enaPin = 4;

AccelStepper Moteur(AccelStepper::DRIVER, pulsPin, dirPin);

void setup() {
// put your setup code here, to run once:

Serial.begin(115200);
delay(10);

Moteur.setEnablePin(enaPin); // Définition de la pin ENA
Moteur.setPinsInverted(false, false, false);

Moteur.disableOutputs();

Moteur.moveTo(1);

//                       DIR    STEP   ENA
//Moteur.setPinsInverted(false, false, true); // https://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#ac62cae590c2f9c303519a3a1c4adc8ab

}
void loop() {
// put your main code here, to run repeatedly:
Moteur.run();
}`

Ce programme ne fait pas tourner le moteur mais libère l'arbre

Par contre si on met : Moteur.setPinsInverted(false, false, true); l'arbre est bloqué

Je ne sais pas pourquoi mais ...

Un premier topo sur une hypothése de traitement par le DM320 des signaux envoyés au OPTO en fonction de la manière dont ils sont alimentés

Par +5V, en l'air, ou D3.

Ca permet de voir les éventuels effets sur le signal V interne, ATTENTION, ce n'est qu'une hypothése, je ne connais pas le schéma de la carte électronique du DM320!

Je joins un pdf, et une photo de ce pdf
Montage opto.pdf (58,5 Ko)

On effectivement faire l'hypothése que la façon d'alimenter OPTO peut avoir une influence sur le vérouillage ou non du moteur (selon moi, c'est un bug de conception).