[C] Průměrování ADC 16-bit hodnoty – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

[C] Průměrování ADC 16-bit hodnoty – Mikrokontroléry – Fórum – Programujte.com[C] Průměrování ADC 16-bit hodnoty – Mikrokontroléry – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Maty
~ Anonymní uživatel
92 příspěvků
30. 3. 2013   #1
-
0
-

Ahoj,

chtěl bych se zeptat, jak nejlépe průměrovat 16-bitové hodnoty z AD převodníku. Jde mi o to, že hodnoty mi moc lítají, tak bych chtěl udělat třeba 10 měření a potom to zprůměrovat. Ale jde mi o to, že mám strašně moc velké čísla. Program píšu v C a jako MCU mám ATmega16. Děkuji

Nahlásit jako SPAM
IP: 89.102.184.–
Reklama
Reklama
Maty
~ Anonymní uživatel
92 příspěvků
30. 3. 2013   #2
-
0
-

Tak jsem nad tím přemýšlel a napadlo mě, že bych si vytvořil pole, do kterého bych vždy uložil 16 hodnot a ty bych potom jen vydělil 16. Ale jak je to s tím rozsahem hodnot??

Protože když sečtu 16 šestnácti bytových čísel, tak dostalnu hodnotu odpovídající 1 048 576 a nejsem si jistý, jestli je 8-bitové AVR schopné počítat s takovou hodnotou.

Nahlásit jako SPAM
IP: 89.102.184.–
Maty
~ Anonymní uživatel
92 příspěvků
30. 3. 2013   #3
-
0
-

Tak musím říct, že jsem na to šel blbou cestou. :-D Toto mi poradili jinde.

uint32_t suma;
uint16_t adc_value;

suma = 0;
for(uint8_t i=0; i<16; i++)
suma += get_adc();
adc_value = suma / 16;
Nahlásit jako SPAM
IP: 89.102.184.–
Petr
~ Anonymní uživatel
696 příspěvků
31. 3. 2013   #4
-
0
-

#3 Maty
Ahoj Maty, koukam, ze pokousis podobne mikro jako ja. Nevis jak v nem prepinat vstupni kanaly ADC?

Jinak to prumerovani jsem resil nedavno a dostalo se mi defacto stejne rady.

Nahlásit jako SPAM
IP: 213.151.87.–
KIIV+42
God of flame
31. 3. 2013   #5
-
0
-

jen k tomu prumerovani je lepsi (citelnejsi) pouzit bitovej posun... ono se to pravdepodobne vyoptimalizuje aby se neprovadelo deleni tam, kde je potreba jen posun... kazdopadne deleni na tehle procesorech bez instrukci pro nej je pomaly

a prepina se zmenou ADMUX registru... a vejde v platnost pro dalsi prevod... (ne pro jiz bezici) ... manual ma vse vysvetleny

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Petr
~ Anonymní uživatel
696 příspěvků
31. 3. 2013   #6
-
0
-

#5 KIIV
Diky.

V manualu jsem na to koukal a pokousim to delat tak jak je to tam. V jednom pripade mi to fungovalo a v dalsim ne. Asi to prepinam ve spatny okamzik.

Nahlásit jako SPAM
IP: 213.151.87.–
hlucheucho+10
Posthunter
31. 3. 2013   #7
-
0
-

Pokud hodnota ADC moc lítá, může to být kvalitou napájení. Další příčinou může být nedodržení pravidla pro horní mezní frekvenci a frekvenci vzorkování. K tomu průměrování: nejrychlejší je mít pole a proměnnou pro součet jeho prvků. v poli máš posledních x vzorků. S každým novým vzorkem:

1. odečtu nejstarší vzorek od součtu prvků pole
2. v poli nejstarší vzorek nahradím nejnovějším
3. přičtu nejnovější vzorek k součtu prvků pole

Není nutné prvky v poli jakkoliv přesouvat, stačí pracovat s indexem a v poli chodit dokola. Pro správnou funkci je dobré aby pole i součet jeho prvků byly po spuštění programu vynulované. Pokud bude počet vzorků roven mocnině 2, pro dělení snadno použiješ bitový posun, což bude rychlejší

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Maty
~ Anonymní uživatel
92 příspěvků
31. 3. 2013   #8
-
0
-

#7 hlucheucho
Tak na toto jsem krátký. :-D Myslíš, že bys mohl ukázat jak to myslíš??

Jinak ohledně toho lítání té hodnoty. Tak mám použit 16-bit AD převodník a přes nějaké operáky snímám intenzitu UV světla. Takže to lítání hodnot jsem tak trošku očekával. Ale jsem bez osciloskopu, takže nejsem schopný řísi, co se děje na napájecí smyčce. Proto to ještě zkusím trošku poladit.

Já mám napájení řešeno tak, že mám přivedeno +9V a GND a zápornou větev pro operáky získávám z ICL7660 a to asi není moc dobré. Ale doma jsem našel trafíčko 2*9V, takže jdu navrhovat a zítra řeknu rozdíl.

Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
31. 3. 2013   #9
-
0
-

napájení pro ADC odděl přes tlumivku asi 1mH a blokuj kondenzátorem 100nF. Podobně i pro OZ. Použití nábojové pumpy nemusí být problém při vhodném návrhu. Důležité je správně zapojit systém zemí. Dále můžeš použít operační zesilovače které nevyžadují symetrické napájení, např TLC271. Některé převodníky mají zesilovač integrovaný na čipu, např AD7792, výhodou je jedno napájecí napětí, jednoduchost zapojení.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Maty
~ Anonymní uživatel
92 příspěvků
1. 4. 2013   #10
-
0
-

No ty tlumivky jdu zapojit. Ale mám doma je 10uH, takže lepší než nic a potom koupím a dopplním většími. :-)

Ale jestli se můžu optat, to zapojení systému zemí?

Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
1. 4. 2013   #11
-
0
-

ano. např po signálových zemích by neměly chodit výkonové. Měly by vstupní, výstupní, napájecí být vedeny zvlášť a propojeny v jednom bodu.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Maty
~ Anonymní uživatel
92 příspěvků
1. 4. 2013   #12
-
0
-

Tak jsem to zkusil upravit podle tvé rady, ale nejsem si jistý, jestli je to OK. Myslíš, že bys mohl říct, že jsem to dobře pochopil? Tady přikládám schema. oddělil jsem napájecí zem od druhé a ty pak spojím pomocí 0R na DPS.

Napájení jsem oddělil pomocí trumivek 10uH. Blokovací kondenzátory 100n.

Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
1. 4. 2013   #13
-
0
-

Horní mezní kmitočet R1, C8 je asi 1,7MHz. Převodník má max 250 ksps, takže horní mezní frekvence filtru by neměla být větší než 125kHz. Vzhledem k povaze měřené veličiny může být jen několik desítek Hz. D1 je fotodioda, změna intenzity nebude tak rychlá aby bylo třeba použít vysoké vzorkovací frekvence. bez problémů by stačil AD7792 který má referenci i vstupní zesilovač na čipu a umí až 500 SPS. IC4C jen zanáší další šum a offset, jinak neplní žádnou funkci. Nejde to zesílení signálu provést hned v prvním stupni? Pak by nemusel být ani IC4B. D1 je pravděpodobně zdroj proudu a RF určuje zesílení - výstupní napětí IC4A je dáno součinem proudu z D1 a hodnotou RF. CF určuje horní mezní kmitočet, 1p bude velmi málo. Celý systém by měl mít horní mezní kmitočet (nejlépe výrazně) menší než polovina vzorkovací frekvence převodníku.

Vše kolem IC2 lze považovat za napájecí zem, stejně tak i C14 a C15. Signálová zem je A/D1, 3/IC4, R4, C8 a 4/IO1. Referenční zem je 4/IC1 spolu s C6 a 5/IO1. Tyto země by měli být propojeny u 5/IO1

Měl bys přečíst datasheet převodníku, najdeš ho na stránkách www.analog.com. Analog Devices mají velmi dobře propracovanou dokumentaci, na jejich stránkách nalezneš i doporučení jak na to.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Maty
~ Anonymní uživatel
92 příspěvků
1. 4. 2013   #14
-
0
-

#13 hlucheucho
No ohledně toho R1, C8 a IC4C se musím obhájit. Vycházím ze zapojení z Datasheetu a hodnoty neupravil.    Jinak už jsem si to dopočítal. Pro těch 125kHz mi to vyšlo R=33R & C=38nF (zvolím nejbližší hodnotu). Jinak ten operák IC4C (jako napěťový sledovač je z datasheetu). Ale taky jsem přemýšlel na co tam vlastně je. Takže jej odstraním.

A měnit AD převodník už v plánu nemám. Musím to udělat z toho, co mám. A ano to zesílení by šlo udělat i na prvním OZ, ale hodnota Rf by byla v řádech Mohm až Gohm. A tohoto se snažím vyhnout. Proto jsem volil toto řešení, kde Rf bude v řádek Kohm max jednotky Mohm a zesílení na druhém OZ si nastavím dle libosti.

Jenom jestli bych mohl poprosit, jak volit ten kondenzátor Cf?

jinak schema jsem opravil.

Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
1. 4. 2013   #15
-
0
-

horní mezní frekvence je 1/(2*PÍ*RF*CF). Jak velký proud generuje D1?

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Maty
~ Anonymní uživatel
92 příspěvků
1. 4. 2013   #16
-
0
-

No tak co mám ověřeno tak při osvícení jednou LED to dělá 162nA. A rezistor tam mám zatím pouze 1M. Ale ten budu upravovat. Ale to až po nějakém tom měření.

Ale jinak jsem si to spočítal a vyšlo:

Při 125kHz/2 mi Cf vyšlo cca 2,5pF.

Při 125kHz/3 je Cf = 3,8pF.

Nahlásit jako SPAM
IP: 89.102.184.–
Maty
~ Anonymní uživatel
92 příspěvků
1. 4. 2013   #17
-
0
-

A ještě bych se chtěl zeptat. Při návrhu DPS používám vylítí mědi (GND), je to možné i tohoto, nebo bych tím mohl celý obvod "zarušit"? A jestli to možné je, tak jakou zem vlasně můžu vylít?

A jako návrh oboustranné DPSky, tak u této vylívám pouze vrstvu TOP.

Můj názor: Signálovou typuju, že ne, referenční taky. Takže jestli bych já něco "vylíval", tak by to byla napájecí.?

Toto jsou věci, kterýma jsem se nikdy nezabýval. Proto se na ně ptám. Ono to jsem možná "prkotiny", ale dokážou určitě nadělat víc škody než užitku.

Nahlásit jako SPAM
IP: 89.102.184.–
Maty
~ Anonymní uživatel
92 příspěvků
2. 4. 2013   #18
-
0
-
Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
2. 4. 2013   #19
-
0
-

Několik prokovů poblíž IO konektoru je zbytečných, dalo se v červený (top?)  jít přímo na něj. Asi je tam takových míst víc. Eagle - která verze? Je legální? Z nelegální verze nelze přenášet cokoliv jinam.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
2. 4. 2013   #20
-
0
-

Ještě zapojit vstupy nevyužitých OZ na zem

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Maty
~ Anonymní uživatel
92 příspěvků
2. 4. 2013   #21
-
0
-

Tak eagle je verze 6.1.0 ve verzi Freeeee. ;-)

Ty prokovy u toho konektoru jsou proto, že se pod ním velice špatně pájí. Takže radši jsem si navrhl hned u něj prokov, já ten konektor chci mít na straně TOP. Zbylé prokovy jsou už nezbytné. Např. u toho ADčka jsem vycházel z Datasheetu.

Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
2. 4. 2013   #22
-
0
-

do prokovených děr se všechno pájí ze stejné strany bez ohledu na to, jestli je spoj top nebo Bottom. Jiná situace je při výrobě DPS bez prokovů, kde je potřeba každý prokov "prodrátovat".

Bohužel mám starší Eagle 4.15, nemohu to otevřít.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Maty
~ Anonymní uživatel
92 příspěvků
2. 4. 2013   #23
-
0
-

No mě jde o to, že DPSku si dělám doma. A na prokovy nemám vybavení. A hold zde musím mít konektor ze strany TOP. Takže jinak to zde udělat nejde. :-(

Teda pokud nechci pájet ten konektor z této strany. Už jsem to zkoušel, ale vypadá to potom divně.

Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
2. 4. 2013   #24
-
0
-

dělat dvouvrstvou DPS doma, to bude výhra. Máš s tím vůbec zkušenosti?

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Maty
~ Anonymní uživatel
92 příspěvků
2. 4. 2013   #25
-
0
-

Jasné. Pár jsem jich už udělal. ;-) Teď experimentuju se suchým fotorezistem.

Nahlásit jako SPAM
IP: 89.102.184.–
Maty
~ Anonymní uživatel
92 příspěvků
12. 4. 2013   #26
-
0
-

Tak jsem to dokončil. Výsledek docela dobrý, ale problém je, že když onu diodu zakryju, tak na výstupu AD mám hodnotu blízkou 65536. Jak tam nastavit 0? A jak to vůbec možné? poradí někdo?

Nahlásit jako SPAM
IP: 89.102.184.–
Maty
~ Anonymní uživatel
92 příspěvků
13. 4. 2013   #27
-
0
-

Nikdo nic?

Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
14. 4. 2013   #28
-
0
-

Co takhle vzít voltmetr a poměřit napětí na výstupech OZ? Druhá možnost je citlivost na rušení nebo statiku - přiblížení ruky.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Maty
~ Anonymní uživatel
92 příspěvků
14. 4. 2013   #29
-
0
-

No tak s tím multimetrem mě to napadlo. Ale on AD převodník je podle mě o něco více přesnější než můj multimetr (UNI-T UT54). No nad tou statikou jsem taky přemýšlel, proto jsem diodu přikryl víčkem z alobalu, ale výsledek stejný.

Nahlásit jako SPAM
IP: 89.102.184.–
Maty
~ Anonymní uživatel
92 příspěvků
14. 4. 2013   #30
-
0
-

Jo omlouvám se. Jsem to blbě pochopi. :-) Tak jsem se chopil Mutlimetru a měřil.

Schválně jsem diodu vypájel a vstup OZ připojil na 0V (gnd) a na vstupu AD převodníku jsem najednou měl něco mále přes 6V. Jak to možné?

Nahlásit jako SPAM
IP: 89.102.184.–
Maty
~ Anonymní uživatel
92 příspěvků
14. 4. 2013   #31
-
0
-

Tak mi to nedalo a musel jsem si to vyzkoušet na simulátoru. Použil jsem Multisim a tady jsou 2 průběhy. Pro simulaci jsem použil OPA129 a TL072, protože s těmato OZ mi toto zapojení funguje nejlépe.

UV fotodioda byla nahrazena zdrojem proudu. Proud 315nA bylpoužit proto, že podle mých výpočtů jedna dioda z urč. vzdálenosti by měla být schopna vygenerovat.

Nahlásit jako SPAM
IP: 89.102.184.–
hlucheucho+10
Posthunter
15. 4. 2013   #32
-
0
-

#30 Maty
a výstupy jednotlivých OZ? Ještě by to chtělo změřit osciloskopem, pokud je na výstupu OZ střídavý proud 50Hz, je to rušení ze sítě, pokud vyšší kmitočet, tak to kmitá.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý