- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

Thema: 5V-Referenzspannungsquelle an RA3 als ADC-Referenz funktioniert nicht.

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    28
    Beiträge
    139

    5V-Referenzspannungsquelle an RA3 als ADC-Referenz funktioniert nicht.

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ich arbeite gerade an einem Board, welches unter anderem ein PIC für diverse Aufgaben beheimatet. Da ich die Spannungen am ADC mit hoher genauigkeit auslesen muss (8-10 Bit genauigkeit) hab ich eine Referenzspannungsquelle auf dem Board installiert. Sobald ich diese aber aktiviere, liefert der ADC nur mehr 1023 als Ergebnis.

    Die Referenzspannungsquelle selber liefert saubere 5V (gemessen), die Versorgungsspannung am PIC sind 5V (von StepDown +-0,1V)-0,3V von der Schutzdiode.

    Hier die Schaltung an RA3:

    Klicke auf die Grafik für eine größere Ansicht

Name:	referenzspannungsqelle_pic.jpg
Hits:	13
Größe:	30,9 KB
ID:	27889
    Code
    Allgemeine Initialisierung
    https://github.com/pointhi/PointhiBo...w.X/src/init.c
    Initialisierung des ADC's
    https://github.com/pointhi/PointhiBo...fw.X/src/adc.c

    Sobald ich diese Zeile aktiviere liefert der ADC nur mehr 1023 als ergebnis, wenn diese deaktiviert ist liefert sie korrekte werte (mit starken schwankungen ab dem 5,6 Bit):

    Code:
    ADCON1bits.VCFG0 = 1; // Vdd
    Meine Ideen Bzgl. Fehlerursache:
    • Der Spannungsunterschied zwischen VDD und VREF+ ist etwa 0,3V (bin da an der maximalen Spezifikation, werde das ganze sowieso auf 3,3V-Referenz umbauen müssen).
    • Irgendwo ein Register vergessen oder falsch konfiguriert
    • zu großer eingangswiederstand für eine Referenzspannungsquelle?
    • Der PIC auf dem ich gerade entwickle musste kurzzeitig mal 8V oder so wegstecken als der StepDown durchgebrannt war. Er hat es aber nach meinen derzeitigen erkenntnissen unbeschaded überlebt (es funktioniert alles noch was vorher schon funktioniert hat)


    mfg, pointhi
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Ich habe im Register ADCON1 eines beliebigen PIC18Cxx2 (das erste Datenblatt, das mir vor die Flinte kam, da kein Typ benannt wurde) kein Bit VCFG0 entdeckt.
    Es wäre ungewöhnlich, wenn die Bitbenennungen der Header-Files von den Namen des Datenblattes abweichen. Daher sieht es für mich erstmal nach einer Verwechselung deinerseits aus.

    Was passiert, wenn die Schutzdiode testweise überbrückt wird, damit Vref nicht signifikannt höher als Vcc ist?
    Geändert von RoboHolIC (29.03.2014 um 23:03 Uhr) Grund: Registernamen nachgetragen

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Ich hab zwar mit PIC18 noch nichts zu tun gehabt, den ADC von PIC12/16 oder PIC24 hab ich mehrfach benutzt. Da die aus der gleichen Chipschmiede kommen, sollten sie vergleichbar sein.

    Um 8 oder 10Bit zu bekommen, braucht man keine extra Spannungsreferenz. Die Auflösung von 10-Bit ist 1 auf Tausend, eine Referenz, deren Qualität in "Parts Per Million" spezifiziert ist, ist da Overkill. Wenn der ADC 16 Bit oder mehr hätte, wäre das anders.

    Wenn der Aufbau der Schaltung ok ist, sollte der ADC-Wert höchstens um ein, zwei Werte schwanken. Das ist zumindestens meine Erfahrung, egal was ich als Referenz benutzt habe (eine eingebaute oder Vdd oder AVdd je nach Chip). Ich hab mir das in der SW auch einfacher gemacht: den internen MUX auf den gewünschten Kanal gestellt, einige µs gewartet, den ADC gestartet und wenn er fertig war das Ergebniss verwendet. Manche PICs haben auch einen Auto-Modus, da wartet er selbsständig die Sample-Time ab und startet dann den ADC alleine. Die Ergebnisse sind gut brauchbar.

    Du wandelst zweimal und wirfst einen Wert weg, das ist IMHO unnötig wenn die Sample-Zeit groß genug ist. Und wenn die Signalquelle eine Impedanz von wenigen Kiloohm hat, ist das in wenigen µs erledigt. Die ADC-Clock ist auch ein Punkt, wenn man da unsicher ist, kann man den internen Oszillator benutzen. den die PICs typischerweise haben.

    My 2 cents

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    28
    Beiträge
    139
    Tschuldigung, Typ vergessen: PIC18F4420

    Zitat Zitat von RoboHolIC
    Ich habe im Register ADCON1 eines beliebigen PIC18Cxx2 (das erste Datenblatt, das mir vor die Flinte kam, da kein Typ benannt wurde) kein Bit VCFG0 entdeckt.
    Hier der Teil aus dem Datenblatt, VCFG0 existiert:

    Code:
    VCFG1: Voltage Reference Configuration bit (V REF - source)
    1 = V REF - (AN2)
    0 = V SS
    
    VCFG0: Voltage Reference Configuration bit (V REF + source)
    1 = V REF + (AN3)
    0 = V DD
    Zitat Zitat von RoboHolIC
    Was passiert, wenn die Schutzdiode testweise überbrückt wird, damit Vref nicht signifikannt höher als Vcc ist?
    Werd ich mal ausprobieren.

    Zitat Zitat von Klebwax
    Um 8 oder 10Bit zu bekommen, braucht man keine extra Spannungsreferenz. Die Auflösung von 10-Bit ist 1 auf Tausend,
    Das Problem ist dass die Versorgungsspannung von einem Step-Down mit +- 0,1V genauigkeit kommt, dazu kommt noch die Diode und diverse Temperaturschwankungen welche die ADC-Referenz noch weiter beeinflussen. Bei meinen derzeitigen Tests waren villeicht 4-6 Bit brauchbar, der rest datenmüll. Einen Tiefentladeschutz für LiPos kann ich mit so einer genauigkeit nicht realiseren. Der ADC für die Versorgungsspannung ist selber mit einem 1:9 Spannungsteiler am ADC angeschlossen, wodurch sich die Auflösung in mV noch weiter verschlechtert.

    Zitat Zitat von Klebwax
    Du wandelst zweimal und wirfst einen Wert weg, das ist IMHO unnötig wenn die Sample-Zeit groß genug ist. Und wenn die Signalquelle eine Impedanz von wenigen Kiloohm hat, ist das in wenigen µs erledigt. Die ADC-Clock ist auch ein Punkt, wenn man da unsicher ist, kann man den internen Oszillator benutzen. den die PICs typischerweise haben.
    Als ich diesen Teil geschrieben habe haben wir im Labor gerade ADC beim AVR durchgemacht, und der Lehrer hat unter anderem das empfohlen um die genauigkeit zu erhöhen. Also hab ich es einfach mal implementiert. Dazu kommt noch, das ich außer den internen MUX noch einen Externen Analog-MUX benutze. Dieser hat auch noch schaltzeiten, und durch die kapazitäten und widerstände auch diverse umladezeiten (welche sicher nicht hoch, aber doch da sind). Also besser auf nummer sicher, kann man später ja noch ändern falls es benötigt wird.

    mfg, pointhi
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    28
    Beiträge
    139
    Das ganze funktioniert jetzt, ich bin mir aber nicht ganz sicher was genau geholfen hat.

    Vermutlich war es eine kalte lötstelle beim IC. Ich hab noch einmal ein paar pins nachgelötet, da ich 1. ADC-Pin nicht auslesen konnte (war wohl nicht verbunden, soetwas sieht man bei TQFP nur nicht wirklich gut). Zusätzlich habe ich im Code das Register CMCON mit 0x00 überschrieben, damit ja kein komperator aktiv ist.

    Die Code-Änderungen welche ich vorgenommen habe bis es funktionierte sind in diesem Commit zusammengefasst:
    https://github.com/pointhi/PointhiBo...34c4aa03d69d35

    mfg, pointhi
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 29.02.2012, 14:39
  2. Pin als Input funktioniert nicht
    Von Geistesblitz im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 10.11.2011, 07:45
  3. Referenzspannungsquelle 0,1V
    Von sector im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 15.11.2007, 14:49
  4. Ansteuerung Timer0 als Counter funktioniert nicht :(
    Von boeseTURBO-CT im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 12.08.2005, 10:42
  5. Analog Comparator mit GND als Referenz
    Von KargyBoy im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 25.07.2005, 11:07

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen