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

Grazie per la info sull' operazionale.

Ma perché ti danno così fastidio quei picchi?

Semplicemente perchè in uscita voglio un segnale fatto a scalini come questo :

Questo non ha overshoots, come avrà fatto? =( =(

flz47655:
40pF non sono pochissimi.. se non compensati tramite la taratura di entrambe le sonde i pinnacchi si alzano

Per non parlare di tutte le capacità parassite introdotte dalla bread board, mi associo pure io al commento su quanto sia assurdo usare dei mos, che a loro volta introducono altre capacità parassite, per commutare le resistenze, idem per l'opamp scelto e per i valori della rete di feedback.

Il segnale è visto con poco zoom (e potrebbe essere un segnale a frequenza molto bassa) e l'oscilloscopio è molto vecchio, si perde parte degli eventi

Ciao

PS: Se vogliamo mettere il coltello i mosfet sono senza resistenza sulla base, se li comandi con una frequenza un pò elevata... BUM!

@Astro: Per misurare l'overshoot gli avevo consigliato di scollegare tutto, spero l'abbia fatto altrimenti è inutile stare a discutere se era con la breadboard collegata..

Per non parlare di tutte le capacità parassite introdotte dalla bread board, mi associo pure io al commento su quanto sia assurdo usare dei mos, che a loro volta introducono altre capacità parassite, per commutare le resistenze, idem per l'opamp scelto e per i valori della rete di feedback.

Lasciamo perdere per un momento lo schema elettrico, poichè ci vorrebbe troppo tempo per spiegare a fondo la scelta dei cmos e andrei inesorabilmente OT.
Prendetela per buona.
Il problema è l'overshoot presente sull' uscita digitale SENZA mosfet a valle.
A cosa è dovuto? E' eliminabile?

Grazie.

PS: Se vogliamo mettere il coltello i mosfet sono senza resistenza sulla base, se li comandi con una frequenza un pò elevata... BUM!

Per base intendi tra GATE e massa? Perchè "BUM"?

Grazie.

Si scusami intendevo sul gate ovviamente, BUM! perché il gate è come una capacità e serve corrente per caricarla e scaricarla velocemente, se hai una frequenza troppo alta potresti superare il limite dei 40mA per pin e danneggiare il micro.

L'overshoot è dovuto da capacità parassite, in parte non eliminabili, abbassando la frequenza le percepisci di meno.

Ciao

dr.benway oggi sono tonto.
Spiegami il funzionamento di questo circuito.

L' operazionale é un comparatore con retroazione. Tu cosa volevi che fosse?
Come puoi pilotare quei MOSFET? Il source non é collegato a massa. Se la retorazione del operationale funziona hai una tensione quasi uguale sulle entrate + e -. Visto che il + lo hai messo a 3V (partitore con le 2 resistenze da 470Kohm anche la entrata negativa del operazionale é a 3V. Se la source é a 3V non riesci a pilotare il MOSFET con 5V di Arduino perché troppo pochi per portarlo in piena conduzione.

Come detto, spiegami il funzionamento di quel schema; io non ci arrivo.

Ciao Uwe

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