Hochohmiges mit PIC16F876 AD messen

S

Steffen Koepf

Guest
Hallo,

ich will bei einem Solarcontroller die Batteriespannung (12V) mit dem
AD-Wandler des 16F876 messen... dazu habe ich einen Spannungsteiler
mit 2 Widerstaenden verwendet. Da durch den Spannungsteiler dauerhaft
Strom fliesst, habe ich hochohmige Widerstaende (150K/330K) gewaehlt.
Der Spannungsteiler ist direkt an den RA1 Pin des Controllers
angeschlossen. Der Effekt ist, dass die Spannung am Pin des PIC
in erwarteter Hoehe anliegt, sobald aber das AD Wandler Modul
aktiviert ist und der Channel auf RA1 eingestellt ist, bricht
die Spannung auf weniger als die Haelfte zusammen, und das so lange,
bis wieder ein anderer Channel eingestellt wird.

Zwar empfiehlt das Datenblatt nicht mehr als 10 KOhm
am Eingang, aber ich bin davon ausgegangen, dass ein hoeherer
Eingangswiderstand nur die aquisition Time erhoeht, also der
interne Kondensator laenger braucht um geladen zu werden. Und
die 500 nA Ileakage vom Analog Input Model duerften auch nicht
so gravierende Auswirkungen haben.. weiss jemand an was das
liegen koennte?

Ich hab mir mit einem 100 nF Kondensator ausgeholfen, der zwischen
RA1 und GND liegt. Wenn man jetzt die aquisition time sehr kurz waehlt
(40 us), funktioniert fast alles wie erwartet, der Wandler liefert
jetzt den erwarteten Wert, der um eine Stufe schwankt. Nur sind
ab und an groessere Ausreisser (10 Stufen) nach oben und unten
dabei. Der Wandler wird zurzeit nicht im Sleep-Modus betrieben,
kann das das sein was Microchip mit "digital noise" bezeichnet?

Gruss,

Steffen
 
In article <bi68v3$n9s$1@news.in-ulm.de>,
Steffen Koepf <Taxman-usenet@opaya.de> writes:
Hallo,

[AD Wandler mit 150k Impendanz]

Zwar empfiehlt das Datenblatt nicht mehr als 10 KOhm
Na da wird das Datenblatt doch wissen warum.
Ich kennen den MC nicht. Aber die Angaben
sollte man doch befolgen.
Evt. ist ja aus irgendeinem Grund ein Widerstand
nach GND im Chip.

[Spannungsteiler mit C]

Warum schaltest du nicht einen Transistor vor den
Spannungsteiler und lässt nur dann Spannung
teilen wenn du messen willst?

Oder eine Pufferstufe dazwischen. Aber da weis ich nicht
wie es mit dem Eigenverbrauch aussieht.

Tschüss
Martin Laabs
 
Steffen Koepf <Taxman-usenet@opaya.de> schrieb im Beitrag <bi68v3$n9s$1@news.in-ulm.de>...

Eingangswiderstand nur die aquisition Time erhoeht, also der
interne Kondensator laenger braucht um geladen zu werden.
Nein, sein Laden 'verzieht' die Spannung am Spannungsteiler mehr.

Ich hab mir mit einem 100 nF Kondensator ausgeholfen, der zwischen
RA1 und GND liegt.
Gute Wahl.

Wenn man jetzt die aquisition time sehr kurz waehlt
(40 us), funktioniert fast alles wie erwartet, der Wandler liefert
jetzt den erwarteten Wert, der um eine Stufe schwankt. Nur sind
ab und an groessere Ausreisser (10 Stufen) nach oben und unten
dabei.
Hmm. Vref-Schwankungen ?

Der Wandler wird zurzeit nicht im Sleep-Modus betrieben,
kann das das sein was Microchip mit "digital noise" bezeichnet?

Vielleicht, glaube ich aber nicht.

Gruss,

Steffen
 
Steffen Koepf wrote:
(...) habe ich hochohmige Widerstaende (150K/330K) gewaehlt.
Mit 100nF, die Du schon drin hast, ist das zu wandelnde Signal
aus Sicht des ADC ausreichend niederohmig.

Nur sind ab und an groessere Ausreisser (10 Stufen) nach oben und
unten dabei. Der Wandler wird zurzeit nicht im Sleep-Modus betrieben,
kann das das sein was Microchip mit "digital noise" bezeichnet?
Ja, aber auch vermutlich ungünstige Anbindung des Analog-Signals.
Addiere einfach z.B. 256 Werte (auf einen 2byte-Wert) und verwende
nur das höherwertige Byte weiter - damit hast Du eine hervorragende
Mittelwertbildung, in der keine Ausreißer mehr vorkommen.
(Es geht natürlich auch mit z.B. 16-facher Mittelung, dann musst
Du natürlich das Ergebnis durch shiften und maskieren zusammen
fügen).

Thomas.
 
Steffen Koepf <Taxman-usenet@opaya.de> schrieb im Beitrag <bi78e1$fob$1@news.in-ulm.de>...
Eingangswiderstand nur die aquisition Time erhoeht, also der
interne Kondensator laenger braucht um geladen zu werden.

Nein, sein Laden 'verzieht' die Spannung am Spannungsteiler mehr.

Im stationaeren Zustand?

Was passiert, wenn man an einen hochohmigen Spannungsteiler,
an dem sich sagen wir 2V eingestellt haben, einen (kleinen)
Kondensator legt, de nur 1V hat ?

Die Spannung faellt erst mal auf 1V am Spannungsteilerausgang,
um dann langsam wieder auf 2V zu steigen.

Die Frage ist, wann der uC misst, wenn die A/D-Wandlung startet.
Nicht nach 1 Minute.
Normalerweise wird der (interne Einagnsgkapazitaet) A/D-Wandler
nur wenige Mikrosekunden nach Start des Messvorgangs geladen,
die Spannung am Spannungsteiler konnte also (bei >10k) den
Kondensator noch gar nicht ganz aufladen.

Bei externn 100nF, bereits aufgeladen auf 2V, ist es aber egal,
ob ein wenige pF-grosser Kondensator davon 'was abzwackt', die
Spannung aendert sich nicht (zumindest innerhalb der Aufloesung
des betrachteten A/D-Wandlers).
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 
Hi Steffen,

Steffen Koepf schrieb:
Normalerweise wird der (interne Einagnsgkapazitaet) A/D-Wandler
nur wenige Mikrosekunden nach Start des Messvorgangs geladen,
die Spannung am Spannungsteiler konnte also (bei >10k) den
Kondensator noch gar nicht ganz aufladen.

ok, Missverstaendnis.

Man kann bei dem PIC einen Kanal einstellen, der zugehoerige
Pin wird dann mit dem internen Csample verbunden. Dann muss
eine Zeit gewartet werden, die sich nach einer Formel im Datenblatt
berechnen laesst. Dann kann die Wandlung mit dem Setzen eines Bits
gestartet werden, was ich aber im Moment nicht mache, sondern
das Prog landet stattdessen in einer Endlosschleife. D.h. der
interne Kondensator ist dauerhaft mit dem externen Spannungswandler
verbunden und die Spannung sackt dauerhaft ab.
Dann mach halt den Spannungsteiler noch hochohmiger und setz
einen Puffer-OpAmp dazwischen. Oder mit einem FET o.ä. den
(dann niederohmigeren Teiler) nur fuer die Zeit der Messung
an die Spannungsquelle schalten. Ist doch nicht sooo schwierig oder?

Im Datenblatt steht, wie Du eh geschrieben hast, 10k Quellwiderstand
empfohlen. Das wird seinen Grund haben, sonst stünde es nicht da.

HTH
Wolfgang
 
Normalerweise wird der (interne Einagnsgkapazitaet) A/D-Wandler
nur wenige Mikrosekunden nach Start des Messvorgangs geladen,
die Spannung am Spannungsteiler konnte also (bei >10k) den
Kondensator noch gar nicht ganz aufladen.
ok, Missverstaendnis.

Man kann bei dem PIC einen Kanal einstellen, der zugehoerige
Pin wird dann mit dem internen Csample verbunden. Dann muss
eine Zeit gewartet werden, die sich nach einer Formel im Datenblatt
berechnen laesst. Dann kann die Wandlung mit dem Setzen eines Bits
gestartet werden, was ich aber im Moment nicht mache, sondern
das Prog landet stattdessen in einer Endlosschleife. D.h. der
interne Kondensator ist dauerhaft mit dem externen Spannungswandler
verbunden und die Spannung sackt dauerhaft ab.
 
Hallo,

ich hab jetzt das Problem gefunden. Auf der Platine ist ein MAX3222
RS232-Pegelkonverter. Wenn der laeuft (keine Datenuebertragung, nur
Ladungspumpen sind in Betrieb) zappeln alle Messwerte des AD Wandlers.
Auch die groesseren Ausreisser haengen damit zusammen. Schaltet man
den MAX3222 vorher ab (Shutdown), fuehrt das zu konstanten Werten beim
Wandeln. Ist damit vielleicht ein Stoerungsproblem ueber die GND Leitungen
(hoher Strom beim Laden der Kondensatoren beim MAX3222).

http://www.opaya.de/skoepf/x/scc1.png ist das Layout. U4 ist der MAX3222
(links unten), C7 der zugehoerige 100nF Stuetzkondensator. U1 ist der
PIC16F876, C10 der 100nF Stuetzkondensator. Waere es besser gewesen, die
beiden GND Anschluesse (Pin 8, Pin 19) des PIC direkt zu verbinden statt
ueber eine kleine Schleife?

Dann mach halt den Spannungsteiler noch hochohmiger und setz
einen Puffer-OpAmp dazwischen. Oder mit einem FET o.ä. den
Braucht viel zu viel Platz ;)

(dann niederohmigeren Teiler) nur fuer die Zeit der Messung
an die Spannungsquelle schalten. Ist doch nicht sooo schwierig oder?
Braucht nen nicht vorhandenen freien Port-Pin ;)

Gruss,

Steffen
 

Welcome to EDABoard.com

Sponsor

Back
Top