Robot che si impenna :\

roxdragon: Adesso ho ponticellato EN A con EN B e fatto partire un cavo da EN B che va a finire nel pin digitale 9 quindi ricapitolando:

C'è un "piccolo" problema, gli enable dei 29x non sono per il PWM, servono per spegnere il ponte, applicare il pwm su quei pin porta a bassissima efficienza del ponte e surriscaldamento dello stesso. Il pwm va applicato a IN1+IN2 sfasato di 180°, stessa cosa per IN3 e IN4, usando il modo LAP, però occorre alzarne la frequenza fino ad almeno 4-5 kHz, per sfasare i due segnali PWM, uno per ogni motore, basta usare un inverter o un transistor. Chiunque afferma che i 298 funzionano con il PWM sul enable non ha capito nulla di come vanno usati quei ponti, questo vale anche per diverse motor shield commerciali che evidentemente sono state progettate da incompetenti. Se controlli il ponte utilizzando gli IN tramite pin digitali usi il 298 come se fosse un deviatore, è normale che i motori schizzano alla massima velocità, è come se li colleghi direttamente alla batteria invertendo i poli per cambiare il senso di rotazione.

pippo72: ciao. scusa ma non riesco a capire. Ma come alimenti il tutto quando dici

solo se stacco la batteria 12 volt la velocità mi varia...

Se togli la batteria dal morsetto 12v del L298N questo non dovrebbe proprio funzionare. Inoltre come alimenti l'arduino quando togli la batteria? Da dove arrivano i 5volts?

ciao pippo72

Alimento tutto questo cosi: Ho una batteria da 12V e questa va collegata all'alimentazione di arduino (cavo rotondo) e così ho arduino a 12v. Dal Vin di arduino faccio partire un filo che va ai 12V della L298N. La batteria alimenta arduino e arduino alimenta la l298n - Arduino quando tolgo la batteria lo alimento a 5v con USB.


@astrobeed scusa ma allora come dovrei variare la velocità...? non sto capendo ne i collegamenti, ne se posso dagli EN ! Potreste farmi un esempio pratico? Grazie mille...

ciao

Chiunque afferma che i 298 funzionano con il PWM sul enable non ha capito nulla di come vanno usati quei ponti

Sicuramente io sono tra quelli =( =( =(
A parziale discolpa confesso che mi sono fidato di informazioni prese googlando non mi ricordo neanche dove… :cold_sweat:

@roxdragon: EN1 e EN2 collegati ai 5volts, il resto come suggerito da astrobeed.

ciao
pippo72

roxdragon: @astrobeed scusa ma allora come dovrei variare la velocità...? non sto capendo ne i collegamenti, ne se posso dagli EN ! Potreste farmi un esempio pratico? Grazie mille...

Dagli enable no. Il PWM va applica agli input presi a coppie con lo stesso segnale sfasato di 180°, però devi alzare la frequenza del pwm, 490 Hz sono troppo pochi.

Se devo essere sincero. ..ho un po di confusione perché prima avevo collegato en a ed en b entrambi ai 5v ma nessun pin al pwm 9...risultato? Non funzionava.

Astrobeed che significa sfasato di 180 gradi? Potreste spiegarmi in parole più semplici come posso fare? Sono un po ignorante in materia. Grazie

Lo devi collegare come da immagine, enable A e enable B li puoi sia tenere fissi a 5V che pilotarli con un pin se vuoi spegnere il ponte. Input 1 e Input 2 vanno a due pin PWM, attenzione che in LAP mode col PWM al 50% (127) il motore è fermo, con il 100% (255) gira a piena velocità in un verso, con 0% 80) gira a piena velocità in senso opposto, con i vari valori intermedi regoli la velocità. Sensing A e Sensing B servono per il feedback corrente, se il tuo non lo prevede non è importante, se è previsto li puoi collegare a due ingressi analogici per vedere quanto assorbe il motore oppure li lasci scollegati. Ti rammento che per il LAP mode 490 Hz sono pochi, devi portare il PWM ad almeno 3-4 kHz. Non esiste altro modo, corretto, per utilizzare i ponti del tipo L29x, tutto il resto è solo fuffa :)

Ok ho collegato
IN 1 > PIN 3 ARDUINO
IN 2 > PIN 5 ARDUINO
IN 3 > PIN 4 ARDUINO
IN 4 > PIN 2 ARDUINO

EN A ed EN B ai 5v.

Adesso l’unico problema a quanto pare sia la programmazione…

Ti rammento che per il LAP mode 490 Hz sono pochi, devi portare il PWM ad almeno 3-4 kHz.

…e come??
Non ho capito come modificare la velocità con i PWM.

void Avanti(){
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);

}

così vado avanti con entrambi i motorini e tutto funziona, ma ripeto che parte ad alta velocità e si impenna…
vorrei fare tipo un for che va da 1 a 255 e aumentare piano piano la velocità…

roxdragon: Ok ho collegato IN 1 > PIN 3 ARDUINO IN 2 > PIN 5 ARDUINO IN 3 > PIN 4 ARDUINO IN 4 > PIN 2 ARDUINO

Ma lo hai almeno guardato lo schema che ti ho allegato ? Mi sa tanto di no.

Si ma ripeto che sono ignorante in materia... non l'ho capito bene anche se semplice... forse se non sbaglio ma non vorrei dire una cavolata... IN 1 e IN 2 devo collegarli insieme e fare uscire un solo filo che va collegato ad arduino? idem IN 3 e IN 4?

roxdragon: IN 1 e IN 2 devo collegarli insieme e fare uscire un solo filo che va collegato ad arduino? idem IN 3 e IN 4?

No, nello schema c'è in mezzo un inverter (74LS04) che serve per sfasare di 180° tra IN1 con IN2 e IN2 con IN4.

Ok io non ho questo inverter...puoi dirmi le caratteristiche che deve avere cosi lo vado a comprare? mi sa che quel modello dove sono io non lo hanno... magari al negozio gli elenco le caratteristiche e me lo da simile...

senno devo prenderlo su ebay...qual'è la via che funziona meglio? Grazie

roxdragon:
senno devo prenderlo su ebay…qual’è la via che funziona meglio?

Devi prendere questo:

http://www.ebay.it/itm/74LS04N-7404-Circuito-Integrato-/261611485526?pt=Componenti_elettronici_attivi&hash=item3ce9427956

Ok acquistato... dovrebbe arrivare la prossima settimana!... una volta montato il circuito ? come dovrei comportarmi con la programmazione? Domanda stupida: Ma come mai ci vuole l'inverter?

roxdragon:
come dovrei comportarmi con la programmazione?

Devi usare due pin PWM, uno per ogni motore, con analogwrite(127,n) il motore è fermo, con analogwrite(0,n) il motore gira al massimo in un senso, con analogwrite(255,n) gira al massimo nel verso opposto, con tutti gli altri valori cambi la velocità nei dei versi.

Domanda stupida: Ma come mai ci vuole l’inverter?

Per ottenere due pwm tra loro sfasati di 180°.

scusa ma non dovrebbe essere : analogWrite(PIN, 127) ? come mai la n come secondo parametro? I pin su arduino che devo avere a disposizione quindi sono due pwm e due digitali?! Grazie per la pazienza!

roxdragon: scusa ma non dovrebbe essere : analogWrite(PIN, 127) ? come mai la n come secondo parametro? I pin su arduino che devo avere a disposizione quindi sono due pwm e due digitali?!

Si è analogWrite(n,127), ho erroneamente invertito i due paramentri, n sta per numero pin. Come pin ti bastano due pwm, eventualmente un digitale aggiuntivo se desideri poter spegnere il ponte, lo colleghi ai due enable in parallelo, altrimenti li colleghi tutti e due fissi al +5V.

Perfetto funziona...ora faccio lo sketch se ho dubbi scrivo...grazie :)

Come non detto…scusate il doppio post…
Avanti riesco a farlo…sia avanti, avanti destra ecc…
ma indietro non riesco proprio…se ne va sempre avanti…

void Avanti(){
  for(int i = 130; i < 250; i++){
    delay(10);
  analogWrite(3,i);
  analogWrite(5,i);
  }

}

void AvDestra(){
  
   analogWrite(3,140);
}

void AvSinistra(){

   analogWrite(5,140);


}

void Indietro(){
//  for(int i = 0; i < 127; i++){
 //   delay(10);
  analogWrite(3,100);
  analogWrite(5,200);
 // }

}

astrobeed help me :frowning:

Toglimi una curiosità… dall’inverter devono uscire solo due fili che vanno ad arduino PWM giusto?
io su arduino ho solo questi due fili ai pin 3 e 5 PWM…
la modalità avanti funziona alla perfezione…

EDIT: provato con

 void Avanti(){

  analogWrite(3,127);
  analogWrite(5,127);
  }

i motori girano a metà velocità… come se la velocità di avanti partisse da 0 a 255… non esiste indietro :\

Ti rammento che per il LAP mode 490 Hz sono pochi, devi portare il PWM ad almeno 3-4 kHz.

Come si fa?
dimentico / sbaglio qualcosa? help me… sarò quasi arrivato al traguardo :frowning:

Allego una foto del circuito. Scusa se l’ho disegnato così…spero che si capisce…
http://postimg.org/image/5fet5ugyn/
poi EN A e EN B ai 5v fissi…
sono questi i collegamenti che ho fatto…

roxdragon: Allego una foto del circuito. Scusa se l'ho disegnato così...spero che si capisce... sono questi i collegamenti che ho fatto...

Il collegamento è giusto, però se non aumenti la frequenza del PWM rischi di bruciare il ponte, puoi farlo tramite la libreria timer1., che ti aumenta anche la risoluzione del pwm portandola a 10 bit (0-1023).

Ma quindi la retromarcia non funziona per quello?

Nell'esempio vedo:

void setup()
{
  pinMode(10, OUTPUT);
  Timer1.initialize(500000);         // initialize timer1, and set a 1/2 second period
  Timer1.pwm(9, 512);                // setup pwm on pin 9, 50% duty cycle
  Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt
}

void callback()
{
  digitalWrite(10, digitalRead(10) ^ 1);
}

void loop()
{
  // your program here...
}

...non capisco come implementarlo nel mio codice, nella funzione

void Indietro() {


}

La lib l'ho scaricata e importata già! @astrobeed cortesemente se mi spiegheresti come risolvere questo problema della retromarcia, perchè vedo che qui sul forum non sei molto presente... così leggo e riesco a risolvere... grazie ancora!