RE: Vodoměr
Miroslav Draxal
evik na volny.cz
Úterý Srpen 9 20:02:04 CEST 2016
Tady narážíme na mechanické vlastnosti vodoměru. Mám k dispozici 7 vodoměrů
Kaden a zkouškou jsme zjistil, že ten nejhorší se "ještě točí" při délce
jednoho impulzu 2.72s. Zde si nedělám žádné iluze o tom, že je to nějaký
přesný naměřený objem proteklé vody. Pouze to indikuje nějaký průtok. Takže
vše co je nad 3s/imp, mám jako nulový průtok.
-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav Mraz
Sent: Tuesday, August 09, 2016 6:39 PM
To: HW-news
Subject: Re: Vodoměr
Počítat průtok tím, že dělíte časem který uplyne mezi dvěma impulsy je sice
poměrně přesné, ale jen v době příchodu impulsu. Ad absurdum nulový průtok
získáte přesně až po nekonečně dlouhé době. Co s tím ?
Zvolit konstantní dobu měření, tj. měření opakovat s konstantní vzorkovací
frekvencí a počítat vždy v této periodě počet pulsů. No a pak to
zprůměrovat. To, že budete mít v periodě obvykle jen 0 nebo 1, vůbec nevadí
- nakonec sigma-delta převodníky fungují podobně. Klíčová je v tomto případě
filtrace. Není nutné používat FIR typu sinc, stačí obyčejný klouzavý průměr
s exponenciálním zapomínáním, což se dá napsat jako IIR filtr 1. řádu. To se
dá počítat v aritmetice s pevnou řádovou čárkou (tedy v celých číslech) a
není to žádná velká věda ani to není tak náročné na prostředky
(nepotřebujete dělení).
Násobení kalibrační konstantou zatím nebudeme řešit.
Jinak si to můžete představit analogově - pokud jste někdy stavěl analogový
otáčkoměr, pak vstupní pulsy zkrátíte (prodloužíte) na konstantní délku - to
jsou ty 0 a 1 na vstupu - a za to připojíte integrační RC článek - to je ten
IIR filtr - klouzavý průměr s exponenciálním zapomínáním. A na konci už
můžete mít analogový budík. On sice neměří úplně přesně, ale dává v reálném
čase údaje se kterými se už dá něco dělat. Přesně v každém čase to stejně
mít nemůžete, protože co se děje mezi impulsy, to se nemáte jak nedozvědět.
Mrazík
Dne 9.8.2016 v 17:35 Miroslav Draxal napsal(a):
> Mam (zjednodušeně) vodoměr Kaden, dvě teplotní čidla ds18b20, pic
> 18f2620,
> XC8 PRO (koupený). Vodoměr jsem rozebral, tvoří ho dvě části spojené s
> magnetickou spojkou. Do suché části, hned vedle druhé poloviny
> magnetické spojky jsem umístil jazýčkové relé (v současné době je tam
> už hal.sonda, protože na jeden litr to má moc impulzu, tudíž nevěřím v
> dlouhou životnost jazýčkového relé). Nejprve potřebuji změřit průtok
> kapaliny a pak z rozdílů teplot vypočítat množství předaného tepla.
> Přesnost? Aby to co se odečetlo na vodoměru, aby sedělo s tím, co se
> spočítalo v proc. Ten průtokoměr s indikací úniku vody (samozřejmě,
> záleží na definování, co je únik a co ne), to je jen vedlejší, rychlý
produkt pro souseda.
>
> A teď původní otázka?
> "Potřebuji do jednočipu nacpat přepočet průtoku, mám vodoměr, z
> kterého leze
> 60.75 impulzu na 1l průtoku. Nenapadá vás nějaká zkratka
> (optimalizace), jak to přepočítat?
>
> Měřím dobu, dvou po sobě náběžných hran, ale pak jsem nějak v koncích.
> Mám volno cca 0,5 paměti, a žádné složité výpočty se mi tam nevejdou."
>
> Ptal jsem se, jestli někoho nenapadá nějaká zkratka či optimalizace.
> Zkratka, ne hrubá matematika. V dalších příspěvcích se probíralo cca.
> dva, jak přepočítat impulzy na litry.
>
> Byly odpovědi ve stylu
> Ale pokud umí word, tedy 0 až 65535, pak třeba tak, že za každý impuls
> připočtete do nějaké proměnné round(65536/60.75), t.j. 1079. Jakmile
> nastane přetečení, přičtete 1 do počitadla litrů. Jednodušeji to snad už
nejde.
>
> Jde to tak. Ale já se ptal na zkratky či optimalizace. "Optzimalizaci"
> na výpočet litru jsem poslal. Stačí si uvědomit, že každý čtvrtý litr
> je celé číslo počet impulzů z vodoměru, které se vejde do charu a
> korigovat.... Ale to už jsem sem do konve poslal i s popisem.
>
> char VodomerImpulz;
> char VodomerImpulz243;
> int Litru;
> // přišel impulz z vodoměru
> if (++VodomerImpulz == 60){
> Litru++;
> VodomerImpulz = 0;
> }
> if (++VodomerImpulz243 == 243) {
> VodomerImpulz = 0;
> VodomerImpulz243 = 0;
> }
> S wordem dobrý, tohle lepší.
>
> Tak nějak jsem doufal v to, že někoho napadne zjednodušení i pro
> výpočet průtoku. Pak tady padla poznámka od pana Zdeňka, že jsem
> napsal zásadní informaci , že mám volno 0,5k paměti. Pokud nepracuji
> přímo v asm, ale v nějakém vyšším jazyce, tak mi přijde, že je to dost
> málo. Čili, když píši, že mám pouze 0,5k, tak to znamená, že jí mám
> málo. Takže mám Free: 576 jak to píše překladač. A zatím jsem dělení
> long int a vyšších nepoužíval, čili překladač si zatím nezavedl
> podprogramy (knihovny) pro dělení či násobení těchto čísel. A ty se do
zbylé paměti nevejdou.
>
> Tímto děkuji Jančurovy, který mi soukromě zaslal stručný popis jak na to.
> Jak píše, inspirace z amára 7/2016. Bohužel amáro už neodebírám, takže
> jsem to zatím nečetl, ale podle jeho popisu, jsem zjistil, že tak
> nějak podobně jsem to nakonec napsal.
>
> Takže mě osobně připadá, ale je to můj názor, nikomu ho nevnucuji, že
> o jaký procesor, či co je to za aplikaci či jaká přesnost ( i když
> tady by se dalo diskutovat), je nad rámec dotazu. Šlo mi pouze o
> nápad, třeba jako je to načítání litrů. Jednoduché, rychlé, krátké, přesné
na každém čtvrtém litru.
> Ještě jsem ho zpřesnil korekcí na třetím litru.
>
> Fakt mi nejde o přestřelku.
> Mira
>
_______________________________________________
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