Hallo zusammen, 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: 1) 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. 2) Danach kommt ein weiterer OPAmp, mit Verstärkung 10. Die Ausgangsspannung liegt dann zwischen 0 und 10V 3) 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 Danke und Grüße Harry
Harry R. schrieb: > Die von mir zu messende Spannung liegt zwischen 0mV - 300mV . > > Mich interessiert nur der Bereich zwischen 0 - 10mV. Dann solltest Du am VREF-Pin eine geeignete Spannung anlegen. Dazu beachten: Datenblatt, Tabelle 29-13 "ADC Characteristics". Minimale externe Referenzspannung beträgt 1.8 V (Parameter AD06). Harry R. schrieb: > 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 Doch. Datenblatt, Abschnitt 29.1 "Absolute Maximum Ratings"
1 | Voltage on pins with respect to V SS |
2 | on V DD pin |
3 | PIC16F1508/9 .... -0.3V to +6.5V |
4 | PIC16LF1508/9 ... -0.3V to +4.0V |
5 | on MCLR pin .......... -0.3V to +9.0V |
6 | on all other pins .... -0.3V to (V DD + 0.3V) |
Der ADC fällt unter "all other pins".
:
Bearbeitet durch User
Harald K. schrieb: > Harry R. schrieb: >> Die von mir zu messende Spannung liegt zwischen 0mV - 300mV . >> >> Mich interessiert nur der Bereich zwischen 0 - 10mV. > > Dann solltest Du am VREF-Pin eine geeignete Spannung anlegen. Okay, woher würdest du die beziehen ? Einfach mit VDD und Begrenzung durch eine Z-Diode zb ? > Dazu beachten: Datenblatt, Tabelle 29-13 "ADC Characteristics". Minimale > externe Referenzspannung beträgt 1.8 V (Parameter AD06). > > Harry R. schrieb: >> 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 > > Doch. Datenblatt, Abschnitt 29.1 "Absolute Maximum Ratings" > >
1 | > Voltage on pins with respect to V SS |
2 | > on V DD pin |
3 | > PIC16F1508/9 .... -0.3V to +6.5V |
4 | > PIC16LF1508/9 ... -0.3V to +4.0V |
5 | > on MCLR pin .......... -0.3V to +9.0V |
6 | > on all other pins .... -0.3V to (V DD + 0.3V) |
7 | > |
> > Der ADC fällt unter "all other pins". Okay, man muss die Doku wirklich nach allen Aspekten hin interpretieren :-) Hast du noch Informationen, was einen Fehler im ADC provozieren könnte (wenn man das Problem der maximum ratings gelöst hat) ? Wenn ich also als externe Referenz 2V nehme hätte ich eine max. Auflösung von ~ 2mV . Von der Idee mit dem OPAmp hältst du nichts ? Viele Grüße
> 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..
:
Bearbeitet durch User
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.
Fred R. schrieb: > Fvr des 16F1509 kann sogar 1,024V. > Da hast du eine Auflösung von 1mV. Also mit FVR auf 1024mV ?
Fred R. schrieb: > Harry R. schrieb: >> Also mit FVR auf 1024mV ? > > Fred R. schrieb: >> 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 ? Viele Grüße
Harry R. schrieb: > 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.
:
Bearbeitet durch User
Jochen-paul S. schrieb: > könnte dieses Schaden nehmen. Ernsthaft? Jochen-paul S. schrieb: > entsprechend die Einstellung umschalten auf VDD, Ja. Warum nicht?
Fred R. schrieb: > Jochen-paul S. schrieb: >> könnte dieses Schaden nehmen. > > Ernsthaft? > > Jochen-paul S. schrieb: >> entsprechend die Einstellung umschalten auf VDD, > > Ja. Warum nicht? Ich fasse zusammen: Ein "ständiges" Umkonfigurieren der Referenzspannung des ADC wäre eine mögliche und gängige Lösung.
Harry R. schrieb: > Ein "ständiges" Umkonfigurieren der Referenzspannung des ADC wäre eine > mögliche und gängige Lösung. Ja
> Ein "ständiges" Umkonfigurieren der Referenzspannung des ADC wäre eine > mögliche und gängige Lösung. Es waere k.l.u.k., die dynamischen Parameter im Datenblatt zu beachten.
Jochen-paul S. schrieb: > 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 ======================================
Toxy T. schrieb: > 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.
Motopick schrieb: >> Ein "ständiges" Umkonfigurieren der Referenzspannung des ADC wäre eine >> mögliche und gängige Lösung. > > Es waere k.l.u.k., die dynamischen Parameter im Datenblatt zu beachten. k.l.u.k. == klug ?
Harry R. schrieb: > 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.
Axel S. schrieb: > Harry R. schrieb: >> 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. Danke und Grüße
Harry R. schrieb: >> 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. Harry R. schrieb: > 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ß.
:
Bearbeitet durch User
Axel S. schrieb: > Harry R. schrieb: >>> 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. > > Harry R. schrieb: >> 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.
Harry R. schrieb: > 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.