Forum: Mikrocontroller und Digitale Elektronik negative Spannung messen


von Gaunzast (Gast)


Lesenswert?

Hallo,
ich messe über folgende Schaltung
1
ADC-----------------[470kO]------In
2
        |      |
3
        |       [100kO]----------5V
4
         [100kO]-----------------GND
Spannungen am Atmega. Wenn Spannung anliegt, geht es auch wunderbar. 
Wenn nicht, zeigt er mir jedoch statt Null Volt die geteilte Spannung 
von den 5V an, sprich ca. 2.5V. Woran liegt das? Ist es ein 
Softwareproblem? Programmiert wird in Bascom:
1
For I = 1 To 64                                             'V1 get sum of 64 values
2
   Vcc1 = Getadc(3)
3
   Vcc_sum1 = Vcc_sum1 + Vcc1
4
Next I
5
6
Shift Vcc_sum1 , Right , 6                                  'divide by 64
7
8
 Vx1 = Vcc_sum1 * 5.12
9
                                'get volts
10
 Vp1 = Vx1 / 1024                               
11
Vp1 = Vp1 * 5.05
12
Vp1 = Vp1 - 10
13
14
  Vp3 = Vp1
15
16
 Volt1 = Fusing(vp1 , "##.##")
gruß Fetti

von N. B. (saint1234)


Lesenswert?

Hi,

ich bin leider nicht bascom bewandert. Aber du hast einen 
Spannungsteiler durch die beiden 100kohm Widerstände:

U_adc_offset: 5V* 100k/(100k+100k)= 2,5V...

Sobald also keine Spannung anliegt, misst dein ADC die 2,5V.

In deinem Programm weißt du also:

U_adc = (5V*ADC_value-512) / 1024

die 512 entsprechen 2.5V. Die Rerferenzspannung deines ADCs ist auch 5V 
ja?

Gruß,

von Gaunzast (Gast)


Lesenswert?

Nico B. schrieb:
> Die Rerferenzspannung deines ADCs ist auch 5V
> ja?

Genau. Nur, wenn 0V anliegen, mißt er effektiv ja auch 2,5V(wegen dem 
Pullup), zeigt aber wegen der Software 0V an.  Es sollte doch keinen 
Unterschied für den ADC-Wert machen, ob keine ,oder 0V angeschlossen 
sind.

von N. B. (saint1234)


Lesenswert?

Hi,

Ja deshalb siehe oben mein Pseudocode. Du wolltest doch erreichen, dass 
wenn keine Spannung an In anliegt die Anzeige 0V ausgibt oder?

In Basecom müsstest du auch 512 von deinem ADC Wert subtrahieren.

Die Frage bezüglich der Referenz war eher, das wenn dein ADC mit einer 
Referenz von beispielsweise 3,3V arbeitet du garkeine 5V messen kannst 
und somit die Auflösung auch nicht stimmt.

Gruß,

EDIT:

die Zeile:

Vp1 = Vp1-10 verstehe ich nicht. Was wolltest du damit erreichen? du 
ziehst von deiner Spannung 10V ab...

Nochmal EDIT:

in meiner Rechnung fehlt ne Klammer:

U_adc = 5V*(ADC_value-512) / 1024

So wie es aussieht, willst du ja eine Mittelwertbildung machen. Rechne 
zuerst mit der Formel die Werte in eine Spannung um und dann bilde den 
Mittelwert. Du Summierst grad alle ADC Werte auf.

von Gaunzast (Gast)


Lesenswert?

Nico B. schrieb:
> So wie es aussieht, willst du ja eine Mittelwertbildung machen. Rechne
> zuerst mit der Formel die Werte in eine Spannung um und dann bilde den
> Mittelwert. Du Summierst grad alle ADC Werte auf.

Genau, die Mittelwertbildung passiert aber vorher, beim Umrechnen des 
ADC in einen Voltwert zwischen 0 und 5V. Durch das shiften wird auch 
wieder geteilt.

Die Umrechnung durch den Spannungsteiler erfolgt in diesen Zeilen:
Vp1 = Vp1 * 5.05 (wegen des Verhätnisses der Widerstände)
Vp1 = Vp1 - 10   (wegen des Quasi-Offsets von -10 als unterster Wert).
Die Voltwerte von -10 bis +10 werden auch alle sauber angezeigt. Das 
Problem tritt erst auf, wenn der Eingang nicht angeschlossen ist.

von Alexander S. (esko) Benutzerseite


Lesenswert?

So ist es mit 0 Volt am Eingang:
1
ADC-----+------+----[470kΩ]------GND
2
        |      |
3
        |      +----[100kΩ]------5V
4
        |               
5
        +-----------[100kΩ]------GND
Der 470 kΩ Widerstand und der 100 kΩ Widerstand sind parallel, haben 
also zusammen nur 82,5 kΩ. Das ergibt eine Spannung von 2,26 Volt am 
Eingang.

Bei offenem Eingang:
1
ADC-----+------+
2
        |      |
3
        |      +----[100kΩ]------5V
4
        |               
5
        +-----------[100kΩ]------GND
Jetzt ergeben sich 2,5 Volt am Eingang.

von Der Andere (Gast)


Lesenswert?

Berechne mal die Formel für die Spannung am ADC Eingang als Funktion der 
Spannungen "In", "5V" und "Gnd".

von N. B. (saint1234)


Lesenswert?

Gaunzast schrieb:
> Vx1 = Vcc_sum1 * 5.12
>                                 'get volts
>  Vp1 = Vx1 / 1024


Ok ich habe den Code mal nachvollzogen. Die 5,12V sind wahrscheinlich 
deine gemessene Referenz oder?

Ok betrachten wir mal deine Rechnung. Für die Rechnung lasse ich die 
470k mal weg.

Angenommen Vcc_sum1 = 340 (nach Mittelwertbildung)

dann ist Vx1 = 340* 5,12V = 1740,8
-->
Vp1= 1740,8 / 1024 = 1,7V
-->
Vp1 = Vp1*5,05 = 1,7V *5,05 = 8,585 V
-->
Vp1 = Vp1-10 = -1,415V --> Das wäre dein Ergebnis!

Rechnen wir aus was 340 ohne Spannungsteiler ist :

U_adc = (5,12V *340) / 1024 = 1,7V

Durch den Spannungsteiler liegt an deinem ADC bei offenem Eingang 2,5V 
an.
Die Differenz zwischen Spannungsteiler (2,5V) und gemessener Spannung 
(1,7V) ist deine Spannung an In:

1,7V = 2,5V + U_in
--> U_in = -0,8V

Deine Formel zur Berechnung stimmt also nicht.
Da du durch deine 470k und den 100k gegen Masse einen weiteren 
Spannungsteiler hast beträgt U_In eigentlich -5,81V.


Eine bessere und gebräuchlichere Schaltung wäre diese:

    5V
    |
    |
    R
    |
    +--------ADC
    |
    R
    |
    |
    +-------- Messeingang

von Gaunzast (Gast)


Lesenswert?

Alexander S. schrieb:
> Der 470 kΩ Widerstand und der 100 kΩ Widerstand sind parallel, haben
> also zusammen nur 82,5 kΩ. Das ergibt eine Spannung von 2,26 Volt am
> Eingang.

Das scheint der Grund zu sein. Ich war davon ausgegangen, das offener 
Eingang und 0V den gleichen ADC-Wert liefern müßten.

Nico B. schrieb:
> Deine Formel zur Berechnung stimmt also nicht.
> Da du durch deine 470k und den 100k gegen Masse einen weiteren
> Spannungsteiler hast beträgt U_In eigentlich -5,81V.
>
> Eine bessere und gebräuchlichere Schaltung wäre diese:

Ob die Formel stimmt oder nicht ist mir fast Wurst, solange stets der 
richtige Wert angezeigt wird.:) Die Schaltung läßt sich nicht mehr 
ändern. Jedenfalls danke für die Hilfe.

von dummschwaetzer (Gast)


Lesenswert?

5V
    |
    |
    R(100k)
    |
ADC +-R(470k)Messeingang
    |
    R(100k)
    |
    |
    GND

von Leonardo (Gast)


Lesenswert?

Gaunzast schrieb:
> Vp1 = Vp1 * 5.05 (wegen des Verhätnisses der Widerstände)

kannst Du das mal erklären?

von Der Andere (Gast)


Lesenswert?

Gaunzast schrieb:
> Die Schaltung läßt sich nicht mehr
> ändern.

Du kannst also nicht ein Widerstand auslöten und einen zweiten durch 
einen anderen Wert ersetzen? Dann hast du Pech gehabt.

Gaunzast schrieb:
> Das scheint der Grund zu sein. Ich war davon ausgegangen, das offener
> Eingang und 0V den gleichen ADC-Wert liefern müßten.

Gaunzast schrieb:
> Ob die Formel stimmt oder nicht ist mir fast Wurst,

Keine Wurst, sondern Käse, wenn man sich die Formel nicht aus der 
gewählten Schaltung herleitet, sondern "davon ausgeht" oder "denkt" oder 
"meint".
Oder sich einfacher auf etwas bewährtes verlässt.
Siehe:
https://www.mikrocontroller.net/articles/Spannungsteiler

von Günter Lenz (Gast)


Lesenswert?

Gaunzast schrieb:
>zeigt er mir jedoch statt Null Volt die geteilte Spannung
>von den 5V an, sprich ca. 2.5V. Woran liegt das?

Das ist doch normal, deshalb heißt ja auch ein Spannungsteiler
"Spannungsteiler", weil er die Spannung teilt.
Wenn Beide Widerstände gleich sind also genau   5V / 2.

von Route_66 H. (route_66)


Lesenswert?

Gaunzast schrieb:
> Ob die Formel stimmt oder nicht ist mir fast Wurst, *solange stets der
> richtige Wert* angezeigt wird.:) Die Schaltung läßt sich nicht mehr
> ändern. Jedenfalls danke für die Hilfe.

Nicht nur Wurst oder Käse, sondern technische Fehlleistung.
Die gezeigte Schaltung aus der Eröffnugspost eignet sich nicht zum 
Messen!

Ich kann nicht feststellen, ob der Eingang offen ist.
Ich kann feststellen ob die Spannung am Eingang größer als 2,5 Volt ist.
Ich kann feststellen ob die Spannung am Eingang kleiner als 2,5 Volt 
ist.
Aus den ADC-Werten kann ich aus diesen Abweichungen nach oben oder unten 
einen ungefähren Wert der Eingangsspannung errechnen. Ungefähr deshalb, 
weil durch den digitalen Restfehler ein Bit nicht immer der gleichen 
Spannungsstufe in Millivolt entspricht.
Der Fehler ist umso größer, je dichter meine Eingangsspannung an den 2,5 
Volt dran ist.

von N. B. (saint1234)


Lesenswert?

Route 6. schrieb:
> Aus den ADC-Werten kann ich aus diesen Abweichungen nach oben oder unten
> einen ungefähren Wert der Eingangsspannung errechnen. Ungefähr deshalb,
> weil durch den digitalen Restfehler ein Bit nicht immer der gleichen
> Spannungsstufe in Millivolt entspricht.
> Der Fehler ist umso größer, je dichter meine Eingangsspannung an den 2,5
> Volt dran ist.

Kannst du das genauer erläutern? (ernst gemeinte Frage! Das interessiert 
mich)

Die ADCs eines ATmega haben natürlich max. 2 LSB Ungenauigkeit, aber ob 
er so genau "messen" muss? Er kann ja laut seiner Aussage die Spannungen 
messen. Und durch die Schaltung kann man sich auch den Wert am Eingang 
im uC zurückrechnen. Er kann jedoch eigentlich 0V nicht von -2,5V 
unterscheiden (bei Ihm scheint es zu funktionieren (wie auch immer).

Die Hinweise hier scheinen Ihm aber relativ egal zu sein, da er 
anscheinend das misst, was er gerne messen will.

Gruß,

von Harald W. (wilhelms)


Lesenswert?

Der Andere schrieb:

> Keine Wurst, sondern Käse,

"Wurst und Käse" war bei uns im Labor der Standardausdruck
für "worstcase". :-)

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.