Hoe werkt de Vref van een ADC

Hoi!

Ik ben relatief nieuw met het werken met ADC's. Heb de basis dingen allemaal al eens gedaan, maar ik kom nu op het punt dat ik een eigen print aan het ontwerpen ben met daarop een PIC16F15356 met een 10 bits ADC. Welnu weet ik dat er veel te doen is over de referentiespanning voor de ADC. De nauwkeurigheid van de ADC is afhankelijk van de referentiespanning, en in veel microcontrollers kun je kiezen of je deze intern (ie, de voedingsspanning van de microcontroller) of extern wilt gebruiken. Mijn vraag:
Waarom kan de nauwkeurigheid van de ADC afnemen als de interne Vref wordt gebruikt? Heeft dit te maken met dat deze spanning ligt kan schommelen aangezien deze licht kan zakken door bijvoorbeeld een spanningsval, veroorzaakt door onder andere de microcontroller?

En mijn tweede vraag: Indien ik een externe Vref wil gebruiken, wat houdt dit precies in? Hoe maak ik zon stabiele spanning? Is dit een kwestie van een regulator gebruiken? Of een opamp als buffertje bijvoorbeeld? Wellicht heeft er iemand een link met info over de referentiespanning?

Arco

Special Member

Waarom kan de nauwkeurigheid van de ADC afnemen als de interne Vref wordt gebruikt?

Op de Vcc van een controller zit al gauw 10-50mV aan 'ellende' veroorzaakt door schakelen.
De processor heeft daar weinig last van, een A/D wel (50mV zijn al ruim 40 stapjes van een 12 bits A/D)

Wat voor referentie je neemt hangt van de gewenste stabiliteit af.
Voor wat minder is een 7805 genoeg, voor betere resultaten kun je iets als een REF61xx van TI nemen.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 6 mei 2020 15:06:55 schreef Arco:
[...]

Wat voor referentie je neemt hangt van de gewenste stabiliteit af.
Voor wat minder is een 7805 genoeg, voor betere resultaten kun je iets als een REF61xx van TI nemen.

Bedankt voor je reactie! Dat is eigenlijk ook een onderdeel van mijn vraag. De pcb zal gevoed worden door een usb kabel (vanuit je laptop, of uit een voeding voor in het stopcontact), oftewel, 5 volt. Ik heb altijd begrepen dat je bij de 7805 een ingangsspanning van boven de 5 volt moet hebben om een stabiele 5volt op de uitgang te krijgen. Correct? (nu ik dit schrijf klinkt het wel logisch dat je een ingangsspanning van minimaal 5 volt moet hebben om een uitgangsspanning van 5 volt te krijgen :D)

big_fat_mama

Zie Paulinha_B

Ja inderdaad, een 78xx wil toch een volt of drie spanningsverschil zien, dus voor een 7805 wil je zeker zijn dat hij minstens 8 volt op zijn bord krijgt.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
Arco

Special Member

Ingangsspanning van een 78xx moet minimaal 2.5v hoger zijn als de uitgangsspanning... (kan per fabrikant iets varieren)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Lambiek

Special Member

Dus als je het geheel uit de USB wil voeden, kun je die spanning eigenlijk alleen maar bufferen. Dit kan als het niet echt perfect hoeft.

Als je haar maar goed zit, GROETEN LAMBIEK.
benleentje

Golden Member

om een stabiele 5volt op de uitgang te krijgen.

Voor een ADC is enkel een stabiele spanning niet genoeg. Op een stabiele spanning kan ook gewoon 150mV aan ruis zitten of met veranderen van temperatuur gaan schommelen. Een spanning voor een ADC moet dus stabiel en zeer schoon zijn.
Een referentie spanning die voor een 10bit ADC schoon genoeg is kan voor een 24bit ADC pure ellende zijn.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

Houd er dan wel rekening mee dat de USB spanning een tolerantie kan hebben van +/- 4 %. Als je deze spanning gebruikt als referentie wijken je ADC resultaten dus ook af. Tevens afhankelijk van je stroom verbruik en de kwaliteit van de kabel treden hier ook verliezen op.

Arco

Special Member

Je kunt een MIC5233 (of een andere LDO regelaar) nemen, de pic kan ook op 3.3v werken.
USB rechtstreeks is zeker geen aanrader, spanning kan aardig afwijken bij wisselende belastingen.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Dus wat zouden jullie aanraden? Overstappen naar een andere voeding (9V batterij bijvoorbeeld)?
Of de PIC voeden met 3.3 v en een externe 3.3 Vref gebruiken?
Ik begin nu in te zien dat de usbpoort als directe spanningsbron te gebruiken niet heel handig is.

big_fat_mama

Zie Paulinha_B

Ik zie twee benaderingen - als het echt een 5V= referentie moet zijn:
* simpel: vanuit de usb een diode en een elco, met nog iets bipolairs parallel aan de elco
* luxe: beginnen met een boostconverter, tot pakweg 10 V= of zo; daarna een of andere kwaliteitsregeling, bv. de genoemde REF61. Er gaat erg weinig stroom vloeien dus dik of zwaar moet het niet worden.

[Bericht gewijzigd door big_fat_mama op woensdag 6 mei 2020 15:45:58 (20%)

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Juistem. Ik zal de functionaliteit van de adc even toelichten.

De ADC zal de spanning over een knoopcelbatterij gaan meten. Deze spanning is over het algemeen rond de 3.2 volt. Dat betekend dus (in geval van een 3.3V referentie) dat die al bijna tegen het plafond zit. Dit zou in principe goed moeten gaan, ik ben ook nog geen batterij tegen gekomen waarbij de spanning groter dan 3.3 volt is, maar ik ben toch bang dat ik te dicht tegen de maximale spanning (3.3 volt) aan zit.
Vandaar dat mijn eerste gedachte 5 volt referentie was.

Arco

Special Member

De MIC5233 is er ook adjustable, dus je kunt ook bijv. voor 3.6v gaan...
Waarom trouwens 12 bits resolutie om een batterij te testen, da's 1mV resolutie bij Vcc=5v...
8 bits resolutie lijkt me zelfs nog wel genoeg (0.02v resolutie)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
JoWi

Special Member

Ik gebruik gewoonlijk een 5V voedingspanning (indien mogelijk) en dan een 4.096V reference zoals een MCP241 (en zijn ook vele andere).
Dan is is AD waarde ook lekker makkelijk om te rekenen naar een voltage.

Ignorance is bliss
benleentje

Golden Member

Je kan de meetspanning van de batterij ook aanpassen met een weerstandsdeler om zo binnen het bereik van de ADC te komen zo kan je dan zonder problemen aan een 12V accu meten.

Want ook met 5V referentie is het niet ideaal. Je gebrukt ca 1/3 van je meetbereik niet en daarmee word je resolutie voor de rest van je bereik slechter to de ADC op 3,3V. De referentie spanning mag ook niet hoger zijn de spanning van de chip zelf. Kijk ook even in de datasheet van de chip wat de absoluut maximum en de recommende spanningen zijn op de ingang van de ADC.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.
Arco

Special Member

Die controller heeft een interne FVR van 4.096v. Je kunt kijken of die stabiel genoeg is... (lijkt redelijk stabiel)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
benleentje

Golden Member

Dat lijkt me voor het meten aan een knoopcel meer dan genoeg.
10 bit is 1024 waardes. Met een 4,096 referentie heb je dan ongeveer 4mV per stap. Als dan met 2 cijfers achter de komma aan de knoopcel meet lijkt mij goed genoeg. Dan heb je ook geen weerstandsdeler meer nodig en kan een hele volle batterij van 3,5V ook geen kwaad.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

Op 6 mei 2020 16:07:07 schreef Arco:
De MIC5233 is er ook adjustable, dus je kunt ook bijv. voor 3.6v gaan...
Waarom trouwens 12 bits resolutie om een batterij te testen, da's 1mV resolutie bij Vcc=5v...
8 bits resolutie lijkt me zelfs nog wel genoeg (0.02v resolutie)

Ik gebruikt een 10 bits adc. Een goed tussenmaatje.

benleentje

Golden Member

Heeft dit te maken met dat deze spanning ligt kan schommelen aangezien deze licht kan zakken door bijvoorbeeld een spanningsval, veroorzaakt door onder andere de microcontroller?

Dat is ook een reden dat je vaak in een microcontroller een lagere interne referentie spanning ziet dan zit je ver weg van die spanningsschommelingen. In geval van 4,096V moet de spanning wel heel hard schommelen en dat vind de microconroller zelf ook niet goed.

Maar het kan wel degelijk dat je de micro met 5V voed en op de referentie ingang dezelfde 5V aanbied. De referentie spanning word dan extra gefilterd en gebufferd met 1 of meerdere spoelen en ontkoppel condensatoren. Ook hebben beide 5V spanningen hun eigen route op de PCB.

Voor veel microcontroller is de interne referentie goed genoeg voor de eigen ADC en voor 10 en 12 bits ADC is ook niet zo een goede referentie nodig als voor een 16 bit of hoger. En dat maakt de microcontrollers zo handig wat is erin zit in goed genoeg voor veel toepassingen en je kan zo eenvoudig analoge sensoren uitlezen om een proces te besturen. Wil je erg nauwkeurig gaan meten dan pas moet je naar externe componenten gaan.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

Op 6 mei 2020 16:11:00 schreef benleentje:
Je kan de meetspanning van de batterij ook aanpassen met een weerstandsdeler om zo binnen het bereik van de ADC te komen zo kan je dan zonder problemen aan een 12V accu meten.

Bij een knoopcel van 3V lijkt me dat niet zo handig omdat je de cel continue belast en zo sneller leeg raakt. Gebruik je extreem hoge weerstandswaarden voor de deler dan gaat dat ook niet echt werken omdat je dan toch wel drift krijgt via hele kleine lekstromen.

Als je echt aan een kleine (knoop)cel moet meten dan moet je ook rekening houden dat je de Vbat niet direct aan je uC kunt hangen omdat anders de knoopcel via de mogelijke clamping diodes in de processor "kortsluit" als de voeding van je processor eraf gaat, en deze dan in een mum van tijd leeg is.
Daar kun je dan weer een fet switch tussen zetten die ook aan de Vbat hangt (een 4066 oid) en de enable pin via de uC aansturen als je gaat meten.
Er zijn zelfs tiny-gate IC's waar 1/4 van een 4066 in zit.

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.

Mag ik een praktisch voorstel doen?

Eerst een beetje uitleg. de gemeten spanning wordt uitgedrukt in veelvouden van 1/1024e van VREF. Is je VREF 4V zijn dat dus veelvouden van .00390625 V .

Als je de 5V van de USB gebruikt dan weet je niet goed of dat 5.2V of 4.6V is, dus kan je ook de gemeten spanning niet goed bepalen. Maar in sommige gevallen maakt het niet uit. Bijvoorbeeld als je een potmeter hebt die je tussen de 5V en de 0V zet voor een instelling.... Tja als de potmeter op 63% staat dan krijg je dezelfde waarde uit de ADC of je voeding nu 4.5 of 5.3V is. Maakt niet uit.

Ander voorbeeld: De meeste ACS7xx stroomsensoren schalen hun output ook relatief met de voeding. Zolang je dezelfde voeding gebruikt voor AREF maakt het niet uit.

Gebruik je de INTERNE VREF (bij AVR ongeveer 1V, ik verwacht bij PIC ook zoiets) dan is dat vooral onnauwkeurig omdat verschillende exemplaren van die chip soms wat afwijken. Bij AVR garanderen ze iets van "tussen de 0.9 en de 1.1V" Dus ALS je 5.000V probeert te meten (door bijvoorbeeld met een spanningsdeler 1/10e d'r van te maken) dan kan je waardes tussen de 4.5 (als VREF 1.1V blijkt te zijn) en 5.5V (als VREF 0.9V blijkt te zijn) denken te meten. Dat scheelt nogal!

Maar een eenvoudige manier om zoiets behoorlijk te verbeteren is door gewoon een 3.3V spanningsregelaar te nemen. De MCP1703 gebruikt zelf bijna geen stroom en is uit m'n hoofd op 2% nauwkeurig. Ik heb er een zwik gemeten en kom zelden meer dan 1% afwijking tegen. Als je een Externe VREF kan aanbieden, dan zou ik /dat/ doen. Het is dan zelfs wenselijk om NIET de CPU op de 3.3V te laten draaien: DAN krijg je ruis door de CPU gegenereerd in je metingen terug. Gewoon alleen VREF en evt een paar andere analoge dingen uit die 3.3V voeden.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
benleentje

Golden Member

Bij een knoopcel van 3V lijkt me dat niet zo handig omdat je de cel continue belast en zo sneller leeg raakt.

Heb je helemaal gelijk in. Zo een batterij is heel snel leeg.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.
Arco

Special Member

Pic heeft Refs van 1.024, 2.048, en 4.096v...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ha Christiaan371,

Vraag.... wat geef je de indruk dat de interne referentie van je processor niet stabiel zou zijn :?
Die FVR is geheel onafhankelijk van de voeding deze spanning mag rustig 1 V variëren !
Met betrekking tot de ADC weet je welk type er in zit ?

Groet,
Henk.

Everything should be as simple as possible, but not simpler.

Vaak kan er naar ratio gemeten worden of met een ruwe meting worden volstaan, maar hier is de absolute waarde van de referentiespanning van belang. Hoe goed het moet zijn is helemaal aan TS.
Mijn persoonlijke voorkeur zou een referentie zijn die zonder kalibratie "uit het laadje" goed genoeg is. Dat kan ook de interne zijn.
Een eigen kalibratie doen en daarvan de stabiliteit/nauwkeurigheid/temperatuurgevoeligheid beoordelen is veel lastiger.
Of pak een losse ADC met een gepaste ingebouwde ref, zeker als er ook nog andere wensen (sy ingang, isolatie etc.) zijn. Ik gebruikte ooit naar tevredenheid de mcp3422 achter een ISO1541.

Twee andere punten;
Lees de datasheet van de betreffende uC goed door wat betreft de procedure rond optimaal meten met de adc, mogelijk is er een speciale sleep mode om zo stil mogelijk te kunnen meten of zijn er eisen aan de impedantie van de meetspanning en referentie (c'tjes plaatsen). Let op de analoge wensen bij het pcb ontwerp.
Een en ander gaat in het algemeen niet vanzelf goed, probeer maar eens een willekeurige breakout en code zonder optimalisaties (Arduino oid).. Dan heeft een betere ref geen zin.

De adc starten en (evt. later) uitlezen kosten niet zo veel tijd, middelen van een aantal metingen kan zinnig zijn.
Middel als de traagheid acceptabel is in een 50 Hz omgevig steeds over (veelvouden van) 20 ms, de periode van de netfrequentie, b.v. tien metingen met steeds 2 ms er tussen. Dat kan enorm schelen in last van interferentie.