Arduenoveotto - prova scheda con L298 incorporato..

Ciao a tutti! avendo un L298N mi sono detto.. perchè lasciarlo a marcire?
Con uno già ci avevo fatto un driver per motori, quello classico proposto in varie forme in rete, io avevo copiato quello della seeedstudio.
Allora vorrei provare, invece di fare una cosa modulare, a fare una scheda con l'Atmega328P, l'L298N, uscita per due motori DC, ma anche connettore per un motore stepper 4 poli, completo di eventuale collegamento per 2 potenziometri (in caso di controllo manuale dei 2DC), lettura encoder, e lettura anche dei 2 pin di current sense. In più ovviamente porto fuori i pin che avanzano che non si sa mai...

Sto cominciando a fare una bozza di scheda, che, vista la quantità di collegamenti, sarà doppia faccia (la mia prima volta...), quindi comincia ad essere difficilotto...
Accetto molti consigli, ovviamente, e magari se sono già state fatte schede simili, gli darei volentieri una studiata.

allego lo schema fino ad ora, che conterrà sicuramente molti sbagli, quindi NON UTILIZZATELO COME RIFERIMENTO! (non si sa mai..)

Per adesso ho provato solo a portare i segnali dal 328 al 298 e viceversa, per fare una bozza di instradamento. Come controllo sto provando ad usare la tecnica del tristate-pin, usando un transistor npn come descritto qui..si risparmiano 2 pin..
Consigli? Idee?

Inoltre pensavo di usare i PWM 9 e 10, eliminando il prescale del timer 1 (sto provando in questi giorni, è una figata!!) ed utilizzando il modo Phase and Frequency correct-mode, migliore per pilotare motori. Con una risoluzione di 400 punti, se non ricordo male, ottengo 20kHz, fino ad un max di risoluzione di 4000 punti e 2kHz.

Comunque, la strada è lunga... aspetto volentieri le correzioni sullo schema, se qualcuno ha il piacere di dargli un'occhiata.
Grazie, Davide.

EDIT: Ho cancellato gli allegati in quanto errati come concetto, quindi assolutamente non distribuibili. Grazie Astro.

Ciao dab, che funzione hanno R9 e R10 in quella particolare configurazione? sembrerebbero delle pull-up per i pin del mega, ma se così fosse ci si aspetterebbe dei transistor PNP...

Sullo schema mancano tutti i pallini dei punti di giunzione delle net, molte net passano sovrapposte a dei pin col rischio di trovarsi giunzioni indesiderate.
Penso di averlo detto veramente più di 1000 volte, tra questo forum e tutti gli altri che frequento, che gli IC della serie L29x non si deve applicare il PWM sull'Enable, oltre a perdere fino il 50% dell'efficienza c'è un elevato rischio di innescare il famigerato "effetto petardo" con la distruzione del 298.

In effetti il disegno è terribile a vedersi, io direi intanto di vedere la parte circuitale, poi magari gliela do' io una mano a dab a sistemare il disegno :wink:
questa dell'effetto petardo è estremamente fantasiosa :stuck_out_tongue_closed_eyes:

Ciao M, si sono delle pullup per permettere ad ognuno dei due segnali di rimanere alti quando si imposta il pin come INPUT, in maniera da utilizzare il ponte H come un freno-motore. la conformazione del "tristate-switch" è questa: e l'ho presa da qui, come dicevo anche nel post precedente. R9 del mio circuito sarebbe in questa immagine R2. R10 è per l'altra coppia del secondo ponte H.
Messa in "standalone" e oscilloscopio alla mano il "tristate-switch" funziona, l'ho fatto commutare fino a 30kHz. in realtà non ho certezze di come si comporta con l'L298 attaccato e funzionante.
Per esempio, ciò che mi preoccupa è la funzione di freno-motore. Praticamente si setta il pin (nel disegno il pin 2 di jp1) come INPUT, quindi quella R da 10K fa da pull-up e mette a +5V Input1, la stessa cosa succede a Input2, quindi il ponte H fa frenare il motore. così dice... vi risulta? PERÒ... se il motore sta andando bello spedito, al frenare crea la sua bella corrente, e dove va a finire questa?

ok, chiaro, però sulla storia del petardo io non trascurerei il consiglio di Astro, io so che lui di motori ne muove quintali/die, quindi certamente sa quello che dice; d'altra parte, almeno nella pagina linkata, non si parla di L298, quindi non è in discussione il tri-state ma semplicemente il pilotaggio PWM dell'enable.

Ciao Astro, grazie anche a te dell'intervento. Si il disegno dello schema l'ho fatto di fretta, e comunque non sono praticissimo..

Per il PWM sull'enable era una cosa che mi chiedevo in effetti... in giro si trovano pilotati in entrambi i modi, e li vendono anche circuiti con il PWM sul pin enable. (fidarsi cecamente...che sbaglio...)

Ok, allora assodato che quindi per pilotare 2 ponti H ci vogliono per forza 6 pin, di cui 4 PWM, il risparmio di due pin e l'utilizzo del tristate-switch se ne va a belle donzelle...
in compenso ho imparato una cosa in più..

Quindi, cancello subito l'allegato nel primo post e riprovo.
Una cosa: ma se non si riesce ad evitare nel disegno dello schema l'incrocio delle piste, che si fa si creano dei "collegamenti" nominali, tipo quelli di Vcc e GND?

l'incrocio delle piste non crea alcun problema, devi usare i tondini quando sono fisicamente collegate, credo che Astro si riferisca al fatto che hai fatto passare piste sopra i pin dei componenti, in quel caso il collegamento si stabilisce automaticamente, anche senza tondino.
Il metodo della denominazione delle piste (appunto tipo Vcc) funziona benissimo, io ne faccio largo uso; nel mio recente progetto del capacimetro TTL (uno schema che occupa 2 pagine A4 :grin:) mi sono risparmiato almeno una cinquantina di piste; se usi correttamente le label il disegno diventa più snello e facile da leggere; in ogni caso, salvo che non siano effettivamente vicinissimi, ogni punto GND dovrebbe avere il suo simboletto, e già ne togli di roba da lì :wink:

EDIT: @ DAB il "grazie Astro" ora puoi darglielo col karma $)

dab77:
Per il PWM sull'enable era una cosa che mi chiedevo in effetti... in giro si trovano pilotati in entrambi i modi, e li vendono anche circuiti con il PWM sul pin enable. (fidarsi cecamente...che sbaglio...)

Se hai cinque minuti da impiegare bene leggi qui.

Ok, allora assodato che quindi per pilotare 2 ponti H ci vogliono per forza 6 pin, di cui 4 PWM, il risparmio di due pin e l'utilizzo del tristate-switch se ne va a belle

Per il PWM ti conviene usare il modo LAP, basta che aggiungi un doppio inverter e ti bastano solo due pin PWM e non quattro, però devi tenere la frequenza come minimo a 10 kHz altrimenti funziona male per tutta una serie di motivi legati al fatto che i motori sono carichi induttivi.

Una cosa: ma se non si riesce ad evitare nel disegno dello schema l'incrocio delle piste, che si fa si creano dei "collegamenti" nominali, tipo quelli di Vcc e GND?

Le piste puoi incrociarle come ti pare, però devi evitare assolutamente di passare sopra i punti di contatto dei pin dei componenti, tutti i punti di giunzione, reali, tra net devono avere il pallino, che Eagle solitamente mette in automatico, se non viene messo lo devi aggiungere manualmente.
Se mancano i pallini rischi di trovarti con delle net scollegate sul pcb e, ovviamente, il loro mancato sbroglio.

p.s. il termine "effetto petardo" è nato diversi anni fa e non l'ho coniato io, diciamo che è stato uno che ha speso un sacco di Euro per i 298 e ne ha fatto una vera e propria strage sia perché utilizzava motori con dei condensatori interni, molto insidiosi, sia perché usava l'enable per il pwm.

@dab77
appoggio pienamente astrobeed per la storia del petardo.... per i segnali DIR e PWM lo schema che ti consiglio è in allegato.
attenzione ai diodi, ti sconsiglio 1N4004 poichè non sono adatti per questa applicazione.... io utilizzerei qualcosa del tipo fast recovery time BYV27 o superiori.
gli invertitori a tran potrebbero funzionare anche se io li sostituerei con delle porte invertenti magari a trigger schmitt tipo CD40106... /CD4093
inoltre sulle uscite "sense" esce un putiferio .... filtra prima di immettere i segnali sull'adc.

PS: perchè non pensi pure alla gestione di 2 encoder..(magari attraverso l'impiego di chip qu-enc esterni) così da prevedere una controllo a loop chiuso con PID?

KIERUNEK = direzione
PWM = pwm :slight_smile:

ciao

cyclone:
@dab77
appoggio pienamente astrobeed per la storia del petardo.... per i segnali DIR e PWM lo schema che ti consiglio è in allegato.
attenzione ai diodi, ti sconsiglio 1N4004 poichè non sono adatti per questa applicazione.... io utilizzerei qualcosa del tipo fast recovery time BYV27 o superiori.
gli invertitori a tran potrebbero funzionare anche se io li sostituerei con delle porte invertenti magari a trigger schmitt tipo CD40106... /CD4093
inoltre sulle uscite "sense" esce un putiferio .... filtra prima di immettere i segnali sull'adc.

PS: perchè non pensi pure alla gestione di 2 encoder..(magari attraverso l'impiego di chip qu-enc esterni) così da prevedere una controllo a loop chiuso con PID?

KIERUNEK = direzione
PWM = pwm :slight_smile:

ciao

Ciao, allora gli 1N4004 in realtà li ho usati solo come simboli, ho dimenticato di mettere il nome giusto. sorry..
Poi, sto facendo una prova con un'altra schedina che avevo pronta con l'L298N, e sto utilizzando come porta NOT un MC74HC14 che avevo.
Le due direzioni funzionano come spiegato da Astro. (grazie del link) in modalità LAP.
L'unica cosa, Astro, è che così non puoi usare la funzione "freno", giusto?
invece nel disegno che hai messo tu, Cyclone, non riesco a capire se si può.
Riguardo agli encoder, l'avevo scritto nel primo post, che era il punto dove volevo arrivare, ma per gradi.

Allora, carta e matita alla mano, mi pare di capire che con quelle logiche (suggerite da cyclone)con dir HIGH ottengo In2 sempre LOW e In1 PWM.
con dir LOW il contrario. indi anche qui niente funzione "freno", che si ottiene con entrambi gli input alti.

EDIT:
In realtà il datasheet dell'L298 dice che la funzione "freno" avviene con EN alto e in1=in2, quindi sia alti che bassi...
a questo punto tornando al più semplice metodo LAP, si potrebbe ipotizzare una resistenza di pulldown su entrambi gli input, di modo che se si imposta il canale usato come PWM come un INPUT, l'L298 vede entrambi gli ingressi come LOW?

nello schema che ho postato il freno non può essere implementato...... hai solo direzione e pwm,
ma ti assicuro che se implementi il controllore PID il freno non ti serve a nulla, anzi non lo devi neppure nominare :slight_smile:

e come fai a tenere il motore in posizione (fermo) se hai un carico applicato? ovviamente escludendo per ora freni magnetici...

E' il controllo PID (Proporzionale-Integrale-Derivativo) che agendo opportunamente sul PWM e sulla Direzione fornisce la giusta regolazione affinchè il motore rimanga bloccato, nel caso che la velocità sia impostata a zero, o mantenga la velocità costante al variare del carico applicato sull'asse.

il freno non si usa assolutamente in questi casi.... peggiorerebbe il tutto con catastrofi mai viste !

non lo so se sono daccordo..
non limitiamoci solo alle ruote motrici. immagina per esempio che io ho un motore attaccato ad un tamburo che arrotola una corda con 10kg di peso "appeso".
vado su, vado giù, poi devo tenere il peso fermo per 3 minuti. il PID diventa scemo se deve fare su, giù,su, giù continuamente per tenere la posizione.
Sto solo ragionandoci su, perchè in effetti nelle CNC basta il controllo del PID, questo lo so.
Però per lavoro io utilizzo paranchi controllati da computer, e quando questi vanno in stop, interviene il freno magnetico, così da far riposare il driver..
certo, bisognerebbe vedere questo tipo di frenatura quanto tiene e quanto conviene rispetto all'applicazione..

In quel caso (paranchi) meglio usare gli elettropermanenti e non gli elettrofreni, perchè più sicuri.... in termini protezionistici.
cmq .... per realizzare un motion control completo è chiaro che il solo PID (nudo e crudo) non basta, anche perchè nel caso del controllo di posizione con andamento trapezoidale della velocità la cosa si complica e non di poco.

non ho mai parlato di elettrofreni con frenata attiva, che ovviamente non sono sicuri...
Comunque, per fare esperimenti ridisegno la scheda con 3 pin di controllo per ogni ponte, così poi capisco se serve o no 'sta benedetta funzione di brake..

dab77:
non ho mai parlato di elettrofreni con frenata attiva, che ovviamente non sono sicuri...
Comunque, per fare esperimenti ridisegno la scheda con 3 pin di controllo per ogni ponte, così poi capisco se serve o no 'sta benedetta funzione di brake..

Nel caso che citi il brake non serve quasi a nulla, difficilmente il motore starà fermo da solo in quello condizioni, serve una vera frenatura elettronica che ottieni proprio grazie al pid controllo posizione e alla modalità LAP che ti permette il controllo su tutti e quattro i quadranti.
Comunque se vuoi ottenere lo stesso il freno dei 298 basta che usi delle porte NAND con three state per pilotare gli input e delle pull up, quando vuoi frenare metti le NAND in condizione di alta impedenza ed il gioco è fatto.

Eccoci. dopo aver fatto le dovute prove per capire cosa veramente si ottiene 'frenando' il motore dal ponte H, comprendo che raramente può servire questa funzione.
però se si hanno pin liberi tanto vale averla a disposizione. Ho provato ad usare delle pull-up sui pin di controllo, ma non va. ho provato sia con 10k ohm, che con 1k, impostando il pin di controllo di arduino come INPUT, il motore invece di fermarsi continua ad andare in un verso al massimo. Siccome il pin di controllo passa per una porta NOT e da li si sdoppia sui due pin di controllo del ponte, immagino che alla porta NOT non piaccia molto se gli metto le pull-up.
A questo punto trovo molto più semplice usare 6 pin dell'Atmega328p.
Per gli encoder invece conto di usare gli interrupt in questa prima bozza (sapendo di scontrarmi con le limitate risorse del chip... invece cosa consigliate per la lettura dell'encoder esterna all'Atmega?), ma ho visto sul playground un sacco di modi per leggere e contare... ce n'è qualcuno da preferire? inoltre per due encoder (quindi doppia lettura A,B..) riesco a cavarmela con due soli interrupt e due pin normali, o devo attivare altri due interrupt?

Grazie, Davide.

EDIT: Ah, dimenticavo, ho preso un pò di questi sensori di quadratua per provare: AEDR-8300 e realizzerò le ruote dentate con la fresa CNC. Qualcuno ha già provato o conosce quei moduli? il prezzo e le specifiche promettono bene (considerando il livello hobbistico, ovviamente..)