OPTOdesign
R&D | Design | Light | Innovation | Education
Dank voor de oplettendheid!
[Bericht gewijzigd door OPTOdesign op (25%)]
OPTOdesign
R&D | Design | Light | Innovation | Education
Op 27 oktober 2023 22:00:06 schreef elmowww: Jammer dat die ADC zoveel werk nodig heeft.
Ik wil je heel hartelijk danken voor je inbreng! Het werkt heel netjes! 
Trouwens, iedereen bedankt.
Ik heb een beetje vals gespeeld door niet een weerstandsnetwerk te nemen, maar de DAC van de (zelfde) controller. Ik was benieuwd hoe stabiel dit zou zijn en of de uitkomst betrouwbaar genoeg zou zijn. Ik ben voor nu erg tevreden met het resultaat.
Dat omgezet naar een stukje code:
cal_high_mv = float(1005)
cal_high_reading = float(3900)
cal_low_mv = float(122.8)
cal_low_reading = float(145)
# =(cal_high_mv-cal_low_mv)/(cal_high_reading-cal_low_reading)
gain = float(((cal_high_mv - cal_low_mv) / (cal_high_reading - cal_low_reading)))
# =cal_low_mv-(a*cal_low_reading)
Offset_Var = float((cal_low_mv - gain * cal_low_reading))
for i in range(1, 1001):
Var = (Var if isinstance(Var, Number) else 0) + (adc0.read())
wait_ms(1)
ADCVar = int((Var / 1000))
# Vin = a*reading + b
TempVar = int((gain * ADCVar + Offset_Var))De ADC weer op de potmeter aangesloten en het werkt!
De afwijking bedraagt afhankelijk van de waarde 1mV (onderin) tot 3mV (bovenin). De spanning die de multimeter aangeeft staat nu ook op het display! Super.
Alleen bij een ingangsspanning van 1100mV is er 50mV te kort. Terwijl bij precies 1000mV er slechts 2mV te veel wordt gerekend. Dat zal vast komen omdat ik in de buurt van een grens zit van de ADC.
Met 'de condensator van SparkyGSX' van 10n, wordt de afwijking zo'n 4mV in het hoge bereik groter. De ruwe ADC waarde wiebelt wat minder. Ik weet niet of ik dit nou een vooruitgang vindt en of het echt wat bijdraagt.
Je zou de lm35 eens kunnen belasten met een 10k weerstand.
Zie hier meer voorbeelden https://www.ti.com/lit/ds/symlink/lm35.pdf
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Mooi zo! Bedankt voor de terugkoppeling en excuus voor de fout. Ik had het niet echt nagelezen, zal het voor de toekomst in de post even aanpassen.
Succes!
Dat de waarde gaat fluctueren met extra capaciteit vindt ik apart. Ik kan dat niet helemaal thuisbrengen eigenlijk.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Als je nu de "cal_high_mv" een stuk of vier omhoog of omlaag doet (*), dan zal die 4mV afwijking /met/ de condensator naar nul of 8 gaan.
Die situatie MET condensator lijkt me een wenselijke situatie. Je hebt met een verkeerde "cal" waarde de fout door "geen condensator" deels gecompenseerd. Omdat die fout afhangt van waar je de boel mee aanstuurt (potmeter, weerstandsnetwerk of LM35) is het fijn om de condensator WEL toe te passen en de boel even af te regelen zodat ie juist is.
Merk op dat je ook 1008.5 kan opgeven als cal_high_mv. Als dit een lagere afwijking geeft (in het hoge bereik) dan 1008 of 1009 moet je dat gewoon doen.
(*) als jij niet vertelt of die afwijking naar boven of naar beneden is, dan kan ik niet zeggen of die omhoog of omlaag moet.
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Ah, ja, je moet mét condensator wel de calibratie opnieuw doen natuurlijk.
Het gedrag zónder condensator is namelijk wel te verklaren: de ADC (afhankelijk van het soort) kan een stroompiek op de ingang trewkken ten tijde van mux-switchen (dat doe je nu niet) of van acquisitie (dat doe je nu wel). Samen emt een hoog impedante spanningsbron (je weerstandsdeler) heeft dat een spanningsval tot gevolg.
Daarom buffer je de analoge pin: je kunt dan vanuit de condensator snelle stroompieken opvangen. Een andere reden (in jouw geval een pluspunt) is dat je een low-pass filter creëert waarmee je snelle fluctuaties in je sensor signaal kan opvangen.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
De AVR heeft op de sample-and-hold condensator "de vorige analoge spanning" staan als je van kanaal wisselt. Dus meet je eerst een "voedingsspanning" signaal" en daarna een lagere spanning, dan zie je een verhoging van de eerste paar metingen van die lagere spanning.
Het lijkt er op dat bij de ESP32 de condensator altijd bij nul begint, waardoor je afhankelijk van de impedantie van je signaal iets lager meet dan wat zou moeten.
OPTOdesign
R&D | Design | Light | Innovation | Education
Dank elmowww, dank rew!
Jaaa, daar ging ik de fout in! Ik stak de condensator er gewoon bij zonder de Kalibratie opnieuw uit te voeren...
Ik ben nu een kalibratie-sotware-tooltje aan het maken, zodat ik via de seriële poort (over USB) de kalibratie kan uitvoeren op ieder gewenst moment op verschillende poorten van verschillende controllers. Als ik het tooltje ga testen neem ik de condensator mee!
rew: Merk op dat je ook 1008.5 kan opgeven als cal_high_mv. Als dit een lagere afwijking geeft (in het hoge bereik) dan 1008 of 1009 moet je dat gewoon doen.
Precies, dat ga ik wel toepassen als ik de LM35 ga gebruiken. Handmatig bijstellen (als dat nodig is) om een zeer nauwkeurige meting te krijgen in een klein bereik (150mV t/m 250mV voor de ventilatorregeling).
elmowww: Het gedrag zónder condensator is namelijk wel te verklaren: de ADC (afhankelijk van het soort) kan een stroompiek op de ingang trewkken ten tijde van mux-switchen (dat doe je nu niet) of van acquisitie (dat doe je nu wel). Samen emt een hoog impedante spanningsbron (je weerstandsdeler) heeft dat een spanningsval tot gevolg.
Tijdens kalibratie had ik de DAC-pin via een 10k weerstand op de ADC-pin gezet. Dus niet echt een weerstandsdeler (los van interne koppelingen). Tijdens gebruik dan weer wel: namelijk de (10k)potmeter (zonder 10n) Mijns inziens had dat geen zin - maar ik heb ook weer wat geleerd dankzij jullie theoriën! Dus ik zet altijd een C-tje aan de ingang voorlopig 
rew: Het lijkt er op dat bij de ESP32 de condensator altijd bij nul begint, waardoor je afhankelijk van de impedantie van je signaal iets lager meet dan wat zou moeten.
Ik weet niet precies waar je dat op baseerd, als dat op mijn waardes is, weet dan dat ik de adc-waarde steeds 1000x uitlees en daar het gemiddelde van neem. Bij het wisselen van Cal_ADC_High & _Low startte ik steeds 2x op omdat de waarde van de vorige meting nog in het systeem leek te zitten. Overigens kan dat ook door de systeem-reset zelf komen. Dus baseer je theorie vooral niet op mijn resultaten... 