L298N Motor Driver

Ho recentemente acquistato una di queste

basata sul doppio ponte H omonimo.
Ora, il mio dubbio è questo: volendo risparmiare due pin sulla Ethernet Shield, secondo voi è sconsigliabile collegare direttamente i due pin del modulo, EnableA ed EnableB, direttamente al pin 5v dell' Arduino in modo da evitare di usare due pin di esso che cambiano raramente di stato (da HIGH a LOW)?
Grazie in anticipo, MrJacko

Puoi farlo, ma non direttamente. Meglio inserire uno o due resistori di pull-up da 4k7 ohm.

Ma in questo modo non vado a interferire con la tensione in uscita sui 4 Ouput del modulo?
e in tal caso, a cosa andrei incontro non interponendo una resistenza?

Gli Enable sono gli ingressi di porte logiche e non hanno alcuna influenza con le tensioni in uscita (se non quella di attivarle/disattivarle).

In pratica molti non usano i resistori di pull up ma io li consiglio: supponi che nel IC ci sia un problema (un cortocircuito) nell’ingresso della porta logica, tutta la corrente disponibile si scaricherebbe sul quel corto, mentre se c’è il resistore la corrente sarebbe limitata.

Veramente stando a quanto ho capito, attraverso i pin Enable si può controllare la tensione in uscita sui corrispettivi pin di Output..sbaglio?

...attraverso i pin Enable si può controllare la tensione in uscita sui corrispettivi pin di Output...

Vuole intendere questo (vedi fig. 6):

Ven = H C = H ; D = L Forward
C = L ; D = H Reverse
C = D Fast Motor Stop

Ven = L C = X ; D = X Free Running
Motor Stop

Come dice cyberhs Se colleghi ENABLE direttamente a HIGH non puoi far frenare il motore per inerzia ma lo freni usandolo come generatore e percui molto velocemente.

Ciao Uwe

A ecco, ora mi è tutto chiaro! 8)
Vedrò di "risparmiare" pin altrove :stuck_out_tongue:

Scusate l'intromissione ma perchè l'uso di un segnale pwm sui pin enable è sconsigliato? Il problema sarebbe l'elevata frequenza di lavoro dei transistor o delle porte logiche?

Non so dove tu abbia letto che è sconsigliato, sui pin Enable è infatti possibili, attraverso l'uso di un segnale PWM controllare la tensione in uscita sui pin di Output

Per tornare al discorso, per risparmiare due pin potrei usare una OR..in questo modo posso fare che se in un pin di Input vi è tensione si attiva il corrispettivo pin di Enable, giusto?
Non so se sono stato chiaro :smiley:

MrJacko:
Non so dove tu abbia letto che è sconsigliato, sui pin Enable è infatti possibili, attraverso l'uso di un segnale PWM controllare la tensione in uscita sui pin di Output

Si può fare ma a lungo andare si frigge il Chip, il tema è stato trattato una miriade di volte... provate a cercare :slight_smile:

Per controllare la velocità di alcuni eventuali motori DC quindi conviene usare dei semplici trimmer?
Se sì, conviene porli tra l'Arduino e l' L298N o tra esso e i motori DC? (penso la prima :P)

EDIT: ho dei motori DC che vanno a 6v quindi pensavo di collegarne a coppie di due in serie, ora però visto che la batteria è da oltre 12V non è che rischio di bruciarli? conviene che metto alcuni diodi tra la batteria e L298N o già esso mi abbassa un pò la tensione in uscita? (sono 4 motori, ognuno assrobe circa 150mA)

Dimentica di collegare 2 motori in serie perché hai un tensione troppo grande.
Dimentica di usare un trimmer per regolare la velocitá dei motori.
Ciao Uwe

E allora che soluzione mi consigli?
P.S. perchè no ai trimmer?

perché lo fondi se messo tra L298 e motore oppure non funzionano se messo tra Arduino e L298 perché pilotato digitalmente..
Ciao Uwe

Con digitalmente intendi nel caso usassi segnali PWM?
Altra domanda: come risolvo per l'alimentazione dei motori DC? abbasso di poco la tensione con qualche diodo sul catodo della batteria?

Ciao raga
mi intrometto perche' non riesco a trovare una soluzione
ho arduino mega
ethernet shield
L298N Arduino Motor Driver Shield
il problema e' che l'ethernet shield usa gli stessi pin di comunicazione del L298N Arduino Motor Driver Shield, quindi non riesco a comandare i motori.
L298N Arduino Motor Driver Shield prende corrente da una batteria esterna
vi do' anche un code
Sto pensando di collegare il motor shield con dei cavi, cioe' non sopra la scheda ethernet ma non riesco a trovare uno schema per capire quali pin del motor shield comunicano con arduino mega.
qualunque aiuto e' benvenuto
grazie

//Motor  RX;
int dir1PinA = 13;// OK
int dir2PinA = 12;// OK FWD
int speedPinA = A0;

//motor LX;
int dir1PinB = 9;
int dir2PinB = 50;// FWD
int speedPinB = A1;



void setup() {
  
  Serial.begin(9600);
  
  pinMode(dir2PinA,OUTPUT);
  

  pinMode (dir1PinA, OUTPUT);
  
  
  pinMode (speedPinA, OUTPUT);
 
  pinMode (dir1PinB, OUTPUT);
 
  pinMode (dir2PinB, OUTPUT);

  pinMode (speedPinB, OUTPUT);


}


//----------------motors functions

void forward()
{
  
  
  digitalWrite (dir1PinA, LOW);// right motor
  digitalWrite (dir2PinA, LOW);
   // lx motor
  digitalWrite (dir1PinB, LOW);
  digitalWrite (dir2PinB, HIGH);
  analogWrite(speedPinA, 0);
  analogWrite(speedPinB, 1023);
  //delay(10);

}

void backward()
{

  analogWrite(speedPinA, 1024);
  analogWrite(speedPinB, 1024);
  digitalWrite (dir1PinA, HIGH);
  digitalWrite (dir2PinA, LOW);
  digitalWrite (dir1PinB, HIGH);
  digitalWrite (dir2PinB, LOW);
  //delay(10);
}


void left()
{
  analogWrite(speedPinA, 1024);
  analogWrite(speedPinB, 0);
  digitalWrite (dir1PinA, LOW);
  digitalWrite (dir2PinA, HIGH);
  digitalWrite (dir1PinB, LOW);
  digitalWrite (dir2PinB, LOW);
  //delay(10);
}

void right()
{
  analogWrite(speedPinA, 0);
  analogWrite(speedPinB, 1024);
  digitalWrite (dir1PinA, LOW);
  digitalWrite (dir2PinA, LOW);
  digitalWrite (dir1PinB, LOW);
  digitalWrite (dir2PinB, HIGH);
  //delay(10);
}

void stopM()
{
  analogWrite(speedPinA, 0);
  analogWrite(speedPinB, 0);
  //digitalWrite (dir1PinA, LOW);
  //digitalWrite (dir2PinA, LOW);
  //digitalWrite (dir1PinB, LOW);
  //digitalWrite (dir2PinB, LOW);
  //delay(10);
}

void rightBACK()// ----------------------BACK RIGHT
{
  analogWrite(speedPinA, 0);
  analogWrite(speedPinB, 1024);
  digitalWrite (dir1PinA, LOW);
  digitalWrite (dir2PinA, LOW);
  digitalWrite (dir1PinB, HIGH);
  digitalWrite (dir2PinB, LOW);
  //delay(10);
}

void leftBACK() //-----------------------BACK LEFT
{
  analogWrite(speedPinA, 1024);
  analogWrite(speedPinB, 0);
  digitalWrite (dir1PinA, HIGH);
  digitalWrite (dir2PinA, LOW);
  digitalWrite (dir1PinB, LOW);
  digitalWrite (dir2PinB, LOW);
  //delay(10);
}

//-----------------end motors function------------------------

void loop() {
  // put your main code here, to run repeatedly: 
  int sensorValue1 = digitalRead(dir1PinA);
  int sensorValue2 = digitalRead(dir2PinA);// ON
  int sensorValue3 = analogRead(speedPinA);// 1023
  int sensorValue4 = digitalRead(dir1PinB);
  int sensorValue5 = digitalRead(dir2PinB);// ON
  int sensorValue6 = analogRead(speedPinB);// 1023
  
  
  forward();
  Serial.print(sensorValue1);
  Serial.print(sensorValue2);
  Serial.print(sensorValue4);
  Serial.print(sensorValue5);
  
  Serial.print(" / ");
  Serial.print(sensorValue3, DEC);
  Serial.print(" / ");
  Serial.println(sensorValue6, DEC);
  delay(1000);


}

L'Ethernet Shield usa i pin 4 (SD Card) e 10 (Ethernet), oltre alla comunicazione SPI.

Non mi sembra che ci sia conflitto.

Qualcuno mi può aiutare?? Mi dite solo che sbaglio ma non dove sbaglio e come risolvere!!