Controllare uno stepper con un A4988: il motore non rispondcome mi aspetto.

Ciao a tutti e buon 2021, sto cercando di controllare un motore estratto da una stampante, un m49sp-2nk con un arduino uno attraverso una schedina A4988.

Lo schema di collegamento che ho adottato e il software caricato li ho presi da qui, questo è il collegamento:

Questo è il sw, ho modificato solo il valore di SPR perchè era scritto per uno stepper da 1,8° ma il mio è da 7,5°

// Drive Stepper motor using A4988 stepper motor driver
// for more info visit iknowvations.in

// first define the pins
const int DirPin = 4;    // this pin defines direction CW or CCW
const int StepPin = 5;   // pulse this pin to move one step
const int SPR = 48;    // Steps per revolution era 200 supponendo 1,8° ma è da 7,5°

void setup()
{
  // Make pins as Outputs
  pinMode(StepPin, OUTPUT);
  pinMode(DirPin, OUTPUT);
}
void loop()
{
  // First let us rotate shaft clockwise
  digitalWrite(DirPin, HIGH);   // defines the direction to clockwise

  // Pulse the step pin
  for(int x = 0; x < SPR; x++)
  {
    digitalWrite(StepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(StepPin, LOW);
    delayMicroseconds(1000);
  }
  delay(1000); // Short delay of one second
  
  // Now rotate shaft counterclockwise
  digitalWrite(DirPin, LOW);

  // Again pulse the step pin
  for(int x = 0; x < SPR; x++)
  {
    digitalWrite(StepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(StepPin, LOW);
    delayMicroseconds(1000);
  }
  delay(1000); // Short delay of one second
}

Arduino è alimentato dalla usb collegata al pc attraverso un hub alimentato, il motore invece è alimentato a 12 v tramite un alimentatore da 1,2 A.

Quando alimento il motore non ottengo il movimento che mi aspetto, si comporta come se "perdesse" dei passi, ignora l'inversione di direzione, a volte inverte per un paio di passi e poi torna a ruotare nel verso precedente, e sinceramente non mi spiego quale possa essere il problema.

Ho un po' di dubbi, il primo riguarda il collegamento delle fasi (si chiamano così?) del motore alla schedina, ho identificato i due avvolgimenti con il tester, i fili sono 4, 3 rossi e uno verde, e li ho collegati alla schedina come da schema, quindi i pin 1A e 1B a un avvolgimento e i 2A e 2B all'altro, ma il motore non si muoveva, vibrava e basta, quindi l'ho collegato A1-A2 e B1-B2, e ha cominciato a muoversi, ma non ho idea della polarità degli avvolgimenti, e in rete non ho trovato schemi esplicativi, ma anche invertendo non ho ottenuto cambiamenti.

Il secondo dubbio riguarda la regolazione dell'assorbimento, quel trimmer presente sulla schedina. La regolazione prevede la misura della tensione fra il centro del trimmer e la massa a schedina alimentata, poi c'è un calcolo da fare che non mi è ben chiaro, ma prima ancora del calcolo, ho il problema di non conoscere nè le caratteristiche del motore (in rete non ho trovato nulla più che un pdf con info molto basiche), nè la resistenza interna del mio multimetro (che è un winapex ET8104). Ho fatto delle prove con il trimmer in posizioni diverse e mi è sembrato che alzando il valore le cose vadano meglio, ma anche al massimo non ho risolto.

Pensando a problemi di "potenza" ho provato ad alimentare il motore con un alimentatore da 2A ma non è cambiato nulla, e fondamentalmente non so se mi trovo davanti a un problema elettrico, di collegamento o di sw.

Cosa sto facendo di sbagliato?

Grazie in anticipo per avermi dedicato il vostro tempo.

gp

Un comportamento come quello che descrivi è tipico di un collegamento "incrociato" delle fasi.
Provando a cercare online, il primo risultato che ottengo è questo quindi il tuo motore dovrebbe essere da 1A.

La regolazione della Vref deve tenere conto di questo e della resistenza di "sensing" installata sul tuo driver A4988 (non capisco che ci azzecca la resistenza interna del multimetro??? dove hai preso queste indicazioni?). Per quanto riguarda la formula puoi fare affidamento al datasheet del driver che è SEMPRE la prima cosa da consultare.

Per i più pigri ci sono anche dei tool online

Con quel che costa un classico stepper nema17 da stampante 3D, vale la pena usare un motore cosi "scarso" (mi riferisco in particolare all'enorme angolo di step di 7.5° ed alla poca coppia disponibile) come quello che hai recuperato?

Prova anche ad abbassare la frequenza del segnale STEP perché lo stai pilotando senza rampa di accelerazione superando il Max. Pull-in Pulse Rate indicato nel datasheet.

Ciao, intanto grazie per la tua risposta, penso di doverti un po' di spiegazioni.

cotestatnt:
La regolazione della Vref deve tenere conto di questo e della resistenza di "sensing" installata sul tuo driver A4988 (non capisco che ci azzecca la resistenza interna del multimetro??? dove hai preso queste indicazioni?).

La sensibilità interna del multimetro viene da una mia errata interpretazione del testo "resistore di rilevamento", ti ringrazio per avermi insegnato un'altra cosa.

Per i più pigri ci sono anche dei tool online

Io rientro sicuramente in questa ultima categoria, grazie per la dritta.

Con quel che costa un classico stepper nema17 da stampante 3D, vale la pena usare un motore cosi "scarso" (mi riferisco in particolare all'enorme angolo di step di 7.5° ed alla poca coppia disponibile) come quello che hai recuperato?

In realtà sto facendo delle prove con questo motore proprio in vista dell'acquisto di alcuni NEMA17, volevo rendermi conto di quanto complesso potesse essere pilotarne uno prima di decidere.

Un comportamento come quello che descrivi è tipico di un collegamento "incrociato" delle fasi.

Cosa intendi per collegamento incrociato, una delle due coppie di fili che individuano una bobina che ho trovato con il tester va invertita? o tutte e due? o devo invertire uno dei fili di una coppia con uno dell'altra?

Prova anche ad abbassare la frequenza del segnale STEP perché lo stai pilotando senza rampa di accelerazione superando il Max. Pull-in Pulse Rate indicato nel datasheet.

Vediamo se ho capito: il max pull in è 370 pps, cioè impulsi al secondo, io mando impulsi con una pausa di 1000 microsecondi, pari a 1 millisecondo, quindi 500 alternanze al secondo, per rientrare nei limiti dovrei impostare una pausa di minimo 1350 millisecondi, facciamo 1500 pari a circa 333 alternanze al secondo, corretto?
.
Ma se volessi adottare la rampa di accelerazione cosa dovrei fare, incrementare i pps gradualmente per arrivare al massimo?
.
Il mio scopo è quello di costruire un modellino in scala 1:18/1:20 del rover curiosity, e stavo pensando di utilizzare dei motori passo-passo al posto di più semplici motoririduttori per non dovermi imbarcare nel controllo dei giri con gli encoder per accertarmi di avere un uguale numero di giri di ruota a destra e sinistra.
.
A questo proposito, se posso approfittare delle tue conoscenze, secondo te, calcolando che il rover ha 6 ruote ciascuna con il suo motore, sapendo che il tutto peserà non più di 3 Kg e andrà a velocità di camminata, massimo a 5/6 Km/h su ruote da 65 mm, quali nema 17 dovrei prendere? Pensavo a questi, secondo te potrebbero andare?
.
Grazie per i preziosi consigli, mi metto subito al lavoro.
gp

Sicuro che la scelta dello stepper sia la migliore?
Un rover... immagino alimentato a batteria. Il motore stepper a parità di peso e coppia è molto meno efficiente di un motoriduttore DC.
Gli stepper che hai individuato potrebbero anche andar bene, ma considerato il peso oltre alla corrente nominale di fase da 1.7A prevedi una batteria generosa.
Un motoriduttore DC con coppia equivalente peserebbe meno ed avrebbe un consumo più basso, però è sicuramente più "complesso" gestirne il posizionamento assoluto.

Comunque per fare le prove con quello che hai, fallo girare molto più lentamente cosi sei sicuro che il problema non sia l'accelerazione eccessiva.
Il collegamento deve essere come nell'immagine che hai allegato, quindi una volta individuate le fasi segui lo schema fase1 / fase2. Se giri il terminale di una delle fasi il motore ruoterà al contrario, ma deve ruotare!

Per quanto riguarda lo sketch, una volta appurato che il motore vada come deve, ti consiglio di usare una "buona" libreria come ad esempio la classica AccelStepper visto che dovrai usarne 6 contemporaneamente.

Grazie per le dritte, ma c'è ancora qualcosa che non va, non so se a livello elettrico, di connessione o di sw.

Seguendo il tuo consiglio di rallentare tutto per semplificare l'analisi, ho modificato lo sketch impostando la pausa a 60.000 microsecondi, ho impostato 96 step che sarebbero 2 giri, e ho introdotto l'accensione del led di stato in corrispondenza delle pause di un secondo fra una rotazione in un verso e quella contraria, la tensione presente sul punto di controllo è 1,31v.

Questi sono i pin della schedina:


Quelli a cui collegare il motore sono 1B, 1A, 2A, 2B, lo schema a cui ho fatto riferimento indicava 1B-1A per una bobina e 2A-2B per l'altra, ma con questo collegamento ottengo quello che si vede in questo filmato:
video1

Come puoi vedere per la maggior parte del tempo il motore è fermo e se alzi il volume puoi anche sentire un sibilo, tieni presente che come ho detto il led sullo sfondo si accende nelle pause e si spegne nella fasi in cui il motore dovrebbe girare.

Poi ho provato a collegare le bobine alle coppie 1B-2B e 1A-2A, stesso sketch, e questo è il filmato:
video2

In questo caso il motore si muove di più, ma comunque salta moltissimi step, alcune rotazioni le salta completamente (motore fermo a led spento), le inversioni sembrano assolutamente randomiche, ma in questo caso, anche a motore fermo in una fase attiva, non si sente nessun sibilo.

Sono abbastanza sicuro del funzionamento del motore (escludendo che possa averlo danneggiato io con queste prove), perchè la stampante da cui l'ho estratto caricava la carta senza problemi, purtroppo non ho pensato di estrarre anche alimentatore e driver.

Io non ci capisco granchè, tu hai una qualche idea su cosa stia sbagliando?

Grazie ancora.

gp

Il collegamento corretto dovrebbe essere il primo, ci vorrebbe un secondo motore per fare una prova incrociata.

Ho visto nelle specifiche che la tensione nominale di quello che hai recuperato è 24V mentre la tensione di lavoro è nel range 21.6~26.4V , magari è quello il problema. Non hai un alimentatore regolabile o da 24V?

Ho un vecchio alimentatore da pc, dovrebbero esserci i +12 e i -12, se li prendo insieme faccio 24, potrebbe andare? Però non ho la minima idea della sua potenza, anche se mi sembra che fosse da 400 w.

gp

i -12V forniscono nemmenoo 0.5A per cui lascia stare

Nei prossimi giorni cerco di procurarmi un alimentatore che fornisca 24v.

Nel frattempo avrei una domanda a proposito dei 6 motori da alimentare a batteria, mi pare di capire che secondo te sarà necessaria una batteria "pesante", potresti darmi una idea delle caratteristiche, in modo da valutare costo e peso? Diciamo che vorrei un'oretta di autonomia, e l'assorbimento sarà quasi esclusivamente quello dei 6 nema17 che ti avevo indicato, visto che l'elettronica in confronto non consumerà niente.

Grazie.

gp

PS: Questo potrebbe andare?

Un po' complicato fare una stima affidabile perché dipenderà da quanto e come farai girare i motori.

Se dai uno sguardo al datasheet del driver c'è una tabella che in funzione del microstepping impostato ti da un'indicazione della percentuale di corrente (rispetto a quella impostata con il Vref) che scorre in ognuna delle due fasi step by step.

Comunque se vuoi usare tutta la coppia disponibile dei motori gli devi fornire la corrente richiesta... c'è poco da fare.
Mettiamo per ipotesi che avrai un consumo medio (quando il motore gira) di 1.5A x motore, sono in totale ben 9A istantanei.
Metti un po' di scorta, perdite varie etc etc per avere un'oretta assicurata di movimento continuativo io mi orienterei cosi a spanne su una batteria piombo/gel da moto da almeno 14/15Ah

icio:
i -12V forniscono nemmenoo 0.5A per cui lascia stare

gporciello:
Ho un vecchio alimentatore da pc, dovrebbero esserci i +12 e i -12, se li prendo insieme faccio 24, potrebbe andare? Però non ho la minima idea della sua potenza, anche se mi sembra che fosse da 400 w.

gp

NO
Oltre a quello giá descritto temo che sia il GND del USb che il GND del Alimentatore da PC siano collegati alla Terra. Percui metti in corto i -12V.
Ciao Uwe

cotestatnt:
Metti un po' di scorta, perdite varie etc etc per avere un'oretta assicurata di movimento continuativo io mi orienterei cosi a spanne su una batteria piombo/gel da moto da almeno 14/15Ah

Cavolo, sono tanti chili... io pensavo di potermela cavare con delle LIPO, magari mettendone una per motore.

Per reggere il peso della batteria devo riconsiderare sia il materiale che la forma del telaio aumentando considerevolmente il peso del tutto, senza considerare le ruote, ma poi i sei stepper poi ce la farebbero a spostare una decina di chili?

gp

Si non credo che i motori avrebbero problemi, ma tieni conto che sto facendo considerazioni "a naso" per quel che valgono.

Io però torno a consigliarti di lasciar stare l'idea degli stepper... per curiosità mi sono fatto un giro in rete e non sono riuscito a trovare un solo progetto dove li usano come motore per la locomozione! Una ragione ci sarà :wink:

cotestatnt:
Io però torno a consigliarti di lasciar stare l'idea degli stepper... per curiosità mi sono fatto un giro in rete e non sono riuscito a trovare un solo progetto dove li usano come motore per la locomozione! Una ragione ci sarà :wink:

Penso che la questione sia legata principalmente alla mancanza di un asse. Nei modellini "normali", almeno quelli che non sono dei giocattoli per bambini, le ruote motrici sono mosse da un unico motore con un differenziale, questo rende inutile un controllo puntuale della rotazione delle ruote stesse, senza contare che si tratta di modellini che prevedono la presenza di un pilota umano che guida in tempo reale e che quindi corregge eventuali deviazioni, curiosity, per la struttura delle sue sospensioni, necessita di motori indipendenti, e in più, essendo praticamente un robot, una volta impostato il percorso o anche la sola destinazione, dovrebbe essere in grado di guidarsi da solo, e un non perfetto sincronismo nella rotazione dei gruppi di destra e sinistra farebbe deviare il rover dal percorso previsto, quindi o controlli con degli encoder (come hanno fatto quelli del JPL con il modellino open "ufficiale" di curiosity), o ti inventi qualcosa, e io mi sono inventato gli stepper.
Sto cercando di capire quanto peserebbe il tutto con una batteria al piombo considerando la maggior robustezza necessaria (pensavo in origine a un telaio di tubi in pvc, ma a questo punto forse dovrò passare all'alluminio), ma se dovesse risultare troppo pesante abbandonerò gli esperimenti con gli stepper e mi dedicherò al controllo degli encoder.
Comunque ti ringrazio moltissimo per questa discussione, perchè mi consente anche di chiarirmi le idee.
gp

E' vero che il rover va da solo, ma non credo che il controllo del posizionamento sia fatto in funzione della rotazione del singolo motore perché se il terreno è cedevole e la ruota slitta tutti i conti vanno a farsi benedire..

Non so che precisione deve avere il tuo sistema, ma cosa ne pensi invece di una bussola digitale abbinata ad un ricevitore di posizione GPS?

Sì, la risposta del terreno è fondamentale, trovi una pozza di fango e sei fregato, anche se con 6 ruote dovresti avere un discreto grip, ma almeno in condizioni ideali (mio figlio ci giocherebbe nel cortile di casa, avanti 10 m, ruota a dx di 30°, avanti 5 m, ruota a sx di 90°...) il controllo di rotazione ti darebbe qualche certezza, e potresti relegare al gps un semplice check periodico.

Comunque ci avevo anche pensato, ma temevo funzionasse solo su distanze di un certo peso, volendo usarlo su percorsi di qualche decina di metri penso che la sensibilità del gps possa essere insufficiente, e c'è anche da considerare il sw di gestione, un conto è programmare un percorso costituito da rettilinei e curve, altro sarebbe tirare in ballo le coordinate gps...

Secondo te la distanza minima entro cui avrebbe senso un posizionamento gps della precisione ottenibile con le schedine di arduino quale potrebbe essere?

gporciello:
Secondo te la distanza minima entro cui avrebbe senso un posizionamento gps della precisione ottenibile con le schedine di arduino quale potrebbe essere?

Mi spiace, ma non ho esperienze dirette con moduli GPS "Arduino" quindi non saprei che dirti in merito.
Comunque l'accuratezza dei ricevitori GPS è strettamente legata al numero dei satelliti visibili e quando ce ne sono a sufficienza è nell'ordine dei 2/3 metri.

cotestatnt:
Mi spiace, ma non ho esperienze dirette con moduli GPS "Arduino" ...

Come sempre, ci sono ottimi moduli (e costano) e monnezza cinese (che ti tirano dietro) e che usa FALSI moduli GPS ... come ebbi modo di mostrare QUI.

La precisione, nel caso di moduli che montano il VERO ublox-NEO-M8M ed un ottima antenna (... e non le antennine microscopiche che spesso si vedono in giro), con un certo numero di satelliti ben visibili, è del metro e anche meno.

Guglielmo

gpb01:
La precisione, nel caso di moduli che montano il VERO ublox-NEO-M8M ed un ottima antenna (... e non le antennine microscopiche che spesso si vedono in giro), con un certo numero di satelliti ben visibili, è del metro e anche meno.

Meno di un metro è tanta roba!
Verrebbe fuori proprio un bel sistemino :slight_smile:

:slight_smile: ... costicchiano, ma in QUESTA pagina trovi tra i migliori moduli che io abbia mai usato :wink:

Guglielmo