PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : max +15V mit ATMEGA8535 messen



Hans55
25.12.2007, 16:29
Hallo zusammen!
Ich möchte mit einem ATMEGA8535 eine Batteriespannung von 12V messen.
Das funktioniert auch schon so einigermaßen.
Aber gerade im Bereich zwischen 10...14V ist das ganze sehr ungenau.
Ich muß praktisch jedesmal einen anderen Faktor wählen um auf die richtige Spannung zu kommen.
Wenn ich Ue und Uadc bei jedem Volt messe sieht man das Unlineare
gerade in dem Bereich der mich interessiert.
Ue Uadc
[V] -> [V]
15 ->3,998
14 ->3,869
13 ->3,717
12 ->3,518
11 ->3,296
10 ->3,034
9 ->2,751
8 ->2,454
7 ->2,150
6 ->1,845
5 ->1,540

Die Eingangsspannung geht auf ein 5kOhm Poti, vom Schleifer geh ich an den ADC Kanal 0. Am Eingang des ADC K0 habe ich eine ZD4,7V.

Kann das an der Z-Diode (4,7V) oder an der Referenzspannung AREF=4,0V liegen? Hat da jemand eine Idee?

2.Frage:
Wie macht man das im Forum wenn man den Code in ein zusätzliches Fenster schreiben möchte?

Gruß
Hans

Ds ist das Programm:
'************************************************* *********
'* Liest den ADU-Channel-0 aus und zeigt ihn an der LCD-Anzeige an.
'* Der ADU hat 10Bit Auflösung. d.h. 2 hoch 10 =1024 -1Bit = 1023
'* ==> 4V/ 1023 =0,003910 d.h. 1Digit = 0,00391 V
'* Anschluss am STK200:
'* AREF auf 4V einstellen.
'* Die interne AREF ist mit "Reference = Off" ausgeschaltet
'* (Siehe Help "Config ADC")
'*
'************************************************* *********
Umess:
Dim Adu_wert As Word
Dim U_an_adc0 As Single
Dim Umes As Single
Const Channel = 0 '

Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc

'--- Auslesen Kanal 0--------------------------------------------------------
Do
Adu_wert = Getadc(channel)
U_an_adc0 = Adu_wert * 0.00391 '///4 Volt AREF/ 1023=0,00391
'// U_an_adc0 ist der Wert, der am ADC0 anliegt
'// Da davor noch ein Spannungsteiler ist, an dem eine höhere
'// Spannung anliegt, muss ein Faktor rein
'// (hier im Beisp: 9,53V = 2,91V => 3,42378)

Umes = U_an_adc0 * 3.42378

'---Spannung am ADC0 ------------------------------------
Locate 1 , 1
Lcd "UADC=" ; Fusing(u_an_adc0 , "##.#")
Locate 1 , 10
Lcd "V" ' Volt wird hinter Wert angezeigt
Waitms 100

'---Spannung am Eingang -----------------------------------
Locate 2 , 1
Lcd "UEin=" ; Fusing(umes , "##.#")
Locate 2 , 10
Lcd "V" ' Volt wird hinter Wert angezeigt
Waitms 100

Loop
Return

Dirk
25.12.2007, 16:48
Hallo Hans55,

das einzige, was eine Unlinearität bringen könnte, ist die ZD. Die würde ich weglassen.
Warum nimmst du nicht 5V als Referenz und einen Spannungsteiler mit dem Widerstandsverhältnis 1 : 2 ?
Damit kannst du 15V gut messen!

Code kannst du durch die Code-Tags [ Code ] einschließen.

Gruß Dirk

Hans55
25.12.2007, 17:20
Hallo Dirk!
Danke für die schnelle Antwort!
Das werde ich gleich mal probieren.
Gruß
Hans

Hans55
25.12.2007, 19:45
Hallo Dirk!
Das war die unlineare ZDiode. Wenn sie draußen ist, paßt alles.
Wie kann ich aber den Eingang gegen Überspannung schützen falls doch mal von der Lichtmaschine etwas mehr kommen sollte? Evtl. eine ZD18 direkt am Eingang müsste doch funktionieren oder?
Gruß
Hans

mikado
28.12.2007, 12:56
Hallo Hans55,

steh vor dem gleichen Problem..
Muss aber gleich dazusagen, dass ich mich mit µC auch noch nicht sehr lange befasse.
Also das mit der ZD wird keine 100% Sicherheit sein. Sollte die Diode mal hops gehe,
hast du keinen Schutz mehr gegen Überspannung.
Evtl hilft ja ein C, der die Spitzen abfängt.

Im Moment hab ich auch nur den Spannungsteiler.

Hans55
28.12.2007, 15:27
Hallo Mikado!
Ich hab vor einen 18V Varistor direkt an den Eingang anzuschließen.
Zusätzlich hab ich noch ein L=330uH in der Plusleitung und dahinter ein C=100n. Ist besser als nix. Obs was hilft wird sich rausstellen.
Die Spannungsmessung und die LCD-Anzeige funzt inzwischen recht gut.
Im Moment bin ich bei der Stromanzeige.
Gruß
Hans