Semplice Convertitore D/A con ARDUINO duemilanove : problemi di overshoot

Spiegare nei minimi dettagli lo scopo, e l' utilizzo del circuito mi risulta impossibile perché dovrei riassumere qui in 2 righe le prime 80 pagine della mia tesi.
Il circuito alla fin fine è stato postato inutilmente perché è ormai chiaro che non è quello il problema.
I picchi di tensione sono presenti collegandomi DIRETTAMENTE ad Arduino, quindi i mosfet non centrano un tubo.
Il mio sospetto è che siano degli artefatti dovuti al campionamento dell' oscilloscopio digitale.
Però l'indagine continua ... :roll_eyes: :roll_eyes: :roll_eyes:

dr.benway:
Spiegare nei minimi dettagli lo scopo, e l' utilizzo del circuito mi risulta impossibile perché dovrei riassumere qui in 2 righe le prime 80 pagine della mia tesi.

allora fai vedere quelle 80 pagine o se non vuoi mostrarla in pubblic spediscimela in PM o via Email. Il mio indirizzo email lo trovi nel mio profilo, basta cliccare sul mio utente.

dr.benway:
Il circuito alla fin fine è stato postato inutilmente perché è ormai chiaro che non è quello il problema.

Ne sei sicuro al 100%?

dr.benway:
I picchi di tensione sono presenti collegandomi DIRETTAMENTE ad Arduino, quindi i mosfet non centrano un tubo.
Il mio sospetto è che siano degli artefatti dovuti al campionamento dell' oscilloscopio digitale.

Ogni oscilloscopio fornisce un segnale rettangolare per calibrare la sonda. Misurando quel segnale Ti da anche quei picchi o hai un segnale pulito?

Ciao Uwe

dr.benway:
Il mio sospetto è che siano degli artefatti dovuti al campionamento dell' oscilloscopio digitale.

Guarda facciamo così, pubblica lo sketch o quelle poche righe che utilizzi per generare il treno di onde quadre, lo faccio girare anch'io sul mio arduino e ti mando una schermata del mio oscilloscopio. Se fosse un problema di campionamento è più probabile che non vedresti il picco o comunque non tutta la sua dinamica.

Ciao

Ogni oscilloscopio fornisce un segnale rettangolare per calibrare la sonda. Misurando quel segnale Ti da anche quei picchi o hai un segnale pulito?

E' la prima cosa che faccio ogni volta quando collego la sonda.

Guarda facciamo così, pubblica lo sketch o quelle poche righe che utilizzi per generare il treno di onde quadre, lo faccio girare anch'io sul mio arduino e ti mando una schermata del mio oscilloscopio. Se fosse un problema di campionamento è più probabile che non vedresti il picco o comunque non tutta la sua dinamica.

Saresti molto gentile e ti ringrazio anticipatamente.
Prima lanci questo sketch (programmi la ROM)

/*
 * EEPROM Write
 *
 * Stores values read from analog input 0 into the EEPROM.
 * These values will stay in the EEPROM when the board is
 * turned off and may be retrieved later by another sketch.
 */

#include <EEPROM.h>


void setup()
{
}
int write = 1;
void loop()
{
  if (write == 1)
  {
EEPROM.write(    0 , B10000000 );
EEPROM.write(    1 , B10000000 );
EEPROM.write(    2 , B10001010 );
EEPROM.write(    3 , B10001010 );
EEPROM.write(    4 , B10101000 );
EEPROM.write(    5 , B10101000 );
EEPROM.write(    6 , B10100010 );
EEPROM.write(    7 , B10100010 );
EEPROM.write(    8 , B10100010 );
EEPROM.write(    9 , B10100010 );
EEPROM.write(   10 , B10101000 );
EEPROM.write(   11 , B10101000 );
EEPROM.write(   12 , B10001010 );
EEPROM.write(   13 , B10001010 );
EEPROM.write(   14 , B10000000 );
EEPROM.write(   15 , B10000000 );
EEPROM.write(   16 , B00101010 );
EEPROM.write(   17 , B00101010 );
EEPROM.write(   18 , B00100000 );
EEPROM.write(   19 , B00100000 );
EEPROM.write(   20 , B00000010 );
EEPROM.write(   21 , B00000010 );
EEPROM.write(   22 , B00001000 );
EEPROM.write(   23 , B00001000 );
EEPROM.write(   24 , B00001000 );
EEPROM.write(   25 , B00001000 );
EEPROM.write(   26 , B00000010 );
EEPROM.write(   27 , B00000010 );
EEPROM.write(   28 , B00100000 );
EEPROM.write(   29 , B00100000 );
EEPROM.write(   30 , B00101010 );
EEPROM.write(   31 , B00101010 );
  }
 
 write = 0;
 


}

poi carichi questo

#include <EEPROM.h>
int addr = 0;
int k=0;


void setup()
{
 
  DDRD = B11111111; //tutti i pin sono uscite
 
}

void loop()
{
  while (k<100)
{
 PORTD = EEPROM.read(addr);
   
    ++ addr;
   
    if (addr > 31)
{addr = 0;}

}

  }

Poi colleghi la sonda tra digital 7 e gnd come vedi nella foto.

Dovresti avere l'onda quadra di circa 10 kHz che sfarfalla (lo sfarfallamento è dovuto al codice, che devo riscrivere, però adesso ho altre priorità ...).

Il mio sospetto è che le commutazioni di Arduino sono troppo rapide, la sonda che uso introduce un carico induttivo ( il cavetto di massa a banana) e quindi si crea il picco.

Grazie ancora.

Giorgio.

Ti allego le schermate del mio oscilloscopio, i fronti di salita sono molto rapidi, circa 20ns, quindi col mio oscilloscopio da 100MHz potrei perdermi qualcosina.

Con una misurazione direttamente sui pin del micro (con la molla e NON il coccodrillo) puoi vedere che l'overshoot è del 16.8% (Vmax raggiunge 6V)

Con una misurazione tramite un cavetto jumper di 10cm collegato ai pin header femmina, utilizzando il coccodrillo per GND puoi vedere che l'overshoot è del 31.7%

Questo a prova che le misurazione a volte sono ingannevoli ed influiscono su quello che si vede a schermo che potrebbe non essere la realtà.

La sovraelongazione dura molto poco, 20ns rispetto a 0.1ms del periodo della tua onda, che problemi ti crea? E' normale quando si hanno segnali in frequenza

Ciao

overshoot molla.bmp (219 KB)

overshoot.bmp (219 KB)

Se imposti il limite alla banda (es. 20 MHz) del canale vedrai che non vedi più nessun picchio.. per catturare eventi così veloci ci vuole una grande banda. Così si spiega perché quel vecchio oscilloscopio dell'immagine che cercavi di imitare non ne presenta..

Ci sono diverse accortezze per limitare gli overshoot ad ogni modo

Ciao

Ti allego le schermate del mio oscilloscopio, i fronti di salita sono molto rapidi, circa 20ns, quindi col mio oscilloscopio da 100MHz potrei perdermi qualcosina.

Ti ringrazio infinitamente per la disponibilità e per il tempo prezioso che mi hai dedicato.

Quindi, mi sembra di concludere che, se disponessi di una maggiore banda (forse c'è qualche setting da fare sull' agilent) e magari di una sonda decente (senza il marchio TNT e magari dotata di molla), dovrei ottenere la lettura tanto sperata :roll_eyes: :roll_eyes:

Il collo di bottiglia sembra essere questo, poichè nonostante la topologia discutibile del circuito, nonostante l'operazionale scarsissimo, in uscita ottengo la mia onesta sinusoide "quadrettata" con un picco per ogni transizione.
I dovrei fare un' analisi spettrale di questa sinusoide a gradini e stimare la larghezza di banda utile.
Però gli overshoots (dovrebbero essere 8 per ogni periodo) mi sporcano terribilmente il segnale

Bello il tuo scope. Pensavo di prendermi anch'io un Rigol. Penso che come rapporto qualità prezzo siano imbattibili

Grazie ancora, vi tengo aggiornati

dr.benway:
in uscita ottengo la mia onesta sinusoide "quadrettata" con un picco per ogni transizione.

Che non possono essere causati da quelli in out da Arduino, ed è più che normale la loro presenza su una porta logica che commuta stato in meno di 10 ns, visto che sono ininfluenti sul controllo del mos.
Aggiungiamo l'errata interpretazione di quanto mostra il DSO, un vetusto Agilent da solo 200 msps, l'uso di tecniche di misura decisamente deficitarie ed ecco che vedi quello che non c'è, o meglio lo enfatizzi oltre misura.
Per curiosità, in cosa ti stai laureando ?

Quindi, mi sembra di concludere che, se disponessi di una maggiore banda (forse c'è qualche setting da fare sull' agilent) e magari di una sonda decente (senza il marchio TNT e magari dotata di molla), dovrei ottenere la lettura tanto sperata

Al contrario, più banda hai meglio vedi eventi veloci, con un oscilloscopio con banda maggiore vedresti anche gli overshoot ancora più brevi. Quello che ti dicevo era proprio il contrario:

poca banda = gli overshoot spariscono dallo schermo
tanta banda = vedi meglio la realtà (ci sono anche tanti altri fattori ovviamente, è una semplificazione massima)

L'immagine che hai trovato su internet evidentemente era presa da un oscilloscopio con poca banda.

La sonda è importante, specialmente la connessione a GND deve essere la più breve possibile. Con una sonda di bassa qualità potresti vedere overshoot enfatizzati ma irreali o addirittura non vederli (sonde con poca banda passante), sta a te capire i limiti dei tuoi strumenti e delle tue misurazioni.

Il mio oscilloscopio è un Rigol DS1102 pagato sui 400€ nuovo di zecca

Ciao

Per curiosità, in cosa ti stai laureando ?

Ing. elettronica / telecomunicazioni.
Diciamo che il problema di fondo è l'aver azzardato la misura su un prototipo reale.
Prima di arrivare fin qui ho simulato tutto, prima in ambiente matlab e poi con pspice.
La maggior parte dei miei colleghi si ferma sulle simulazioni, quindi la prova su strada la vedo come una sfida.

Inoltre l'aver utilizzato Arduino, seppur con tante limitazioni, per "prototipare" un progetto simile, mi regala molte soddisfazioni.

dr.benway:
Ing. elettronica / telecomunicazioni.
Diciamo che il problema di fondo è l'aver azzardato la misura su un prototipo reale.

Diciamo che il problema di fondo è che non vi hanno mai spiegato come si usa la strumentazione e come vanno fatte le misure :slight_smile:
Aggiungiamo pure che non vi hanno mai fatto vedere cosa esce realmente da una porta logica, possibilmente utilizzando strumentazione adeguata, ed ecco che nascono i dubbi e le incertezze.

x iscrizione

astrobeed:

dr.benway:
Ing. elettronica / telecomunicazioni.
Diciamo che il problema di fondo è l'aver azzardato la misura su un prototipo reale.

Diciamo che il problema di fondo è che non vi hanno mai spiegato come si usa la strumentazione e come vanno fatte le misure :slight_smile:
Aggiungiamo pure che non vi hanno mai fatto vedere cosa esce realmente da una porta logica, possibilmente utilizzando strumentazione adeguata, ed ecco che nascono i dubbi e le incertezze.

Astrobeed
Dimenticavi che mancano anche le lezioni delle fonti di errore e dei limiti dei diversi tipi di attrezzatura di misura.
Ciao Uwe

Ho risolto il discorso overshoot con una semplice condensatore verso massa :grin: :grin:
Comunque,in tutta franchezza, lo schema da me proposto fa veramente pena.
Come avete intuito la mia esperienza è molto limitata... :* :* :*
Mi sono documentato ed ho scoperto che esistono dei chip in grado di svolgere egregiamente la funzione di Dac e/o generatore di funzioni.
Un esempio è questo:

Comunque, resta il beneficio del dubbio...

dr.benway:
Ho risolto il discorso overshoot con una semplice condensatore verso massa :grin: :grin:

Ovvero hai inserito un filtro passa basso, attenzione che se la cosa non è fatta in modo ragionato potresti andare incontro a spiacevoli inconvenienti come l'overload delle porte logiche e la loro dipartita in tempi relativamente brevi.

l'overload delle porte logiche

Intendi la logica contenuta in Arduino o quella che sta a valle?
Per quali motivi ci potrebbero essere danni ? Potresti essere più specifico?
Grazie

Riflettendoci lo schema con le resistenze che ho postato non vale un fico secco : attualmente non lo consiglierei al mio peggior nemico. :blush: :blush:
Penso di interfacciarmi con un chip DAC 8) oppure con una cosa chiamata DDS (mi sto documentando a riguardo ...)

dr.benway:
Per quali motivi ci potrebbero essere danni ? Potresti essere più specifico?

Qui mi cascano proprio le braccia, ma non ti stai laureando "Ing. elettronica / telecomunicazioni." ?
Non è possibile che fai una simile domanda.
Collegare un condensatore direttamente tra l'out di un gate logico e gnd a seconda della frequenza, e della capacità del condensatore, può diventare un vero e proprio corto visto che l'impedenza può calare fino a 0, o meglio fino al valore della sua ESR, portando a condizioni di corrente eccessiva (overload).

Collegare un condensatore direttamente tra l'out di un gate logico e gnd a seconda della frequenza, e della capacità del condensatore, può diventare un vero e proprio corto visto che l'impedenza può calare fino a 0, o meglio fino al valore della sua ESR, portando a condizioni di corrente eccessiva (overload).

Si hai perfettamente ragione, infatti non ci avevo pensato :cold_sweat:

Il problema è quando studi la teoria è una cosa.
Quando invece ti ritrovi in laboratorio con il saldatore in mano, le cose cambiano...

Credo che sia ormai chiaro che la scritta newbie sotto il mio avatar non sia un caso,
quindi gente, DIFFIDATE dagli schemi che ho proposto ... :~

I DDS in genere (o perlomeno quelli che ti finanzierebbe l'università) generano onde sinusoidali, quadre o rettangolari.
Generare una sorta di sinusoide "a gradino" secondo me non è cosa da DDS, se poi non hai delle indicazioni sulla frequenza che dovrebbe avere la tua forma d'onda puoi tranquillamente generarla con Arduino e magari un DAC esterno (tipo un MCP4821 o un R2R ma fatto bene) anche se sarà ad una frequenza moderata.

flz47655:
I DDS in genere (o perlomeno quelli che ti finanzierebbe l'università) generano onde sinusoidali, quadre o rettangolari.

In realtà il DDS è anche un generatore di forme d'onda arbitrarie anche se spesso e volentieri viene utilizzato solo come generatore di sinusoidi che poi vengono trasformante in onde quadre o triangolari tramite ulteriore circuiteria dedicata, questo per poter sfruttare la massima frequenza possibile in uscita visto che per una sinusoide bastano solo quattro campioni, ovviamente serve anche un ottimo LPF programmabile da mettere in cascata al DDS.
Questo è un semplice progetto per un DDS realizzato con un ATmega, facilmente adattabile ad Arduino, modificando opportunamente la tabella dei campioni può sintetizzare qualunque forma d'onda, unico limite è la limitata frequenza massima e la risoluzione che non è nemmeno lontanamente paragonabile a quella dei DDS con sommatore a 48-64 bit tipici dei generatori da laboratorio di un certo livello (=$$$).