Re: Jednoduchý měřák

Michal Grunt michal.grunt na gmail.com
Pondělí Červen 13 14:02:02 CEST 2016


Děkuji všem. Pokusím se to takto dát dohromady. Kontrola předpokládám
bude pustit na oba kanály AD např. 3.3V a musí to sedět ať je
frekvence 10khz nebo 1hz... (pokud to těch 10khz bude stíhat).

MG

Dne 11. června 2016 14:58 Pavel Hudecek <edizon na seznam.cz> napsal(a):
> To bude nějaké nedorozumění.
>
> Z přerušení máme dvě čísla:
> součet součinů, dejme tomu volatile uint64 pSum
> počet součinů, dejme tomu volatile uint32 pCnt
>
> Protože by při zpracování mohlo nastat přerušení od AD, zakážeme přerušení,
> provedeme výpočty a přerušení ihned povolíme (nevím, jak se to dělá/jmenuje
> na tomto MCU):
> zakazatInt();
> pTmp = pSum/(uint64)pCnt;
> pSum=0; pCnt=0;
> povolitInt();
>
> Nyní spočítáme výkon a energii:
> p = (float)pTmp * epCalConst;
> E+= p/3600.0; // pokud to děláme 1x za s a chceme Wh
>
> přičemž eeprom float epCalConst je konstanta pro kalibraci výkonu a obsahuje
> vše potřebné k tomu, aby se z průměrného součinu hodnot těch dvou kanálů ADC
> stal průměrný výkon ve W, případně pokud ho nechceme k ničemu použít, může
> tam být i 1/3600, nebo něco jiného abychom z periody zpracování dostali
> hodiny. Může tam být i 1/renormalizace, když při obsluze int od AD kromě
> násobení AD1*AD2 ještě např. shiftujeme, aby součin nebyl moc velký. Tzn.
> aby se jich do pSum vešlo dost a aby byla dostatečná přesnost.
>
> Protože přerušení bylo zakázáno mnohem kratší dobu než měřící cyklus, nic se
> mezitím nemohlo ztratit. První nová data se občas započítají třeba o 100 ns
> později, když přerušení kvůli zákazu nastane opožděně. (Předpokládám, že
> řadič přerušení není debilní a přerušení v době zákazu se neztratí, ale
> nastane ihned po povolení)
>
> Protože ve výpočtu nefiguruje perioda měření, může AD běžet jak nejrychleji
> umí a je nám jedno kolik to je. Jen musíme mít jistotu, že pSum nepřeteče
> (viz renormalizace).
>
> (tedy takhle bych to dělal na 8bitovém AVR při 1-16 MHz, pro 32b na stovkách
> MHz to bude ještě snazší, např. v přerušení možná půjde použít float a
> odpadne renormalizace)
>
> PH
>
> From: Michal Grunt
> Sent: Saturday, June 11, 2016 1:19 PM
> To: HW-news
> Subject: RE: Jednoduchý měřák
>
> Asi by to taky takto šlo. Ale to přijdu o část dat, když bude časovač nebo
> přerušení zastavené a budu se věnovat displeji, že? Teda ne že by to bylo
> zásadní, ale jestli to myslím tak jak to myslíte vy.
> ________________________________
> Od:Pavel Hudecek
> Odesláno:‎10. ‎6. ‎2016 16:48
> Komu:HW-news
> Předmět:Re: Jednoduchý měřák
>
> Nevím jak rychlý je ten procesor, jestli to přerušení tahle nebude trvat moc
> dlouho.
>
> Já bych v něm jen vynásobil ty dvě hodnoty, výsledek přičetl do nějaké
> proměnné a inkrementoval nějaký čítač vzorků.
>
> V rámci zobrazování bych pak jednou za čas (např. 1 s) zakázal přerušení, tu
> proměnnou vydělil počtem vzorků, výsledek vynásobil kalibrační konstantou,
> aby vznikly W. Obě původní hodnoty vynulovat, povolit přerušení. Zůstal nám
> průměrný výkon ve W za poslední 1 s, tedy taky energie v J, kterou lze někam
> připočítat a při zobrazování třeba vydělit 3,6M, aby z toho byly např. kWh.
>
> PH
>
> -----Původní zpráva-----
> From: Michal Grunt
> Zdravím, potřeboval bych tedy zkontrolovat zda mám u STM32F103 dobře
> nastavený ADC. Záměr je následující:
> Je použit ADC1 a dva kanály (PA0, PA1). Na ADC je nastaven trigr
> časovač TIM3 (nyní 1hz, aby to šlo sledovat i okem) a DMA v circle
> mode.
>
> Potřebuji vzorkovat určitou frekvencí (napětí a proud) a tedy znát i
> přesně interval mezi měřením a z toho vypočítat Wh. Jak je to
> nastaveno nyní tak to funguje (při tom 1hz), ale je otázka jestli je
> toto dobré řešení a zda když změním vzorkování třeba na 10khz a
> upravím vzoreček pro výpočet tak zda to bude fungovat.
>
> http://pastebin.com/f8y9jEuh
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list