Go Down

Topic: Problema con L298N (Read 446 times) previous topic - next topic

trittico

Salve forum.

È il mio primo post, e sono un noob completo di programmazione con Arduino.

Fatta questa premessa, veniamo alle mie difficoltà: sto cercando di costruire un drone, e mi sto concentrando sul movimento.

Ho seguito un tutorial indiano (davvero ben fatto) sul componente L298N, con tanto di codice d'esempio sul pilotaggio di 2 motori DC, con prima un motore che va, poi l'altro, poi entrambi con velocità crescente ecc..

Problema: i motori non si muovono.
I jumper sono stati collegati correttamente (con tanto di sostituzione di questi ultimi, casomai se ne fosse rotto uno): ENA e ENB su WPN, i vari input come da codice.

Un dubbio potrebbe essere su come collegare 12V, GND e 5V.
Ho collegato un GND e 5V alla scheda Arduino, mentre 12V e l'altro GND li uso su una batteria. È corretto?

Il L298N si accende, e sento che opera con gli intervalli dettati dal codice (rispettando i delay imposti), però non si muove nulla... Non so dove sbattere la testa

Ho provato ad alimentare da batteria i motori DC, collegandomi ai PIN di output della scheda L298N (bypassando di fatto la scheda di controllo) e questi effettivamente funzionano...

Non capisco

Scusate se non sono stato chiarissimo come termini

fabpolli

Buonasera,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del nostro regolamento, ti chiedo cortesemente di presentarti QUI (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 il su citato REGOLAMENTO ... Grazie. :)

trittico

Buonasera,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del nostro regolamento, ti chiedo cortesemente di presentarti QUI (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 il su citato REGOLAMENTO ... Grazie. :)
Fatto, me l'ero perso !

fabpolli

Non mi è chiao da dove arrivano i 12, i 5 e i gnd, sono due alimentatori separati?

fabpolli

Comunque credo che il problema possa essere chei due GND non li hai messi in comune, 12 e 5 separati ma i due GND devi collegarli assieme

trittico

Comunque credo che il problema possa essere chei due GND non li hai messi in comune, 12 e 5 separati ma i due GND devi collegarli assieme
Sono in comune.

Come detto, essendo alle prime armi, mi sono completamente affidato al tutorial ed ho copiato pari pari le istruzioni.

Se non ho capito male, 12V-GND1 sono i collegamenti della batteria, mentre 5V-GND2 quelli con Arduino.

Dato che, se collegato al PC tramite USB, l'alimentazione arriva da lì, ho provato a rimuovere i due collegamenti 12V-GND1, ottenendo gli stessi risultati.

Se può aiutare, posso postare una foto dei collegamenti, anche se sono esattamente quelli "base" rispetto alla connessione L298N-Arduino... Non mi capacito del suo non-funzionamento.

I componenti singoli paiono funzionare, ma una volta collegati... Non accade nulla

fabpolli

Aggiungere dettagli non è mai male, se quando posti metti i link alle varie schede che usi, la foto o lo schema dei collegamenti, il codice che usi (se troppo lungo lo alleghi) non è mai male. A volte sfugge qualcosa e se ai partecipanti dai sempre il massimo delle info ottieni risposte più rapide e mirate.

P.S. = quando posti il codice includilo nei tag code e sia che tu lo posti che lo alleghi prima usa sempre la formattazione automatica (Nell'ide Ctrl+T) gli utenti non ti odieranno  :)

trittico

#7
Mar 19, 2020, 11:11 pm Last Edit: Mar 19, 2020, 11:13 pm by trittico
News: dopo qualche imprecazione penso di aver determinato la causa principale, ossia la batteria, ma i problemi non sono ancora finiti.

Temo che il circuito non riceva una potenza sufficiente. Il "rumore" che sentivo inizialmente sulla scheda L298N (d'ora in poi la chiamerò semplicemente "scheda") era dovuto ai motori DC che cercavano di azionarsi, ma che non riuscivano a vincere la frizione, con quella poca potenza.

Lo schema di collegamento è questo allegato, dove abbiamo il collegamento diretto alla batteria (che dovrebbe fornire potenza) ed i collegamenti verso Arduino: 9 e 11 WPN, 12, 13 (A) 8,7 (B) [L298N.jpg]

Lo schema elettronico della scheda è questo [77.jpg]

Ho provato ad eseguire il codice qua sotto SENZA l'ausilio della batteria, cioè con arduino attaccato a pc tramite USB (e chiaramente con i pin verso la batteria scollegati), ma appunto non riceve abbastanza potenza

Ho provato allora ad aggiungere la batteria da 9V, e le cose sono andate leggermente meglio: le ruote, quando eseguono il ciclo a velocità crescente (i<0, i++), si azionano solo a partire dal 60% della velocità massima (100).
Il fatto che altri pezzi di codice facciano girare i motori a 25% e 50% implicano che questo comportamento è anomalo...

Devo aumentare il voltaggio o la corrente? Entrambi?
Mi fa strano comunque che una pila da 9V non riesca a fornire abbastanza potenza per far girare arduino, la scheda e un paio di motori DC..

Spero di essere stato esaustivo questa volta :)



Qui di seguito il codice

Code: [Select]
#include <Robojax_L298N_DC_motor.h>
// motor 1 settings
#define IN1 12
#define IN2 13
#define ENA 11 // this pin must be PWM enabled pin

// motor 2 settings
#define IN3 8
#define IN4 7
#define ENB 9 // this pin must be PWM enabled pin

const int CCW = 2; // do not change
const int CW  = 1; // do not change

#define motor1 1 // do not change
#define motor2 2 // do not change

// use the line below for single motor
//Robojax_L298N_DC_motor motor(IN1, IN2, ENA, true);

// use the line below for two motors
Robojax_L298N_DC_motor motor(IN1, IN2, ENA, IN2, IN3, ENB, true);

void setup() {
  Serial.begin(115200);
  motor.begin();
  //L298N DC Motor by Robojax.com

}

void loop() {
  
  motor.demo(1);
  motor.demo(2);  
  motor.rotate(motor1, 60, CW);//run motor1 at 60% speed in CW direction
  motor.rotate(motor2, 60, CCW);//run motor2 at 60% speed in CCW direction  
  delay(3000);

  motor.brake(1);
  motor.brake(2);
  delay(2000);


  motor.rotate(motor1, 100, CW);//run motor1 at 60% speed in CW direction
  motor.rotate(motor2, 100, CCW);//run motor2 at 60% speed in CCW direction  
  delay(3000);

  motor.brake(1);
  motor.brake(2);
  delay(2000);  

  for(int i=0; i<=100; i++)
  {
    motor.rotate(motor1, i, CW);// turn motor1 with i% speed in CW direction (whatever is i)
    delay(100);
  }
  delay(2000);
  
  motor.brake(1);
  motor.brake(2);
  delay(2000);  

  motor.rotate(motor1, 70, CCW);//run motor1 at 70% speed in CCW direction
  motor.rotate(motor2, 5, CW);//run motor2 at 50% speed in CW direction  
  delay(4000);

  motor.brake(3);
  delay(2000);    

fabpolli

Servono i dati di targa dei motori, a che tensione lavorano? Che corrente richiedono? Non sono molto esperto in questo campo ma credo che il problema sia la poca corrente che la batteria riesce ad erogare, sempre se i motori non richiadano 12V al posto di 9 che stai fornendo

trittico

#9
Mar 20, 2020, 05:15 pm Last Edit: Mar 20, 2020, 05:18 pm by trittico
ma credo che il problema sia la poca corrente che la batteria riesce ad erogare
Effettivamente avevi ragione... perchè la batteria era quasi scarica *facepalm* (anche se contrariamente al regolamento, avevo messo le mani avanti, dicendo di essere alle prime armi sia con arduino che con l'elettronica.. cercando così di non passare a posteriori come un cretino. Non ha funzionato, perchè mi sento un po' cretino lo stesso)

COMUNQUE. Posto il fatto che ho preso un porta batteria AA con 8 slot (arrivando a 9,6V per AA ricaricabili) aggiuntivi ai 9V della pila, ho raddoppiato la potenza di fuoco in caso di necessità (tanto la scheda ha 2 capacitori che supportano fino a 35V). Arduino risente per voltaggi di questo ordine di grandezza?

Punto secondo: questo è un problema più dal lato software e di codice, ma già che ci siamo chiedo qua. Se poi è necessario, apro un post nell'apposita sezione

Ho copiato sopra il codice che ho utilizzato per far girare dei test sui motori DC. Tutto liscio, e già che qualcuno si è sbattuto per scriverlo, vorrei cannibalizzarne un parte per il mio progetto. Il problema nasce nella scrittura della libreria utilizzata, che contiene un errore

Praticamente, chi ha scritto il codice, ha imposto due versi di funzionamento
Clockwise (orario) = CW
CounterClockwise (antiorario) = CCW

Code: [Select]
#include <Robojax_L298N_DC_motor.h>
// motor 1 settings
#define IN1 12
#define IN2 13
#define ENA 11 // this pin must be PWM enabled pin

// motor 2 settings
#define IN3 8
#define IN4 7
#define ENB 9 // this pin must be PWM enabled pin

const int CCW = 2; // do not change
const int CW  = 1; // do not change


E procede ad usare queste due funzioni per far ruotare la ruota in un verso o nell'altro.

La cosa che ho capito è che quando aziona, ad esempio, il motore 1 in "CW"(motore a cui sono associati i pin 11,12,13) mette il pin 12 su "low" e il 13 su "high"

Il problema è che tale signore ha sbagliato per il motore 2, associando un pin del motore 1 (ha fatto pin 8 e 13) e quindi non gira.

Come faccio a modificare la libreria, dato che il codice non viene visualizzato?


fabpolli

Bhe ad Arduino arrivano comunqu i +5V poi se cerchi sul forum trovi che Arduino Uno può essere alimentato da varie fonti con differenti tensioni con caratteristich che devi rispettare, pena la distruzione della MCU e/o del regolatore di tension a bordo della scheda.
Tutte le librerie che usi sono scaricate sulla tua macchina. Se poi, come si consiglia, hai creato la cartella portable dentro la cartella dell'ide trovi tutto li, ti basta cercare il file Robojax_L298N_DC_motor.h e assieme a questo potresti trovare il relativo file con estnsione .c, se non c'è significa che tutto il codice è dentro il .h
Poi non ho mai afrontato la questione motori ecc, ma credo che di librerie già fatte scaricabili dal gestore librerie dell'IDE ve ne siano molte e non ci credo siano fallate, magari prima di avventurarti nella modifica alla libreria prova ad usarne altre disponibili.


fabpolli

#11
Mar 20, 2020, 05:28 pm Last Edit: Mar 20, 2020, 05:28 pm by fabpolli
Non conosco quella scheda ma avrà anch'essa un regolatore di tensone a bordo visto che accetta input di 12V e mette a disposizione un output di +5. Anche se i condensatori reggono fino a 35V non significa che tu possa fornire tale tensione alla scheda, anzi solitamente i condensatori sono dimensionati in modo da avere un uon margine di sicurezza.
Prima di fornire tensioni superiori a i +12 indicati mi docuenterei bene bene sul datasheeet della scheda onde evitare di friggerla

roberto1155

Nei vari progetti che ho realizato con la scheda L298N non ho mai utilizzato nessuna libreria. Qui trovi un valido esempio:

https://win.adrirobot.it/motor_driver/l298/L298N_Dual_H-Bridge_Motor_Controller.htm

uwefed

La tensione di alimentazione motore del L298 deve essere conforme col motore. Comunque dalle specifiche deve essere 2 V sopra la tensione della tensione di alimentazione della parte logica del L298 che presumo sono 5V. percui la alimentazione motore deve essere almeno 7V.
Una pila da 9V ha molto poca carica e percui si scarica velocemente e non puó dare grandi correnti.
Non so che motore vuoi alimentare.
Un motore da fermo assorbe molta corrente ( si calcola indicativamente con 10 volte la corrente nominale. L' alimentazione e il Driver devono fornire/reggere tale corrente.
Che motore stai usando?
Ciao Uwe

Go Up