Bonjour à tous,
Je pilote pour le moment 4 NEMA 17 consommant 1.5 A, 12V.
J'ai bien reglé mes drivers DRV8825 avec le potar intégré à Vref = 0.75 V car la puissance à délivrer est de 1.5 A. Se calculant Vref= I max/2 --> 0.75= 1.5/2
J'ai une alimentation. "hachage" 12V, 20A.
Quand je fixe un moyeu et une barre en acier plate de 12 cm (une équerre plate), les moteurs décrochent?!
Pensant que c'est un problème de surtension qui passe dans la breadboard, j'ai pensé acheté un support par DRV8825, au final, j'ai acheté ceci:
[url=https://fr.banggood.com/CNC-Shield-4-X-DRV8825-Driver-Kit-For-Arduino-3D-Printer-p-1134939.html?rmmds=detail-left-viewhistory__3&cur_warehouse=CNhttps://fr.banggood.com/CNC-Shield-4-X-DRV8825-Driver-Kit-For-Arduino-3D-Printer-p-1134939.html?rmmds=detail-left-viewhistory__3&cur_warehouse=CN[/url]
Ai-je eu raison??? Aurais-je dû acheter des supports de driver séparés? Comme ceux-ci:
J'ai aussi vu des rampes, mais je sais pas ce que c'est.
Au final, j'aimerai piloter 12 moteur en même temps. merci pour vos avis et conseils ![]()
Explication facultative ou non de l'observation du problème:
Les NEMA 17 fonctionnent tous bien pour UN par UN, avec la fonction, void testStepMotors(), où ils font 400 pas d'un coté, 400 pas de l'autre ils tournent à 100 pas sec.
Au bout de 10 essais, Ils arrivent pile poil toujours aux memes endroits.
Ensuite, je tente de les faire bouger en MEME TEMPS avec un potar, void testPotarMotor (), et j'observe des décrochages alors que j'ai mais la même vitesse que pour le programme precedent. Je me dis que le potar envoie des infos qui oscillent un peu d'où les décrochages, mais je me leurre moi-même.
Pour finir, j'envoie des donnés de positions à partir de Processing via le serial, ces positions sont programmés de la même manière qu'avec le potar. Et bien que j'ai réduit la vitesse 75 pas/s, j'observe encore des décrochages.
Par contre quand je déleste le moteur de son moyeu en acier et d'une barre en acier de 100 grammes max, 12 cm et que je remplace par un bout de carton de la même taille j'ai aucun décrochage.
Comment ça se fait-il? Le retour magnétique qui passe dans les fils augmentent avec la charge, d'où des étincelles qui perturbent l'envoie des infos dans ces mêmes fils qui alimentent le NEMA 17?
//*********** Variable de Processing
int w0, w1, w2, w3, w4; // position à recevoir en int
#include <AccelStepper.h>
// Define a stepper and the pins it will use
#define NBMOTEURS 5
#define NBPASPARTOUR 200
// Define a stepper and the pins it will use
#define STEP 1//-->Mode pas complet
#define PINDIRECTION0 12
#define PINSPEED0 13
#define PINDIRECTION1 10
#define PINSPEED1 11
#define PINDIRECTION2 8
#define PINSPEED2 9
#define PINDIRECTION3 6
#define PINSPEED3 7
#define PINDIRECTION4 4
#define PINSPEED4 5
/*
const uint8_t PINDIRECTION[NBMOTEURS] = {8, 12};
const uint8_t PINSPEED[NBMOTEURS] = {9, 13};
*/
//int stepper[] = NBMOTEURS;
//AccelStepper stepper[i](STEP, PINSPEED0, PINDIRECTION0);
AccelStepper stepper[ NBMOTEURS] = {
AccelStepper (STEP, PINSPEED0, PINDIRECTION0),
AccelStepper (STEP, PINSPEED1, PINDIRECTION1),
AccelStepper (STEP, PINSPEED2, PINDIRECTION2),
AccelStepper (STEP, PINSPEED3, PINDIRECTION3),
//AccelStepper (STEP, PINSPEED4, PINDIRECTION4),
};
#define ANALOG_IN A0
int analog_in;
int positionX;
int positionX0, positionX1, positionX2, positionX3, positionX4; // positionX1 actuelle
void setup()
{
Serial.begin (115200);
for(uint8_t i = 0; i < NBMOTEURS; i++) {
stepper[i].setMaxSpeed(100);
stepper[i].setAcceleration(10);
}
}
void receiveData() {
if (Serial.available() > 0) { // Ne pas redeclarer w1
w0 = Serial.parseInt(); //
w1 = Serial.parseInt();
w2 = Serial.parseInt();
w3 = Serial.parseInt();
w4 = Serial.parseInt(); // La dernière donné qui figure sur le serial de Processing arrive en premier sur Arduino
Serial.read();
for(uint8_t i = 0; i < NBMOTEURS; i++) {
stepper[i].setMaxSpeed(100);
stepper[i].setAcceleration(10);
stepper[i].setSpeed(75);
/*
stepper[0].moveTo(w4);
stepper[1].moveTo(w3);
stepper[2].moveTo(w2);
stepper[3].moveTo(w1);
stepper[4].moveTo(w0);
*/
stepper[4].moveTo(w4);
stepper[3].moveTo(w3);
stepper[2].moveTo(w2);
stepper[1].moveTo(w1);
stepper[0].moveTo(w0);
stepper[i].runSpeedToPosition();
// stepper[i].run();
}
}
else {
Serial.println ("demarre Processing");
}
}
void loop()
{
//testStepMotors();
testPotarMotor ();
//receiveData(); // receive data from Processing
}
void testStepMotors() {
for(uint8_t i = 0; i < NBMOTEURS; i++) {
stepper[i].setCurrentPosition(0);
// Run the motor forward at 400 steps/second until the motor reaches 600 steps (3 revolutions):
while (stepper[i].currentPosition() != 400) {
stepper[i].setMaxSpeed(300);
// stepper[i].setAcceleration(10);
stepper[i].setSpeed(100);
stepper[i].runSpeed();
}
//delay(1);
// Reset the position to 0:
stepper[i].setCurrentPosition(0);
// Run the motor backwards at 600 steps/second until the motor reaches -200 steps (1 revolution):
while (stepper[i].currentPosition() != -400) {
stepper[i].setSpeed(-100);
stepper[i].runSpeed();
// stepper[i].runSpeedToPosition(); /NE FONCTIONNE PAS
}
}
}
void testPotarMotor () {
analog_in = analogRead(ANALOG_IN);
positionX= map ( analog_in, 0, 1023, -200, 200); // 5V
for(uint8_t i = 0; i < NBMOTEURS; i++) {
stepper[i].setMaxSpeed(100);
stepper[i].setSpeed(100);
stepper[i].setAcceleration(10);
stepper[i].moveTo(positionX);
// stepper[i].runSpeed();
stepper[i].runSpeedToPosition();
}
}
void SendDataToMax () {
/*
for(uint8_t i = 0; i < NBMOTEURS; i++) {
delay(5);
Serial.print ("A "); Serial.println (i);
Serial.print ("B "); Serial.println (i+2);
Serial.print ("C "); Serial.println (i+3);
Serial.print ("D "); Serial.println (i+4);
Serial.print ("E "); Serial.println (i*4);
// Serial.println (i);
*/
// delay(5);
/*
Serial.print ("A "); Serial.println (w0);
Serial.print ("B "); Serial.println (w1);
Serial.print ("C "); Serial.println (w2);
Serial.print ("D "); Serial.println (w3);
Serial.print ("E "); Serial.println (w4);
// delay(100);
Serial.println (i);
}
*/
}