Wat is de minimale inganspanning op een analoge ingang van een Arduino

blackdog

Golden Member

Hi,

Er is een rede dat ik een TL1004-1.2 of een LM385-1.2 voorstel als referentie.
De weerstadn die hier bij nodig is (deze referenties sluit je aan als een zener) kan dan in verhouding hoger zijn.
Dit houd in dat de onderdrukking van de rommel op de voedingspanning ook beter is.

Wat betreft de nauwkeurigheid, je zal toch de "gemeten"spanning van je gebruikte referentie in je code moeten aanbrengen.
En ook bij de twee door mij voorgestelde referenties zijn deze veel stabieler.
De 5V of de 3,3V gebruiken is een lachertje als referentie, of je moet helemaal geen eisen hoeven te stellen, zeg helderheid van een lamp of ledje.

Door de wat lagere referentie spanning die ik voor stel, wordt ook de verhouding van de spanningsdeler gunstiger en kan je goed ontkoppeling aan de ingang van de Arduino gebruiken. (je eerste filter stap)

De TL431 heeft een beetje te hoge uitgangsspaning om goed te kunnen gebruiken op 5V, de onderdrukking door de lage zenerweerstand is daar een gevolg van.

Groet,
Blackdog

Waarheden zijn "Illusies waarvan men vergeten is dat het illusies zijn"

Blackdog, ik weet niet of je het weet, maar jij kan heel mooie projecten vanaf de zijlijn prachtig de grond in boren.

Voor een ervaren bouwer is het misschien nuttig om stabiliteit van de opamps vantevoren door te rekenen. Maar voor het gros hier is conservatief bouwen of eerst bouwen en dan constateren dat het niet werkt de beste leermethode. Als je vantevoren hint dat het niet gaat werken, en dan achteraf zegt: Dat zei ik al, en dit moet je doen om het werkend te krijgen, dan wordt dat gewaardeerd.

Maar door vooraf een enorme berg aan bezwaren te poneren drijf je zo'n project de grond in.

Jou voorstel om een goede referentie te gebruiken en NIET de digtale 5V raakt kant noch wal. De arduino waar TS mee werkt heeft de "AREF" ingang van de CPU hard aan de (digitale) 5V hangen. Keuze is er niet. Jammer he?

Als je nu achteraf komt met: "ok, mooi spul, maar niet erg nauwkeurig, toch? ... Hier zijn wat hints om de boel te verbeteren".

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

Een extra referentie is misschien zinvol.
Maar de extra bits zijn niet zo zinvol.

Als er over een redelijk groot frequentie gebied bij een groot vermogen gemeten wordt, dan zijn 10 bits voldoende.
De fout veroorzaakt door de diodes of log-converter, achter een verzwakker, is groter.
Ook als de uitgang van het signaal gemoduleerd wordt, en of niet een sinus is, onstaat er een meetfout.

blackdog

Golden Member

Hi,

Heirbij nog een toevoeging hoe ik een ADC ingang zo goed mogelijk maak op een Arduino Uno of een Nano.

Wat uitleg over het schema, R1 en R2 delen de ingansspanning naar een waarde die gelijk is aan de Referentie spanning, hier is dit 1,235V van de LM385-2.5 zener.
De waarde die ik hier geef voor R1 en R2, is voor een 0 tot +5V(-1 lsb waarde) één lsb waarde is bij 1,235V rond de 1,206mV.

R1, R2 en C1 is ook een low pass filter en het kantelpunt met de vorogestelde waarde zit rond de 2,1KHz, dit is je eerste filtering, de rest kan je doen tijdens het middelen in je code.
De hier voorgestelde waarde haalt de snelle stoorpieken uit de ingang weg, maar als je niet een echt snel reagerende ingang nodig hebt, kan je C1 ook naar 0,1uF brengen.
Het kantelpunt schuift dan naar rond de 200Hz en dat is voor digitale uitlezing bijna altijd snel genoeg.
Het voordeel is een nog betere onderdrukking van stoorsignalen en ook de beveiling van de ingang wordt er beter op.
De hier aangegeven kantelpunten worden bepaald door de vervangwaarde van R1 en R2 paralllel en dat in mij schema rond de 7K5 is.
A0 is gewoon een van de Analoge ingangen die je wilt gebruiken.

Dan de referentie opset.
Ik voed de Referentie uit een digitale uitgang, boven in de code stel ik in dat de Referentie extern is, in de setup maak ik één van de digitale uitgangen "1" waar de weerstand R3 aan hangt.
Intern is de Referentie spanning ondertussen al losgekoppeld van de Referentie pin en kan de spanning van Dx worden anagebracht.

Waarom C2 over de LM385 zener, deze heeft toch een zeer kleine Ri?
Dat klopt, dit is meestal kleiner dan 0,5Ω bij 100Hz, maar er komt ook veel prut mee uit de digitale uitgang/5V voeding van de Arduino.
Bij 20Khz is de Ri al gestegen tot zo'n 100Ω en bij 100KHz is de Ri van de LM385 al 1K geworden.
En wat voor signalen denken jullie dat er nu op de voeding van een meestal slecht ontkoppelde Arduino staat :-)
C2 waarvoor ik dan een kleine druppel tantaal neem, zorgt er dus voor dat de referentie ingang ook voor hogere frequenties mooi stoorarm is.
Alleen R3 en C2 geeft al een kantelpunt van van 10Hz en bij 10KHz denp dit het signaal uit de voeding al -40dB.
We bijven even bij de 10KHz, daar is de Ri van de LM285 rond de 30Ω en C2 is bij 10KHz net even kleiner dan 5Ω
C2 is dus bij 10KHz al dominant geworden voor het onderdrukken van de voedings rimpel.

http://www.bramcam.nl/Diversen/Arduino-ADC-01.png

Bij andere Referentie waarde en ingansspanningen zal je meestal de waarde gewoon kunnen schalen.
Bij gebruik van een externe Referentie zoals in mijn voorbeeldschema, heb je veel meer zekerheid over de nauwkeurigheid van je conversie.
Dit is zowel de Referentie spanning die veel beter gespecificeert is, als ook de stoorsignalen op de referentie ingang en de analoge ingangen.

Dit voorbeeld schema is wat de input schakeling betreft bedoeld voor het uitlezen van relatief langzame signalen, zeg sensoren.
Wil je snel sampelen dan zal de ingangs condensator C1 meestal verwijderd moeten worden en de spannings deler een lange impedantie moeten krijgen.

Dus toepassen wat je ontwerp verlangt!

Groet,
Blackdog

Waarheden zijn "Illusies waarvan men vergeten is dat het illusies zijn"
blackdog

Golden Member

Hi REW,

Wil je er over praten, dan bedoel ik je nogal negatieve houding...

Ik geef bijna altijd goede achtergrond van waarom en wat, als jij dit als negatief wilt opvatten, mag dat natuurlijk :-)
De realiteit is vaak heel anders dan dan hier en ook op andere fora word voorgesteld, zie mijn stukje hierboven over hoe je netje een ADC conversie kan doen.

Verder geef ik regelmatig aan, dat de topic starter veel moet experimenteren en ik geef meestal aan dat wat meestal goed werkt, net als hierboven.
Wat heeft mijn verhaal hierboven nu te maken, met het de grond in boren?

Die negatieve houding zit echt in jouw hoofd!

Groet,
Blackdog

Waarheden zijn "Illusies waarvan men vergeten is dat het illusies zijn"

Op 4 maart 2018 12:37:08 schreef blackdog:

De realiteit is vaak heel anders dan dan hier en ook op andere fora word voorgesteld, zie mijn stukje hierboven over hoe je netje een ADC conversie kan doen.

Right. Maar door het ontbreken van een concreet schema TOT ZOJUIST en door het uiten van kritiek over dat het toch nooit goed gaat werken, zorg je dus dat zo'n project in de kiem gesmoord wordt. Je geeft allemaal zinnige hints en tips, die voor een ervaren iemand als jij hartstikke duidelijk zijn en zonder schema tot uitvoering gebracht kunnen worden. Maar voor de doelgroep, degenen die nog niet zoveel ervaring hebben als jij leest het asl: Ik kan het shaken, het gaat toch nooit werken.

Mensen behoeden voor "grote ontploffingen" of componenten die misbruikt worden dat ze kapot zullen gaan: Prima. Maar zoiets als hier, waarbij de nauwkeurigheid in jou ogen te wensen over laat... Laat het toch voor wat het is.

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

Golden Member

Hi Rew,

Dat schema heb ik vanochtend getekend en rond half een gepost.
Dit heb ik dus voor de topic starter gedaan en anderen die met de Arduino bezig zijn betreffende de ADC.
En ja dat is voor de doelgroep, dus voor iedereen die wapperende uitleeswaarde heeft en ook als hun uitlezing onbegrijpbare drift vertoond.

Dit is jouw negatieve gedachte: Ik kan het shaken, het gaat toch nooit werken projecteer dat niet op mij of anderen wil je...
Als ik hier uitleg geef en vaak gedetaileerd en een hobbyist stop dan met zijn project..., dan is dit zijn/haar probleem door gebrek aan inzet.

Ik ga mij hier niet verlagen tot middelmatigheid en zal ten alle tijden proberen mensen uit mijn omgeving en ook op CO te helpen met mijn ervaringen.
En nogmaals, ik stumuleer regelmatig de gene die hier vragen stellen tot experimenteren en ik geef daarbij zinnige info, vaak met voorbeeldschema's en voor al het hoe en waarom.

En nee, ik ga niet mee in het moderne tijd gedrag, dat ook hier op CO gebeurt, dat alles in één of twee korte zinnetjes gezegt moet worden.
Als er mensen zijn die niet willen leren of lezen, dat is hun probleem.

En hou nu eens op met te neuzelen over dat ik alles alleen maar proecies wil doen, meermalen heb ik al aangegeven dat ik veel meet met simpele metertjes.
Wat ik hier laat zien op CO van mijn projectjes, is vaak hoe het echt in elkaar steekt als je verder wilt dan de 99% meuk van Internet, electronica is en blijft complex.

Wat ik hier nu heb laten zien betreffende de ADC is maar een klein stukje van het geheel, betreffende een nette conversie.
Dat is dus niet dat ik het tot 0,1 bit naukeurig wil hebben, maar dat een goed ontwerp meer behelst dan de bagger die ik voorbij zej komen op het Internet.

En voor het beeld, ik ga zo weer een telefoongesprek hebben met iemand die wil leren, en dat doe ik met grote liefde :-)

Gegroet,
Bram

Waarheden zijn "Illusies waarvan men vergeten is dat het illusies zijn"

Bram, we hebben hier van doen met iemand die z'n eerste arduino nog moet kopen, en zich afvraagt of zo'n ADC in zo'n ding nu van 0-1023 of wat anders meet. Dat is in mijn ogen niet iemand die je moet gaan vertellen: Je ADC meting gaat klote zijn, je moet nog dit en dat doen. Door die drie extra componenten verdubbel je de complexiteit van z'n project: Het was: Arduino, sensor, display, nu stel je voor om nog eens drie er bij te doen.

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

Op 2 maart 2018 10:50:34 schreef Martin V:
De bedoeling is om de spanning te meten over een bekende belasting waarde. De generator leverd een maximale spanning van 250V eff. over die belasting. De generator is een HF generator met frequenties tussen 100kHz en 30MHz.
...

Dit is toch wel speciaal.
En de Arduino is veruit het eenvoudigste onderdeel.

Zie o.a.:
http://www.analog.com/en/products/rf-microwave/rf-power-dete...d8307.html (fig 4.1)
https://meettechniek.info/diy-instruments/arduino-wattmeter.html
https://sites.google.com/site/lofturj/power-and-swr-meter

ik snap blackdog ook wel, ik heb ook ge-experimenteerd met arduino en kan al zeggen dat je het ding in de vuilbak gaat prielen wegens onnauwkeuring als er niet op gewezen wordt op de onnauwkeuringheid. heb ik ook gepost in mijn eerste reply hier.

ik bespaar ook liever TS de ellende dat die zich suf piekert waarom zijn metingen altijd heen en weer slingeren tussen 220 en 280Veff terwijl er een stabiele 250V gemeten moet worden.

ik gaf ook al de tip om direct naar een map te gaan, en niet met formules zitten te goochelen.
stel nu dat de binaire waarde 1023 overeenkomt met 250V eff
en dat de binaire waarde 213 overeen komt met 50v eff

c code:


  int val = analogRead(0);             //meet de ingang binair
  val = map(val, 213, 1023, 50, 250);  //zet om
  Serial.print(val);                   //print waarde          
  Serial.println("Veff");              //print eenheid

Voor toekomstig project:
als je dan zelf een calibratie menu maakt, kan je een vaste spanning aanleggen, dan de arduino laten meten en die waarde in de map steken (wegschrijven in geheugen). als je dan 2 calibratie punten neemt (hierboven de 50 en 250V), kan je die altijd apart calibreren.
ik gebruik een arduino in mijn auto en calibreer zo het brandstofniveau.
ik rijd die volledig leeg, ga ik de menu en zeg tegen de arduino dat de huidige gemeten waarde overeen komt met 0liter
dan tank ik vol, ik ga in de menu en zeg dat de tank nu vol is.
arduino vraagt mij hoeveel liter ik tankte en maakt dan zelf zijn berekening.
bv binair 104 = 0liter
binair 857 = vol, ik ga 51liter in.
dan berekent die nu alles tussen 104 en 857 als zijnde 0->51liter.

bespaart mij de moeite om eens alles binaire waardes om te rekenen naar een spanning, om dan die spanning om te rekenen met de weerstandsdeler naar de echte spanning, om dan die spanning om te rekenen naar een vlotterweerstand, waaruit ik dan kan berekenen hoeveel liter er onder mijn vlotter hangt.
al die tussenstappen boeien mij niet.

net zoals bij TS het niet intressant is te weten dat die arduino 4.08V heeft gemeten en dat de weerstandsdeler een 1/50 verhouding was.

ik hou van werken ..., ik kan er uren naar kijken

Ik heb Arduino Uno's vaker gebruikt voor analoge metingen.
10 bits is geen probleem mits de voeding stabiel is.
Verder is een goede filtering zowel software als hardware een vereiste.

M.b.t. het meten van een bekende vaste waarde dat kan op meerdere manieren.
Of wel op een van de andere analoge ingangen een referentie spanning aansluiten of een extern analoge omschakelaar gebruiken of reed relais.
Temperatuur meten kan o.a. ook met een LM35, LM335 of een NTC.

Blackdog bedankt voor het schema om een externe referentie spanning te maken en deze te gebruiken.
Is daar verder nog iets van software voor nodig om dit op de juiste manier te laten werken?
Hoe maak ik bijvoorbeeld een digitale uitgang hoog?

Fcapri, mijn voorstel was ook om 5V op de analoge ingang met een factor 50 te vermenigvuldigen, dan kom je precies uit op 250Veff.

Rbeckers bedankt voor de interessante links, alleen begrijp ik niet helemaal hoe je de uitgang spanning van een AD8307 moet berekenen naar wat er op de ingang zou moeten staan. En daarbij bedoel ik de conversie van decibel naar spanning. Op de uitgang staat een spanning van 25mV per decibel.

Vlak na de HF gelijkrichting zit nog een 5pole filter met 100mH spoelen en 10nF, resp. 22nF condensatoren voor een kantelpunt van ongeveer 3400Hz. Dat is het filter wat ik wil gaan gebruiken.

"tijd is relatief"

Uit het datasheet van de AtMega368: "If the ADC is used AVCC should be connected to VCC through a low-pass filter".

De meeste Arduino klonen knopen echter AVcc hard aan Vcc. Vaak is het met enige handigheid wel mogelijk om een filter bestaande uit een 22µH spoel tussen Vcc en AVcc, en een 100nF condensator van Avcc naar massa toe te voegen.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

30dBm in 50 ohm is 1W
0dBm in 50 ohm is 1mW

https://de.wikipedia.org/wiki/Leistungspegel#dBm

P = U2/R
P = 1 W
R = 50 Ω
U2 = P x R = 1 x 50 = 50
U = 7,07V

Het werken met dBm is bij RF handig en gebruikelijk.
Dat filter na HF gelijkrichting (wat trouwens problemen geeft) is niet nodig. Een spanningstrafo van 100kHz tot 30MHz met een dergelijk hoge primaire spanning zal niet werken.

Zie fig. 11
- 60 dBm = 0,5V (uit)
- 40 dBm = 1,0V
- 20 dBm = 1,5V
0 dBm = 2,0V

Op 5 maart 2018 13:49:47 schreef Martin V:

Fcapri, mijn voorstel was ook om 5V op de analoge ingang met een factor 50 te vermenigvuldigen, dan kom je precies uit op 250Veff.

en stel nu dat 4.9V (binair 1003) overeen komt met 250V, dan ga je met u berekening ineens maar 245V zien. is dit aanvaardbaar?
met uw formule moet je dan al vermenigvuldigen met 51.

ik zou dan ergens bovenaan in u programma een variabele maken waar die 50 instaat.

bv int scale = 50
en in u formules doe je dan overal value x scale.
zodoende moet je enkel bovenaan dat getal 1 keer aanpassen om een calibratie te doen en moet je niet overal in je programma gaan zoeken achter die 50

[Bericht gewijzigd door fcapri op 5 maart 2018 15:23:53 (31%)]

ik hou van werken ..., ik kan er uren naar kijken
High met Henk

Special Member

zo onnauwkeurig is die nu ook weer niet voor 99% is die prima bruikbaar.

Echter in de laagste regionen is hij erg waardeloos, maar dit staat ook netjes in de datasheet van de ATMEGA328.

maar alles hangt af van je Aref! als die niet stabiel is, valt alles om.

to all newbies: RTFM/D of google eens (p.s. RTFM/D = Read the f*cking manual/datasheet).

de atmega is idd best ok, en zijn ADC voldoet ook prima voor huis/tuin doeleinden.

maar die ref is idd het grote probleem. op USB kan je spanning vlot varieren van 4,85V als je een verbruiker schakeld met je arduino, tot 5,2V bij sterke lader zonder verbruikers.

Als 5V dan overeen komt met 250V, dan krijg je een variatie van 242 tot 260V enkel en alleen door de usb spanning.
de interne referentie van 1,1V is dan wel een stuk preciezer, daar krijg je dan de meetfouten.
250V terugbrengen naar 1,1V is een deler van 250. je moet dus ook je meetresultaat vermenigvuldigen hetgeen dan ook niet zo goed is voor de resolutie van de ADC.
0,1V foutmeten is dan direct 25V op het display verschil.

hier heb je dan ook nog het probleem tussen verschillende atmegas. als je 2 identieke toestellen maakt om de meten, hebben ze onderling ook nog een afwijking in het ref.

en daarboven is de arduino ook niet stabiel bij temperatuurschommlingen. iets waar ik wel last mee hebt in de auto (het brandstofniveau tussen vriesweer in de winter en een hete zomerdag scheelt zomaar 3-4liter)

ik hou van werken ..., ik kan er uren naar kijken

Rbeckers, dit lijkt me een goede manier van meten met de AD8307.
Maar hoe zou ik zo iets in de software implementeren?
Misschien kan ik dat zo doen:

2V= 0dBm
Vin/0.025V=dBm
of iedere stap van 0.025V is 1dB

als Vin = <2V dan is dBm negatief
als Vin = >2V dan is dBm positief

onthoud de uitkomst in dBm en tel er 50 dB op als je een 50dB attenuator gebruikt.

60dB is 1kW en dat geeft +10dBm aan op de uitgang.

Dus vervolgens moet het aantal dB omgerekend worden naar vermogen en spanning.
Ik weet niet of ik het goed doe zo, het is maar een idee.

Een spanningstrafo van 100kHz tot 30MHz met een dergelijk hoge primaire spanning zal niet werken.

Een directional coupler is toch ook een spanning en stroom transformator, waarom zal dat niet werken?

[Bericht gewijzigd door Martin V op 5 maart 2018 17:46:32 (16%)]

"tijd is relatief"

60 dBm is een vermogen maar 60 dB is een verhouding .
Je hoeft niet om te rekenen. Het kan wel.

Een trafo voor die spanning heeft veel windingen. Dat geeft o.a. problemen met parasitaire capaciteiten.

Op 5 maart 2018 20:48:02 schreef rbeckers:
60 dBm is een vermogen maar 60 dB is een verhouding .
Je hoeft niet om te rekenen. Het kan wel.

Inderdaad 10dBm = 10mW + 50dB = 1000Watt.

Dat is een factor 100e3 het vermogen vermenigvuldigen aan wat er op de uitgang van de AD8307 is te meten.
Maar ik zie dat een stapje van 1dB hoger op 11dBm al 12,592mW is.
Dat ene enkele stapje geeft dan al bij een versterking van 50dB 1259Watt op de ingang van de meting.
Wat mij lijkt dat dit op een niet erg hoge resolutie van de meting resulteert.

Die logaritmische detector is leuk waar hij voor ontworpen is om verschillen in amplituden van 1dB te kunnen detecteren, maar waarom ik dit zou toepassen in een nauwkeurige vermogens meting is mijn nog niet direct duidelijk.

Een lineaire meting lijkt me daarom beter in resolutie.
-daarbij is de lineaire spanning nauwkeurig is te meten in een deling door 1023

Het verschil tussen beide metingen zijn dat de AD8307 deelt door stapjes van 90 en een A/D convertor deelt in stapjes van 1024, wat veel hoger is in resolutie, nl van 250Veff/20/2/1024=1250W en 1023 komt overeen met 1247,5W. Dit is een resolutie van 2,5W.
Wat resulteert in een factor 100 in vermogen, in vergelijking met AD8307. Bij een 16bits a/d convertor is de uitkomst exacter in a resolutie van ongeveer 0,1 watt per stapje.

Een heel mooie oplossing vormt dit ic, een 10bit adc voor 30MHz.
De Arbuino wordt dan alleen maar gebruikt om de digitale waarde op een lcd scherm te zetten.

"tijd is relatief"