Dåliga resultat från 10bit A/D dsPIC30F4011

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Dåliga resultat från 10bit A/D dsPIC30F4011

Inlägg av pheer »

Jag får dåliga resultat från dsPIC A/D, här är förutsättningarna och en typisk mätning.

PIC är avkopplad med en 100nF konding. Sampling triggas manuellt var 100e ms. I övrigt är det bara ICD2 och en LCD som är kopplad till PIC.

Tad=280ns
Samplingstid=2*Tad

Vref- = AVss = Vss = 0V
Vref+ = AVdd = Vdd = 5,01V (alla spänningar uppmätta med en kalibrerad fluke 179)

Ch1+=538mV
Ch1-=Vref-
källimpedans=1kohm

resultat=100
förväntat resultat=110

Enligt databladet så är min. samplingstid Tad, min. Tad=256ns, max källimpedans 5kohm. Se dsPIC30F family reference manual s. 437

Kod: Markera allt

;------------------------------------------------------------------------------
; AD_Interrupt()
;------------------------------------------------------------------------------
.text
__ADCInterrupt:
	BCLR	IFS0, #ADIF		;clear interrupt flag

	CALL	LCD_Line1
	MOV	ADCBUF3, W0
	MOV	ADCBUF2, W0
	MOV	ADCBUF0, W0
	MOV	ADCBUF1, W0
	CALL	Bin_BCD_xxxxx

	RETFIE
;//AD_Interrupt()
;------------------------------------------------------------------------------


;------------------------------------------------------------------------------
; AD_Init()
;------------------------------------------------------------------------------
.text
AD_Init:
	;Setup A/D

	;Analog inputs
	BSET	TRISB, #RB0
	BCLR	ADPCFG, #PCFG0
	BSET	TRISB, #RB1
	BCLR	ADPCFG, #PCFG1
	BSET	TRISB, #RB2
	BCLR	ADPCFG, #PCFG2
	BSET	TRISB, #RB3
	BCLR	ADPCFG, #PCFG3

	;Start conversion after sampling
	BSET	ADCON1, #SSRC1
	BSET	ADCON1, #SSRC0
	BSET	ADCON1, #SSRC2	

	;Simultaneous sampling of all 4 channels
	BSET	ADCON1, #SIMSAM

	;Sample all channels
	BSET	ADCON2, #CHPS1

	;Interrupt after every 4 conversions
	BSET	ADCON2, #SMPI2

	;Set sample and conversion times
 	MOV	#0x0210, W0
	MOV	W0, ADCON3

	;Select A/D-inputs, AN3, AN0, AN1, AN2
	BSET	ADCHS, #CH0SA0
	BSET	ADCHS, #CH0SA1

	;Enable ad interrupts
	BCLR	IFS0, #ADIF		;clear interrupt flag
	BSET	IEC0, #ADIE

	;Turn on A/D-module
	BSET	ADCON1, #ADON
	
;//AD_Init()
;------------------------------------------------------------------------------
Att öka samplingstiden eller konverteringstiden hjälper inte. Förslag på vad som kan vara galet?
Användarvisningsbild
Icecap
Inlägg: 26637
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Koppla av Ch1+ mot GND med en 100nF och se om det blir skillnad.
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Det hjälpte tyvärr inte. Prövade även att byta PIC, ingen skillnad.
Användarvisningsbild
Icecap
Inlägg: 26637
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Min uträkning säger att svaret du förväntar ska vara 109,9 alltså 110....

Antar här att det rör sig om 10 bit.

5,01V/1024 = 4,8925...mV/step

538mV/4,8925mV = 109,96... alltså 110. Och det får du ju. Vad är problemet?
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Icecap> alltså 110. Och det får du ju.

pheer skrev :

pheer> resultat=100
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Icecap tjuvstartade visst lite med skumpan, men det är lugnt :wink:
Användarvisningsbild
Icecap
Inlägg: 26637
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Åh ja....another day, another hangover...

Nu var det ju inte skumpa.....men lakritsshot......MUMS!

Men back on track:
Mäts alla spänningar direkt på PIC'ens pinnar? Alltså mätpinne '-' till pinnen med Ch1- och mätpinne '+' till CH1+ osv, inget sockelskit eller sladdar mellan. Det rör sig om ca: 49mV som ska hittas och det kan bli svårt, de kan LÄTT försvinna i en sockel t.ex.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Håller med Icecap, det är inte speciellt *mycket* fel... :-)

Jag skulle se till att få flera mätpunket, t.ex min/max och
ett antal punkter över hela mätområdet för att se om det
är ett "offset" fel (d.v.s att felet ligger ca 50 mV fel över hela
skalan) eller om det är olinjaritet (d.v.s att felet hoppar +/-
beroende på var man är på skalan, och i så fall, om det är
slumpvis eller om det följer något "mönster").

Det är svårt att säga något bestämt med bara ett mätvärde...
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Japp, alla spänningar uppmätta direkt på benen. Spänningskällan är en 10k pot(man tager vad man haver) som sitter mellan avdd och avss. Tänker jag fel på källimpedansen?
Senast redigerad av pheer 25 mars 2012, 19:10:19, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Ja inte blir det *1* kohm i all fall. Snarare 5 kohm.
Men hur som helst skulle du ha hamnat närmare "rätt"
värde med en längre samplingstid (om det är det som
är "acquisition time" som du menar med det).

Intressanta värden i Excelfilen !
Vad drar du för slutsatser ?
Användarvisningsbild
Icecap
Inlägg: 26637
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

En 10K pot är som "sämst" 2 st 5K motstånd i paralell (impedansmässigt) vilket ger 2,5K. Då du ju såklart har avkopplat signalspänningen (100nF) ordentligt kan det bara vara kvar att du har ett offset.

Jag stör mig (ordvrängar som jag är) på att "alla spänningar uppmätta direkt på benen", jag antar i detta att du SÅKLART har mätt med referensen (- sladden) direkt på benet också!

Leta i databladet, någonstans står det om offset för AD-omvandlaren, om den kan vara 50mV (mycket sannolikt) är det förklaringen.
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Som sagt, en längre sampling-/acquistiontime gör ingen skillnad, har prövat upp till 8us.

Enligt databladet (s. 206) så är typiskt offset error 0,75LSb(=3,7mV). Max offset error är TBD, vet sodjan var man hittar värdet på det? Jag har sökt men icke funnit...

Tyvärr kan jag inte dra någon vettig slutsats av mätvärdena.

Antagandet är korrekt Icacap.
Användarvisningsbild
Icecap
Inlägg: 26637
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag tycker att se på Excel-arket att du har ett offset gentemot GND.

Och bara en petig grej: på en 10-bit AD kan du inte ha 11 bit fel! Du kan ha 11 steg fel däremot...

Ju närmre du kommer mot VCC ju mindre offset blir det, alltså har din -Vin och/eller -Vref ett positivt offset.

TBD = To Be Determined = Ska Fastställas (= data okänd :-()
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det skulle också vara intressant att se hur ADC'n jobbade med
två Vref som ligger lite från Vdd resp Vss, och med potten ansluten
till samma spänningar.

En annan sak, du kör ju med "Simultaneous sampling of all 4 channels".
Är det 4 kanaler varav *en* har en pot ?
Vad är anslutet till de övriga tre ?
Kan du provköra med enbart en kanal "aktiv" ?
Det du ser kan vara någon effekt från switchningen mellan
kanalerna, jag är inte helt hemma på hur ADC in PIC30 fungerar...

EDIT :

Ytterligare en sak... :-)

Du skriver "PIC är avkopplad med en 100nF konding."
Har du också någon större konding (elyt ca 100 uF) i närheten ?
Jag antar att Vdd (som ju är Vref) kan "dippa" några 10-tal mV just när
sample kondingen skall laddas upp, om inte Vdd är ordentligt
avkopplat. Kom ihåg att vi talar om väldigt små spänningsvariationer
här !
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Jag hänger inte riktigt med i ditt offsetresonemang där Icecap. Om det är en offset på vref- så borde väl den vara konstant?

Det går bara att använda en vref, dessutom är uppkopplingen inte så flexibel.

Provade att bara använda en kanal(två olika, de andra satta som digitala utgångar). Ingen skillnad. Det sitter en 47uF på matningen, flyttade den lite närmre men ingen skillnad.

Man får väl godta felet och hoppas det blir lite mindre på ett ordentligt kretskort. Det går ju även att kompensera för felet i mjukvaran, om man plottar felet som en funktion av inspänningen går det (med lite fantasi) att se ett linjärt samband. Tack så mycket för hjälpen!

Updaterade excelfilen, rättade till felprocent samt lade till ett diagram.
Skriv svar