AD konverzija - "šetanje" vrijednosti

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

AD konverzija - "šetanje" vrijednosti

Post by 78L05 »

Pomoću 16F876A mjerim napon sa jednog izlaza u opsegu 0-30V. Pomoću trimera sam napravio djelilo da pri 30V šalje 5V na kontroler. Sa donje strane pločice sam sa pina mikrokontrolera na koji dolazi napon sa trimera (PORTA.0) stavio kondenzator 100nF BLOK prema masi. Kod, ništa posebno:

Code: Select all

define ADC_BITS 8
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
pause 500
AD_Rez_napon var word
Dummy_napon var word
napon var word
prva_napon var byte
druga_napon var byte
mjeri:
adcin 0, ad_rez_napon
dummy_napon = ad_rez_napon * 31 * 10
napon = div32 256
if napon <= 9 then prva_napon = 0 : druga_napon = napon
if napon <= 99 then prva_napon = 0 : druga_napon = napon dig 1
if napon <= 999 then prva_napon = ((napon dig 2) * 10 + napon dig 1) : druga_napon = napon dig 0
lcdout $FE, 2, "Napon: ", dec prva_napon, ".", dec druga_napon, " V"
pause 50
goto mjeri
end
Problem je "šetanje" vrijednosti, odnosno izmjereni napon nije stabilan na displeju već neprestano varira +- 0.2V recimo, dok je napon mjeren na instrumentu (unimeru) stalan.
Ne vjeruj u čuda - računaj na njih!
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7882
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: AD konverzija - "šetanje" vrijednosti

Post by pedja089 »

To je manje vise normalno. Jer vrednost koju meris ne mora da bude tacno u granicama 1 bita. To se moze iskoristiti za dobijanje vece rezolucije nego sto je sam AD konverto(oversampling).
Ako hoces to da izbegnes onda napravis neki filter u kodu, recimo da uzmes prosecnu vrednost par merenja i sl...
Npr umesto da mnozis sa 10, izmeri 10 puta napon u petlji i saberi te vrednosti...
User avatar
arcom
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 447
Joined: 05-03-2010, 20:47
Location: Rijeka
Contact:

Re: AD konverzija - "šetanje" vrijednosti

Post by arcom »

Koja ti je vrijednost tog trimmera?
Preporucena max. impedancija izvora za A/D konverter je max. 2,5kOhm. Ako ti je trimmer velike vrijednosti (npr. 100k ili vece) onda ni A/D konverter nece raditi najbolje. U tom slucaju treba ubaciti neki buffer izmedu izvora i A/D konvertera (npr. neinvertirajuce operaciono pojacalo s pojacanjem 1).

S druge strane, mozes mjeriti sa 10 bita i onda samo odbaci zadnja 2 (podjeli sa 4) prije izracuna stvarne vrijednosti.

Ili filtriranje kako je pedja predlozio.
yt1nvs
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 286
Joined: 30-03-2009, 16:54

Re: AD konverzija - "šetanje" vrijednosti

Post by yt1nvs »

Na sve ovo gore pomenuto jos ako ti je Vref Vdd eto jos uslova za gresku.Bolje uzeti neku naponsku referencu na odredjenom pinu tog MCU.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1629
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: AD konverzija - "šetanje" vrijednosti

Post by WhiteHead »

78L05 wrote:Pomoću 16F876A mjerim napon sa jednog izlaza u opsegu 0-30V....
A postoji i mogućnost ako ti je taj izlaz pod opterećenjem pa da usled lošeg filtriranja i stabilizacije napona imaš pulsiranje istog...
Mada je vjerovatnije ovo što su kolege rekli, al' meni se desio baš ovaj problem.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: AD konverzija - "šetanje" vrijednosti

Post by 78L05 »

Trimer na ulazu je 10k. Vref uzima sa pina napajanja (Vdd), znaci reference kao takve nema.
Pokusao sam na puno nacina, ali nisam uspio dobiti da mi je ocitana vrijednost stabilna, i dalje ide gore ili dolje za maksimalno 0.2V.
Da mi stvari budu jasnije u jednoj liniji displeja sam si ispisao vrijednosti ad_rez_napon i dummy_napon (kod u prvom postu), i tocno se vidi da ad_rez_napon varira za 1 i time unosi pogresku u dummy, a time i u ocitani napon. Znam da mogu napraviti da ako se ad_rez_napon u odnosu na prethodno mjerenje nije promjenio za vise od 1 ne racuna drugi napon, ali tada necu moci ni svojom voljom ocitavati napone u koracima od 0.1V.
Pokusao sam u petlji 10 puta napraviti ADCIN i svaki puta jednoj varijabli pribrojiti rezultat tih mjerenja (u razmacima od 10ms), i na kraju dobivenu vrijednost podijeliti s 10, ali ista stvar se dogada, ponovno mi se ad_rez_napon "sece" za 1 i to unosi "probleme".
Pored tog napona mjerim i struju preko LM358, i tu se vrijednost mijenja za +-20mA, to i ne bi bio toliki problem, ali se na ostatku displeja ispisuju otpor i snaga potrosaca, i naravno kako se mijenjaju vrijednosti napona i struje tako se mijenjaju i preostale dvije spomenute vrijednosti i kad gledam u to nije mi dobro.
Ne vjeruj u čuda - računaj na njih!
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: AD konverzija - "šetanje" vrijednosti

Post by 78L05 »

Vise ne mogu EDIT-irati, ali uspio sam dobiti sto sam htio.
Problem je bio sto sam citavo vrijeme bio orijentiran na racunanje prosjeka vrijednosti konverzije, dummy-a, a nisam pokusao racunati prosjek gotove vrijednosti, tj.napona i struje, ukratko isjecak koda izgleda ovako:

Code: Select all

mjeri:
petlja = 0
napon_pricuva = 0
while petlja <=10
adcin 0, ad_rez_napon
dummy_napon = ad_rez_napon * 31 * 10
napon = div32 256
napon_pricuva = napon_pricuva + napon
pause 10
petlja = petlja + 1
wend
napon = napon_pricuva / 10
Dakle 10 puta mjeri i u varijablu napon_pricuva stalno pribraja rezultat posljednjeg mjerenja (opet u koraku od 10ms), i na kraju taj napon podijeli s 10 i sada napon stoji mirno i sa viseokretnim potenciometrom komotno podesavam +- 0.1V.
Struja je rijesena na isti nacin, a buduci da su otpor i snaga izvedene velicine sada su i one fiksne.

Hvala na pomoci svima
Ne vjeruj u čuda - računaj na njih!
Post Reply