PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC Ungenauigkeit, mögliche Fehlerquellen?



hunni
08.02.2012, 15:44
Hallo zusammen,
ich habe folgendes Problem: Für einen Kumpel habe ich eine Unterspannungsabschaltung gebaut, diese soll bei 11 Volt automatisch ein Relais betätigen. Nun habe ich einen Spannungsteiler mit 300 KOhm und 100 Kohm genommen um eine Spannung von max. 20V zu messen (bei 20V liegen 5V am ADC an). So sollte ja rechnerisch bei 11V ein Wert von 563 in der AD-Variable stehen. Doch stattdessen muss 730 in der Variable stehen, damit das Relais bei 11V schaltet. Ich habe das mit 3 Messgeräten nachgemessen. Woran kann das liegen?
Ich habe erste Überlegungen angestellt:
-Der Spannungsregler gibt nicht exat 5V aus.
-Die Toleranzen am Spannungsteiler sind zu hoch
-Die Widerstände sind zu groß, sodass der Strom für den µC zu wenig ist um vernünftig zu messen.

Aber ich kann da auch völlig auf dem Holzweg sein. Habt ihr vielleicht eine Idee.
Gruß Hunni


'--------------------------------------------------------------------------------
'Grundeinstellungen
$regfile "attiny45.dat"
$crystal = 8000000
'--------------------------------------------------------------------------------
'Konfiguration
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.3 = Output
Config Portb.4 = Output
'--------------------------------------------------------------------------------
'Variablen deklaration und ini
Dim Hysta As Bit
Dim Ad_wert As Integer
Dim A As Byte
Hysta = 1
'--------------------------------------------------------------------------------
'Hauptprogramm
For A = 1 To 30 'Warte 3 Sek, um Einschaltschwankungen abzufangen
Toggle Portb.3
Waitms 100
Next A
Portb.3 = 0

Do 'Starte Hauptprogramm
Portb.3 = 1 'ADC-Wert Channel 1 in Ad_wert
Ad_wert = Getadc(1) 'Ist Hystarese nicht gesetzt, überprüfe auf Unterspannung
If Hysta = 1 Then 'Wenn Wert unter 11 Volt, schalte Relais
If Ad_wert < 730 Then
Portb.4 = 1
Wait 2
Portb.4 = 0
Hysta = 0 'setze Hystarese
End If
Else
If Ad_wert > 750 Then Hysta = 1 'Wenn Hystarese gesetzt, überprüfe ob Spannung wieder über Schwellwert ist
End If
Portb.3 = 0
Wait 1
Loop

Kampi
08.02.2012, 15:59
Wie hoch ist den die Toleranz der Widerstände?
Das kann eventuell das Problem sein. Und sicher das du einen 300k genommen hast und keinen 330k?
Und woher nimmt dein A/D-Wandler die Spannungsreferenz? Ist das die Versorgungsspannung oder eine Referenzspannungsquelle?
Weil wenn die Versorgungsspannung auch gleich die Referenzspannung ist könnte das problematisch werden, wenn die Spannung bei Last schwankt oder so.
Und wenn du "normale" Widerstände mit 5% Toleranz genommen hast kann das auch dazwischen funken.
Bei 5% Toleranz an beiden Widerständen hast du bei +5%:
Statt 300k 315k
Statt 100k 105k
und bei -5%
Statt 300k 285k
Statt 100k 95k

Wenn du mal den Extremfall betrachtest und der 300k +5% hat und der 100k - 5% sind das 315k und 95k in Reihe und das wäre ein Spannungsabfall von 2,54V an dem 100k Widerstand und das wäre ein A/D-Wert von ca 640.
Du siehst das die Toleranzen da schon richtig reinpfuschen :)
Eventuell Messwiderstände nehmen (0,1% Toleranz) und dann noch eine Referenzspannungsquelle.

PICture
08.02.2012, 16:22
Hallo!


-Die Widerstände sind zu groß, sodass der Strom für den µC zu wenig ist um vernünftig zu messen.

Es könnte sein, dass der 100 kOhm Widerstand im Spannungsteiler zu gross (empfohlen ist < 10kOhm) bzw. die "sample & hold" Zeit zu kurz ist. ;)

markusj
08.02.2012, 16:30
Es könnte sein, dass der 100 kOhm Widerstand im Spannungsteiler zu gross (empfohlen ist < 10kOhm) bzw. die "sample & hold" Zeit zu kurz ist. ;)

So ist es. Der ADC ist für Eingangswiderstände kleiner 10kOhm ausgelegt. Du könntest versuchsweise Mal einen kleinen Kondensator (Pi Mal Daumen würde ich 100nF ansetzen) an den Pin anschließen, der könnte die Problematik evtl. entschärfen. Und dann kommen eben die schon erläuterten Toleranzen ins Spiel ...

mfG
Markus

hunni
08.02.2012, 22:35
Also die Toleranz liegt bei 5%...ja ich weiss das ist zum Messen nicht optimal, aber ich habe die Schaltung aus halt aus den Sachen gebaut, die ich hier so rumfliegen hatte. Also um eine genaue Messung zu haben, besser 3 KOhm und 1 KOhm und an den ADC-Pin ein kleinen Kondensator zur entstörung?
gruß hunni

Kampi
09.02.2012, 07:47
Du kannst ruhig auf 30 und 10k rauf gehen denk ich mal.
Du musst bedenken....je kleiner die Widerstände sind desto mehr Strom fließt und das permanent.

Besserwessi
09.02.2012, 16:51
Mit einem Kondensator von ca. 100 nF dürfen die Widerstände auch deutlich größer sein. Die jetzigen 100 K und 300 K sind dann kein Problem, und wenn man man nicht gerade immer abwechselnd 2 Kanäle misst oder bei hohen Temperaturen (>60 C), dürften die Widerstände sogar noch deutlich (z.B. 10x) größer werden.

Thomas E.
11.02.2012, 21:11
Für einen Kumpel habe ich eine Unterspannungsabschaltung gebaut, diese soll bei 11 Volt automatisch ein Relais betätigen.
Ich wüsste ein Workaround:

Zenerdiode -> Relais (Es wird exakt ein Bauteil benötigt, da ja das Relais schon vorhanden ist)
Komparator -> Relais

Was ich aber nicht wüsste: Wieso braucht man dazu einen AVR?:confused:

hunni
12.02.2012, 12:12
Was ich aber nicht wüsste: Wieso braucht man dazu einen AVR?
1. Weil ich den gerade da hatte
2. Weil eine Hysterese vorhanden sein sollte ("flimmern" der Spannung vermeiden, kein erneutes Abschalten etc.)
3. Weil das Schaltsignal nicht länger als 2-3 Sek dauern sollte, da ansonsten der PC ein Hard-Shutdown bekommt.
(Ich schalte damit den Taster am Computer, damit der Computer ganz normal runterfährt und runtergefahren ist, bevor die Akkus in der USV keinen Saft mehr haben und die USV dann einfach abschaltet)

Deswegen braucht man einen AVR

chientech
20.02.2012, 10:06
Gibt es nicht immer einen Grund für einen AVR:cool:

Wenn es sich um ein Einzelstück handelt, spielen die Toleranzen eine untergeordnete Rolle, da man ja einfach mal messen kann bzw. wie du ausprobieren welcher Wert passt.
Zu bedenken ist nur, dass falls die Versorgungsspannung nicht sauber stabilisiert ist, diese ebenfalls einen Einfluss auf den nötigen Grenzwert hat.

gruß christoph

Thomas E.
20.02.2012, 14:56
2. Weil eine Hysterese vorhanden sein sollte ("flimmern" der Spannung vermeiden, kein erneutes Abschalten etc.)
3. Weil das Schaltsignal nicht länger als 2-3 Sek dauern sollte, da ansonsten der PC ein Hard-Shutdown bekommt.
(Ich schalte damit den Taster am Computer, damit der Computer ganz normal runterfährt und runtergefahren ist, bevor die Akkus in der USV keinen Saft mehr haben und die USV dann einfach abschaltet)

Deswegen braucht man einen AVR
Dafür braucht man noch immer keinen AVR - aber bequemer ist es natürlich. ;)