Zdravím.
Měřím v ATmega16 pomocí ADC převodníků. Už jsem rozchodil posílání hodnot vzorků do PC, a celkem jsem se zděsil. Hodnota mi lítá dobrých ±7 LSB, nebo jak se říká těm jednotlivým stupňům. Kdesi, snad v datasheetě jsem četl, že to AVR umí s přesností 1LSB, a zatím jen nevěřícně kroutím hlavou nad těmi nesmysly, co mi z toho lezou.
ADC mám taktované na nejnižší možné frekvenci (dělitel tuším 128 při Xtalu 11,0592MHz, tj 86,4kHz. Tedy v normě jsem (50-200kHz)). Napájení části ADC převodníku je přes LC filtřík (50uH/100nF), použitá je externí reference s TL431 (3840mV), která je taktéž blokovaná 100nF keramikou. Stabilita reference krátkodobá i dlouhodobá bude určitě mnohonásobně lepší, než to co předvádí ten ADC převodník. Domnívám se, že zde chybu nenajdu. V Softwaru to taky nebude, ten mi jen kopíruje do RS232 kanálu data rovnou z ADC převodníku, a ADCSRA + ADMUX jsou nastavené dobře.
Možná se mýlím, ale můj odhad je, že to rušení, respektive ten ripple dat vzniká takto:
50Hz rušení na vstupech. To se domnívám, že asi nebude ono, protože vstupy toho měřícího zařízení pracují na impedanci < 800ohmů. Přívodní vedení je sice 3 metry dlouhé, ale stíněné, tam se to podle mě nemá kudy dostat. Zkoušel jsem vzít 100nF keramiku, a vstup ADC tím zablokovat. Nepozoroval jsem žádnou změnu. Zkoušel jsem i odvážně tantaový kond 2,2uF, taktéž nepozorovatelné. I s tím tantalem to lítá v rozsahu cca 13ti LSB.
Že by ADC převodník rušilo samotné jádro AVR? V datasheetu je psané něco o nějakém speciálním “sleep mode” pro ten převodník, ale bohužel já jsem si nikdy nehrál s powerdown/sleep/idle mody, takže prd vím, jak to funguje, atd.
// 3) Průměrovat data. Prasárna, podle mě to nemá šanci příliš pomoct, akorát to celé zpomalím.
Co mi poradíte, abych se zbavil toho balastu v těch datech?
No chcelo by to videt plosak ako si to zbastlil zemne spoje atd … odfiltrovanie 100n… ak pouzijes rc clanok bude to lespie tj napr 100R do serie s privodom a 100n paralelne k vstupu.
Na tvojom mieste vylucim privodne vodice …a to pripojenim ref napetia priamo cez delic na vstup ad prevodnika
Už jsem docela bezradný. V datasheetě jsem o likvidaci balastu našel:
Všecky 4 body jsem splnil, stejně to lítá. Nyní né o 13 LSB, ale jen o 11LSB. To jsem si pomohl ne?
Plošný spoj vypadá takto: img219.imageshack.us/img219/664/temploglays.jpg Myslím, že zde taky problém není.
Leda problém v 3m dlouhýh stíněných přívodech. Zkusím ještě vyloučit toto tím, že na vstup přivedu přes dělič přímo referenci od ADC.
Stínění je dobrý proti elektrostatice, proti elektromagnetice ale moc účinný není. Určitě to nejdřív zkus bez těch přívodů, pak by za zmínku stál běžný UTP síťový kabel v ceně 5kč/m
CHjo chjo… já vím že jsme to řešil, jaksi jsem to dořešil do fáze, kdy mě to jakštakš vyhovovalo, ale stále to je na H!
Tohle jsme vytáhl ze starého threadu:
Na tohle jsme zapomněl, ale myslím, že tenkrát to nepomohlo.
Pak jsem se tam dočetl (tuším že to psal Technik), že mám dát určité stavy na nevyužité piny. Tedy vstrupy buť uzemnit nebo nakrmit na VCC, nebo jednodušěe zapnout pullup, či tam poslat 0 nebo 1. Zkusím to zítra.
Tenkrát jsme se nedostal na ±2 LSB ani náhodou. To bylo ± 2 bity LSB (tedy ±4LSB). To jsem tam měl kolosální RC filtr, a ještě jsem průměroval 16 hodnot za sebou. (ale to dělat nechci)
Však přesně jak v tom starém threadu někdo napsal “přece za sebou jdoucí vzorky se nesmí lišit víc jak o ±1LSB” - akorát to k praxi má daleko.
Já už se tímto problémem také potýkal.
Rušení leze (podle mne) z jádra procesoru.
Zkoušel jsem i SLEEP pro redukci šumu.
To trochu pomohlo, ale o něco se prodloužila doba měření.
Což bylo pro mne nepřijatelné.
Tak jsem to vyřešil externím AD převodníkem MCP3202.
Pro mou potřebu byl dostatečně rychlý i přesný.
Jaké přesnosti jsem na něm dosáhl už bohužel nevím.
Jen tak pro zajímavost… používám jej pro digitalizaci zvuku se vzorkováním 30kHz.
Hezký, ale tohle mi nepomůže. Já potřebuju vymlátit data z toho interního, nemůžu tam mít 8x(4x) MCP3202.
Ještě zkusím po přepnutí MUXu chvíli počkat, přidám to průměrování, a zkusím zbylé I/O piny popřepínat na výstupy/vstupy s pull-up
Problém môže byť s referenciou TL431. Zo skúsenosti viem že paralelne k nej nemožno pripojiť kondenzátor pretože začne kmitať.
Na výstupe sa objaví pílovitý signál s amplitúdou rádovo 100mV. Skús ten kondenzátor odpojiť,
alebo si pozri výstup TL431 na osciloskope alebo pre porovnanie skús použiť internú referenciu.
Anonymní: Jo, to je zajímavá poznámka. S TL431 dělám docela často, ale pravda je, že snad v 90% případů jsem k tomu nepotřeboval kondík dávat. Osciloskop nějaký ruský s BJT do 10MHz mám, když se mu chce, tak ukazuje, mrknu na to. Interní referenci použít nemohu, jelikož má malé napětí, a ani pro porovnání, protože na to nemám uzpůsobenou DPS.
Osmikanálový převodník od micročipu - ten třeba jindy, nyní nemohu, prostě to musí být takto. Ten převodník jistě nebude levný, proto na něj kašlu momentálně dvojnásobně. Až budu potřebovat někdy příště měřit s ADC, ten MCPxxxx nějaký vyzkouším. Nyní nemám ani čas si s tím hrát, a zkoušet nějaké další převodníky.
nyní vyzkouším “zablokovat” nevyužité I/O piny, po přepnutí MUXu počkat, příapdně přidám průměrování hodnot, a zkusím změnit taktovací frekvenci ADC (zvýšit). Taky zkusím vytáhnout ten ruský škopík, a oměřit to ovšecko tím.
Takže co dělat mám, pak se ozvu, až to všecko vyzkouším.
Bud si isty, ze mas delicku f AD nastavenu na 128, alebo aspon na 64
prepoj sa na internu referenciu a vsetko zo vstupu odpoj, okrem odporu o GND (cca 10k)
tym odstranis vonkajsie vplyvy a daj vediet co ti to robi.
Z pinu Uref odpoj tu TL431
AD prevodnik casto pouzivam s delickou 128 nemam ABSULOTNE ziadne problemy i pri zapnutom jadre. Teda vobec neriesim, ci ide prevod alebo nie.
Dokonca, ked som vstup kalibroval pomocou externeho kalibratora, vystupna hodnota AD sa na testovacich hodnota napatiach drzala s krokom cca 1/4LSB. Netvrdim, ze to je tak uplne pre vsetky vystupne hodnoty, ale pre tych par c zeleho rozsahu to platilo. Pri plnej praci jadra.
Okolo spojov som nerobil ziadne harakiri, iba som dodrzoval normalne zasady. Na vstupe samozrejme filter 47k/100n.
Teplotnym meranim som zistil, ze interna referencia je zhruba o 1.5-2LSB menej stavina ako TL431. Tak tam tie TL431 vsade pcham. Ale ani interna referencia nie je uplne na zahodenie.
Pri malej preddelicke f mi hodnota ulietavala o 32LSB.
Urcite si pockam, kym prevod nie je hotovy.
TL431 neznasa (aspon tie moje ) na vystupe kondenzator. To je mozny zdroj pohromy v podobe rozkmitania sa referencie.
No to je mi záhada…
pač mi tu všichni říkáte o nesnášenlivost TL431 s kondíkem, tak jsem nažhavil ten ruský skop, vrazil to tam, přepnul na AC coupling, a čumim, cosi o obrovské frekvenci s amplitudou snad 0,5V se mi tam zobrazilo
Zkusím vyndat ten konďour u té 431, a podívám se na to znova. On ten skop je ve stavu, kdy ukazuje, ale nejde mu vůbec ani trochu synchro, takže co tam je za průběh nevím, ale paprsek se rozmázl na 2cm šířku, takže tam něoc určitě v pořádku není.
Hoho !!! Vyndal jsem ten kundík u té 431, oscíkem jsem tam kouknul (neznatelné kmitání, pokud nějaké - on ten oscík ukazuje asi 15mV vlastní šum). Každopádně, hodnoty co z toho nyní lezou, jsou naprosto konstantní.
Po sobě jdoucí vzorky se neliší vůbec, a tak na 1 z 10ti vzorků to ujede maximálně o 1LSB, což je naprosto v pořádku, a to odstraním např. průměrováním pár hodnot. Ale s chybou 1LSB jsem počítal. Je to nyní naprosto OK.
Takže vám všem, kteří měli to strpení mě poradit, moc díky.
Honza