Salve,
vorrei realizzare un progetto usando un motore nema 17 da 59 Ncm con driver TB 6600 con Arduino uno.
In pratica vorrei far ruotare un rullo il cui albero è attacato per mezzo di un manicotto all'albero del Nema 17. Questo rullo ha un diametro di 55 mm una lunghezza complessiva (albero incluso) di 260 mm ed un peso totale 770 grammi.
Il sistema prevede che alla pressione di un pulsante il rullo debba ruotare di 180 passi, ho impostato il driver nel settaggio 1/1 cioè a 200 passi per giro e impostato l'amperaggio a 2.00 come richiesto dal motore, il driver è alimentato da un alimentatore o batteria da 12V, dovrebbe compiere questi 180 passi una volta al secondo circa. Sembra che il motore non riesca a girare bene, ad esempio dapprima comincia a girare ma non riesce mai a compiere i passi richiesti, farà si e no 1/4 o 1/5 di giro, ben lontano dai mie 180 passi richiesti e poi dopo alcuni giri in queste condizioni il motore tende a bloccarsi e non girare più, emettendo però il classico ronzio di funzionamento. La domanda è semplice, ho sbagliato il dimensionamento del sistema?
Non so quanto possa essere utile, inserisco qui di seguito il codice usato:
const int pulsante = 2; // Pin a cui è collegato il pulsante
const int dirPin = 3; // Pin di direzione del driver TB6600
const int stepPin = 4; // Pin di passo del driver TB6600
void setup() {
pinMode(pulsante, INPUT); // Configura il pulsante come input
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
digitalWrite(dirPin, LOW); // Imposta la rotazione in senso antiorario
}
void loop() {
if (digitalRead(pulsante) == LOW) { // Controlla se il pulsante è premuto (collegato a Vcc con resistenza pull-down)
for (int i = 0; i < 180; i++) { // Esegue un giro completo (180 passi per un motore a 1.8°)
digitalWrite(stepPin, HIGH);
delayMicroseconds(500); // Ritardo per determinare la velocità del motore
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000); // Attesa dopo il giro
}
}
1000 passi al secondo senza rampa
Potrebbe anche farcela ma come prima cosa abbassa la velocità , abbassa anche la corrente nel motore
Non ho fatto altri calcoli o controlli sul tuo lavoro ma con gli stepper si comincia piano
Come ti ha già fatto notare @icio non riuscirai mai ad accelerare 770 grammi fino a 5 giri al secondo (1000/200) in tempo 0.
Con un motore così piccolo collegato direttamente sull'albero senza riduzioni, secondo me dovrai usare rampe piuttosto lunghe, diciamo almeno 1 secondo o più.
Grazie mille per la risposta @icio e @cotestatnt,
probabilmente mi sono spiegato male io, o sono io che non capisco bene visto che sono davvero alle prime armi.
Però quello che io volevo dire è che il mio rullo dovrebbe dovrebbe fare 180 passi ovvero circa 0,83 giri al secondo, non ho capito perchè voi mi indicate 1000 passi al secondo, forse perche ho indicato il diametro del rullo che è di 55 mm? Se così fosse voglio specificare che anche il rullo come l'albero dovrebbe fare 0,83 giri al secondo ovvero 180 passi. Non so se c'è qualcosa che mi sfugge
Tu stai facendo uno stepping con una frequenza di 1 millisecondo, ovvero a 1000Hz e la cosa è valida a prescindere dal numero totale di step che vuoi eseguire.
Tutto questo senza gestire una rampa di accelerazione: questo povero motore deve accelerare una massa di 770gr da ferma fino alla velocità di rotazione desiderata in un tempo infinitesimale, non ci riesce e giustamente perde passi.
Grazie mille per il chiarimento, forse ci ho capito qualcosa in più.
Per ovviare a questo problema, mi sapreste indicare un motore che possa gestire queste velocità e questo tipo di coppia? Oppure qualunque altro tipo di soluzione o suggerimento sarebbe molto apprezzato.
Grazie ancora
Grazie ancora per i suggerimenti,
per il momento non sono ancora abbastanza esperto da capire come applicare una rampa al codice, ci devo ancora studiare.
Però volevo chiedere aiuto per un altro problema che sto ravvisando. In pratica ho notato che con il codice pubblicato sopra il motore ha dei strani comportamenti anche senza nessun peso attaccato al suo albero, facendo alcune prove per verificare se intanto il codice faccia eseguire al motore i movimenti corretti da me indicati, inizia dapprima eseguendo correttamente i movimenti da compiere, poi spengo tutto il sistema ovvero arduino e alimentazione del driver, quando dopo magari qualche ora accendo nuovamente tutto non funziona più, ovvero sento il rumore del motore che prova a muoversi ma rimane bloccato. Poco fa però mi è successa una cosa ancora più strana, il motore era di nuovo sbloccato e ho fatto le mie solite prove, dapprima a vuoto cioè con l'albero libero, poi un ho attacato un peso abbastanza leggero e fin qui funzionava tutto, poi ho attaccato un peso più pesante e l'albero non riusciva a completare il giro, a questo punto ho staccato le giunzioni e ho fatto girare nuovamente a vuoto, e comunque era tornato a funzionare normalmente eseguendo il codice correttamente, poi la cosa più strana è che ho lasciato il sistema acceso ma senza far funzionare il motore(ricordo che il motore si attiva solo alla pressione di un pulsante), cioè ho semplicemente lasciato alimentato arduino e il driver per una mezz'oretta, quando sono tornato ho trovato il moltore caldissimo e di nuovo non funzionava, la cosa bella è che quando stavo facendo girare il motore, questo non si era scaldato per niente.
Non so se può essere utile inserire il disegno dei collegamenti, che però mi sembrano corretti