Forum: Mikrocontroller und Digitale Elektronik Probleme mit AD des dsPIC30F4013


von Sascha F. (sascha_focus) Benutzerseite


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
1
void init_ADC(void)
2
{
3
    ADPCFG=0xC0;
4
    ADCSSL=0x00;
5
    ADCON1bits.ADON=0;            //A/D aus
6
    ADCON1bits.ADSIDL=0;
7
    ADCON1bits.FORM=0;
8
    ADCON1bits.SSRC=7;
9
    ADCON1bits.ASAM=0;
10
    ADCON1bits.SAMP=1;
11
    ADCON1bits.DONE=0;
12
    
13
    ADCON2bits.VCFG=1;
14
    ADCON2bits.CSCNA=0;
15
    ADCON2bits.BUFS=0;
16
    ADCON2bits.SMPI=0;
17
    ADCON2bits.BUFM=0;
18
    ADCON2bits.ALTS=0;
19
20
    ADCON3bits.SAMC=16;
21
    ADCON3bits.ADRC=0;
22
    ADCON3bits.ADCS = 16;  // 
23
    ADCHS=0;
24
    ADCON1bits.ADON = 1; // turn ADC ON
25
}
26
27
28
unsigned int read_adc(unsigned char channel)
29
{
30
  ADCHS=channel;
31
  ADCON1bits.SAMP = 1; // start sampling then ...
32
  Nop();
33
  // after 31Tad go to conversion
34
  while (!ADCON1bits.DONE);// conversion done?
35
  return ADCBUF0;
36
}

Gruß Sascha

von Auch einer (Gast)


Lesenswert?

Lese die Werte mehrmals hintereinander aus, und bilde
dann den Mittelwert.

von Sascha F. (sascha_focus) Benutzerseite


Lesenswert?

Hallo,

das mache ich schon.
1
unsigned int AV_ADC(unsigned char channel)
2
{
3
  unsigned long av=0;
4
  unsigned char i;
5
  for(i=16;i>0;i--)
6
    {
7
    av = av+read_adc(channel);
8
    }
9
  av = av/16;
10
  return av;
11
}

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

von Benedikt K. (benedikt)


Lesenswert?

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

von Sascha F. (sascha_focus) Benutzerseite


Angehängte Dateien:

Lesenswert?

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

Gruß Sascha

von Sascha F. (sascha_focus) Benutzerseite


Lesenswert?

Hi,

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

Gruß Sascha

von Franko P. (sgssn)


Lesenswert?

Hallo Sascha

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

Gerhard

von Willivonbienemaya .. (willivonbienemaya)


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?

von Willivonbienemaya .. (willivonbienemaya)


Angehängte Dateien:

Lesenswert?

Anhang

von Gast (Gast)


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.

von Willivonbienemaya .. (willivonbienemaya)


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.

von Franko P. (sgssn)


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

von Franko P. (sgssn)


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

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

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

von Franko P. (sgssn)


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

von Sascha F. (sascha_focus) Benutzerseite


Angehängte Dateien:

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

von Willivonbienemaya .. (willivonbienemaya)


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

von Sascha F. (sascha_focus) Benutzerseite


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

von Willivonbienemaya .. (willivonbienemaya)


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.

von Sascha F. (sascha_focus) Benutzerseite


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

von Willivonbienemaya .. (willivonbienemaya)


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?

von Sascha F. (sascha_focus) Benutzerseite


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

von Willivonbienemaya .. (willivonbienemaya)


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 ;-)

von Sascha F. (sascha_focus) Benutzerseite


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

von Willivonbienemaya .. (willivonbienemaya)


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.

von Sascha F. (sascha_focus) Benutzerseite


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

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Hast du noch was rausgefunden?

von sascha_focus (Gast)


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

von sascha_focus (Gast)


Lesenswert?

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

Gruß Sascha

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

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

von sascha_focus (Gast)


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

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
Noch kein Account? Hier anmelden.