Jump to content
Sign in to follow this  
dan_e

ADC extern sau intern ?

Recommended Posts

Am un microcontroler atmega cu ADCuri interne de 10bit dar in aplicatia care ma intereseaza as vrea sa obtin o rezolutie de masura a tensiunii sub 1mV, de fapt mi-ar place sa fie sub 0,5mV. Ma gandeam eu sa folosesc un ADC de 16bit extern dar nu stiu care sau as putea sa fac un oversampling la ADC intern din Atmega, dar nu creste zgomotul, parca asa am inteles de aici:

http://www.atmel.com/Images/doc8003.pdf

 

stima

dan

Share this post


Link to post
Share on other sites

Dan,

 

alegerea unui ADC se face in functie de natura tensiunii (sau marimii) care o masori in functie de

-viteza de variatie

-magnitudinea (full scale)

-semnul si referinta (unipolar/bipolar diferential etc)

-zgomot peste semnalul masurat (riplu, cuplaj parazit, etc)

 

-in functie de marimea vitezei de variatie alegi tipul SAR, DeltaSigma, integrator cu dubla panta, sau FLASH sau Pipeline daca sunt semnale rapide (cele rapide le-am enumerat sa fie sie ele,cu toate ca MCU nu va face fata sa preia rezultatele suficient de repede)

 

-in functie de magnitudinea semnalului in caz ca trebuie scalat (divizor de precizie) sau amplificat vei avea erori de doua feluri. Erori de divizare apar din cauza erorrilor rezistoarelor din divizor, astea sunt usor de compesat matematic, dar la amplificare de obicei vei introduce zgomot care e mai dificil de eliminat (prin oversampling, sau averaging) in fuinctie de divizare/amplificare alegi si tensiunea de referinta a ADC, dau daca Vref e fixa alegi factorul de divizare/amplificare corespunzator. Caliatea referintei este un factor important (referintele de tensiune interne din MCU nu sunt grozave)

 

-daca ai zgomot peste semnalul masurat daca cunosti natura zgomotului sau riplu, si daca ADC-ul e suficient de rapid poti face ovesampling peste frecventa car evrei s-o elimini.

 

un lucru crucial la toate adc-urile e alegi frecventa de esantionare corect (in functie de natura semnalului masurat) si sa construiesti un filtru anti alias bun in fata ADC-ului, care sa elimine toate frecventele mai mari de jumatate din frecventa de esantionare.

 

Spune-mi ce vrei sa masori si incerc sa te ajut sa alegi un ADC extern.

RR

Share this post


Link to post
Share on other sites

Se poate mari rezolutia si la Atmega. Eu am facut, mai demult, achizitie pe 14 biti, trei canale, cu PIC12F675 (un euro + TVA) cu alimentare si comunicatie prin portul serial. Se poate face usor si pe 15 biti. Secretul este (inventie proprie) interpolarea lineara cu 16 sau 32 de trepte. Se poate obtine rezolutie de 0,3 respectiv 0,15 mV pe domeniul 0 - 5 V. Pentru comunicatie seriala programul trebuie scris in limbaj de asamblare, iar frecventa de tact calibrata (12F675 are scrisa in el constanta de calibrare).

Share this post


Link to post
Share on other sites
Secretul este (inventie proprie) interpolarea lineara cu 16 sau 32 de trepte.

mie-mi suna a:

"cel mai sofisticat robot romanesc din lume..." (Divertis)

fara suparare.

RR

Share this post


Link to post
Share on other sites

mersi pentru raspunsurile prompte.

 

Vreau sa masor tensiuni alternative (sinus, triunghiulare si dreptunghiulare) de diferite amplitudini (max. 300V v-v) si cu frecvente pana la1MHz. Imi trebuie o rezolutie buna pentru ca vreau ca rezultatul sa fie cat mai precis posibil.

 

stima

dan

Share this post


Link to post
Share on other sites

pai e moarta, semnale de 1MHz trebuie esantionate cu minim 2MHz, atmega la 20MHz frecventa de Clock o sa cam dea pe spate doar mutand rezultatele in RAM.(nu mai vorbim de comezi date ADC-ului extern, intreruperi de sfarsit de conversie)

trebuie sa poti prelua un esantion in 10 tacturi, esti cam la limita (din pacate nu ai DMA) si trebuie sa incremetezi pointerii de memorie manual.

RR

Edited by roadrunner

Share this post


Link to post
Share on other sites

adica nu crezi ca ar merge un atmega la 8 sau 10 MHz? Daca nu, ce microcontroler trebuie sa aleg ?

Share this post


Link to post
Share on other sites

cu esantiane care vin cu 2MHz sau mai mult , ar fi frumos sa rulezi MCU pe la 100MHz , (deja esti in teritoriul DSP si/sau FPGA cu aplicatia asta) - aplicatia este peste puterile unui MCU de cativa euro, ar merge cu MCU pe la 200K esantioane/s dar si acolo e destul de problematic.

Deci nu vei putea aplica nici o metoda de mai sus. (oversampling, averaging)

incearca sa scrii o rutina care preia datele paralel pe 1 port (sau doua porturi) si scrie datele in RAM si vezi pe cate tacturi se executa si vei stii care e costul de timp (in tacturi de ceas) deci vei putea calcula viteza maxima cu care poate esantiona ADC-ul.

 

PS - vrei sa masori armonicile din tensiunea de retea?

Edited by roadrunner

Share this post


Link to post
Share on other sites

PS - vrei sa masori armonicile din tensiunea de retea?

Da, ai ghicit, asta vreau sa masor.

Nu am lucrat niciodata cu FPGA sau CPLD. Cu ce sa incep ? Zi-mi un software bun de compilare / scriere si un FPGA nu foarte scump dar care sa mearga la 100MHz?

Share this post


Link to post
Share on other sites

software e free, toti fabricantii de fpga au variante "minimale" care nu costa nimic, doar te inregistrezi pe site-ul lor si faci download. Vei fi limitat la la device-uri mai mici dar suficient pentru ce vrei tu sa faci. Legat de device-uri, cel mai bine e sa cumperi o placa de dezvoltare cu fpga care are si un ADC pe acolo.

Nu pretul e problema ta cea mai mare ci "know how-ul" (sper s-o iei constructiv) dar bariera asta nu-i opreste chiar pe toti, unii invata si o trec.(dupa care castiga o caruta de bani)

Aplicatia asta iese din domeniul hobby (nu neaparat din cauza baniilor) ci din cauza complexitatii, trebuie sa stii un pic de DSP (digital signal processing) sa cunosti un limbaj de programare hardware (VHDL, Verilog) si eventual un pic de programare (asta stii oarecum)

In locul tau as face un algoritm in Matlab sau Octave (free) unde ai toate functiile DSP necesare, FFT, windowing, si as verifica cu seturi de date, daca obtin rezultatele scontate. Dupa asta m-as apuca de hardware/software, pentru unele blocuri vor fi facute in hardware si altele in software (se numeste "hardware/software partitioning")

dupa ce ai clarificat ce faci unde si cum, cauti o placa de dezvolatare care are hardware-ul corespunzator si te apuci de treaba. Asa se fac lucrurile in mod eficient, dar nu are legatura cu hobby-ul.

RR

 

PS - cum zicea Ceausescu, Invatati, Invatati,...

 

PS2 - vezi ca exista (de ani buni) DSP-uri folosite in smart metere (contoare de energie digitale) care fac toate astea automat, true RMS (banuiesc ca aici iti trebuia radicalul), si pot si esantiona un bloc de date (mai multe perioade ale retelei) si poti face tu FFT in MCU. Eu am folosit un IC asemanator de la Analog Device intr-un smart meter care l-am proiectat cu cativa ani in urma.Cipurile aste aau ADC-uri optimizate si tot mecanismul de calibrare scalare offset integrat, numai scrii in niste registrii (Arunca un ochi pe la Analog Device, Texas, Maxim etc...)

Edited by roadrunner

Share this post


Link to post
Share on other sites

roadrunner, vroiam sa te intreb mai demult, cum ti se par osciloscopele digitale existente la ora actuala pe piata, care au AD-uri la 125MHz (4 sau 5 bucati) si FPGA cam tot la frecventa asta si se lauda cu 500MS/s / canal real-time sapmling rate, 2M memory length si sunt cotate ca pot capta semnale la 100Mhz sau chiar mai mult ?

Share this post


Link to post
Share on other sites

folosing mai multe adc-uri, posti sa le pui sa achizitioneze intretesut (la faze diferite) - practic obtii frecventa de esantionare a unuia multiplicata cu numarul de convertoare (125MHz x 4)

in principiu poti sa vezi destul de bine un semal de 100Mhz esantionat la 500Mhz daca este periodic (esantionezi mai multe perioade pentru a determina puncte multiple (se mai numeste si "equivalent sampling rate". Problema e cand ai un semanal neperiodic de 100Mhz si-l esantionezi cu 500Ms vei avea numai 5 puncte, deci insuficient sa construiesti curba semnalului.

RR

Share this post


Link to post
Share on other sites

si cat costa un DSP dedicat pentru asa ceva? masoara thd-ul numai la frecvente de 50hz ? Eu ma gandeam sa ma folosesc de un DSP de ala ca sa masor thd-ul si in domeniu audio, adica o dubla utilizare. Se poate?

 

cu stima

dan

Share this post


Link to post
Share on other sites

intreb aici,

La un ADC de 10bit daca vreau sa masor o tensiune continua de 5V care este cea mai mica valoare a tensiuni pe care o poate masura convertorul ADC ? 10mV cumva? Si cum se calculeaza tensiunea asta minima? :scratchchin: :ball:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We use cookies and related technologies to improve your experience on this website to give you personalized content and ads, and to analyze the traffic and audience of your website. Before continuing to browse www.tehnium-azi.ro, please agree to: Terms of Use.