L298N - riconoscimento piedini e ponticelli

Buongiorno a tutti, per un errore del venditore mi è arrivato la scheda allegata in foto che dovrebbe permettere di pilotare due motori DC. poichè era una cosa che volevo fare ho tenuto l’oggetto… solo che non ho trovato in rete nessuno che a parità di caratteristi che e di sigla avesse la stesse caratteristiche intese come attacchi e ponticelli.

mi spiego, mi sono chiari gli attacchi dei motori, sia A che B. ed anche l’alimentazione esterna, 5 V e GND.

  1. non vedo il ponticello che permette di scegliere se alimentarlo con arduino o passare sull’alimentazione esterna. credo sia il ponticello giallo in alto a sinistra che indica “5v-EN”. in tutte le schede simili che ho visto il ponticello doveva essere spostato per cambiare scelta di alimentazione qui no, e non è indicato quale sia la scelta per alimentazione esterna, lo devo levare?

  2. son leggibili in figura gli ingressi, tramite quei pin gialli a sinistra: ENA, IN1, IN2, IN3, IN4, ENB. correggetemi se sbaglio:
    ENA velocità motore A
    ENB velocità motore B
    IN1,2,3,4 le direzioni dei due motori, intesi come OR esclusivo giusto? 11 fermo 01 avanti 10 indietro 00 fermo. oppure è una mia fantasia?

  3. in tutti i modelli che ho visto in rete ci sono 8 ponticelli, sono quelli che nella foto del mio elemento son offuscati dal riflesso. in questo però sono 6 e non 8 e corrispondono a:
    CSA CSB U1 U2 U3 U4
    solo che non ho idea di cosa siano questi ponticelli, qualcuno può aiutarmi?

grazie anticipatamente… è la prima volta che mi approccio a questi elementi.

Guarda quante cose ti ho trovato:

TUTORIAL connessione l298n - Arduino
IMMAGINE esemplificativa
DATASHEET
Altra immagine
Immagine 3

io non l'ho mai usato, ma il video e la foto dovrebbero aiutarti credo

grazie della risposta tempestiva, però forse mi sono spiegato male. il video che hai postato ed anche i datasheet li avevo trovati, ma si riferiscono al ponte da solo, senza scheda.
le mie domande erano sull'utilizzo di questa scheda invece:
http://dx.com/p/l298n-stepper-motor-driver-controller-board-for-arduino-120542
perché ho trovato informazioni su schede riferite allo stesso ponte ma con caratteristiche diverse.

questa notte però ho trovato questo link in francese che non avevo ancora trovato, eppure ne ho spulciate di pagine prima di scrivere!
http://mchobby.be/wiki/index.php?title=Pont-H_L298N

appena ne vengo a capo lo scrivo perché magari può tornare utile ad altri, l'ho comprata da un produttore italiano.

grazie ancora...

diomede:

  1. non vedo il ponticello che permette di scegliere se alimentarlo con arduino o passare sull'alimentazione esterna. credo sia il ponticello giallo in alto a sinistra che indica "5v-EN". in tutte le schede simili che ho visto il ponticello doveva essere spostato per cambiare scelta di alimentazione qui no, e non è indicato quale sia la scelta per alimentazione esterna, lo devo levare?

Non ti conviene alimentarlo da Arduino, il ponte si autoalimenta dalla tensione dei motori, che deve provenire da una sorgente diversa e non da Arduino, c'è un regolatore a 5V per la logica del 298 il Jumper 5V_EN consente di scegliere se ottenere questa tensione da VMS (da preferire) oppure da Arduinio (jumper rimosso).
Se il Jumper 5V_EN è presente non devi collegare il 5V di Arduino al ponte.

  1. son leggibili in figura gli ingressi, tramite quei pin gialli a sinistra: ENA, IN1, IN2, IN3, IN4, ENB. correggetemi se sbaglio:
    ENA velocità motore A
    ENB velocità motore B
    IN1,2,3,4 le direzioni dei due motori, intesi come OR esclusivo giusto? 11 fermo 01 avanti 10 indietro 00 fermo. oppure è una mia fantasia?

ENA e ENB sono gli enable del ponte, non ingressi per il controllo della velocità, IN 1-4 sono gli ingressi per decidere la direzione di marcia e/o regolare la velocità.
Tutti i ponti della serie L29x vanno usati in modo LAP per il controllo della velocità tramite PWM, ovvero si applica il segnale a IN1 e IN2 per un motore e a IN3 e IN4 per l'altro motore, il PWM su i due ingessi deve essere di tipo complementare e si ottiene usando una porta NOT su un segnale PWM di Arduino, su IN1, o 3, entri diretto su IN2, o 4, entri tramite la porta NOT.
In Alternativa puoi collegare due PWM a IN1 e IN3 e metti IN2 e IN4 fissi a 0 o 1 a seconda del verso di rotazione che desideri, metodo poco efficiente ma semplice da mettere in pratica.

  1. in tutti i modelli che ho visto in rete ci sono 8 ponticelli, sono quelli che nella foto del mio elemento son offuscati dal riflesso. in questo però sono 6 e non 8 e corrispondono a:
    CSA CSB U1 U2 U3 U4

U1-U2-U3-U4 attivano delle resistenze di pullup su IN1-IN2-IN3-IN4, se colleghi ad Arduino puoi sia lasciarli aperti che chiusi, non cambia nulla.
CSA e CSB devono essere chiusi se non usi le Rsense per misurare la corrente, vanno aperti, e al loro posto ci va la Rsense, se vuoi misurare la corrente, le Rsense devono essere di opportuno valore e potenza, tipicamente da 0.2 - 0.3 ohm 2 Watt.

innanzitutto grazie mille per la spiegazione dettagliata. vado per punti

Se il Jumper 5V_EN è presente non devi collegare il 5V di Arduino al ponte.

ok, quindi lo lascio e gli metto un'alimentazione esterna (come immaginavo)

ENA e ENB sono gli enable del ponte, non ingressi per il controllo della velocità, IN 1-4 sono gli ingressi per decidere la direzione di marcia e/o regolare la velocità.
Tutti i ponti della serie L29x vanno usati in modo LAP per il controllo della velocità tramite PWM, ovvero si applica il segnale a EN1 e EN2 per un motore e a EN3 e EN4 per l'altro motore, il PWM su i due ingessi deve essere di tipo complementare e si ottiene usando una porta NOT su un segnale PWM di Arduino, su EN1, o 3, entri diretto su EN2, o 4, entri tramite la porta NOT.
In Alternativa puoi collegare due PWM a EN1 e EN3 e metti EN2 e EN4 fissi a 0 o 1 a seconda del verso di rotazione che desideri, metodo poco efficiente ma semplice da mettere in pratica.

giusto per chiarezza, hai scritto EN1 En2 ecc… ma intendevi IN1 In2 3 e 4. giusto? ok mi è chiaro. funzionano con 10 e 01 per le due direzioni.

non ho capito però come regolare la velocità.

U1-U2-U3-U4 attivano delle resistenze di pullup su IN1-IN2-IN3-IN4, se colleghi ad Arduino puoi sia lasciarli aperti che chiusi, non cambia nulla.
CSA e CSB devono essere chiusi se non usi le Rsense per misurare la corrente, vanno aperti, e al loro posto ci va la Rsense, se vuoi misurare la corrente, le Rsense devono essere di opportuno valore e potenza, tipicamente da 0.2 - 0.3 ohm 2 Watt.

ok li lascio tutto così.

grazie!

non ho capito però come regolare la velocità.

scusa, quando dici che li collego ad uscite arduino PWM intendi dire che quindi posso regolare l'ingresso ed è quello che regola la velocità?

in sostanza basta che collego I1 e I3 a due uscite pwm arduino regolando la velocità e collegandole a due not per i corrispettivi I2 e I4. alimento con batteria esterna e non levo il ponticello.

faccio una domanda stupida lo so… ma ho messo mano per la prima volta ad arduino :slight_smile:

Collega il GND col GND dell'Alimentatore esterno (o negativo della batteria) e anche con il GND di Arduino.

diomede:
giusto per chiarezza, hai scritto EN1 En2 ecc… ma intendevi IN1 In2 3 e 4. giusto? ok mi è chiaro. funzionano con 10 e 01 per le due direzioni.

Si, distrazione mia ho scritto ENx invece di INx, ho corretto il post.

non ho capito però come regolare la velocità.

La velocità la regoli tramite un pin PWM di Arduino, uno per ogni motore, applicandolo come ti ho spiegato nel post precedente.

Vorrei approfittare di questa discussione per fare una domanda.
Qual`è in genere la frequenza del PWM più adatta per pilotare uno stepper in modalità LAP ?

LAP si riferisce ai DC non a motori stepper

La mia scheda é leggermente diversa, ma il funzionamento è lo stesso. Meglio non leggere la documentazione sul motor shield perchè trae in inganno :grin:

logicaL298-2092498411.jpg

eccomi di nuovo... chiedo scusa se ho lasciato appeso il post per tanto tempo è un periodo molto caotico quindi ho perso diversi giorni su altro.
allora...

ho usato i pin così come indicato, ma non accadeva nulla. ho seguito così le indicazioni francesi e funziona. in sostanza è così:

IN1 e IN2 (così come IN3 e IN4) indicano la direzione con 01 o 10, bastano quindi pin digitali perchè serve alto o basso, basta che siano invertiti. il PWM va invece su ENA (così come ENB) per indicare la velocità.

detto ciò un motore funziona, ho provato anche a variare in random la velocità nel ciclo di loop e funziona. l'altro motore (il B) non funziona, non lo pilota. non riesco a capire se ho bruciato qualcosa perchè quando ho messo il polo negativo della batteria collegato al GND di arduino ha iniziato a fare un beep (ansiogeno) e quindi ho staccato. ho collegato quindi la batteria esterna direttamente alla scheda senza collegarla ad arduino, anche il negativo. il beep è passato ed il motore A funziona correttamente. ma poichè il B in realtà non ha mai funzionato ed era notte mi riservo di ricontrollare da capo i contatti.

ora la mia domanda è: il motore gira troppo velocemente rispetto a quello che mi serve anche con PWM solo a 5. come potrei fare?

grazie in anticipo...

diomede:

IN1 e IN2 (così come IN3 e IN4) indicano la direzione con 01 o 10, bastano quindi pin digitali perchè serve alto o basso, basta che siano invertiti. il PWM va invece su ENA (così come ENB) per indicare la velocità.

Ma perfavore, non è assolutamente vero … e basta saper leggere il datasheet del componente, pagina 3 dove sono descritti i pin, per capirlo !!!

Quello è il modo ERRATO di collegarlo e di farlo funzionare, e su internet trovi un bel numero di incompetenti che suggeriscono di collegarlo così, ma … quello giusto (e conforme alle specifiche dell’IC) te lo ha ben spiegato Astro QUI.

Nel tuo modo stai facendo lavorare l’integrato come NON è previsto che lavori !

Se ha te nel modo detto da Astro non funzionava … avevi sbagliato qualche collegamento !

Guglielmo

Edit : A pag. 6, Figura 6, c’è una chiara spiegazione del funzionamento …

non c'è alcun motivo per agitarsi... anche se dovessi bruciare la scheda non me ne preoccuperei più di tanto, non capisco quindi tutti questi esclamativi. è un forum di supporto e anche solo per questo sono lecite domande stupide, errori e quant'altro possa essere domanda di aiuto.
rimango scettico ma appena potrò farò più attenzione.
pace e bene a tutti

diomede:
non c'è alcun motivo per agitarsi... anche se dovessi bruciare la scheda non me ne preoccuperei più di tanto, non capisco quindi tutti questi esclamativi.

Te li spiego subito ...
... tu naturalmente il tuo lo colleghi come ti pare, ma proprio perché questo è un Forum dove tanta gente viene per imparare, fornire informazioni errate non va bene !

Semplice no ?

Guglielmo

no, assolutamente. il forum è gestito in Thread ed in quanto tali sono conversazioni. se non viene dichiarato chiuso e completo non può essere preso per “corretto” a prescindere. io sono tra quelli che si è avvicinato adesso, come ho scritto più volte e con i piedi di piombo faccio domande e scrivo i post. se uno dovesse prendere per “corrette” solo le mie parole commetterebbe un errore senza aspettare repliche o comunque la chiusura del Thread.
detto ciò… i punti esclamativi non sono mai giustificati, perchè non c’è mai bisogno di alterare il tono della conversazione. ritorniamo al tema del post, farò le verifiche dovute e riscriverò.

A dire il vero neanche io ho capito bene allora. Incollo lo figura 6 per comodità.

Se capisco bene (nel caso del motore A) Ven = ENA, C = IN1, D = IN2. Lo schema indica come variare la direzione del moto, ma non capisco come si varia la velocità? Anche io uso l’approccio di Diomede e funziona ma vorrei capire qual’è quello corretto.

Allora, premesso che qualunque sistema funziona (... anche il peggiore :grin:) ... magari non al meglio, magari non secondo come era pensato quel chip, ma funziona, definiamo bene l'uso di quei pin ...

Nel chip ci sono due controlli motore OUT1 e OUT2 per un motore, OUT3 e OUT4 per l'altro.

ENA e ENB = abilitano o disabilitano totalmente il relativo controllo motore, IN1 e IN2 decidono cosa fa il primo motore, IN3 e IN4 decidono cosa fa il secondo motore.

Ia possibilità : si invia il segnale PWM solo su uno dei pin di controllo e si utilizza l'altro per decidere la direzione di rotazione ... ragiona su come funziona un motore DC e capisci bene come funziona questo sistema ... e come se uno dei capi lo fissi ad un polo e sull'altro dai impulsi di polarità diversa. A seconda del polo che fissi, gira in un verso o nell'altro.

IIa possibilità : è quella per cui è nato quel IC, su un pin di controllo si invia un segnale e sull'altro si invia il segnale di segno opposto (es. invertendo l'uscita PWM con un 74LS04). Se ci pensi, in questo modo, hai il controllo della direzione in funzione del duty-cycle del PWM ...

Per i motori DC, questo è quanto ... :slight_smile:

Ripeto, ciascuno è poi libero di usare questo IC come crede ... ma almeno che sia chiara la teoria che c'è dietro e come si dovrebbe usare :wink:

Guglielmo

Ok grazie, molto chiaro.

La modalità 1 mi sembra migliore in quanto non necessita il 74LS04. Inoltre ora capisco perchè ENA e ENB erano "ponticellati", se uno usa la scheda secondo la modalità 1 e non intede usare il "free running" risparmia un prezioso pin dell'Arduino.

ok, premesso che lo si vuole utilizzare come si dovrebbe.. :slight_smile:
ho avuto modo si riprovare nel modo corretto e funziona ovviamente anche se il motore B non capisco perchè mi sembra dia problemi. non il motore perchè anche sostituendolo funziona uguale, mi sembra non riceva abbastanza tensione.

comunque sia ho due domande:

  1. per fare l'inversione del segnale, posso usare anche solo un bjt di tipo bc237 (che è quello che ho), oppure è un'altra fregnaccia? :slight_smile:
    pensavo di mandare il pwm sulla base e prendere l'uscita dal collettore dove collego il positivo di arduino e l'emettirore al GND con tutti gli altri. devo solo vedere le resistenze che mi servono. sbaglio qualcosa? metodi alternativi? anche via SW invertendo il valore che invio attraverso due PWM? funzionerebbe?

  2. devo portarlo ad una velocità di rotazione molto bassa. ma anche se lo scarto tra un polo e l'altro è piccolo mi sembra comunque andare molto veloce. posso agire in qualche modo?

grazie per l'aiuto!

p.s.: incollo lo sketch che sto usando di prova... notate errori per i quali il Motore B funziona in modo discontinuo?

//-- MOTEUR A --
int ENA=12; // pin 12
int IN1=3; // pin 3 (PWM)
int IN2=2; // pin 2

//-- MOTEUR B --
int ENB=13; // pin 13
int IN3=11; // pin 11 (PWM)
int IN4=8; // pin 10

int vel = 100;
//int spento = LOW;
//int acceso = HIGH;
int alterna = 1;

void setup() {
   
  pinMode(ENA,OUTPUT);
 pinMode(ENB,OUTPUT);
 pinMode(IN1,OUTPUT);
 pinMode(IN2,OUTPUT);
 pinMode(IN3,OUTPUT);
 pinMode(IN4,OUTPUT);
 
 digitalWrite(IN4, LOW);
 digitalWrite(IN2, LOW);
 digitalWrite(ENA, HIGH);
 digitalWrite(ENB, HIGH);

 delay(3000);
 Serial.begin(9600); 
 
}

void loop() {
  
  vel = random(170, 180);
  
   Serial.print(alterna);
   Serial.print("   ");    
   Serial.println(vel); 

  if ((alterna % 3) == 0){  
    digitalWrite(ENB,LOW);
    digitalWrite(ENA, HIGH);
    analogWrite(IN1,vel);
    Serial.print("M1");
    delay(3000);

  } else {
    digitalWrite(ENA,LOW);
    digitalWrite(ENB, HIGH);
    analogWrite(IN3,vel);
    Serial.print("M2");
  }
  
  alterna ++;
  delay(1000);
}