Forum: Mikrocontroller und Digitale Elektronik 24V über Spannungsteiler an ADC:


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Dirk F. (dirkf)


Lesenswert?

Hallo,
ich möchte die 24V Versorgungsspannung des Gerätes mit einer MCU messen.
Habe daher einen Spannungsteiler mit 2K2  und 100 Ohm aufgebaut.
Theoretisch müsste hier die 24V auf:
24V * (100R / 2300R) = 1,04V sein.
Aber ich messe nur etwa 150 mV  mit dem Multimeter.
Wenn ich den ADC Pin abklemme, dann passt die Spannung.

Kann der Eingang eines ADC-Pin des PIC32MZ  wirklich so niederohmig sein 
?

: Bearbeitet durch User
von Roland E. (roland0815)


Lesenswert?

Was sagt denn das Datenblatt dazu?

von Steve van de Grens (roehrmond)


Lesenswert?

Dirk F. schrieb:
> Kann der Eingang eines ADC-Pin des PIC32MZ  wirklich so niederohmig sein
> ?

Wohl kaum. Es se denn, der Pin ist als Ausgang konfiguriert und auf Low.

Oder er ist kaputt.

Oder er hat einen Latch-Up, weil du (wegen AC) eine Spannung außerhalb 
des erlaubten Bereiches angelegt hast.

von Roland E. (roland0815)


Lesenswert?

Steve van de Grens schrieb:
> ...
> Wohl kaum. Es se denn, der Pin ist als Ausgang konfiguriert und auf Low.
>
> ...

Wollte ich auch gerade ergänzen. 150mV klingt nach Klemmspannung auf 
LOW.

von ArnoNym (bergler)


Lesenswert?

Eher nicht. Der ADC kann einen Strom ziehen wenn zu sampelst, der ist 
max. etwas I=fs*Cp*Vref. Cp steht im Datenblatt (pF), fs ist die 
Samplefrequenz, VREF deine Referenz (im Zweifelsfall 3V3). Also nein, 
viel Strom fließt da eher nicht.

Warum machst du den Spannungsteiler so niederohmig?
Das ist nicht nötig. Man kann ihn 10x so groß machen und dafür die 
Aquisition Time auf ein paar µs hochdrehen. Oder 10nF parallel zum Pin 
schalten.

Meine Vermutung wäre eher was in folgende Richtung:
Lötfehler, z.B: Kurzschluss auf benachbarten Pin.
Pin wird im Code auf LOW getrieben. Irgendwo, Möglichkeiten gibts viele.
Pin kaputt und hat Short gegen GND (kann man leicht durchpiepen).

So als Hinweis:
Dir ist klar, dass der Spannungsteiler dem PIC eien Strom in die 
Versorgung ist drückt, wenn dessen Versorgung ausgeschaltet ist, die 24V 
aber da sind? ESD Schutzbeschaltung. µC-Pins mögen eigentlich keine 
Spannung, wenn die Versorgung nicht da ist.
10mA werden ihn vermutlich nicht töten, gut ist das aber nicht.
Auch da hilft etwas mehr kOhm.

von Roland E. (roland0815)


Lesenswert?

Zu hochohmig ist nicht gut. Über 10k auf keinen Fall, eher so in 
Richtung 5k.

Ein ADC kann sehr schnell unter 3..4k Eingangsimpedanz bekommen, 
jenachdem wie man den betreibt. Manche sind auch schon "broken by 
design" und haben selbst aus 3k5Ohm... Alles schon gesehen. Netter 
Aha-Effekt aus dem Hause Renesas.

MC leistete sich in der Vergangenheit eigentlich wenige solche 
Schnitzer.

von Thomas (kosmos)


Lesenswert?

Das Verhältnis des Spannungsteiler +1 bestimmt doch die Spannung.

z.B.
1 : 1 = 1 + 1 = 2
24V : 2 = 12V

2200 : 100 = 22 + 1 = 23
24 / 23 = 1,04V genau so wie du schreibst

Wenn aber dein ADC 5V erlaubt dann würde ich das ausnutzen und ein 
Teilerverhältnis von  5,x benutzen.

Und um den Eingangspin etwas zu schützen würde ich R1 schon auf mind. 
10k setzen und noch einen 100nF Kerko gegen Masse schalten, der mal 
einen Impuls  ausreichend belasten kann.

von Dirk F. (dirkf)


Lesenswert?

ArnoNym schrieb:
> Dir ist klar, dass der Spannungsteiler dem PIC eien Strom in die
> Versorgung ist drückt, wenn dessen Versorgung ausgeschaltet ist, die 24V
> aber da sind?

Aus den 24V werden die 3,3V Versorgung erzeugt.  Also ist beim 
Ausschalten zuert die 24V weg.
Hmmmm, aber beim Einschalten ist zuerst die 24 V da.....Latch up ???

Habe noch zusätzlich einen 100nF und eine 1N4148 parallel an den Eingang 
geschaltet.

von Rainer W. (rawi)


Lesenswert?

Roland E. schrieb:
> Zu hochohmig ist nicht gut. Über 10k auf keinen Fall ...

Da bin ich auf die Begründung gespannt.
Die Ladung für Mux und ADC kann auch aus einem Kondensator kommen.

Roland E. schrieb:
> ... eher so in Richtung 5k.

Nicht jede ESD-Schutzdiode am Eingang eines µC ist auf Dauerstrom von 
mehreren mA ausgelegt.

von ArnoNym (bergler)


Lesenswert?

Rainer W. schrieb:
> Roland E. schrieb:
>> Zu hochohmig ist nicht gut. Über 10k auf keinen Fall ...
>
> Da bin ich auf die Begründung gespannt.
> Die Ladung für Mux und ADC kann auch aus einem Kondensator kommen.

Die gibt es für 10k vermutlich nicht. Der Kollege hat wieder mit dem 
Bauch und Bauernregeln, nicht mit Fakten argumentiert.

Ein SAR-ADC lädt einen Samplekondensator und misst denn dann. So 
ungefähr zumindest. Über den Ersatzinnenwiderstand Spannungsteiler muss 
also im ADC der Samplekondensator geladen werden. Das ist folgender 
Widerstand:
Re=Ro||Ru (Parallelschaltung der Widerstände im Spannungsteiler).

Der Wert der Samplekapazität steht im Datenblatt des PIC.

Die Zeit, die zum Laden des Samplekondensators zur Verfügung steht, ist 
tacq (Aquisition Time), die im Code einstellbar ist.

Man kann den Fehler für verschiedene tacq berechnen über die Ladekurve 
des Kondensators:
https://de.wikipedia.org/wiki/RC-Glied

Aber der Einfachheit halber kann man einfach 6 Tau nehmen. Beispiel:
Spannungsteiler: 230kOhm auf 10kOhm
Cs=10pF (Echten Wert bitte aus dem Datenblatt holen!)
Re=9,58kOhm
Tau=9,58k*10pF=95,8ns.
--> tacq>600ns.
Was auf alle Fälle möglich sein sollte.
Außerdem muss man die Leckströme der Pins im Auge behalten, aber die 
sind meist <<1µA und stehen im Datenblatt.

Oder die entsprechenden Gleichungen zur Ladekurve aus Wikipedia so 
umstellen, dass man eine aquisition Time für einen geforderten max. 
Fehler erhält (z.B. 1LSB, 3LSB...).

Die andere Strategie ist, einen Kondensator zum Pin parallel zu 
schalten. Wie groß der sein muss, kann man berechnen: Beim Laden des 
Samplekondensators darf die Spannung nicht weiter einbrechen, als die 
geforderte Genauigkeit zulässt.
Das ist einfach zu berechnen, die Ladungen teilen sich einfach auf.
Der Kondenator setzt die tacq auf quasi 0, aber man bekommt einen Fehler 
bei höherer Samplerate, vereinfacht:
Error<=Ersatzinnenwiderstand*fsw*Samplekapazität*Vref

Zusammengefasst:
Ein hochohmiger Spannungsteiler reduziert die Bandbreite, nicht die 
Genauigkeit. Und zwar für beide Lösungen: Der Kondensator produziert 
einen Tiefpass und begrenzt die Samplerate, die Aquisition-Time 
reduziert die Samplerate.
Bandbreite und Genauigkeit haben die gleiche Anforderung.
Braucht man hier Bandbreite? Nein, 100Hz reichen hier locker aus, im 
Normalfall. Selbst kHz sind mit Spannungsteilern noch kein großes 
Problem. Je nach ADC halt.

Verstehen ist besser als Bauernregeln. Die Sache hier ist relativ 
einfach zu verstehen.

von Roland E. (roland0815)


Lesenswert?

Rainer W. schrieb:
> Roland E. schrieb:
>> Zu hochohmig ist nicht gut. Über 10k auf keinen Fall ...
>
> Da bin ich auf die Begründung gespannt.
...

Für einen willkürlich ausgesuchten PIC32MZ gibt MC schon mal 1uA 
Eingangsstrom für Analogpins an. Bei 1k sind das schon 10mV Abweichung. 
Die dynamischen Werte hab ich gestern abend nicht rausgesucht, 
interessiert mich nur am Rande. Der Fehler des OP liegt wo anders.

Für STM kommt man bei höheren Sampleraten schnell auf Eingangsimpedanzen 
von unter 5kOhm. Wie schon geschrieben hat Renesas Kontroller mit 
kaputten Designs im Feld, die haben 3,5kOhm statisch. Wenn die samplen 
wirds noch weniger...

Als Faustregel für ADC Schätzeisen gilt auch hier: Nur 10% des Stromes 
maximal aus dem Spannungsteiler sollen in den ADC fließen. Kondensatoren 
davor sind kagge. Aus vielen Gründen.

Ein ADC ist kein Multimeter. Das vergessen viele. Wer Megahom Eingang 
möchte, muss einen Ina vorschalten.

> ...
> Roland E. schrieb:
>> ... eher so in Richtung 5k.
>
> Nicht jede ESD-Schutzdiode am Eingang eines µC ist auf Dauerstrom von
> mehreren mA ausgelegt.

Daher ja: Ins Datenblatt schauen. Im Zweifel noch eine eigene 
Diodenbrücke nach (Controller+) und GND davor...

: Bearbeitet durch User
von Gerhard H. (hauptmann)


Lesenswert?

Dirk F. schrieb:
> Hallo,
> ich möchte die 24V Versorgungsspannung des Gerätes mit einer MCU messen.
> Habe daher einen Spannungsteiler mit 2K2  und 100 Ohm aufgebaut.

Verrückt. Viel zu kleine Werte. Und womöglich noch falschrum bestückt?

Dirk F. schrieb:
> Aber ich messe nur etwa 150 mV  mit dem Multimeter.

Mit viel Glück dürfte da ein Schaltungsfehler der den Strom extern 
ableitet dazwischen sein. Ansonsten dürfte Dein Controller längst 
Schaden genommen haben.

Roland E. schrieb:
> Kondensatoren davor sind kagge.

Unsinn. Es kommt schon gewaltig auf die Anwendung an. Das bloße Messen 
einer Betriebsspannung ist da völlig unkritisch. Ein kleiner 100n 
Kondensator ist hier von Vorteil und sorgt für stabilere Messwerte.

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

Roland E. schrieb:
> Zu hochohmig ist nicht gut. Über 10k auf keinen Fall, eher so in
> Richtung 5k.

Wobei die beiden Widerstände wie in einer Parallelschaltung gerechnet 
werden müssen. Mit den 2,2kΩ + 100Ω hat er zur Zeit eine Quellimpedanz 
von weniger als 100Ω.

von Dirk F. (dirkf)


Lesenswert?

Hallo, ich denke der Pin der MCU ist defekt.
Als Digital Ausgang arbeitet er noch richtig.
Als digitaler Eingangs-Pin mit internem oder externen Pull-up messe  ich 
immer <14 mV.

von Roland E. (roland0815)


Lesenswert?

Steve van de Grens schrieb:
> Roland E. schrieb:
>> Zu hochohmig ist nicht gut. Über 10k auf keinen Fall, eher so in
>> Richtung 5k.
>
> Wobei die beiden Widerstände wie in einer Parallelschaltung gerechnet
> werden müssen. Mit den 2,2kΩ + 100Ω hat er zur Zeit eine Quellimpedanz
> von weniger als 100Ω.

Äh. Nein, hat er nicht. Zum Laden des S&H Gliedes (oder die wie auch 
immer geartete Eingangsschaltung des ADC) ist nur der obere Widerstand 
relevant.

Sagt zumindest die Praxis...

von Flip B. (frickelfreak)


Lesenswert?

Steve van de Grens schrieb:
> Mit den 2,2kΩ + 100Ω hat er zur Zeit eine Quellimpedanz von weniger als
> 100Ω.

Korrekt. Die für die ladekurve der Adc eingangskapazität wirksame 
impedanz ist der AC widerstand, also R1|R2. Das wird intuitiver wenn man 
bedenkt, dass der Obere widerstand die Eingangskapazität ja nicht auf 
24V sondern nur auf 1,x V laden muss.

von Dirk F. (dirkf)


Lesenswert?

OK, danke für die Hinweise.

Aber wie könnte  eine gute Schaltung aussehen, welche die 24V Versorgung 
über den ADC misst ? Auch wenn beim Einschalten die 24 V für einige 
Millisekunden anliegen, bevor die 3,3V an der MCU anliegen.

: Bearbeitet durch User
von Flip B. (frickelfreak)


Lesenswert?

Der Spannungsteiler könnte einfach etwas hochohmiger sein, 10k und 220k, 
1nF paralell zum 10k als tiefpass.

Selbst wenn dann dauerhaft 24V anliegen fliessen nur ein paar uA in den 
eingang, das ist okay.

: Bearbeitet durch User
von Dirk F. (dirkf)


Lesenswert?

Danke Flip B. Werde ich am Montag am zweiten Prototypen testen.

: Bearbeitet durch User
von Thomas (kosmos)


Lesenswert?

Das soll doch so sein, erst Spannung am µC stabil und danach soll er 
erst aus dem Reset kommen. Manche µC können verzögert einschalten die 
AVRs z.B. 64mSek. Der RC Filter am Resetpin 10K und 100nF macht auch 
1mSek, das könnte man auch noch etwas mit einem 1µF Kerko erhöhen.

Außerdem kann man das Programm auch so schreiben das die erste ADC 
Messung erst nach x Sekunden startet.

Wenn man ein externes Diodennetzwerk nimmt kann man klar mit dem 
Serienwiderstand noch weiter runter. Die Betriebsspannung (5V/3,3V) des 
µC  von der 24V Schiene per Diode und großer Kapazität vor dessen 
(5V/3,3V) Spannungsregler abgekoppeln. Dann ist sind die Änderung der 
Betriebsspannung eh sehr klein und man hat genug Zeit auf Änderungen der 
24V Schiene zu reagieren, bzw. muss die Abtastrate gar nicht so groß 
sein und dann tuts auch eine hochohmigere Auslegung.

von Dirk F. (dirkf)


Lesenswert?

Thomas schrieb:
> Manche µC können verzögert einschalten

Darum geht es doch gar nicht.
Wenn der uC noch keine Spannung hat, aber an einem Einganspin Spannung 
ist, dann fließt ein Strom über die internen Schutzdioden, welchen den 
uC schädigen können.

von Rainer W. (rawi)


Lesenswert?

Roland E. schrieb:
> Äh. Nein, hat er nicht. Zum Laden des S&H Gliedes (oder die wie auch
> immer geartete Eingangsschaltung des ADC) ist nur der obere Widerstand
> relevant.

Die Ladung für den S&H - oder was auch immer - kann, wie gesagt, von 
einem Kondensator bedient werden, solange es um das Messen von quasi 
Gleichspannung geht. Da braucht man keine Samplerate im Bereich von 
MSa/s und der Widerstand muss es nur schaffen, die Spannung auf dem 
Kondensator aktuell zu halten - ein simpler Tiefpass eben.

von Thomas (kosmos)


Lesenswert?

Dirk F. schrieb:
> Wenn der uC noch keine Spannung hat, aber an einem Einganspin Spannung
> ist, dann fließt ein Strom über die internen Schutzdioden, welchen den
> uC schädigen können.

deswegen darf der Widerstand ja auch nicht zu klein sein um die internen 
Dioden zu schützen.

von Rainer W. (rawi)


Lesenswert?

Flip B. schrieb:
> Der Spannungsteiler könnte einfach etwas hochohmiger sein, 10k und 220k,
> 1nF paralell zum 10k als tiefpass.

Wozu soll man zur Messung der Versorgungsspannung eine Bandbreite von 
über 10kHz benötigen? Das ist wohl eher die Ausnahme.

Da kann man den Kondensator gerne einen Faktor 100 größer machen.

von ArnoNym (bergler)


Lesenswert?

Roland E. schrieb:
> Äh. Nein, hat er nicht. Zum Laden des S&H Gliedes (oder die wie auch
> immer geartete Eingangsschaltung des ADC) ist nur der obere Widerstand
> relevant.
>
> Sagt zumindest die Praxis...

Deine Praxis ist Unsinn.

Die Theorie ist richtig. Lies mal über den Satz von der 
Ersatzspannungsquelle. Oder simulier es. Ich die Theorie jedenfalls 
schon oft mit Erfolg angewendet.

Die Elektrotechnik ist sehr gut mathematsch beschrieben, und die Theorie 
sehr vollständig. Wer will, kann das verstehen. Meist sind gar keine 
komplexen Berechnungen nötig, nur die grundlegenden Gleichungen muss man 
verstehen und anwenden.

Die 1µA stimmen generell schon (ich hatte oben erwähnt dass sie zu 
bedenken sind), aber für den gesamten Temperaturbereich. Praktisch sieht 
man sie nie.
Es spielt eine Rolle, wenn man präzise messen will.
Was hier nicht zur Dikussion stand. Es geht um die Messung einer 
Versorgung.

Übrigens, Herr Praktiker: Deine 10mV bei 10k sind 0,04% Fehler.

: Bearbeitet durch User
von ArnoNym (bergler)


Lesenswert?

Dirk F. schrieb:
> OK, danke für die Hinweise.
>
> Aber wie könnte  eine gute Schaltung aussehen, welche die 24V Versorgung
> über den ADC misst ? Auch wenn beim Einschalten die 24 V für einige
> Millisekunden anliegen, bevor die 3,3V an der MCU anliegen.

Hochohmig genug ist die einfache (wenn auch nicht 10000% korrekte 
Lösung). Wenn du sagen wir <1mA in den Pin wird nichts passieren.

Alle anderen Lösungen sind schwieriger.

Aber hier steht etwas dazu:
https://ww1.microchip.com/downloads/en/DeviceDoc/PIC32MZ-Embedded-Connectivity-with-Floating-Point-Unit-Family-Data-Sheet-DS60001320H.pdf
Kapitel 2.11

"A quick review of the section “Absolute Maximum
Rating” in Electrical Characteristics chapter indicates
that the voltage on any non-5V tolerant pin may not
exceed VDD + 0.3V. The exception is, if the input current
is limited to meet the respective injection current
specifications defined by the parameters, such as
DI60a, DI60b, and DI60c as shown in Table 37-10"

von Gerhard H. (hauptmann)


Lesenswert?

Rainer W. schrieb:
> Da kann man den Kondensator gerne einen Faktor 100 größer machen.

Das kann Eingang gegen Masse hier auch gerne einen Faktor 1000 größer 
sein.
So ein Kondensator wirkt auch

Dirk F. schrieb:
> Wenn der uC noch keine Spannung hat, aber an einem Einganspin Spannung
> ist

wunderbar entgegen.

ArnoNym schrieb:
> Übrigens, Herr Praktiker: Deine 10mV bei 10k sind 0,04% Fehler.

Das Schöne der uC ist doch daß man auch nachträglich noch in Software 
kalibrieren kann.

von Dirk F. (dirkf)


Lesenswert?

Rainer W. schrieb:
> Wozu soll man zur Messung der Versorgungsspannung eine Bandbreite von
> über 10kHz benötigen? Das ist wohl eher die Ausnahme.

Also bei meiner Anwendung geht es eigentlich darum frühzeitig zu 
Erkennnen, wenn die Versorgng abgeschaltet wurde, um dann noch schnell 
alle remaneten Variablen aus dem RAM ins Flash zu schreiben.
Das dauert in der state maschine 50 ms.

: Bearbeitet durch User
von ArnoNym (bergler)


Lesenswert?

Dirk F. schrieb:
> Also bei meiner Anwendung geht es eigentlich darum frühzeitig zu
> Erkennnen, wenn die Versorgng abgeschaltet wurde, um dann noch schnell
> alle remaneten Variablen aus dem RAM ins Flash zu schreiben.
> Das dauert in der state maschine 50 ms.

Dann reicht es ja locker, wenn du in 5ms ein Einbrechen erkennst. Dazu 
reicht eine Bandbreite von 1kHz und eine Samplerate von 200Hz aus. Da 
sehe ich keine Probleme, das hochohmig zu machen.
Wie z.B. 23k und 1k.

PS:
Der von mir oben verlinkte PIC32MZ hat eine Tabelle für die 
Eingangsimpedanz und die Aquisition Time, die bis 5kOhm geht. Man muss 
also nicht mal rechnen.

Ein Komparator würde den Softwareoverhead stark reduzieren. Der kann den 
Eingang überwachen, und dem PIC einen Interrupt setzen. Ein Komparator 
mit OD hat das ganze Power-Sequencing Problem nicht.
Soll aber keine Wertung der Lösung sein, das geht selbstverständlich 
auch mit dem ADC!

Beitrag #7610020 wurde vom Autor gelöscht.
von Dirk F. (dirkf)


Angehängte Dateien:

Lesenswert?

Dirk F. schrieb:
> Danke Flip B. Werde ich am Montag am zweiten Prototypen testen.

Hallo zusammen,
das Problem ist gefunden worden.
Ich habe also einen zweiten Prototypen getestet  >>> Gleiches 
Fehlerbild.
Der ADC Eingang ist extrem niederohmig, aber funktioniert !!
Wenn ich +3,3V and den 12-Bit ADC Pin lege, dann sampelt er mir um die 
4000 Digits. Also OK.
Habe den Strom gemessen:  80 mA !!!

Ursache ist, dass dass der Pin noch als Ausgang beschaltet war.
Laut Datenblatt soll der Pin RG9 nach dem POR als Eingang konfiguriert 
sein.
Ist ja auch normal bei den PICS.
In dem vom Microchip MCC erzeugten Code (Anhang plib..."  wird das Bit 9 
auch nicht verändert.
Wenn ich den Code aus Zeile 102 hinzufüge, dann funktioniert es.
Der ADC arbeitet mit hochohmigem Eingang....
Eine projektweite Suche nach "TRISG" brachte keine weiteren Treffer.

Sehr sehr seltsam.....

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.