Forum: Mikrocontroller und Digitale Elektronik Arduino an 5V usb KFZ Netzteil


von Tobias G. (nosec)


Lesenswert?

Hey,

Vorhaben:
Es soll ein Arduino mini Pro 5V am KFZ Bordnetz 12V betrieben werden. Um 
eine sauber Spannung zu erhalten habe ich mir von Anker eine 5V Usb Kfz 
Netzteil besorgt.

Mit dem Arduino soll eine Analogmessung durchgeführt werden. Jetzt 
liefert das Netzteil aber 5,2V!

1. Ist das ein Problem für die Analogmessung. Muss ich dan mit 5,2V 
rechnen?
bezogen auf diesen Sensor.
https://www.nxp.com/docs/en/data-sheet/MPX5700.pdf

2. Wäre diese Umrechnung dann so richtig?

Druck in bar = (0.743999*sensor-15.444444)/100

Fragt mich nicht wie ich auf die Formel kamm. Hatte das zur meiner 
Schulzeit gemacht. Leider habe ich es vergessen wie man eine Formel 
anhand einem Diagarmm erstellt. Wäre nett, wenn da jemand mal drüber 
schauen könnte!

2. Oder wäre es besser die 5,2V auf 5V runter zu bekommen?

Grüße Tobias

von Manfred (Gast)


Lesenswert?

Tobias G. schrieb:
> Um eine sauber e Spannung zu erhalten habe ich mir
> von Anker eine 5V Usb Kfz Netzteil besorgt.
 ein Netzteil, ohne e am Ende.
1
 analogReference (INTERNAL); // min 1.0 / typ 1.1 / max. 1.2 Volt

ist die Lösung, sich auf die Versorgung zu verlassen, ein ungeschickter 
Ansatz.

von Stefan F. (Gast)


Lesenswert?

Tobias G. schrieb:
> Ist das ein Problem für die Analogmessung.
Nein.

> Muss ich dann mit 5,2V rechnen?
Wenn du die 5V als Referenzspannung verwendest, dann ja. Man kann aber 
auch auf eine interne Referenz mit konstanter Spannung umschalten.

> Fragt mich nicht wie ich auf die Formel kam.

Tja, das wollte ich aber fragen, weil da die 5V nicht drin vorkommen, 
nach der du gefragt hast.

Im Datenblatt vermisse ich einen Hinweis, ob die Ausgangsspannung des 
Sensors relativ zur Versorgungsspannung ist. Vermutlich ja. Wenn ich 
damit Recht habe, spielt die absolute Höhe der Versorgungsspannung keine 
Rolle, solange du den Sensor mit der gleichen Spannung versorgst, die 
auch als Referenz für den ADC dient. Das hast du ja vor. Wird schon 
klappen.

von Dieter F. (Gast)


Lesenswert?

Stefanus F. schrieb:
> Im Datenblatt vermisse ich einen Hinweis, ob die Ausgangsspannung des
> Sensors relativ zur Versorgungsspannung ist

Dann schau Dir mal das Diagramm im Datenblatt an - oben links steht die 
Formel :-)

von Stefan F. (Gast)


Lesenswert?

Dieter F. schrieb:
> Dann schau Dir mal das Diagramm im Datenblatt an - oben links steht die
> Formel

Cool, dann passt es mit den 5,2V ja so.

von Tobias G. (nosec)


Lesenswert?

Stefanus F. schrieb:
> Im Datenblatt vermisse ich einen Hinweis, ob die Ausgangsspannung des
> Sensors relativ zur Versorgungsspannung ist. Vermutlich ja. Wenn ich
> damit Recht habe, spielt die absolute Höhe der Versorgungsspannung keine
> Rolle, solange du den Sensor mit der gleichen Spannung versorgst, die
> auch als Referenz für den ADC dient. Das hast du ja vor. Wird schon
> klappen.

Habe es soeben ausprobiert. Es spielt keine Rolle ob 5,2V oder 5V der 
sensor liefert immer den gleichen Digitalwert. (Arduino und sensor 
wurden jeweils mit der gleichen Spannung bei dem test versorgt!)

Also wäre das ja geklärt.



Aber mit der Formel im Diagramm komm ich nicht zurecht.

       Vout = VS*(0.0012858*P+0.04) ± Error

1:   7,0479 = 5,2*(0.0012858*1023+0.04) ± Error (abweichung  von 0,67%)
2:   6,7768 = 5,0*(0.0012858*1023+0.04) ± Error (abweichung  von 3,18%)

Das heist jetz das der Seonor in meinem Fall sogar genau misst??? Oder 
habe ich die Formel falsch verstanden?

Grüße Tobias

von Jens M. (schuchkleisser)


Lesenswert?

Vout kann ja nur bis 4,75V laut DB, bei 5V supply und 700kPa maximal.
P ist der Druck, Beispielhaft für 500kPa:
Vo = 5v*(0,0012858*500+0,04)
Vo = 3,4145V
Passt mit dem Diagramm überein.
Und: der Sensor reagiert auf die Betriebsspannung, ist also 
ratiometrisch, da Vs (Vsupply) in der Rechnung steht.
Dein Versuch war also falsch.

: Bearbeitet durch User
von Soul E. (Gast)


Lesenswert?

Manfred schrieb:

> ist die Lösung, sich auf die Versorgung zu verlassen, ein ungeschickter
> Ansatz.

Bei einem ratiometrischen Sensor ist das sogar ein notwendiger Ansatz. 
Die Versorgungsspannung des Sensors und die Referenzspannung des ADC 
müssen identisch sein. Die Versorgungsspannung kürzt sich beim Wandeln 
raus, ihr Absolutbetrag ist damit irrelevant.

von Tobias G. (nosec)


Lesenswert?

Jens M. schrieb:
> Vout kann ja nur bis 4,75V laut DB, bei 5V supply und 700kPa maximal.
> P ist der Druck, Beispielhaft für 500kPa:
> Vo = 5v*(0,0012858*500+0,04)
> Vo = 3,4145V
> Passt mit dem Diagramm überein.

Ok Danke für das Beispiel.


Jens M. schrieb:
> Und: der Sensor reagiert auf die Betriebsspannung, ist also
> ratiometrisch, da Vs (Vsupply) in der Rechnung steht.
> Dein Versuch war also falsch.


Hmm und warum hat dann der Serialmonitor in der Arduino IDE bei 5,2V 
sowie bei 5,025V(PC USB Portspannung) den gleichen ADC Wert angezeigt?

von K. S. (the_yrr)


Lesenswert?

Tobias G. schrieb:
> Aber mit der Formel im Diagramm komm ich nicht zurecht.
>
>        Vout = VS*(0.0012858*P+0.04) ± Error
>
> 1:   7,0479 = 5,2*(0.0012858*1023+0.04) ± Error (abweichung  von 0,67%)
> 2:   6,7768 = 5,0*(0.0012858*1023+0.04) ± Error (abweichung  von 3,18%)
>
> Das heist jetz das der Seonor in meinem Fall sogar genau misst??? Oder
> habe ich die Formel falsch verstanden?

das sieht falsch aus. der Sensor misst doch nur bis 700kPa, und du setzt 
da 1023 ein? und Vout soll größer als VS sein? was sind denn die 1023 
und was willst du berechnen? irgendetwas hast du falsch eingesetzt.


Tobias G. schrieb:
> Jens M. schrieb:
>> Und: der Sensor reagiert auf die Betriebsspannung, ist also
>> ratiometrisch, da Vs (Vsupply) in der Rechnung steht.
>> Dein Versuch war also falsch.
>
> Hmm und warum hat dann der Serialmonitor in der Arduino IDE bei 5,2V
> sowie bei 5,025V(PC USB Portspannung) den gleichen ADC Wert angezeigt?

weil das genau das ist was bei ratiometrischem Ausgang passiert
beispiel:
der Sensor gibt bei ca. 400kPa ca 1/2 VS aus
der Arduino misst die Ausgangsspannung im Verhältnis zu der Referenz 
(VS)
 => er misst also nur die 1/2, unabhängig von VS; 1/2 des Messbereiches 
0-1023 sind immer 511, egal ob 5V oder 3V oder 5.2V.

Außer du hast jetzt doch eine interne Referenz verwendet, dann ist der 
ADC entweder in Sättigung/Übersteuert (immer 0 oder 1023), oder der 
Unterschied ist so gering dass der 10bit ADC es nicht auflösen kann. 
SChau mal ins Datenblatt vom Atmega?, da steht was zur Filterung der 
Versorgungsspannung vom ADC, das solltest du eventuell machen (und den 
Sensor auch aus dieser Spannung versorgen)

: Bearbeitet durch User
von Tobias G. (nosec)


Lesenswert?

K. S. schrieb:
> weil das genau das ist was bei ratiometrischem Ausgang passiert
> beispiel:
> der Sensor gibt bei ca. 400kPa ca 1/2 VS aus
> der Arduino misst die Ausgangsspannung im Verhältnis zu der Referenz
> (VS)
>  => er misst also nur die 1/2, unabhängig von VS; 1/2 des Messbereiches
> 0-1023 sind immer 511, egal ob 5V oder 3V oder 5.2V.
>
> Außer du hast jetzt doch eine interne Referenz verwendet, dann ist der
> ADC entweder in Sättigung/Übersteuert (immer 0 oder 1023), oder der
> Unterschied ist so gering dass der 10bit ADC es nicht auflösen kann.
> SChau mal ins Datenblatt vom Atmega?, da steht was zur Filterung der
> Versorgungsspannung vom ADC, das solltest du eventuell machen (und den
> Sensor auch aus dieser Spannung versorgen)

Ok, habe jetz mal den Vout des Sensor bei 5,2V und 5V gemesen.

bei 5,2V = 0,967V
bei 5,0V = 0,898V

Habe mal in das DB geschaut und bin auf Aref gestoßen. Wäre nicht das 
die Lösung für das Problem wenn ich die %,2V auf den Aref Pin gebe und 
im Quellcode auf "analogReference(EXTERNAL)" umschalte?
https://michaelsarduino.blogspot.com/2015/07/aref-pin.html

von K. S. (the_yrr)


Lesenswert?

Tobias G. schrieb:
> Habe mal in das DB geschaut und bin auf Aref gestoßen. Wäre nicht das
> die Lösung für das Problem wenn ich die %,2V auf den Aref Pin gebe und
> im Quellcode auf "analogReference(EXTERNAL)" umschalte?

welche Referenz benutzt du denn bis jetzt?
Wenn du nix änderst wird VCC verwendet (standard Einstellung), also das 
was du jetzt als Lösung beschrieben hast machst du bereits. Deswegen 
funktioniert es ja auch, dass bei 5V und 5.2V derselbe ADC Wert 
angezeigt wird. AREF ist für externe Referenzen, die nicht VCC sind, 
oder um einen Kondensator für die Interne Referenz anzuschließen. du 
brauchst beides nicht, also lass es so wie es ist. Du hast bereits durch 
nichts tun alles richtig gemacht.

von Tobias G. (nosec)


Lesenswert?

Jens M. schrieb:
> Vout kann ja nur bis 4,75V laut DB, bei 5V supply und 700kPa maximal.
> P ist der Druck, Beispielhaft für 500kPa:
> Vo = 5v*(0,0012858*500+0,04)
> Vo = 3,4145V
> Passt mit dem Diagramm überein.

In meinem Fall müste ich ja dann für Vs 5,2V verweden!?

die Formel auf P umstellen und für Vo dann (Vo = adcwert / 1024.0 * 5,2) 
einsetzen um einen Druck in kPa zu erhalten. Das ich die Einheit Bar 
erhalte teile ich die kPa durch 100.

Wäre der Gedankengang so richtig?

von Jens M. (schuchkleisser)


Lesenswert?

Nein, mir ging es um die "Deine Rechnung gibt Vo über Vs" und "Vo ist 
verschieden bei 5 und 5,2V", was 1. nicht geht und 2. nicht stimmt.
Welche Spannung du da einsetzt ist egal, denn der ADC muss Vs als 
Referenz nehmen, denn der Sensor tut das auch.
Dadurch ist "1023" entsprechend 5V entsprechend "der Sensor platzt", 
aber bei 5,2V eben 1023 entsprechend 5,2V entsprechend "der Sensor 
platzt".

Effektiv ist es egal welche Zahl du da einsetzt, denn du willst ja nicht 
Volt sondern int wissen, also "was spuckt der ADC aus".
Du musst den Vo-Wert also noch durch "Vs/1023" teilen, und dann kürzt 
sich Vs ja raus.

500kPa ergeben dann
a) 5v*(0,0012858*500+0,04)/(5V/1023) = 699
oder
b) 5,2v*(0,0012858*500+0,04)/(5,2V/1023) = 699
Also
c) (0,0012858*P+0,04)*1023=int, unabhängig der Spannung
Wie du jetzt von 699 auf 500kPa kommst, darfst du aber selber rechnen ;)

: Bearbeitet durch User
von Tobias G. (nosec)


Lesenswert?

Jens M. schrieb:
> Wie du jetzt von 699 auf 500kPa kommst, darfst du aber selber rechnen ;)

P=((int/1023)-0,04)/0,0012858

Wenn ich jetzt für int 699 einsetzt erhalte ich P=500,299kPa. Das würde 
ja passen.

setzte ich 962 für int ein bekomme ich für P=700,242kPa

auf die 962 komm ich:

5V/1024=0,0048828125V

4,7V/0,0048828125V=962,56

Um eine Referenz zu haben, habe ich den Atmosphrischen Druck gemessen 
der dann 104.9739837kPa wäre. Vergleiche ich diesen mit dem Luftdruck an 
meinem Standort 101.4kPa passt es nicht ganz. Und ist auch nicht mehr in 
der Tolleranz von 2%.

Jetzt könnte man noch +-ERROR in die Formel einbinden um das 
auszugleichen. Aber ich vermute das ich dazu mehrere genau Referenzpunkt 
benötige!?

von Jens M. (schuchkleisser)


Lesenswert?

Deine Formel hab ich jetzt nicht kontrolliert, aber die Kunst ist die 
ganze Berechnung von ADC-Wert zu Druck ohne floats zu machen und ohne 
die Grenzen der Werte zu verlassen.
0,001... und 0,004... mit 10 Stellen nach dem Komma ist nix was man auf 
einem Atmega 328 machen sollte, der hat nur 8bit, alles andere ist 
extrem zeitaufwändig.

Du bist sicher das dein Referenzbarometer genau ist?
Mit +-Error ist die Toleranz gemeint, und wer es genau haben will muss 
kalibrieren, 2% sind schon recht gut aber eben nicht genau.
Also mehrere exakt gemessene Referenzdrücke anschließen und Werte 
messen, speichern und dann für genau diese Temperatur und genau diesen 
Sensor exakte Werte bekommen.
Oder sich einfach sagen: 2% passt schon.
Immerhin ist dein ADC mit 1024 Schritten auf 7 Bar jetzt auch nicht der 
Ausbund an Genauigkeit, schließlich hast du nur eine Auflösung von 
6,8mBar, damit 1004 oder 1001mBar zu unterscheiden ist sportlich... ;)
Effektiv sogar noch weniger, weil der Sensor ja nicht 0-5V geht.

: Bearbeitet durch User
von Tobias G. (nosec)


Lesenswert?

Jens M. schrieb:
> aber die Kunst ist die
> ganze Berechnung von ADC-Wert zu Druck ohne floats zu machen und ohne
> die Grenzen der Werte zu verlassen.

Wie soll das gehen? In Brüche könnte man die floate umwandeln!?

Jens M. schrieb:
> 0,001... und 0,004... mit 10 Stellen nach dem Komma ist nix was man auf
> einem Atmega 328 machen sollte, der hat nur 8bit, alles andere ist
> extrem zeitaufwändig.

Der Controller muss eig eh nur das machen und anschließenden via funk 
versenden...

Jens M. schrieb:
> Du bist sicher das dein Referenzbarometer genau ist?

Nein, habe den Wert von meiner örtlichen Wetterstation

Jens M. schrieb:
> mmerhin ist dein ADC mit 1024 Schritten auf 7 Bar jetzt auch nicht der
> Ausbund an Genauigkeit, schließlich hast du nur eine Auflösung von
> 6,8mBar, damit 1004 oder 1001mBar zu unterscheiden ist sportlich... ;)
> Effektiv sogar noch weniger, weil der Sensor ja nicht 0-5V geht.

Da hast du natürlich Recht...

von Jens M. (schuchkleisser)


Lesenswert?

Tobias G. schrieb:
> In Brüche könnte man die floate umwandeln

Ohne floats.
Das geht auch mit Ganzzahlenmathematik, wenn man erst multipliziert und 
dann dividiert.
Der Proz kann deutlich besser 64bit Ganzzahlen verarbeiten als Floats 
mit 10 Stellen.
Z.B. könntest du 0,0012858*x auch darstellen als x*12858/10000000, das 
geht deutlich flotter und genauer, auch wenn das Ergebnis 0,6429 in 
diesem Fall nicht in eine Ganzzahl passt.
Es hält dich aber keiner auf, statt 10000000 nur 1000 einzusetzen und am 
Display den 4stelligen Wert mit dem Komma vorne falsch zu drucken.
Genau so könnte man den Wert für "Ein" ADC vorberechnen (also du) und 
zwar z.B. als
-700kPa entsprechen 1023 ADC
-1 ADC ist also 0,684261974 kPa
-Merke 684
-Nehme ADC*684 in ein Long
-Ergibt bei 1023ADC also 699732
-Füge ein Komma vor der dritten Stelle von rechts ein:
-Tada 699,732kPa.
Ganz ohne Floats, klein, schnell, simpel.
Du musst nur beim Coden einmal richtig rechnen, dann passt das.
Du kannst auch Nullwert und Skalenendwert als kalibrierbare Werte in die 
Rechnung einbringen, aber das würde erfordern das Gerät bei 0 und 7 bar 
zu prüfen.

Tobias G. schrieb:
> von meiner örtlichen Wetterstation

Die sollte kalibriert sein, wenn sie offiziell "Wetterdienst" ist. 
Allerdings ist der Wert nicht unbedingt "live", oder bist zu hingegangen 
und hast da auf die Anzeige gesehen?

Dennnoch bleibt, das die Auflösung des Systems nur ca. 684Pascal ist.

von Tobias G. (nosec)


Lesenswert?

Da ich keine 700kPa messen werde könnte man nicht den Messbereich zb auf 
400kPa umstellen?

Dann wäre die messung hochauflösender!

von Jens M. (schuchkleisser)


Lesenswert?

Du kannst die Referenzspannung nach Prozessordatenblatt variieren und 
damit die Skala reduzieren.
Evtl. (bzw. im Allgemeinen) verlierst du dann aber die Ratiometrie. Also 
Auflösung++; Genauigkeit--; Stabilität--;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.