ich hoffe dass mir jemand meine Fragen bzgl. ADC-Programmierung
beantworten kann. Vorab, den PIC16F1509 verwende ich zum testen,
weil er verfüg- und bestellbar ist. Natürlich ist das evtl. nicht der optimale PIC (der kann viel zu viel - oversized in jeder Beziehung),
aber zum testen ist er okay.
Ich zitiere mal aus der Spezifikation:
ADC VOLTAGE REFERENCE
The ADC module uses a positive and a negative
voltage reference. The positive reference is labeled
ref+ and the negative reference is labeled ref-.
The positive voltage reference (ref+) is selected by the
ADPREF bits in the ADCON1 register. The positive
voltage reference source can be:
• VREF + pin
• VDD
The negative voltage reference (ref-) source is:
• VSS
Bei Verwendung von VDD/VSS wird also eine Spannung zwischen 0V - 5V gemessen ?
Dh. die maximale Auflösung ist ~ 5mV.
Die von mir zu messende Spannung liegt zwischen 0mV - 300mV .
Mich interessiert nur der Bereich zwischen 0 - 10mV.
Die Auflösung wäre also nicht so gut geeignet.
Daher folgende Idee:
Bevor die zu messende Spannung an den Pin kommt wird sie mit einem
Impendanzwandler (OpAmp) von der Spannungsquelle entkoppelt. Dahinter begrenzt ein Diodenpaar die Spannung auf 0,7V.
Danach kommt ein weiterer OPAmp, mit Verstärkung 10.
Die Ausgangsspannung liegt dann zwischen 0 und 10V
Ich verzichte auf 1) und verwende nur 2)
Wenn ich die Doku richtig interpretiere würde eine Spannung über VDD einen Fehler im ADC provozieren.
a) Ich könnte das ignorieren, weil mich nur der Bereich zwischen 0 und 100mV interessiert
b) zwei Zenerdioden 4,7V hinter dem Opamp (2) (bzw vor RAX 16 ANX) begrenzen das Eingangssignal , sodass es eigentlich nie einen Error geben sollte.
Kann man das so machen ?
Rauschen etc ist nicht relevant.
Bemerkung: Bei genau diesem PIC finde ich in der Doku nichts,
was mir die Situation beschreibt, dass der ADC mehr als VDD im Eingang hat, hmmm
von ~ 2mV . Von der Idee mit dem OPAmp hältst du nichts ?
Hallo,
das mit dem OP scheint mir eine Lösung zu sein. Wenn der OP an der gleichen Versorgungspannung liegt wie der Pic, wird er auch keine höhere Spannung liefern als der Pic. Falls der OP mit einer eigenen, höheren Spannung versorgt wird, dann muss der ADC-Pineingang geschützt werden.
Gruss Jochen-Paul
P.S. Apropos, der Pic16f1509 hat auch ein einstellbares Spannungsreferenzmodul(FVR), z.B. 2,048V..
Da so ein ADC Eingang recht hochohmig (ca. 50 kOhm) ist, braucht man in der Regel keinen Impedanzwandler. Oder ist deinen Spannungsquelle so schwachbrüstig?
Man kann sich etwas dadurch behelfen, in dem mann die Abtastrate reduzieren, dann hat man mehr Zeit einen kleinen Kerko mit der zu messenden Spannung zu laden, welche dann den nötigen Strom für den ADC-Eingang liefert, wenn er die Messung durchführt.
Fvr des 16F1509 kann sogar 1,024V.
Okay, das war eine höchst redundante Frage :-(
Ich versuche es mal mit einer sinnvollere Frage.
Wenn ich mehrere analoge Signale "quasiparallel"
mit dem ADC analysieren will gilt die Spannung ja für alle Signale.
Wenn ich jetzt auch noch ein Poti abfragen will (dort würde der Wert zwischen VDD und VSS liegen), kann man das während der Laufzeit des zukünftigen Programms je nach Bedarf umschalten ?
Wenn ich jetzt auch noch ein Poti abfragen will (dort würde der Wert
zwischen VDD und VSS liegen), kann man das während der Laufzeit des
zukünftigen Programms je nach Bedarf umschalten ?
Dss scheint mir heikel, denn wenn plötzlich die 1.024V des FVR durch das externe Poti "heraufgezogen" würde, könnte dieses Schaden nehmen.
Gruss Jochen
Oder vor jeder ADC-Messung konsequent das FVR einschalten oder entsprechend die Einstellung umschalten auf VDD, sicherheitshalber würde ich jedesmal, wenn das FVR aktiviert wird, das Poti entfernen.
Die zu messende Spannung darf nicht höher als die Referenzspannung b.z.w. VDD sein.
Die zu messende Spannung darf nicht höher als die Referenzspannung
b.z.w. VDD sein.
Das Letztere ist richtig aber die zu messende Spannung darf schon hoeher als die Vref sei - sie darf nur nicht > als VCC sein.
Ich hab hier irgendwo so ein Projekt wo die zu messende Analogspannung > Vref werden kann.Soweit ist mit noch kein Pic oder Arduino abgefackelt.Warum auch?
======================================
If you apply a higher voltage than Vref, the ADC will return the maximum number of counts, but not be damaged. Damage occurs if you apply a few tenths of a volt more than Vcc
Das Letztere ist richtig aber die zu messende Spannung darf schon hoeher
als die Vref sei - sie darf nur nicht > als VCC sein.
Ich hab hier irgendwo so ein Projekt wo die zu messende Analogspannung >
Vref werden kann.Soweit ist mit noch kein Pic oder Arduino
abgefackelt.Warum auch?
======================================
If you apply a higher voltage than Vref, the ADC will return the maximum
number of counts, but not be damaged. Damage occurs if you apply a few
tenths of a volt more than Vcc
Das schreit ja geradezu nach einer Zenerdiode mit 5,1 V vor jedem (gefährdetem) Eingang, denn wer weiß welches Störsignal mal einen Pike über VDD erzeugt.
Die von mir zu messende Spannung liegt zwischen 0mV - 300mV .
Mich interessiert nur der Bereich zwischen 0 - 10mV.
Das ergibt keinen Sinn. Willst du nun Spannungen von 11mV bis 300mV messen können oder nicht?
Auf jeden Fall wird dir kein in einem µC befindlicher ADC einen Fullscale-Wert von 300mV (oder gar 10mV) liefern. Also wirst du um einen vorgeschalteten OPV als Verstärker nicht herum kommen. Manche µC haben aber PGA (programmable gain amplifiers) Blocks eingebaut. Die kann man dann natürlich auch verwenden.
Und das mit der Spannungsbegrenzung auf Vss-0.3V bzw. Vdd+0.3V muß man auch nicht so eng sehen. Dabei geht es um die Schutzdioden, die praktisch jeder µC an fast jedem Eingangspin hat (eine nach Vdd, eine nach Vss). Bei 0.3V leiten die noch gar nicht. Deswegen ist diese Spannung erlaubt. Bei 0.6V fangen sie langsam an zu leiten. Wenn man aber den Strom begrenzt [1], z.B. durch einen geeigneten Vorwiderstand, dann ist alles Paletti. Genauso wenn die Quelle den Strom bzw. die Energiemenge begrenzt. Deswegen sind Spikes regelmäßig kein Problem.
Aber in deinem Fall stellt sich das Problem gar nicht. Wenn du den OPV mit der gleichen Spannung versorgst wie den µC, dann kann der keine höhere Spannung ausgeben. Und die ganze Mimik mit Impedanzwandler und antiparallelem Diodenpaar kannst du auch vergessen. Wenn du den ADC mit sagen wir mal Vref=2.5V betreibst (dann paßt eine Bandgap-Referenz wie TL431) dann brauchst du für 300mV FS eine Verstärkung von 8.3 bzw. für 10mV FS eine von 250. Dafür reicht ein einzelner OPV. Das muß natürlich ein rail-to-rail Typ sein.
[1] auf welchen Wert genau, darüber hüllen sich die Hersteller gern in Schweigen. Gerüchtehalber sind AVR bis 10mA im grünen Bereich. Wenn du bei 1mA bleibst, bist du in jedem Fall sicher.
Die von mir zu messende Spannung liegt zwischen 0mV - 300mV .
Mich interessiert nur der Bereich zwischen 0 - 10mV.
Das ergibt keinen Sinn. Willst du nun Spannungen von 11mV bis 300mV
messen können oder nicht?
So wird ein Schuh draus:
das Signal kann zwischen 0 - 300mV liegen
mich interessiert nur der Bereich zwischen 0 und 10 mV
ein OpAmp vor dem analogen Eingang mit gain 10 würde den Eingangsbereich auf 0 - 3V erhöhen, der für mich interessante Bereich wäre dann
0-100mV.Ein Gain von 100 würde die Eingangsspannung auf 0-30 V erhöhen,
da der OpAmp aber nur max 5V VDD hat wären es real 0 - 5V.
Der für mich interessante Teil wäre dann 0 - 1V.
Wenn ich dann eine Referenz von 1024 mV für den ADC wählen würde (Auflösung 1mV) hätte ich eine Auflösung von 10 Bit auf die Ursprungsspannung von 0 - 10 mV.Anders herum, durch das gain erhöhe ich die Auflösung um den Faktor 100, wenn ich gleichzeitig akzeptiere, dass der Messbereich eigentlich weit überschritten wird, messe also 0 - 10mv mit einer Auflösung von 10µV.
Das sind nur Rechenbeispiele, das gain kann auch ganz kleiner sein, man wird sehen.
Auf jeden Fall wird dir kein in einem µC befindlicher ADC einen
Fullscale-Wert von 300mV (oder gar 10mV) liefern. Also wirst du um einen
vorgeschalteten OPV als Verstärker nicht herum kommen.
Genau, siehe oben.
Manche µC haben
aber PGA (programmable gain amplifiers) Blocks eingebaut. Die kann man
dann natürlich auch verwenden.
Ich halte das für eine gute Idee, so weit bin ich aber noch nicht.
Und das mit der Spannungsbegrenzung auf Vss-0.3V bzw. Vdd+0.3V muß man
auch nicht so eng sehen. Dabei geht es um die Schutzdioden, die
praktisch jeder µC an fast jedem Eingangspin hat (eine nach Vdd, eine
nach Vss). Bei 0.3V leiten die noch gar nicht. Deswegen ist diese
Spannung erlaubt. Bei 0.6V fangen sie langsam an zu leiten. Wenn man
aber den Strom begrenzt [1], z.B. durch einen geeigneten Vorwiderstand,
dann ist alles Paletti. Genauso wenn die Quelle den Strom bzw. die
Energiemenge begrenzt. Deswegen sind Spikes regelmäßig kein Problem.
Okay.
Aber in deinem Fall stellt sich das Problem gar nicht. Wenn du den OPV
mit der gleichen Spannung versorgst wie den µC, dann kann der keine
höhere Spannung ausgeben. Und die ganze Mimik mit Impedanzwandler und
antiparallelem Diodenpaar kannst du auch vergessen. Wenn du den ADC mit
sagen wir mal Vref=2.5V betreibst (dann paßt eine Bandgap-Referenz wie
TL431) dann brauchst du für 300mV FS eine Verstärkung von 8.3 bzw. für
10mV FS eine von 250. Dafür reicht ein einzelner OPV. Das muß natürlich
ein rail-to-rail Typ sein.
Ja,das entspricht ja meiner Idee, s.o.
[1] auf welchen Wert genau, darüber hüllen sich die Hersteller gern in
Schweigen. Gerüchtehalber sind AVR bis 10mA im grünen Bereich. Wenn du
bei 1mA bleibst, bist du in jedem Fall sicher.
Das ergibt keinen Sinn. Willst du nun Spannungen von 11mV bis 300mV
messen können oder nicht?
So wird ein Schuh draus:
das Signal kann zwischen 0 - 300mV liegen
mich interessiert nur der Bereich zwischen 0 und 10 mV
Das ist doch wieder Wischiwaschi.
Interessiert dich nun der Meßwert oberhalb von 10mV oder nicht? Das ist doch eine einfache Frage. Die meisten (alle?) ADC regieren auf Eingangsspannungen oberhalb Fullscale einfach darauf, daß sie den maximalen digitalen Wert ausgeben. Du würdest dann also 0..10mV messen und könntest eine höhere Eingangsspannung zumindest erkennen.
Denn es macht einen Unterschied in der Auflösung deiner Messung ob du das Equipment für 10mV oder 300mV Fullscale auslegst. Dazwischen liegt ein Faktor 30 um den deine Messung dann genauer sein könnte.
Wenn ich dann eine Referenz von 1024 mV für den ADC wählen würde
(Auflösung 1mV) hätte ich eine Auflösung von 10 Bit auf die
Ursprungsspannung von 0 - 10 mV
Du kannst keine 1024mV als Referenz nehmen. Zumindest nicht mit dem ursprünglich gewählten µC. Die minimale Referenzspannug ist dann 1.8V. Wenn du eine kleinere Referenzspannung verwendest, dann wird der Fehler des ADC größer. Denn z.B. die Offsetspannung des Komparators im ADC ist unabhängig von der Referenzspannung. Je kleiner die Referenzspannung, desto größer deren Einfluß.
Das ergibt keinen Sinn. Willst du nun Spannungen von 11mV bis 300mV
messen können oder nicht?
So wird ein Schuh draus:
das Signal kann zwischen 0 - 300mV liegen
mich interessiert nur der Bereich zwischen 0 und 10 mV
Das ist doch wieder Wischiwaschi.
Interessiert dich nun der Meßwert oberhalb von 10mV oder nicht? Das ist
doch eine einfache Frage. Die meisten (alle?) ADC regieren auf
Eingangsspannungen oberhalb Fullscale einfach darauf, daß sie den
maximalen digitalen Wert ausgeben. Du würdest dann also 0..10mV messen
und könntest eine höhere Eingangsspannung zumindest erkennen.
Oberhalb von 10mV interssiert mich nicht.
Der maximale Fullscalewert <=> maximalen digitalen Wert interessiert mich nur insofern, dass ich dann weiß, dass der Messwert über 10mV ist.
Denn es macht einen Unterschied in der Auflösung deiner Messung ob du
das Equipment für 10mV oder 300mV Fullscale auslegst. Dazwischen liegt
ein Faktor 30 um den deine Messung dann genauer sein könnte.
Wenn ich dann eine Referenz von 1024 mV für den ADC wählen würde
(Auflösung 1mV) hätte ich eine Auflösung von 10 Bit auf die
Ursprungsspannung von 0 - 10 mV
Du kannst keine 1024mV als Referenz nehmen. Zumindest nicht mit dem
ursprünglich gewählten µC. Die minimale Referenzspannug ist dann 1.8V.
Wenn du eine kleinere Referenzspannung verwendest, dann wird der Fehler
des ADC größer. Denn z.B. die Offsetspannung des Komparators im ADC ist
unabhängig von der Referenzspannung. Je kleiner die Referenzspannung,
desto größer deren Einfluß.
Ja, es waren doch alles bisher nur Gedankenspiele :-)
Die Wahl welchen PIC16F1 ich verwende ist noch nicht gefallen.
Auch alle Zahlenspiele sind nur als Beispiele zu betrachten.
Bisher steht für mich nur fest, dass ich durch den vorgeschalteten OpAMP
"meinen" Spannungsrange (0-10mv) auf einen höhreren Spannungsbereich "multipliziere" , dadurch habe ich da dann einfach eine bessere Auflösung.
Konkret, ich will eigentlich messsen, wann ein Signal quasi keins mehr ist (zu klein, nur noch Rauschen und ein paar Spikes aus der Umwelt). Alles über dem Bereich enthält genügend "Nutzsignal" und es reicht mir das zu wisssen. Oder ganz profan, der ganze Aufwand kulminiert in dem Ergebnis, da ist nicht genügend Signal(amplitude) oder halt doch.
Konkret, ich will eigentlich messsen, wann ein Signal quasi keins mehr
ist (zu klein, nur noch Rauschen und ein paar Spikes aus der Umwelt).
Das klingt nicht nach einem Job für den ADC. Eher für den Analog- Komparator (oder halt einem externen Komparator). Und dann ein bischen digitale Signalverarbeitung hinterher. Im einfachsten Fall ein gleitender Mittelwert.