Forum: Mikrocontroller und Digitale Elektronik Spannungsmessung mit internem ADC 0 bis 30V Absicherung


von Schorschi (Gast)


Lesenswert?

Hallo Leute,

ich möchte mit einem Atmega644 eine Gleichspannung 0V bis 30V messen.
Ich würde dies mit einem entsprechenden Spannungsteiler realisieren.

Als Schutz für den analogen Eingang hätte ich eine Z-Diode mit 
Vorwiderstand vorgesehen.

Meint ihr dass reicht als Schutz ober gibt es hier bessere 
Möglichkeiten?

Gruss,
Schorschi.

von Dennis U. (atmegadennis)


Lesenswert?

Das kommt auf die Leistung drauf an, wenn du Dir sicher bist, das die 
ZDiode die volle Leistungauch bei einem defekt absichern kann, ist diese 
i.O. ich würde Dir auf jedenfall noch einen VDR empfehlen, um auch 
wirklich sicher zu gehen.

Gruß

von Falk B. (falk)


Lesenswert?

@Schorschi (Gast)

>Als Schutz für den analogen Eingang hätte ich eine Z-Diode mit
>Vorwiderstand vorgesehen.

Braucht man nicht. Mach den Spannungsteiler hochohmig, dann begrenzt 
der allein die kritische Spannugn am AVR. Die Schutzdioden im AVR leiten 
den Strom dann ab, siehe Pegelwandler.

Also 1M + 150k sollten in etwa passen.

MFG
Falk

von adfix (Gast)


Lesenswert?

Hallo Schorschi,

Eine Z-Diode beginnt nicht schlagartig zu leiten. Sehr weit unterhalb 
der Zenerspannung fließt bereits ein Strom, der deinen Spannungsteiler 
beeinflusst und die Messung ungenau machen wird.

Deshalb macht man das gerne so:

Man klemmt eine Diode nach VCC.

Du würdest für 30V also zb einen 25K Widerstand und einen 5K Widerstand 
als Spannungsteiler nehmen. (oder ähnliche). Und eine Diode nach VCC.

Steigt die Spannung am ADC Eingang über 5V + 0.7V der Diode, so fließt 
der Strom nach VCC. Der ADC Eingang sieht maximal 5.7V.

Aber auch das ist schon zu viel. Man sollte nie über 5.0V gehen. Auch 
bei internen Klemmdioden würden benachbarte ADC Kanäle dann falsch 
messen.

Baue deshalb den Spannungsteiler so auf:
Anstatt dem 5K Widerstand nochmals einen Spannungsteiler 1K und 4K. Und 
damit gehst Du auf den ADC.

Bei 5.7V sieht der ADC dann nur noch 4.56V

von adfix (Gast)


Lesenswert?

> "Also 1M + 150k sollten in etwa passen."

Ist für einen ADC aber zu hochohmig.
Atmel empfiehlt < 10k zu bleiben.

"The ADC is optimized for analog signals with an output impedance of 
approximately 10 kΩ or
less. If such a source is used, the sampling time will be negligible. If 
a source with higher impedance
is used, the sampling time will depend on how long time the source needs 
to charge the
S/H capacitor, with can vary widely. The user is recommended to only use 
low impedant sources
with slowly varying signals, since this minimizes the required charge 
transfer to the S/H
capacitor."

von Falk B. (falk)


Lesenswert?

@  adfix (Gast)

>> "Also 1M + 150k sollten in etwa passen."

>Ist für einen ADC aber zu hochohmig.
>Atmel empfiehlt < 10k zu bleiben.

Nöö, nicht wenn man weiss wie ;-)
Ein kleiner Kondensator von ca. 2,2nF löst das Problem. Der liefert 
genug Ladung, um den Sample- und Hold Kondensator zu laden, ohne 
nennenswert an Spannung zu verliefern. Der Trick klappt allerdings nur 
dann, wenn man nicht zu oft misst. Also nur mit ein paar Dutzend Hz 
Abtastrate.

MFG
Falk

von Anja (Gast)


Lesenswert?

>Ein kleiner Kondensator von ca. 2,2nF löst das Problem.

Also ich rechne mal: die 14 pF des internen S/H (ent)laden den 2,2nF um 
bis zu 0,3% gegen VCC/2. (0.5 * 14 / 2200). Sind also 4 Digits 
zusätzlicher Fehler nahe 0V und nahe 5V.

-> um den Fehler auf < 0.5 Digits zu drücken würde ich >= 22nF nehmen
Tau ist dann 3,3ms bei 150k Quellimpedanz.
Für 0,5 Digits Einschwingfehler brauchts dann mehr als 8*3,3ms = 25ms 
Mindestabstand zwischen den Messungen.

Allerdings ist dann immer noch der Leckstrom vernachlässigt. Bei hohen 
Temperaturen ist der Fehler hierdurch bis zu: 1uA * 150k = 150 mV.


Gruß Anja

von Georg X. (schorsch666)


Lesenswert?

Nabend Leute,

na das sind mal hilfreiche Antworten.
An dieser Stelle reicht mir eine Genauigkeit von 100mV volkommen aus.

Ich werde am Wochenende mal den hochomigen Spannungsteiler mit C 
austeseten.


Mal was anderes. Ich hab hier aufm Schreibtisch mal eine Testschaltung 
auf nem Steckbrett aufgebaut. Ich gehe direkt ohne jegliche Bauteile 
dazwischen auf den 1. Analogeingang.
Wenn ich jetzt 30mV anlege dann merkt der ADC dass überhaupt nicht. Ich 
lese immer einen Wert 0 aus dem Register. Erst ab 60mV kann ich einen 
Wert am ADC messen. Allerdings fehlen dann die 60mV natürlich.

Kann sich dass jemand erklären?

Gruss,
Georg.

von Georg X. (schorsch666)


Lesenswert?

Hallo,

hat denn keiner ein ähnliches Problem gehabt?

Laut Datenblatt ist ein Offset von 1Bit möglich.
Wenn ich jetzt von 2 Bit ausgehe wären dass grade mal 15mV bei 5V 
Referenz.
Bei mir scheint der Offset über 50mV zu haben.

Kann sich jemand erklären wie dass kommt?

Gruss,
Schorschi.

von Falk B. (falk)


Lesenswert?

@  Georg X. (schorsch666)

>Mal was anderes. Ich hab hier aufm Schreibtisch mal eine Testschaltung
>auf nem Steckbrett aufgebaut.

Steckbrett klingt nicht gut. Hast du auch AGND und AVCC richtig 
angeschlossen? Wie legst du die 30mV an? Aus welcher Quelle kommen die? 
Wie misst du die?

MfG
Falk

von Georg X. (schorsch666)


Lesenswert?

Hallo,

dass das Steckbrett nicht das Ideale ist, dass ist mir schon klar. Dann 
würde ich Rauschen, messbarer Offset o.ä. verstehen.
Aber dass diese Spannungen nicht erkannt werden ist sehr seltsam.

AVCC liegt an 5V = Versorgungspannung. AGND und GND sind auch 
miteinander verbunden. AREF ist über einen 100nF auf GND gelegt.

Ich habe am ADC einen AD8210 als Messverstärker hängen. Dahinter ein 
Shunt zur Strommessung. Der AD8210 bringt bei 0V am Shunt 30mV am 
Ausgang.

Gemessen ist alle mit einem Oszi.

Gruss,
Georg.

von Georg X. (schorsch666)


Lesenswert?

Nabend Leute,

ich habe jetzt noch ein paar Tests mit einem KTY81 gemacht.
Selbst hier habe ich diese Probleme.
Was mir auffält ist, dass wenn ich den µC längere Zeit laufen lasse so 
über 60min dann sinkt der Offset immer weiter.

Ich verstehe dass nicht.

Kann mir da jemand weiter helfen?

Gruss,
Georg.

von Jannik (Gast)


Lesenswert?

Also wenn AREF nach GND liegt, dann kann doch auch keine 5V Referenz 
entstehen?! Intern hat auch der Mega644 nur 2,56V. Vll solltest du mal 
deine Referenzeinstellungen überprüfen?

PS: Ich habe es selbst noch nie gemacht.. Nur mal ein bisschen gelesen 
;)

Gruß
Jannik

von Georg X. (schorsch666)


Lesenswert?

Hallo,

dass AREF über nen 100nF auf GND liegt ist richtig. Ist doch so im 
Datenblatt beschrieben. Siehe Kapitel

21.9.1 ADMUX – ADC Multiplexer Selection Register

im Datenblatt.


Was mir einfach nicht in den Kopf geht warum der ADC den 
Spannungsbereich 0V bis 50mV einfach nicht erkennt bzw. messen kann. 
Erst wenn ich drüber bin wird die Spannung erkannt. Als ob das Potential 
nicht bei 0V sondern bei 50mV liegt. Ist aber nicht so. Hab ich schon 
geprüft.

Gruss,
Georg.

von Georg X. (schorsch666)


Lesenswert?

Hallo Jungs,

langsam weiss ich nicht weiter.
Mein ADC vom Atmega644 misst auf jedem der analogen Eingänge erst ab 
68mV.
Alles was drunter ist wird mit 0 Digits angezeigt.

Egal ob ich die interne oder die ext. verwende es ist immer das selbe.

Weiss denn keiner Rat?
Kann es sein dass mein ADC hinüber ist?

Gruss,
Georg.

von spess53 (Gast)


Lesenswert?

Hi

>langsam weiss ich nicht weiter.

Was ist mit der Software?

MfG Spess

von Georg X. (schorsch666)


Lesenswert?

Hi,

wenn du die FW meinst dann weiss ich nicht wo der Fehler sein soll
wenn ich nur bei beendeter Messung das Datenregister des ADCs auslese.

Natürlich schon alles mit dem JTAG gedebugged. Aber es ist wie ich es 
schon geschrieben habe. Der Messbereich fängt bei 68mV an.

Georg.

von spess53 (Gast)


Lesenswert?

Hi

Dann behalte es es für dich.

MfG Spess

von Georg X. (schorsch666)


Lesenswert?

So sieht meine Initialisierung aus:

void adc_init(void)
{
  ADMUX=0x40;   // Voltage reference AVCC wit ext. capacitor an AREF
  ADCSRA=0xC5;   // ADCenable, ADCstartconversion, ADC_IRQEnable..
  ADCSRB=0x00;  // free running mode
  ADCH=0x00;    // dataregister
  ADCL=0x00;    // dataregister
  DIDR0=0x01;    // ADC0 logical pin disabled
}

und so die Abfrage:

// ADC Sequence in Fast mode
if((ADCSRA & 0x40)!= 0x40)
{
ui_ADC_Result[0]=ADCL;
ui_ADC_Result[0]|=(int)ADCH << 8;

ADCSRA |= 0x40; //start new conversion
}

mehr mach ich grad nicht.

von Georg X. (schorsch666)


Lesenswert?

Hallo Leute,

jetzt habe ich ein paar andere µC getestet.
Darunter war ein ATMEGA16 und ein ATMEGA32. Bei allen ist es das selbe.

Das ist doch nicht normal??

Gruss,
Georg.

von Falk B. (falk)


Lesenswert?

@Georg X. (schorsch666)

>Darunter war ein ATMEGA16 und ein ATMEGA32. Bei allen ist es das selbe.

>Das ist doch nicht normal??

Dann leigt es wohl an deinem AUfbau oder deinen Messmethoden. Ein Oszi 
ist denkbar ungeeignet, um Spannung im mV Bereich GENAU zu messen. 
Vielleicht hast du aber auch eine Masseverschiebung durch grösere Ströme 
oder hohe Kontaktwiderstände auf deinem Steckbrett. Würde mich nicht 
wundern.

MfG
Falk

von Georg X. (schorsch666)


Lesenswert?

Hmmm....

Na dann werde ich mal alles auf ne Lochraster bringen.

Mal schauen wie das danach aussieht.

Gruss und Danke.
Georg.

von Tobi92 (Gast)


Lesenswert?

> Ein kleiner Kondensator von ca. 2,2nF löst das Problem.

> Also ich rechne mal: die 14 pF des internen S/H (ent)laden den 2,2nF um
> bis zu 0,3% gegen VCC/2. (0.5 * 14 / 2200). Sind also 4 Digits
> zusätzlicher Fehler nahe 0V und nahe 5V.

> -> um den Fehler auf < 0.5 Digits zu drücken würde ich >= 22nF nehmen
> Tau ist dann 3,3ms bei 150k Quellimpedanz.
> Für 0,5 Digits Einschwingfehler brauchts dann mehr als 8*3,3ms = 25ms
> Mindestabstand zwischen den Messungen.

> Allerdings ist dann immer noch der Leckstrom vernachlässigt. Bei hohen
> Temperaturen ist der Fehler hierdurch bis zu: 1uA * 150k = 150 mV.

> Gruß Anja

Hallo!

Mich würde nur interessieren wie Anja auf die 25ms Mindestabstand 
zwischen den Messungen kommt. Warum rechnet Sie für 0,5LSB gerade 8*Tau 
und nicht mehr oder weniger, wie ist da der Zusammenhang?

Danke
Tobi

von Tobi92 (Gast)


Lesenswert?

Kann den niemand einem Neuling hierbei helfen???
Finde im Internet keine passende Erklärung...

Grüße
Tobi

von Anja (Gast)


Lesenswert?

Tobi92 schrieb:
> Mich würde nur interessieren wie Anja auf die 25ms Mindestabstand
> zwischen den Messungen kommt. Warum rechnet Sie für 0,5LSB gerade 8*Tau
> und nicht mehr oder weniger, wie ist da der Zusammenhang?

soo wir rechnen mal e hoch 8 = ?
2 hoch 10 (Bit) / 0.5LSB = ?

Die "8" ist natürlich gerundet.

Gruß Anja

von 1234 (Gast)


Lesenswert?

Falk Brunner schrieb:
> Ein kleiner Kondensator von ca. 2,2nF löst das Problem. Der liefert
> genug Ladung, um den Sample- und Hold Kondensator zu laden, ohne
> nennenswert an Spannung zu verliefern. Der Trick klappt allerdings nur
> dann, wenn man nicht zu oft misst. Also nur mit ein paar Dutzend Hz
> Abtastrate.

Der sorgt auch dafür das der AVR durch latchup kaputt geht.

von Tobi92 (Gast)


Lesenswert?

Anja schrieb:
> Tobi92 schrieb:
>> Mich würde nur interessieren wie Anja auf die 25ms Mindestabstand
>> zwischen den Messungen kommt. Warum rechnet Sie für 0,5LSB gerade 8*Tau
>> und nicht mehr oder weniger, wie ist da der Zusammenhang?
>
> soo wir rechnen mal e hoch 8 = ?
> 2 hoch 10 (Bit) / 0.5LSB = ?
>
> Die "8" ist natürlich gerundet.
>
> Gruß Anja

Vielen Dank!
Entschuldigung für diese "einfache" Frage, aber mir ist einfach nicht 
eingefallen.

Tobi

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.