Re: Vodoměr

Tomas Urbanek turbyho na me.com
Úterý Srpen 9 20:26:00 CEST 2016


Kdyz to tak sleduju, neni lepsi merit prutok ultrazvukem kdyz jde i o male prutoky? 

TU

9. 8. 2016 v 18:39, Miroslav Mraz <mrazik na volny.cz>:

> 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