Resolutie Analoge ingang Arduino

Hallo,

Mijn technische kennis komt maar tot een bepaal level en dan heb ik wat hulp nodig :)

Ik heb een luchtdruk sensor aan een analoge ingang van een arduino gehangen. Het lukt opzich prima deze uit te lezen.
Het is een redelijke standaard 3 draads sensor (Vcc 5V, GND, Signaal)
De sensor is 0-10 bar, en geeft bij 0 Bar ongeveer 0,5V af en bij 10 bar 5V.

Ik gebruik echter maar een gedeelte van het bereik (in rust 3 Bar en belast 6 Bar)

De resolutie die je daarmee kunt uitlezen met de analoge input van de arduino is daardoor beperkt. (niet voldoende voor de toepassing).

Na wat lezen denk ik dat ik aan de gang moet met een instrumentatie versterker of iets dergelijks, echter daar stokt mijn kennis.

Kan iemand me in de goede richting sturen?

Alvast dank.

Hoewel ik denk dat dit in dit geval met een opamp en wat weerstanden flink te verbeteren is vereist het wat inzicht om dat daadwerkelijk nauwkeurig en stabiel te doen.
Daarbij blijf je mogelijk met de kwaliteit van de 5V referentie (een gewone 5V stab ? ) zitten.
Of gaat het echt alleen om resolutie, en niet om absolute waarden ?

Je zou ook kunnen overwegen een externe (b.v. I2C) ADC te nemen met een gespecifieerde referentie en voldoende resolutie, ik heb pas in een soortgelijke situatie de MCP3425 getest en was daar erg over te spreken. 1:2 deler er voor en klaar.
Voor de kosten hoef je het waarschijnlijk niet te laten.

als ik dat met een opamp zou willen doen?

Zet ik er dan eerst een weerstands deler / potmeter voor zodat de voltage in rust net boven 0 zit en met de opamp bijvoorbeeld een versterking van 2 a 3 keer maken?

Nee, de offset weghalen en versterken kun je in 1 keer met een opamp doen, maar alsnog valt er dan maar een klein beetje te winnen. Ik ben met Aart eens dat het heel belangrijk is om de referentiespanning goed te krijgen, en dan nog ben je beperkt tot de 10 bits ADC van je Arduino.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

vind het niet zo heel belangrijk dat het uiterst precies is.
Ik weeg iets tussen de 0 en 40.000 kilo waarbij het opzich niet zo heel nauwkeurig komt. (op 200kg nauwkeurig).

Doordat de resolutie redelijk laag is krijg ik nu stappen van bijna 800kg.

Als je het standaard gebruikt, heb je een resolutie van 0.009 bar bij 5v/10 bits. Is dat niet genoeg dan?
Als je een referentiespanning van 3.3v i.p.v. 5v neemt dan neemt de resolutie al ? toe...

[Bericht gewijzigd door Arco op 10 november 2017 14:28:34 (32%)]

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Afgezien van het belangrijke verschil tussen nauwkeurigheid en resolutie heb ik het gevoel dat er ergens iets niet klopt.

((4,5 / 10 ) * 6) / (5 / 1024) = ongeveer 553 ADC ticks van 0 to 6 bar; als ik het goed begrijp komt 40000 kg overeen met 6 bar, dat zou dan ongeveer 40000 / 552 = 72 kg per tick zijn.

200 kg op 40000 is 2 / 400 = 0,5%; als je dat niet alleen als resolutie maar ook als nauwkeurigheid wilt halen moet de referentie kort door de bocht minstens zo "goed" zijn.
Als de huidige referentie niet nauwkeurig maar wel (temperatuur & tijds-) stabiel is kun je mogelijk calibreren in software, maar een goede ref zou vanwege de eenvoud mijn voorkeur hebben.

10 bits is voor veel toepassingen ruim voldoende. Vergeet niet dat een standaard metaalfilm weerstand maar 1% nauwkeurigheid heeft.
Behalve voor versterking is die opamp ook een buffer met o.a. de mogelijkheid tot filtering.
Als je langzame veranderingen meet dan helpt middelen.

Op 10 november 2017 16:14:48 schreef rbeckers:
10 bits is voor veel toepassingen ruim voldoende. Vergeet niet dat een standaard metaalfilm weerstand maar 1% nauwkeurigheid heeft.

Dat zijn 2 verschillende dingen. Het een is de resolutie die je nodig hebt, de ander is het soort componenten die je nodig hebt om dat te bereiken, c.q. de bereikbare resolutie met de componenten die je hebt.

Don't Panic!

Da's hetzelfde als met digitale temperatuurvoelers. Die hebben vaak een nauwkeurigheid van +/- 0.5°C, maar een resolutie van 0.0625°C... :)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Niet direct een oplossing voor het probleem van TS, en misschien wat teveel info voor TS (schrijft dat hij een beperkte kennis heeft), maar toch de moeite om eens door te lezen.

Groetjes,
eSe

I am an expert of electricity. My father occupied the chair of applied electricity at the state prison.

we praten inderdaad langs elkaar heen.
het werkgebied is ongeveer van 3 bar tot 6 bar.
Dus de resolutie ligt fors lager.

Zou fijn zijn als ik dat met iets simpels kan vergroten.

Zoals gezegd, referentiespanning verlagen is het simpelst...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

IK weet niet precies hoe het met de ADC in de Arduino zit qua drift, offset, lineariteit ed, dus de bruikbare resolutie neemt daarmee al af.

IK werk nu met een 16 bit ADC waarbij de bruikbare resolutie standaard op ca 13/14 bits zit.

Het zou me dus niets verbazen als de theorie zegt je kan op 72kg resolutie wegen maar terwijl dat in de praktijk eerder 200kg is. Dan nog vind ik het gat naar 800 kg erg groot dat zou eerder op een 8 bit resolutie lijken want het scheelt een factor 4 en dat zijn precies 2 bits in resolutie.

het werkgebied is ongeveer van 3 bar tot 6 bar.
Dus de resolutie ligt fors lager.

((4,5 / 10 ) * 6) / (5 / 1024) = ongeveer 553 ADC ticks van 0 to 6 bar; als ik het goed begrijp komt 40000 kg overeen met 6 bar, dat zou dan ongeveer 40000 / 552 = 72 kg per tick zijn

.

Dat is hier al uitgerekend op 6 bar. Dan nog resolutie heeft niets te maken met nauwkeurigheid.

Dus wat is resolutie.
Dat is het kleinst meetbare verschil van je schakeling. Dat is hier 72kg. Dat is een feit omdat dat vast ligt in de hardware.

Wat is dan nauwkeurigheid.
Dat is als je 2 of meer dezelfde wegingen achter elkaar doet dat dat altijd precies dezelfde waarde oplevert. Maar ook als je die weging een week later doet moet die dezelfde waarde opleveren. NU hoeft dat niet altijd precies hetzelfde te zijn en dat mag procentueel verschillen. Hoeveel dat mag zijn hangt van de toepassing af.
Als de wegingen met precies hetzelfde gewicht toch steeds een andere waarde oplevert heeft dat niets met de resolutie te maken maar met de volgende punten.
De afwijking word bepaald door gebruikte Voeding, bekabeling, voeding, ontstoring, referentie spanning, voeding, opbouw van de schakeling temperatuur schommelingen luchtvochtigheid e.d..

Nu de voeding die heb expres meerdere keren genoemd. Wat voor voeding heb je gebruikt. Die voeding moet goed, stabiel, ruisvrij en zonder stoorsignalen zijn.

Wat word dan bedoelt met absolutie waarde.
Dat is eigenlijk de afwijking tussen de gemeten waarde en de norm-, ijk- of standaarden. Daarvoor moet de apparatuur dus gekalibreerd worden. Dan kan soms eventueel zelf als je bv aan standaard gewichten kan komen. Stel je weegt 20.000kg. Dat is een mooi rond getal maar weet je dan ook of dat werkelijk zo is of hoort dan 20.500kg te zijn. Dat is belangrijk als je handelt in oude metalen maar niet belangrijk als je ongeveer wilt weten hoe zwaar je een vrachtwagen gaat beladen. Dan wil je enkel dat de vrachtwagen niet over beladen word en kan je ervoor kiezen om daar altijd 5% onder te blijven.

Op de Arduino kan je ook een eigen referentie spanning aanbieden en die mag je kiezen tussen 0 en 5V. De Arduino gebruikt dan ook deze referentie voor de ADC en dat word dan ook zijn maximum. Dus bij 5V referentie word de 5V in 1024 stukjes verdeeld en als je 2,5V neemt word dat in 1024 stukjes verdeelt. en de resolutie is dan 2x hoger. met 6 bar zit je op ca 2/3 van je bereik to 10 bar. Een referentie van 3,3V is ook ca 2/3 van 5V. Als je met een 3,3V referentie gaat werken dan komt 3,3V overeen met het maximum van de ADC en dat is de waarde 1024.

Als je de ADC van iets gebruikt dan is het zeer zinvol om er o.a. een opamp voor te hangen.

@Henz
Klopt.
Maar afhankelijk wat je wilt meten speelt die 1% mee. Drift o.a.

blackdog

Golden Member

Hi benleentje,

Wat mij betreft in één post helemaal goed en compleet uitgelegt!

ALKO
Misschien kan je beter één van de Teensy controlers kopen, kost wat meer meer deze hebben een betere ADC in zich.
Er is ook op het forum van: https://www.pjrc.com/teensy/ uitgebreide info te vinden over het oversampelen voor nog meer resoluty met de Teensy.
De Teensy is met de Arduino IDE te programmeren.

Je hebt snel de wat extra kosten er uit doordat het veel makkelijker is zonder extra componenten je resolutie te halen.
Maar wat Aart zegt over de MCP3425 of een ADS1115 ADC kan natuurlijk ook, wat jij wilt :-)

Groet,
Blackdog

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

Als je meer als 10 bits A/D wilt, zul je toch een serieuze referentiespanning moeten aanbieden; met Vcc als ref krijg je dat nooit stabiel.
Daar zit meestal behoorlijk wat schakelruis op tot enkele tientallen millivolts)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
blackdog

Golden Member

Hi Arco,

De meeste microcontrolers hebben een 3,3V regelaar of een 1.235V interne referentie waar je grbruik van kan maken.

Ik heb het hier al eens eerder gezegt, als je goede ADC resultaten wilt hebben,
kan je de microcontroler geen grote stromen laten leveren en de PWM functie lijkt mij dan ook niet handig.

Het is nog niet bekent wat nu echt nodig is en hoe stabiel, als de microcontroler ook dus veel andere taken moet afhandelen,
zou ik dit via een optische gescheiden i2C ADC doen zoals met de MCP3425 of een ADS1115 en de ADC zijn eigen voeding geven.

Wordt het geheel buiten gebruikt, vochtige omgeving, resolutie en nauwkeurigheid zijn allemaal niet bekent.
Dan kan er alleen van algemeenheden gesproken worden.

Een ADC heeft behalve een "0" en volle schaal nauwkeurigheid ook een INL en DNL.
Als het op uiteindelijk 200KG nauwkeurig, moet zou ik een bitgrote nemen die ongeveer 10x kleiner is.
Dan weet je zeker dat de INL en DNL niet te veel invloed hebben op de aangegeven waarde.

Als je uitgaat van 3,3V aan referentie spanning, zal je voorzorgen moeten nemen dat je de ingang van de ADC niet opblaast met de max. 5V dat de sensor kan leveren.

Makkelijk he, die electronica *grin*

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

Je kan de Arduino tijden het samplen met de ADC ook in de slaapstand zetten speciaal bedoelt voor de ADC. Dan ben je de schakelruis van de CPU al kwijt.

Een ADC heeft behalve een "0" en volle schaal nauwkeurigheid ook een INL en DNL.

Wat is INL en DNL (Downloaden) haha.

Met de ADS1115 kwam ik ook nog tegen
Offset error
lineairiteit error
gain error
drift error
Full scale error

en denk nog wel een paar eigenschappen die van belang zijn.
Ook staat er duidelijk wat de te verwachte resolutie is bij een bepaalde sample snelheid en die neemt af naarmate de sample snelheid hoger word.

zou ik dit via een optische gescheiden i2C ADC

IS dat nodig I2C is toch best wel redelijk ongevoelig voor storingen dacht ik?

Hi benleentje,

Wat mij betreft in één post helemaal goed en compleet uitgelegt!

IS ook veel bij van jouw geleerd, maar ook geïnspireerd om dingen zelf te onderzoeken. Want sommige dingen moet je ook zelf ervaren maar het scheelt als je dan bepaalde valkuilen al kent en hoe je dat eventueel kan ondervangen.

[Bericht gewijzigd door benleentje op 10 november 2017 19:53:10 (21%)]

blackdog

Golden Member

Hi benleentje, :-)

Het scheiden is soms nodig als je in ene industrieele omgeving zit, dus als het stoorniveau hoog is, commommode problemen enz.
Daar ik niet weet hoe/waar het gaat worden toegepast geeft ik aan waar je ondermeer aan moet denken, net zoals de extra variabelen die jij opsomt :-)

Groet,
Bram

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

Als dat nodig is zijn er nu leuke (en betaalbare) I2C isolatoren zoals: http://www.ti.com/general/docs/lit/getliterature.tsp?baseLit...leType=pdf
Een SPI ADC en dan optisch kan natuurlijk ook, maar dit is wel lekker simpel en compact.
Te gebruiken icm een kleine DC/DC, je zit ook met de onvermijdelijke capaciteit voor 50 Hz al snel aan tientallen MOhm isolatie.
Overigens hebben veel / alle op als "Arduino" benoemde breakout boards gebruikte microcontrollers (de Atmega328 op de Uno etc) ook een ingebouwde Uref van b.v. 1,1V , die allicht beter is als de 5V voeding te gebruiken. Zie: https://www.arduino.cc/en/Reference/AnalogReference

Het verschil tussen mijn 72 kg en de genoemde 800 kg per tick is mij echter te groot om op details in te gaan. Welke sensor is het en is er een sanity check gedaan op de uitgangsspanning ?

[edit]
Of moeten we het geheel anders begrijpen, en is het bereik van 0-40t 3-6 bar ?
Dan wordt de resolutie (4,5 / 10 * 3) / (5 / 1024) = 276 ticks, oftewel 40000 / 276 = 144 kg / tick.
Nog steeds een factor vijf verschil.. Is het pneumatisch/mechanische gedeelte soms heel erg niet lineair ?

@aart ik snap je berekening nog steeds niet.

Ik zie je hebt een sensor van 0 - 10bar, waarvan 6bar blijkbaar 40 ton is. 6 bar komt overeen met 60% van je bruikbare resolutie en geeft met een 5V referentie waarde 614 als maximum.
Aan de onderkant zit je met 0,5V en dat geeft waarde 103.

614 - 103 = 511 bruikbare waardes voor het bepalen van de resolutie.
40.000 / 511 = 78kg.

uit de sensor komt bij 6 bar 3V. Dan kan je daarvoor een 3,3V referentie gebruiken.
DE maximum waarde bij 6 bar is dan 931
minimum waarde is 155
931 - 155 = 776
40.000 / 776 = 52kg resolutie

Als je een opamp zou gebruiken, de offset van 0,5V wegwerkt en op 5V referentie blijft werken dan krijg je als resolutie
6 bar komt overeen met 5V en geeft waarde 1024
40.000/1024 = 39kg

Je krijgt dus een betere resolutie maar ook meer kan op meetfouten door de opamp. De opamp heeft zelf ook drift, en gain error.

(op 200kg nauwkeurig).

blackdog zegt dat je ADC resolutie 10 beter moet zijn en dan zit je op een resolutie van 20kg en 39kg is dan nog een factor 3 te groot.

IK zou eerst eens een goede spanningsmeter naast de arduino gebruiken en eens kijken hoe nu de sensor waarde varieert. Als daar als veel ruis in zit dan gaat het met een beter ADC ook moeilijk worden.
En met ruis bedoel ik nu even het volgende. En dat is dat de meter niet stil blijft staan op 1 waarde maar bv 50mV heen weer blijft lopen. dus bv van 2.885V naar 2.890V en alle waarden er tussen in.

:

[Bericht gewijzigd door nurky op 11 november 2017 01:17:48 (100%)]