Go Down

Topic: Semplice Convertitore D/A con ARDUINO duemilanove : problemi di overshoot (Read 3933 times) previous topic - next topic

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.
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 ... :smiley-roll: :smiley-roll: :smiley-roll:


uwefed


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.

Quote from: dr.benway

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

Ne sei sicuro al 100%?

Quote from: 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

flz47655


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

dr.benway

Quote
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.

Quote
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)

Code: [Select]
/*
* 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

Code: [Select]

#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.



flz47655

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

flz47655

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

dr.benway

Quote
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 :smiley-roll: :smiley-roll:

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

astrobeed


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 ?

flz47655

Quote
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

dr.benway

Quote
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.




astrobeed


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 :)
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.

Testato

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

uwefed



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 :)
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

dr.benway

Ho risolto il discorso overshoot con una semplice condensatore verso massa   :smiley-mr-green: :smiley-mr-green:
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:
http://www.analog.com/en/rfif-components/direct-digital-synthesis-dds/ad9850/products/product.html

Comunque, resta il beneficio del dubbio...

astrobeed


Ho risolto il discorso overshoot con una semplice condensatore verso massa   :smiley-mr-green: :smiley-mr-green:


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.

Go Up