salve a tutti, vorrei pilotare un motore passo passo e portarlo a velocità costante,
il motore che ho selezionato è questo:
pensavo di pilotarlo con arduino usando il drv8825, secondo voi posso usare questo driver? il driver ha una tensione operativa che va da 8.2 V a 45 V e il motore funziona a 4,6 volt basta limitare la corrente che va al motore con il potenziometro sul driver ??
Il dvr8825 dovrebbe essere adatto per quel motore.
Devi impostare la corrente di 0,65A e se guardi la curva della coppia alimentato a 24V. Non so peché quel grafico é specificato per 0,8A e non per 0,65A come da datasheet.
Ciao Uwe
sto utilizzando il driver drv8825 e devo controllarlo in modo che la velocità sia costante, sto utilizzando questo codice :
#include <AccelStepper.h>
// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1
// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// Set the maximum speed in steps per second:
stepper.setMaxSpeed(2000);
}
void loop() {
// Set the speed in steps per second:
stepper.setSpeed(2000);
// Step the motor with a constant speed as set by setSpeed():
stepper.runSpeed();
}
sei io volessi pilotarlo con i micropassi dovrei usare pin M0 M1 M2 e a seconda di come li definisco arrivo alle combinazioni dei microstep, qualcuno potrebbe aiutarmi con il codice ?
>iungooo: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag:
[code] _il _tuo_ codice_ [/code]
così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto. P.P.S.: Ho riunito i due thread riguardanti lo stesso argomemto in uno solo. Cortesemente, per lo stesso argomento NON aprire più thread. Grazie.
questo è il codice che sto provando a modificare, vorrei avere una risoluzione di microstep di 1/16 e avere appunto una velocità costante
#include <AccelStepper.h>
// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1
#define M0 10
#define M1 11
#define M2 12
// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// Set the maximum speed in steps per second:
stepper.setMaxSpeed(2000);
pinMode ( M0, OUTPUT );
pinMode ( M1, OUTPUT );
pinMode ( M2, OUTPUT );
digitalWrite ( M0, LOW );
digitalWrite ( M1, LOW );
digitalWrite ( M2, HIGH );
}
void loop() {
// Set the speed in steps per second:
stepper.setSpeed(2000);
// Step the motor with a constant speed as set by setSpeed():
stepper.runSpeed();
}
devo avere una velocità costante e sto utilizzando questo codice
// Include the AccelStepper library:
#include <AccelStepper.h>
// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1
// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// Set the maximum speed in steps per second:
stepper.setMaxSpeed(2600);
}
void loop() {
// Set the speed in steps per second:
stepper.setSpeed(2600);
// Step the motor with a constant speed as set by setSpeed():
stepper.runSpeed();
}
ora per impostare i micropassi dovrei definire M0 M1 M2 e impostarli secondo la risoluzione di micropassi desiderata, ho provato a usare questo codice
/*Example sketch to control a stepper motor with DRV8825 stepper motor driver, AccelStepper library and Arduino: continuous rotation. More info: https://www.makerguides.com */
// Include the AccelStepper library:
#include <AccelStepper.h>
// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define M0 10
#define M1 11
#define M2 12
#define motorInterfaceType 1
// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin, M0, M1, M2);
void setup() {
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
digitalWrite ( M0, HIGH );
digitalWrite ( M1, HIGH );
digitalWrite ( M2, LOW );
// Set the maximum speed in steps per second:
//stepper.setMaxSpeed(2000);
}
void loop() {
// Set the speed in steps per second:
stepper.setSpeed(400);
// Step the motor with a constant speed as set by setSpeed():
stepper.runSpeed();
}
solo che con questo codice il motore rimane fermo, qualcuno sa dirmi dove sbaglio ?
iungooo:
no, in realtà no M0 M1 M2 non sono collegati a massa solo ai pin 10 11 12, è li il problema ?
Normalmente questi tre pin di selezione sono LOW,settati da resistori pull-down interni.
Il modulo non ha alcun pin di alimentazione logica, perchè DRV8825 viene alimentato dal regolatore di tensione interno 3V3.
Però devi portare la terra in GND LOGIC (che è il pin "nell'angolo")
ho lasciato il codice originale e i micropassi li regolo collegando i pin M0 M1 M2 ai 5 volt di arduino in funzione della tabella sul datasheet del drv8825.
è la stessa cosa in questo modo no ?