Forum: Mikrocontroller und Digitale Elektronik Spannung in % umrechnen für Fortgeschrittene?


von Mathe-Null (Gast)


Lesenswert?

Hallo Forum,

gut war ich in Mathe noch nie, aber für dieses Problem wüsste ich nicht 
mal, wonach ich suchen soll.

Ich messe mit einem ATmega/ADC über einen Spannungsteiler eine Spannung 
von max. 65V.

Aus dem ADC Wert die gemessene Spannung (am Pin) auszurechnen, ist kein 
Problem.
Die gemessene Spannung dann in die tatsächliche Spannung vor dem 
Spannungsteiler umzurechnen, ist ebenfalls kein Problem.


Damit die übrige Peripherie des Gerätes allerdings ordnungsgemäß 
funktioniert, muss die Spannung, die ich da messe, im Bereich zwischen 
48V und 65V liegen. Sie kann, rein technisch, aber auch bis 0V 
runtergehen - nur arbeitet die Peripherie dann eben nicht mehr korrekt.

Und diesen Intervall, 48V - 65V möchte ich gerne als Skala für eine 
Prozent-Anzeige verwenden.

Also nicht:
1
 0.0 V =   0%  
2
 ... 
3
32.5 V =  50% 
4
 ...
5
65.0 V = 100%

sondern stattdessen
1
<= 48.0 V =   0%
2
   ...
3
 = 56.5 V =  50%
4
   ...
5
>= 65.0 V = 100%

Das <= 48V als 0% intepretiert werden sollen bzw. >= 65V als 100% krieg 
ich ja noch hin. Aber wie komme ich den "skalierten" Prozentwert 
dazwischen?
Das muss doch irgendwie auszurechnen sein... O_o
Hat dazu jemand vielleicht eine Idee und kann mir einen Denkanstoß 
geben?

Würde mich über jegliche Hilfe sehr freuen.

Vielen Dank, Tobias

von A. Z. (donvido)


Lesenswert?

y=(x-48)/(65-48)*100%

von Michael B. (laberkopp)


Lesenswert?

(volt-48)/(65-48)*100 ?

Achtung, muss man mit float berechnen, nicht mit int Ganzzahlen.

Will man nur Ganzzahlen, rechnet man

((volt-48)*100)/(65-48)

von AF (Gast)


Lesenswert?


Hier ist
 die gemessene Spannung und
 der gesuchte relative Wert.

von alex (Gast)


Lesenswert?

Möchtest du das direkt im Programm machen oder händisch einfach die 
Lösung bekommen?

Ein Befehl für den ATmega wäre die Funktion:

map(variable, Startwert_Skala1, Endwert_Skala1, Startwert_Skala2, 
Endwert_Skala2);

Rechnerisch:

Messwert - 48 = Messwert_1

Messwert_1*(Messwert_1 / 17)*100 = Messwert_1_in_Prozent

von Rübezahl (Gast)


Lesenswert?

Wenn man zum Beispiel 43 Prozent haben will:

43 x 17 /100 = 7,31
7,31 + 48 = 55,31


Die 17 ist der Bereich zwischen 48 und 65.

von MagIO2 (Gast)


Lesenswert?

Da der Messwert laut Problembeschreibung auch kleiner als 48V sein kann, 
muss man noch ne Sonderbehandlung einbauen. Sonst ginge die 
Prozentanzeige auch bis -282%.

von Sebastian R. (sebastian_r569)


Lesenswert?

Arduino bietet dafür map() und contstrain().

Wenn man sich die Funktionen dafür in der Reference klaut und in die 
Zielsprache portiert, kann man das recht einfach umsetzen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mathe-Null schrieb:
> Aus dem ADC Wert die gemessene Spannung (am Pin) auszurechnen, ist kein
> Problem. Die gemessene Spannung dann in die tatsächliche Spannung vor dem
> Spannungsteiler umzurechnen, ist ebenfalls kein Problem.
Man kann diese Zwischenskalierungen auch einfach weglassen, dann sind 
bei einem 10-Bit Wandler die 65V der AD-Wert 1023 und 48V der Wert 755, 
zwischen Ober und Untergrenze liegen 268 Inkremente.
Ergibt sich somit in 16-Bit Berechnung die Formel
1
Prozent = ((ADWert-755)*100)/268;
Und mit Abfangen der Grenzen kommt dann heraus
1
Prozent = ADwert>755 ? ((ADWert-755)*100)/268 : 0;
Oder in der ausführlichen Schreibweise
1
if ADWert<755 Prozent = 0;
2
else          Prozent = ((ADWert-755)*100)/268;

von HildeK (Gast)


Lesenswert?

Mathe-Null schrieb:
> Damit die übrige Peripherie des Gerätes allerdings ordnungsgemäß
> funktioniert, muss die Spannung, die ich da messe, im Bereich zwischen
> 48V und 65V liegen. Sie kann, rein technisch, aber auch bis 0V
> runtergehen - nur arbeitet die Peripherie dann eben nicht mehr korrekt.

Was willst du anzeigen, wenn die Spannung dann unter 48V liegt - bei 48V 
sind es ja schon 0%?
Oder ist es egal, wenn die Peripherie dann nicht mehr richtig 
funktioniert?

von MaWin (Gast)


Lesenswert?

alex schrieb:
> Ein Befehl für den ATmega wäre die Funktion:
>
> map

Wenn er die Arduino-Umgebung verwendet...

von MagIO2 (Gast)


Lesenswert?

HildeK schrieb:
> Was willst du anzeigen, wenn die Spannung dann unter 48V liegt - bei 48V
> sind es ja schon 0%?

Na -0%, ist doch logisch ;o)

von Harald W. (wilhelms)


Lesenswert?

HildeK schrieb:

> Was willst du anzeigen, wenn die Spannung dann unter 48V liegt - bei 48V
> sind es ja schon 0%?

Negative Prozente? :-)

von Mathe-Null (Gast)


Lesenswert?

Hallo zusammen,

wow - vielen Dank für die vielen Antworten und die Problemlösungen.

Um noch ein paar Fragen zu beantworten:

HildeK schrieb:
> Was willst du anzeigen, wenn die Spannung dann unter 48V liegt - bei 48V
> sind es ja schon 0%?
> Oder ist es egal, wenn die Peripherie dann nicht mehr richtig
> funktioniert?

Ja - für die Messung ansich ist die Funktion der Peripherie egal. Die 
Entscheidung liegt dann beim Anwender.

Liegt die Spannung zwischen 0V und 48V, so wären das weiterhin 0%.

Die Anzeige soll keine tatsächliche Spannungsanzeige werden. Es geht 
eher darum anzuzeigen, wie leistungsfähig die Peripherie noch sein wird.
0% heißt also nicht, das keine Spannung da ist, sondern zu wenig um den 
ordnungsgemäßen Betrieb zu gewährleisten.

MaWin schrieb:
>> map
> Wenn er die Arduino-Umgebung verwendet...

Nein, tut er nicht ;)

Ich habe den Vorschlag von "A.Z." bzw. "AF" übernommen. Das funktioniert 
prima. Vielen Dank. Die Idee von Lothar Miller wäre auch schick, aber da 
ich die Zwischenwerte ohnehin für ein Log brauche und auch noch ein 
ADC-Korrekturwert mit in die Berechnung einfließt, sind die 
Einzelschritte für mich übersichtlicher.

Also vielen Dank an alle. Ihr habt mir sehr geholfen.

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.