Motor Shield R3 e problemi di temperatura

Sto facendo qualche prova con degli step motor, collego questo motore:
http://robot-italy.com/it/39byg013-nema-17-bipolar-20mm-stepper.html

ad Motor shield rev3 uso il codice sotto.

Tutto funziona correttamente il motore fa un giro in senso orario ed uno antiorario, in accordo con la velocità che specifico nel codice. (myStepper.setSpeed(100):wink:
Alimento lo shield con un alimentatore esterno a 9V.

L'unica cosa è che scalda terribilmente, in tempo 1/2 minuti il chip non si tocca e scalda TANTISSIMO anche il motore? qualche suggerimento?

#include <Stepper.h>

 const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
 const int pwmA = 3;
 const int pwmB = 11;
 const int brakeA = 9;
 const int brakeB = 8;
 const int dirA = 12;
 const int dirB = 13;                             // for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 12,13);            

void setup() {
   myStepper.setSpeed(100);
   Serial.begin(9600);
   pinMode(pwmA, OUTPUT);
   pinMode(pwmB, OUTPUT);
   pinMode(brakeA, OUTPUT);
   pinMode(brakeB, OUTPUT);
   digitalWrite(pwmA, HIGH);
   digitalWrite(pwmB, HIGH);
   digitalWrite(brakeA, LOW);
   digitalWrite(brakeB, LOW);
}

void loop() {
    myStepper.step(200);
    delay(1000);
    myStepper.step(-200);
    delay(1000);
    
    Serial.print("A0:");
    int a0 = analogRead(A0);
    int a1 = analogRead(A1);
    Serial.print(a0);
    Serial.print(" A1:");
    Serial.println(a1);
}

Ciao kurtommy, sbaglio o almeno un paio di volte ti è stato gentilmente chiesto di aprire questi Topic nelle specifiche sezioni? Inoltre 3-4gg fa ne hai aperto un'altro sullo stesso argomento, non potevi continuare a scrivere lì? Ognuno di noi deve dare il proprio contributo, non è giusto costringere il MOD a fare questo super-lavoro ogni santo giorno di spostare i Topic perché non stiamo accorti.
Ho da farti un paio di domande sul tuo problma, maaspetto di leggere la domanda nella giusta sezione. Grazie.

Non disperare Michele :wink: :wink: :wink:
Ciao Uwe

kurtommy leggi con attenzione le specifiche del motore:
6,8Ohm e 0,4A per fase.
Tu lo alimenti con 9V. Penso che il L298 sulla motor shield sopravive ma il motore no.
Suggerimento: Attieniti alle specifiche. Alimenta il shield in modo che il motore assorbe 0,4A.

Ciao Uwe

Hai super ragione, ho postato nella sezione sbagliata, non ci ho messo attenzione.
Per il fatto di aprire un nuovo post l'ho fatto perchè la domanda adesso era diversa e pensavo che fosse giusto farlo per non scrivere cose fuori tema! e meglio qundi che scrivo sempre nel solito allora?!
GRAZIE

uwefed:
kurtommy leggi con attenzione le specifiche del motore:
6,8Ohm e 0,4A per fase.
Tu lo alimenti con 9V. Penso che il L298 sulla motor shield sopravive ma il motore no.
Suggerimento: Attieniti alle specifiche. Alimenta il shield in modo che il motore assorbe 0,4A.

Ciao Uwe

Ho letto le specifiche del motore ma avevo anche letto questo nelle specifiche del Motor shield:Operating Voltage: 5V to 12V.
Come devo fare per attuare questo tuo suggerimento? "Alimenta il shield in modo che il motore assorbe 0,4A."
Legge di Ohm? V = R* I -> 6.8 * 0.4 = 2.72 V ? (sicuramente ho detto una bomba!)

Grazie per le risposte

kurtommy:

[quote author=Michele Menniti link=topic=119370.msg898324#msg898324 date=1345478575]
Ciao kurtommy, sbaglio o almeno un paio di volte ti è stato gentilmente chiesto di aprire questi Topic nelle specifiche sezioni? Inoltre 3-4gg fa ne hai aperto un'altro sullo stesso argomento, non potevi continuare a scrivere lì? Ognuno di noi deve dare il proprio contributo, non è giusto costringere il MOD a fare questo super-lavoro ogni santo giorno di spostare i Topic perché non stiamo accorti.
Ho da farti un paio di domande sul tuo problma, maaspetto di leggere la domanda nella giusta sezione. Grazie.

Hai super ragione, ho postato nella sezione sbagliata, non ci ho messo attenzione.
Per il fatto di aprire un nuovo post l'ho fatto perchè la domanda adesso era diversa e pensavo che fosse giusto farlo per non scrivere cose fuori tema! e meglio qundi che scrivo sempre nel solito allora?!
GRAZIE
[/quote]
Basta appunto un po' di attenzione in futuro, per ora ci ha pensato UWE. L'argomento è uguale, cambia la problematica, quindi puoi benissimo restare in casi del genere in un Topic aperto in precedenza, ormai è fatta.

kurtommy:

uwefed:
kurtommy leggi con attenzione le specifiche del motore:
6,8Ohm e 0,4A per fase.
Tu lo alimenti con 9V. Penso che il L298 sulla motor shield sopravive ma il motore no.
Suggerimento: Attieniti alle specifiche. Alimenta il shield in modo che il motore assorbe 0,4A.

Ciao Uwe

Ho letto le specifiche del motore ma avevo anche letto questo nelle specifiche del Motor shield:Operating Voltage: 5V to 12V.
Come devo fare per attuare questo tuo suggerimento? "Alimenta il shield in modo che il motore assorbe 0,4A."
Legge di Ohm? V = R* I -> 6.8 * 0.4 = 2.72 V ? (sicuramente ho detto una bomba!)

Grazie per le risposte

mah, il tuo ragionamento sembra corretto, la prova che puoi fare è appunto alimentare direttamente il motore a 3V e vedere come si comporta, se non scalda e lavor correttamente, a quel punto devi dimensionare correttamente il motor shield che, però, a quanto leggo, vuole minimo 5V.

questo alimentatore ha tensione variabile, se lo metto a 6V, non so per quale motivo ma invece di fare un giro in un senso ed uno in un altro, continua a farli nel solito verso, se aumento la tensione, riprende a fare come descritto nello sketch.
Idee?

ma è un alimentatore SERIO o uno di quegli scatolotti 5€/kg col commutatore rotativo 3-4,5-6-7,5-9-12V dichiarati per 1A (o, peggio, 0.5A) e poi in realtà ne danno meno di un terzo con tensione non stabilizzata?

Penso sia più versione scatolotto!
Ma se serve una tensione così bassa potrei evitare di dargli quella esterna e fare tutto conquella di arduino.
Anche se adesso che ci penso mi pare di ricordare che eroga massimo 0.040A mentre al motore per fase ne servono 0.4A che è 10 volte di più.
Mi consigli quindi di provare un buon alimentatore?
Altrimenti potrei provare a collegarci una cella lipo da 3.7V Per la corrente quelle non hanno certo problema ho 20C a 2200mAh dovrebbe erogare 44Ampere che stra avanazno.
Dico bene?

Allora lo scatolotto buttalo e cerca di non lasciare impronte digitali, in modo che non si possa mai sapere che l'hai messo tu in circolazione :grin: Questi alimentatori erogano tensioni decisamente superiori a quelle nominali, non stabilizzate, sporche da morire e con correnti ridicole.
L'idea della LiPo è buona, l'alimentazione diretta come prova ti fa capire se il motore smette di riscaldare o comunque se diminuisce tanto.
Arduino come controllore non è in grado di andare oltre 200mA totali e 40mA per pin, quindi niente da fare. Come uscita a 5V invece dovrebbe superare i 300mA, pochi in ogni caso; la tensione esterna ti serve, quindi un buon alimentatore, governato tramite transistor o mosfet da Arduino ed è tutto finito.

OK, grazie ho capito tutto meno che questa parte:
"governato tramite transistor o mosfet da Arduino ed è tutto finito."
La soluzione più veloce mi pare comunque quella della batteria (fra poco la provo e ti dico come va). Per l'alimentatore mi sai consigliare qualche modello buono da acquistare? Magari con tensioni variabili e con una corrente decente...
Grazie 1000

L' idea della LiPo non mi piace. In caso di corto eroga troppa corrente e rischi di fondere qualcosa o incendiare la LiPo. Un alimentatore limita molto prima la corrente.
Il L298 perde un po di tensione sui transistori. Per avere 2,7V sul Motore serve ca 5V di alimentazione.

Ciao Uwe

Ho fatto una prova al volo con una lipo che ne ho molte disponibili.
Una cella che misura ai capi alimentando arduino e motore 3.94V i valori che leggo dagli ingressi analogici A0 ed A1 sono:
124 e 123
quindi a quanto ho letto dovrebbe essere 1024 pari a 2A quindi facendo la proporzione viene 2*124/1024 = 0,24A assorbiti per ogni ponte H
Giusto ?

Ho fatto anche qualche altra prova con il codice, inserendo pause di 1Millisecondo tra un movimento ed un altro vedo che la corrente assorbita è notevolmente inferiore:

myStepper.step(200);
  delay(1);
  myStepper.step(-200);
  delay(1);

Leggo sulla seriale
A0:27 A1:84

Ma ancora una domanda, ho sempre letto che le chiamate alle funzioni myStepper.step(); sono bloccanti ovvero fino a quando il movimento non è stato completato il codice non va avanti, ma al momento che effettuo la lettura della corrente assorbita sugli ingressi A0 e A1 il motore è fermo quindi leggo la corrente che passa perchè lo shield tiene comunque alimentato il motore nella fase in cui rimane al compimento dell'ultimo passo? altrimenti sarebbe fermo disalimentato e dovrei leggere corrente = 0 !

Devi alimentare l' Arduino e la parte digitale del L298 con 5V.
Ciao Uwe

per adesso sto tenendo collegata anche l'usb, se non desaldo il bridge sotto la scheda la prende dalla lipo l'alimentazione? e comunque anche la prendesse da li ci sarà qualcosa per stabilizzarla a 5V no? non capisco bene il tuo suggerimento di alimentare la parte logica a 5V :blush:

@ Uwe: concordo con te sulla potenziale pericolosità della LiPo ma era per fare una prova per vedere il riscaldamento.

@ kurtommy: in pratica colleghi Arduino all'USB e alimenti sia Arduino che il motor shield, questo significa alimentare la logica a 5V (se ho ben capito, e dovrebbe essere ciò che ti dicevo anch'io). NON devi collegare i motori direttamente allo shield in quanto li devi pilotare con una tensione inferiore. Ora ATTENZIONE! io faccio un ragionamento per logica, ma siccome non so come vengono pilotati i motori non posso darti certezza che la cosa vada bene.
SE, e SOLO SE, ogni fase viene pilotata separatamente e SEMPRE con una tensione positiva, la soluzione è relativamente semplice: ogni usc ita che prima andava alla propria fase ora deve andare alla base di un transistor NPN, tramite una R da 4,7K; l'emettitore del TR va a GND, la fase del motore va sul collettore e da qui parte una R da calcolare. Più o meno io penserei a: R = V/I = 3,7V/0.4A = 9,25 ohm. Quindi dovrebbe essere circa 10 ohm 2W (anche 1W al limite potrebbe bastare). Un dubbio che ho è se in questo calcolo vada considerata la R di 6,8ohm del motore, però io ho calcolato sulla limitazione di corrente. L'altro dubbio che ho è se le fasi vengono sempre pilotate con tensioni positive o ce ne sono anche di negative.
Comunque a mio avviso il principio è questo, con tale sistema tu alimenti la logica ed il motor shield a 5V ed ai motori invii una corrente massima di 0,4A, come da specifiche, secondo me risolviamo. Ti chiedo però di pazientare ed aspettare conferma di Uwe o qualcun altro che abbia esperienza di pilotaggio di motori, io purtroppo non ne ho.

volevo fare un appunto riguardo la Motor Shield R3 poichè vedendo per la prima volta la scheda (io uso ben altro) e quindi anche lo schema elettrico, si evince subito che quella scheda
al massimo con opportune modifiche potrebbe pilotare due motori in continua e non un motore passo/passo o quanto meno qualora lo pilotasse spunterebbero una miriade di problemi
legati allo non controllabilità della corrente massima e di tenuta.

Se mi posso permettere.....
lo schema ch bisogna adottare quando si va a pilotare uno step motor usando L298 è quello riportato sotto.
Il circuito deve necessariamente prevedere la presenza di un L297 (o similare) che oltre ad essere facilmente interfacciabile ad un micro visto che fa tutto lui, permette una regolazione
di corrente intrinseca al circuito (psedo PWM con attivazione a soglia di sovraccarico) partendo da una tensione di alimentazione maggiore di 12volt....fino a 30/36 volt.
Non abbiamo così perdita di coppia, e possiamo regolare con un trimmer la corrente massima di tenuta (la massima che accetta il motore).

Direction = permette di modificare la direzione di rotazione
Clock = N cicli di clock -> N step
Half/full = potete andare a 1/2 passo o a passo intero
Reset = avete il reset delle fasi
Enable = potete dare potenza o disalimentare le fasi
Vref = attraverso un trimmer 1K collegato tra gnd e +5V potete regolare la corrente.

Le 2 R da 0.5ohm sono le resistemze di sensing per permettono di realizzare il confronto in tensione tra la corrente che circola sul motore e quella impostata con il trimmer.

Ti puoi permettere eccome! In parole povere serve uno shield specifico per motori passo-passo.... grazie del chiarimento; come detto, non ho mai usato motori e non ne so nulla, pensavo che la base di partenza fosse corretta e quindi cercavo di risolvere tenendo conto dei dati che abbiamo in mano.
Ciao :slight_smile: