Corretto pilotaggio motore passo passo bipolare

Ciao a tutti,
sul finire dello scorso inverno mi sono inventato di voler fare un piccolo plotter con dei 28BYJ-48 che poi ho trasformato in una piccola CNC. Quello che mi ha particolarmente infastidito è il lasco introdotto dalla cascata di ingranaggi del moto riduttore, gioco che sui punti quadranti di un cerchio si fa sentire (dove ho inversioni di moto sugli assi) . Alla fine ho deciso di acquistare dei Nema 17 unitamente a dei driver DRV 8825. Ora sto ragionando su come devo pilotarli e ho qualche dubbio che vorrei fugare prima di procedere.

Supponiamo che si stia viaggiando a velocità costante, diciamo ad esempio con step della durata di 100 millisecondi. Siccome ho un solo piedino per governare l'avanzamento, è ovvio che devo portarlo a ON e poi a OFF e poi devo ripetere la sequenza fino a che ho fatto tutti gli step che mi servono. Ma per quanto tempo devo tenere a ON?

Se lo tengo a ON per 100 ms e poi lo porto a OFF per un periodo più piccolo è chiaro che al successivo impulso saranno passati più di 100 ms. Così non va bene.

Posso alimentarlo per un periodo più breve in modo che poi sommando il tempo di stato a OFF ottengo 100 ms. Però se l'utente mi tiene il pin Enable del driver OFF non mi si somma il tempo di OFF. Così non va bene.

Come faccio a fargli fare esattamente 100 ms tra uno step e l'altro?

Buongiorno,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Mi scuso per la mancata presentazione, ho provveduto.

Ciao! Non so quale sia il delay() minimo, ma ho visto esempi in rete che usavano delay di 100 microsecondi. Quindi puoi regolare la velocità abbassando il delay.

Devo aver letto un pò troppo in questi giorni (:confused:) perché andando a vedere nuovamente il data sheet il pin Enable non serve a quello che pensavo per cui ignorate il breve accenno del primo post.

L'istruzione delay non la uso perché avrebbe impatti devastanti in quanto blocca l'esecuzione del codice.
Comunque il punto è questo, stabilire la velocità massima gestibile e con quanto rigore/precisione posso pilotare il motore e di riflesso il treno di impulsi. Mi basta una sola istruzione per cambiare lo stato del pin dei motori, visto che non uso l'istruzione digitalWrite per questioni di efficienza, ma agisco direttamente sui registri del micro controllore. Stiamo parlando di un Risc da 16MHz. Non credo proprio che il driver DRV 8825 abbia una risoluzione tale da poter leggere un cambio di stato breve tanto quanto lo posso fare (o forse no?). Fino a dove mi posso spingere?

Ho visto che le GRBL (che non uso per intenderci, faccio tutto lato pc) hanno una frequenza massima di circa 30 KHz (chapeau visto che fa tutto Arduino). Io a quanto riesco ad arrivare? Posso andare a velocità sicuramente più elevate, visto che tutti i calcoli per le traiettorie li faccio lato PC, però al momento ho un limite intorno ai 10 KHz, che è ampiamente oltre a quanto permettano i motori 28BYJ-48. Però se passo a dei Nema 17 e supponendo di lavorare con i micropassi (l'8825 consente fino a fino a 1/32), 10KHz potrebbero essere pochi per talune applicazioni/motori.

Sto pensando che forse la soluzione è andare per gradi e testare il limite del driver e dopo tenermi ragionevolmente più alto per sicurezza.

Tanto per ragionare, ipotizziamo che l'intervallo minimo che può essere gestito dal DRV 8825 sia 50 microsecondi e si desideri avere la precisione assoluta sul governo dei tempi di step. Supponiamo che lo stepper sia da 200 passi e lo stiamo pilotando a 1.500 giri al minuto con una divisione 1/32. Sto viaggiando a 25 giri per secondo. 25 * 200 * 32 = 160.000 step al secondo. Ogni step ha una durata di 1 / 160.000 = 0,00000625 secondi, cioè 6,26 micro secondi. Ecco che l'intervallo di 50 microsecondi non è più trascurabile nei calcoli, significa scostarsi di parecchio dalla frequenza prevista. Come faccio a migliorare questo aspetto? Il driver riesce a leggere e gestire tempi intorno dell'ordine dei pochi micro secondi per le fasi di up e down del segnale?
Se non fosse possibile ridurre di molto l'intervallo down è inutile cercare di raggiungere velocità elevate.

Sospetto però anche che tutto il film che ho intesta sia fallato. Mi sembra quasi impossibile che il tempo di up/down sia il fattore limitante della velocità.

Credo di aver trovato la spiegazione sempre nel datasheet. Siamo su tempi ragionevolmente bassi. Penso si possa spingere bene come velocità anche in presenza di pilotaggio con micro passi spinti o motori con elevato numero di step.

Supponiamo che lo stepper sia da 200 passi e lo stiamo pilotando a 1.500 giri al minuto con una divisione 1/32. Sto viaggiando a 25 giri per secondo. 25 * 200 * 32 = 160.000 step al secondo

Peccato che i 1500 giri/m siano ottenibili solo in fullstep. Vai a guardare il datasheet di un motore e vedrai un'altro parametro PPS e sopratutto vedi i grafici della corrispondenza coppia/velocita

scusa non è più semplice calcolare e gestire il tempo totale di uno step inviando per metà del tempo a ON e l'altra metà a OFF, se devi inviare uno step in 10mS perché complicarsi la vita inviando ON per 10mS e poi trovare il giusto compromesso di OFF che per quanto piccolo va a sommarsi sballando il timing totale, invece 5mS ON e 5mS OFF risolve il problema.... o no? :confused:

Non credo che sia così, magari. Però devo dire che sto anche andando un pò per logica per cui potrei sbagliare il ragionamento. Con la versione che ho adesso, che pilota solo unipolari, non ci sono ambiguità. Ho 4 pin di controllo dei motori ed è molto semplice. Con una singola istruzione metto a low il piedino attuale e ad high il successivo, non ho pause.
Adesso che sto iniziando a pensare ai bipolari mi vengono mille dubbi :confused:

Parliamo del tuo esempio, perché è questo forse che non mi è ben chiaro. Se metto ad un valore alto il pin per un tempo tot, poi lo porto a low, la bobina rimane alimentata? Credo proprio di no.
Se funziona così il problema me lo pongo. Perché se devo fare uno step di 10 ms, e per farlo metto a ON per 5 ms, poi lo metto a OFF per altri 5 ms, a me risulta che ho fatto uno step di metà del tempo previsto. C'è anche da dire che se a OFF non ho alimentazione sulle bobine non ho più coppia di tenuta.

Ti torna?

@brunello22
Siamo d'accordo. Ho ben chiaro cosa succede ad uno stepper a livello di coppia all'aumentare di giri, per non parlare del pilotaggio in micro stepping, che personalmente lo ritengo una pia illusione. Ottenere il massimo rimane sempre un giusto obiettivo :slight_smile:

guarda che la bobina si alimenta da quando dai l'enable, l'impulso di step da solo lo step non controlla la durata di alimentazione dell bobina, ad ogni step il driver pilota una bobina diversa, se tu invii 10 step ognuno della durata di 10mS di ON con 90mS di OFF hai lo stesso movimento/risulatato ad inviarne ognuno con 90mS di ON e 10mS di OFF.

Aspetta, mi stai facendo fare confusione con il pin Enable. Dal sito della Pololu leggo: " The default state of the ENBL pin is to enable the driver, so this pin can be left disconnected", cioè il pin enable serve solo ad abilitare il driver, e di default lo è già, non lo devo utilizzare.

Detto questo, mi stai dicendo che una volta dato l'impulso e poi tolto, le bobine continuano ad essere alimentate? E' così che funziona? E' implicito nell'ENBL a ON questo funzionamento? Io pensavo che se volevo continuare a far passare corrente alle bobine dovevo tenere il pin a ON, pensa te!

Beh, se è così è molto meglio, è tutto più logico, mi sembrava un pò assurdo il film che mi stavo facendo in testa.

Urge che faccia una prova, ma in questo momento mi mancano ancora le schede dove alloggiare il driver. Dovrei provare con una breadboard, ma non ho un condensatore a disposizione da 100 uF elettrolitico da mettere in ingresso dell'alimentazione. Vediamo se riesco a fare qualche prova già questo fine settimana.

Un passagio L/H sulpin STEP del DRV 8825 fa passare il driver allo successivo passo di pilotaggio. In cosa consiste il successivo step dipende dalle impostazione di modalitá di pilotaggio: "step mode - full, 1/2, 1/4, 1/8/ 1/16, or 1/32 step". Il timing citato sono le tempistiche minime percui il DRV8825 riconosce uno step.
Un pilotaggio step puó essere tutto tra un minimo di 1,9µs HIGH e un 1,9µs LOW. A secondo della velocitá di pilotaggio il tempo di LOW e HIGH correspondente é il periodo - 1,9µS per esempio per 1 Hz i tempi possono andare tra un 1,9µs HIGH e 999998,1µs LOW e 999998,1µs HIGH e 1,9µs LOW. anche un 500000µs HIGH e 500000µs LOW é un tempo valido.

Sempre dalla stessa grafica si puó estrarre i tempi minimi che i segnali di DIR, MODE, ENABLE e SLEEP devono essere modificato per aver influenza sul driver/step successico.

Ciao Uwe

in alcuni driver il pin enable è già abilitato in quanto "forse" danno per scontato che uno appena alimentato il tutto si voglia bloccare/far girare il motore, se colleghi al positivo (o molto più probabile al negativo) il pin vedrai che puoi girare il motore a mano non essendo più alimentato, non è quindi bloccato, ma in tal caso anche si invii step il motore non si muove in quanto devi appunto prima abilitare il driver con l'enable o lasciarlo abilitato se di default lo è gia.
L'utilità del pin enable è se hai lunghi periodi di inattività del motore e non ti interessa che perda la posizione se sollecitato, di poter diciamo, mettere tutto in pausa e non scaldare inutilmente il motore, che con enable abilitato scalda anche se sta fermo.

Ok, ora sono riuscito a farlo girare. Il problema che riscontro è che non riesco a farlo salire troppo di giri. Arrivo fino a 400 giri/minuto e appena sopra sembra esserci in muro invalicabile. Lo sto pilotando in full step, mi aspettavo viaggiasse almeno fino ai 1.000 giri/min in scioltezza. Non è così.

Il motore è un Nema 17 con questa sigla 17HS4401. Non riesco a trovare informazioni sulla velocità forse perché un passo passo normalmente si cerca ti farlo stare a basso regime di giri, dove c'è più coppia.

Il mio cruccio è comprendere se lo sto pilotando al meglio. Non vorrei avere ancora qualche bug. Fino a 400 giri la coppia rimane notevole, segno che poi tanto male non lo sto gestendo.

Ho provato anche delle accelerazioni lentissime, niente da fare.

Secondo voi questo tipo di motore può viaggiare più veloce di così?

A quanti volt alimenti il driver? Dovrebbe migliorare un po' se ti avvicini alla massima tensione che supporta il driver che per il DRV8825 vedo è 45V. Comunque spremere molta velocità da un passo passo non ha tanta utilità visto che perde coppia fino ad andare in stallo con un soffio

Fino a 400 giri la coppia rimane notevole

Un motore a basso costo come codesto, lo danno per max 1500-1900 pps
Quindi più di codesto non gli tiri fuori
400 * (360/1.8) / 60 = circa 1300 pps

-zef-:
A quanti volt alimenti il driver?

E' venuto in mente anche a me che forse dovrei innalzare la tensione. In questo momento lo sto pilotando a 12V, nel weekend ho un pò di tempo vedo se trovo un alimentatore da almeno 24V e faccio qualche prova.
So che il DRV 8825 ha diverse modalità di decadimento della corrente (rapido, lento e misto), mi riservo di verificare anche l'influenza di questo settaggio.

brunello22:
Un motore a basso costo come codesto, lo danno per max 1500-1900 pps
Quindi più di codesto non gli tiri fuori
400 * (360/1.8) / 60 = circa 1300 pps

Non è ben capito il tuo conto, però supponendo che sia come dici tu ed il mio motore ha massimo 1.500 passi per secondo:

1.500 pps / 200 (passi motore) = 7,5 giri al secondo x 60 = 450 giri al minuto.

Direi che ci siamo, sono al massimo che si può ottenere. Ma se fosse proprio come dici, e cioè che più di 1.300 pps non posso fare, sono 390 giri al minuto. Infatti a pochi giri in più di 400 perdo passi. Ripeto, sto cercando la punta di velocità solo per avere una conferma che lato software è tutto ok, non ho bug nel governo motore.
Ma sinceramente pensavo che questo tipo di motore arrivasse a vuoto a 2.000/3.000 giri, anche se con coppia quasi inesistente.

Visto che in rete un datasheet di codesto motore non si trova, ho guardato cosa dicono i rivenditori

Quasi tutti dicono (che poi sarà mica lo stesso ? )

The maximum no-load starting frequency ≥ 1500 PPS
Maximum no-load operating frequency ≥ 1900 PPS

ma ce n'è uno che scrive

Maximum no-load starting frequency ≥ 1400 PPS
Maximum no-load operating frequency ≥ 8000 PPS

e che sinceramente mi sembra esagerato

Si vai tranquillo, nella categoria "cinesi" sono tutti uguali :slight_smile:
Di tre ho speso poco più di 18 dollari... ci sarà un motivo se viaggiano come delle carriole :slight_smile:

Sto pensando che oltre alla tensione ho un'altro parametro su cui agire ed è la corrente. Spero proprio di trovare il tempo questo weekend perché vorrei andare oltre questo aspetto, ma finché non mi convinco che lato mio (sviluppo) è tutto ok sto sul pezzo.

Devo dire che ho messo alla frusta l'8825 ed è bello solido. Ho avuto un problema i primi giorni, ho usato una breadboard. Sono riuscito a colare la plastica della breadboard dove erano connessi i piedini dei poli del motore. Ora ho saldato tutto. Intanto stavo monitorando le temperature perché non capivo quale fosse il problema, pensavo fosse l'adesivo dell'aletta di raffreddamento fornita in bundle con il driver a far odore, non era quello, ma i cattivi contatti dei terminali a scaldare troppo. In questo frangente sono riuscito ad arrivare a 122° misurati sull'aletta di raffreddamento, il chip era sicuramente vicino al limite termico dei 150°. Ora che ho capito il problema e sistemato sta appena sopra gli 80°.

Questo per dire che a livello di corrente posso incrementare, il motore sta sotto i 40°.

Ho un dubbio amletico che esprimo qui, sicuro di ottenere la risposta. Per regolare la corrente non ho usato la Vref, ma quello che ritengo sia in assoluto il metodo migliore, ho misurato direttamente la corrente che percorre la bobina.

Vengo al punto, per il mio motore il costruttore dichiara 1,5 A come corrente massima, ma vedo che la maggior parte dichiarano per questa famiglia di motori 1,7 A, ma ammettiamo pure che il mio motore abbia avvolgimento diverso dallo standard. Vedendo varie guide in giro, regolano tutti tra gli 1,2 e 1,4 A. Ho regolato ad esattamente 1,2 A ed il motore fatica ad arrivare a 40°.

Ma quel'è la corrente sopportabile effettivamente da questi motori? Perché per lo più tutti indicano un 70% della corrente massima, ma a me questa cosa non convince per niente. Per quale ragione devo stare al 70% se posso andare al 100%?

Qual'è la ragione tecnica? Forse perché normalmente non sono flangiati in maniera corretta per cui lo si monta su un supporto di legno/plastica dove la conducibilità termica è scarsa? Forse perché questa corrente è sopportata solo una bobina alla volta e non per entrambe come è normalmente usato il motore (marketing)? E' una leggenda metropolitana? Mi sto convincendo che la cosa migliore sia misurare il valore di lettura con l'amperometro unitamente alla temperatura di funzionamento, senza eccedere il valore massimo di corrente dichiarato. Penso che fino a che sto entro i 70°, sono nel normale abito operativo di questi motori.