mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit AD des dsPIC30F4013


Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nutze einen dsPIC30 mit 24MHz. Als Referenzspannung für den 12Bit
A/D-Wandler dient ein MCP1525 mit 2.495V. Bei einer Spannung von 332mV
am Eingang des AD Kanals, gibt er mir einen Wert von 514 aus, obwohl es
rechnerisch 544 sein müßten. Dies zieht sich bis zum Endbereich hin.
Liegt es an der Einstellung des AD`s?


Arbeite mit dem C30
void init_ADC(void)
{
    ADPCFG=0xC0;
    ADCSSL=0x00;
    ADCON1bits.ADON=0;            //A/D aus
    ADCON1bits.ADSIDL=0;
    ADCON1bits.FORM=0;
    ADCON1bits.SSRC=7;
    ADCON1bits.ASAM=0;
    ADCON1bits.SAMP=1;
    ADCON1bits.DONE=0;
    
    ADCON2bits.VCFG=1;
    ADCON2bits.CSCNA=0;
    ADCON2bits.BUFS=0;
    ADCON2bits.SMPI=0;
    ADCON2bits.BUFM=0;
    ADCON2bits.ALTS=0;

    ADCON3bits.SAMC=16;
    ADCON3bits.ADRC=0;
    ADCON3bits.ADCS = 16;  // 
    ADCHS=0;
    ADCON1bits.ADON = 1; // turn ADC ON
}


unsigned int read_adc(unsigned char channel)
{
  ADCHS=channel;
  ADCON1bits.SAMP = 1; // start sampling then ...
  Nop();
  // after 31Tad go to conversion
  while (!ADCON1bits.DONE);// conversion done?
  return ADCBUF0;
}

Gruß Sascha

Autor: Auch einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lese die Werte mehrmals hintereinander aus, und bilde
dann den Mittelwert.

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das mache ich schon.
unsigned int AV_ADC(unsigned char channel)
{
  unsigned long av=0;
  unsigned char i;
  for(i=16;i>0;i--)
    {
    av = av+read_adc(channel);
    }
  av = av/16;
  return av;
}

Der Kanal 2 ist über einen OP(LM358) an einen Spannungsteiler 
angeschloßen(91k/13k). Bei einer Spannung von 5V ist der Wert ganz 
genau. Bei 2.5V zeigt er mir 100mV zu wenig an und bei 8V 100mV zuviel. 
Von Linearität ist absolut nicht zu reden :(

Gruß sascha

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bias Strom vom LM358 + Vorwiderstand -> schnell einige 100mV Offset.
Wie sieht deine Schaltung denn genau aus ?

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:
Angehängte Dateien:
  • preview image for AD.png
    AD.png
    29,3 KB, 210 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Hier die Schaltung rund um den LM358. Versorgungsspannung des LM358 ist 
+5V und -5V. Der ausgang Voltage geht auf den AD.

Gruß Sascha

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

es muß wohl an den Einstellungen liegen. Habe den Spannungsteiler direkt 
an den AD angeschlossen. Das Ergebnis ist das gleiche.

Gruß Sascha

Autor: Franko Phil (sgssn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sascha

du betreibst die referenzspannung ausserhalb der Spec. Laut Tabelle
23-38 muss die Referenz VrefH mindestens Avss+2,7Volt betragen

Gerhard

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>du betreibst die referenzspannung ausserhalb der Spec. Laut Tabelle
>23-38 muss die Referenz VrefH mindestens Avss+2,7Volt betragen


Ich habe Tabelle 23-38 angehängt.

Wo siehst du das da?

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anhang

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu sehen in Tabelle 23-37 Parameter AD05...

Aber benutze als negative Referenz lieber den externen Eingang (einfach 
mit GND verbinden) und nicht AVss. Die dsPICs ziehen leider so viel 
Strom, daß auf AVss dadurch wohl ein Offset entsteht. Takte mal den 
dsPIC langsamer und Du wirst sehen, daß auch der Offset kleiner wird.

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, habs gesehen. War mir auch neu.

@ Sascha Focus
Teste mal wie das Ergebnis aussieht wenn du eine höhere Referenz nimmst.
Und wie hast du AVDD verbunden? Schön mit 100nF direkt am pin und 
vielleicht noch ne Spule reingebaut? Oder einen kleinen Wiederstand?

Die ganze Schaltung wär nicht schlecht.

Übrigens. Mit was hast du denn deine zB 332mV gemessen? Wenn das nämlich 
ein 10 € Multimeter war, is die Messung nix Wert.

Autor: Franko Phil (sgssn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry
das hab ich aus dem Datenblatt von 2005, da steht das auf der Seite 200

schau mal in deinem Datenblatt unter
12-BIT A/D MODULE SPECIFICATIONS, unter Electrical Characteristics


Gerhard

Autor: Franko Phil (sgssn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sascha

ich hab das jetzt im aktuellen Datenblatt gefunden:
Table 23-37, 12-BIT A/D MODULE SPECIFICATIONS, page 199

Param No: AD05 VrefH AVss+2,7 Volt als Minimalwert für die Referenz


Gerhard

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Gerhard Gunzelmann
Nix für ungut, aber wenn du die Beiträge gelesen hättest, hättest du 
nicht suchen müssen ;-)

Autor: Franko Phil (sgssn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ willivonbienemaya

hast natürlich recht. Allerdings hab ich mich mit dem 4013 auch schon 
rumgeärgert. Darum hätt ich auf jeden Fall das aktuelle Datasheet 
durchgeschaut -  es könnte sich auch was geändert haben. Das feature 
Uref > AVss+2,7 Volt ist wirklich bescheuert.

Gerhard

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Willivonbienemaya .. wrote:
> OK, habs gesehen. War mir auch neu.
>
> @ Sascha Focus
> Teste mal wie das Ergebnis aussieht wenn du eine höhere Referenz nimmst.
> Und wie hast du AVDD verbunden? Schön mit 100nF direkt am pin und
> vielleicht noch ne Spule reingebaut? Oder einen kleinen Wiederstand?
>
> Die ganze Schaltung wär nicht schlecht.
>
> Übrigens. Mit was hast du denn deine zB 332mV gemessen? Wenn das nämlich
> ein 10 € Multimeter war, is die Messung nix Wert.

Hi,

habe jetzt ein MCP1541 = 4.096V eingesetzt. Ist schon etwas besser. Mit 
der Beschränkung der VRef habe ich glatt übersehen. AVDD habe ich über 
einen 10R Widerstand an +5V angeschloßen. 100nF sind direkt an AVDD und 
AGND. Aber irgendwie bin ich von den PIC enttäuscht. Durch die 
Takteinstellung des AD blicke ich immer noch nicht durch.

Gemessen habe ich mit einem Meterman 33XR. Ist für den Hausgebrauch 
schon recht (Fluke 179 habe ich nur auf der Arbeit). Anbei die 
Schaltung.

Gruß Sascha

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sascha,
ich hab mirs noch mal angeschaut.
Ich hab nix böses gesehen.
Hast du die Möglichkeit mal die Pins alle mit nem Oszi zu messen?

Ansonsten kannste mal mit den TAD Zeiten rumspielen.
Also hier -> ADCON3bits.ADCS

Davon abgesehen sollte man nicht enttäuscht sein von einem Controller 
wenn man nicht durchblickt. Allenfalls vom Datenblatt. Aber das ist an 
dieser Stelle nicht mal schlecht. Zum AD Wandler gibt es sogar 
Beispiele.

Bei dem AD gibt es halt einige schöne Features. ZB kann man den mit 
internem takt laufen lassen. is nützlich wenn man zb Strom sparen will. 
Dann läuft der AD Wandler weiter während der Rest schläft.

Gruß

Andreas

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beispiele schön und gut. Aber bis jetzt alle im Interrupt genutzt. Habe 
mich auch etwas ungeschickt ausgedrückt. Ich finde die Stromaufnahme 
schon ziemlich hoch. Der Pic wird schon schön warm.

Gruß sascha

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
alles kann man halt leider nicht haben. entweder 5V und schnell oder 
wenig stromaufnahme.
Aber das die da nicht so toll sind stimmt schon.

Takte sie einfach niedriger und benutze Idle und Sleep Modi. Dann 
bekommst du die Stromaufnahme auf unter 10mA und warm wird nix mehr.

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wie schon beschrieben, ist die VREF jetzt 4.096V. Diese ist jetzt 
komplett angewählt mit ADCON2bits.VCFG=3 und auch dementsprechend 
angeschloßen. Bei Eingangsspannung von 1,30V messe ich mit dem AD auch 
1,30V. Bei 6,57V messe ich jetzt 6,65V.

Berechnen tue ich den Wert so:

test=33313;     //max Spannung 33.313V an Spannungsteiler
BATT_SPANNUNG=((((test*100)/4095)*adwert)/100);

Der OP und die ext. Dioden habe ich auch weggelassen. So langsam 
verzweifle ich. Frag mich, wo der Offset her kommt. Je höher die 
Eingangsspannung wird, desto höher wird auch die Abweichung. Auch ein 
heruntertakten bringt keinen erfolg.

Gruß Sascha

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Fehler erst mal: Warum teilst du durch 4095 ? 12 Bit sind 4096.
Und lass doch ma den dummen Spannungsteiler weg. da hast du nur wieder 
unerwünschte nebeneffekte und toleranzen die du beachten müsstest.
schliss doch mal deine 2,5 V referenz direkt an ohne was anderes 
dazwischen (denk an den dicken kondensator am ausgang der 2,5 V 
Referenz).

Der AD Wandler müsste ja dann auf 2500 kommen. Tut er das?

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Willivonbienemaya .. wrote:
> Ein Fehler erst mal: Warum teilst du durch 4095 ? 12 Bit sind 4096.
Schon klar, aber zählen 0V nicht auch dazu? Wir zählen doch wohl von 0
bis 4095. Nutze jetzt eine Referenzspannung von 4.096V

Siehe Thread: Beitrag "AD werte umrechnen"

> Und lass doch ma den dummen Spannungsteiler weg. da hast du nur wieder
> unerwünschte nebeneffekte und toleranzen die du beachten müsstest.
> schliss doch mal deine 2,5 V referenz direkt an ohne was anderes
> dazwischen (denk an den dicken kondensator am ausgang der 2,5 V
> Referenz).
>
> Der AD Wandler müsste ja dann auf 2500 kommen. Tut er das?

Jepp, das macht er. Wenn ich mir den Wert des AD dezimal anzeigen lasse, 
kommt der Wert 4095 bei 4.096V am Eingang .

Gruß Sascha

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den 4095 oder 4096 is mir jetzt egal.

Wenn ich ne Referenz von 4096mV hab und einen 12 Bit Ad Wandler, dann 
rechne ich gar net lang rum, sondern nehm das Ergebins und schreib mV 
dran.

>Jepp, das macht er. Wenn ich mir den Wert des AD dezimal anzeigen lasse,
>kommt der Wert 4095 bei 4.096V am Eingang .

Ich frag dich ob 2500 rauskommt und du erzählst mir: "Ja, es kommen 4095 
raus". Aha sag ich da nur.

Wenn du die Referenz mit dem eingang kurzschliesst kommt klar der 
maximalwert raus. (Oder du kannst den AD wegschmeissen)

Wiederholung der Frage: Hast du mal deine 2,5 V Referenz dran gemacht 
und geschaut was der AD Wandler sagt?

Zur Erinnerung: Du bist auf der Suche nach Messfehlern ;-)

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Willivonbienemaya .. wrote:
> Das mit den 4095 oder 4096 is mir jetzt egal.
>
> Wenn ich ne Referenz von 4096mV hab und einen 12 Bit Ad Wandler, dann
> rechne ich gar net lang rum, sondern nehm das Ergebins und schreib mV
> dran.
>
>>Jepp, das macht er. Wenn ich mir den Wert des AD dezimal anzeigen lasse,
>>kommt der Wert 4095 bei 4.096V am Eingang .
>
> Ich frag dich ob 2500 rauskommt und du erzählst mir: "Ja, es kommen 4095
> raus". Aha sag ich da nur.
>
> Wenn du die Referenz mit dem eingang kurzschliesst kommt klar der
> maximalwert raus. (Oder du kannst den AD wegschmeissen)
>
> Wiederholung der Frage: Hast du mal deine 2,5 V Referenz dran gemacht
> und geschaut was der AD Wandler sagt?
>
> Zur Erinnerung: Du bist auf der Suche nach Messfehlern ;-)

Hatte dich falsch verstanden, sorry. Ich messe 2.491V mit dem AD. 2.491V 
mit dem Multimeter.

Gruß Sascha

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sieht doch relativ genau aus ;-)

Dann behaupte ich einfach mal, dass es an deinem OP liegt. Der 358 is ja 
eher was für en kleinen Geldbeutel als für gute Messungen.
Wie groß is eigentlich R14 ?
Der sollte nicht zu groß sein, dass du noch schön hochohmig auf deinen 
AD Wandler gehst.

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R14 hat 100R. Wie schon vorher, habe ich mit dem Spannungsteiler diese 
Probleme. Auch ohne OP. SelnHab schon die Widerstände gewechselt, ohne 
Erfolg. Ich habe schon alles weggelassen, Dioden, OP und den 
Spannungsteiler direkt angeschloßen.

Ich raff es einfach nicht. Mit der Strommessung habe ich absolut keine 
Probleme und vor allem keine solchen Abweichungen.

Da demnächst eh ein neues Layout fällig wird, gibt es ne gute Empfehlung 
als Impedanzwandler für den AD?.

Gruß Sascha

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du noch was rausgefunden?

Autor: sascha_focus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne, leider nicht. Bis jetzt versaue ich mir immer mit dem 
Spannungsteiler die Werte. Ohne ist alles Ok. Bin jetzt aber erst mal im 
Urlaub

Gruß Sascha

Autor: sascha_focus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So,
da habe ich mein Glück weiter versucht, aber ohne Erfolg. Auch der 
Einsatz etwas niederohmigere Spannungsteiler bringt es nicht.

Gruß Sascha

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du ein Scope, damit du dir das Signal mal anschauen kannst? 
Vielleicht ist es einfach verrauscht.

Autor: sascha_focus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider hab ich noch keins. Rauschen sollte nichts, außer der PIC selber. 
Selbst wenn ich direkt an einen analogen Eingang mittel Kabel am Pin 
gehe, habe ich diese abweichungen. Im Bereich um 2,5V ist alles ok. 
Darunter messe ich zu wenig, darüber hinaus wird es immer etwas zuviel. 
Alles bei einer Referenzspannung von 4,096V. Selbst ein PIC auf 
Lochraster ohne sonstige weitere Beschaltungen hat ein ähnliches 
verhalten.

Gruß Sascha

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.