Otáčkoměr s AT89C2051
Moderátor: Moderátoři
Otáčkoměr s AT89C2051
Dosud jsem dělal otáčkoměr s monostabilním klopným obvodem,který vyslal na náběžnou hranu vst. sig. impuls s definovanou šířkou a pasivní integ.čl. převáděl tuto PWM na napětí.Jenže při této metodě měření jsou velké nároky na výstupní hradlo,co spíná PWM, a na integrační článek,terý zas při malých kmitočtech není lineární.
Asi bych dokázal měřit periodu a výpočtem převést na frekvenci,ale toto řešení zabírá hodne výpočetního výkonu a ten já potřebuji na další věci co procesor provádí.
Řešil jste někdo podobný problém?
-
Návštěvník
Hodnotu citace bys precetl vzdy po zastaveni citace s nabeznou hranou pulzu, mohl bys ji prevest odporovym D/A prevodnikem pak to staci zesilit a je to.
Nevyhoda je ze se musi dost blbe kalibrovat ten citac..
Další možnost je použít například snímač s 256 impulsy na otáčku a impulsy z něj načítat třeba v čítači 4020. A ten stav 16x za sekundu přečíst do latche (nebo procesoru) a čítač vynulovat. Vlastně na to ani není procesor třeba, stačí generátor hodinových impulsů.
Samozřejmě bys nepoužil bity D0...D3: do paměti latch by se přenášela informace bitů D4 až D11, vlastně binární vyjádření aktuálních otáček za sekundu. Bity 12 a 13 by bylo možné použít také přímo nebo jen k indikaci přetečení, resp. překročení rychlosti přes 255 ot/s, tedy nějakých 15 300/min.
Ale zato ten údaj bude 16x za sekundu aktuální a vše, co tam bude analogové, bude odporová matice na výstupu, když už to chceš indikovat ručkovým měřidlem. Rozlišení je 0,4%, tak přesné ručkové měřidlo pravděpodobně nemáš. Čili 2% chyba hodnoty odporů v matici asi nezpůsobí významnou chybu měření. A bude to rychlejší i přesnější, než jakýkoli analogový systém.
Jinak analogovou inspiraci můžeš čerpat i tady: http://www.ebastlirna.cz/modules.php?na ... =0&thold=0
Mě šlo o jednu věc:máme doma stroboskopický paltest,který snímá impulsy indukčním snímačem z jednoho zapalovacího kabelu(benzin) nebo piezoelektrickým snímačem z jedné vysokotlaké trubky(diesel) a z techto ipmulsů dokáže s přesností na 10 ot/min zobrazovat otáčky motoru se slušnou odezvou na změnu otáček. A to oproti mému případu dostává paltest 4x méně impulsů za otáčku. Proto vím,že je možné mikroprocesorem nějak měřit otáčky s rychlou odezvou,protože paltest je řízen mikroprpcesorem.
Jinak o víkendu jsem přemýšlel nad variantou s vnitřním čítačem a hradlovat to impulsem z čidla otáček a narazil jsem na problém,že frekvence je 1/T a toto je hyperbolická funkce. Tudíž nejde jednoduše změřit periodu v untervalu 0-255 a převést D/A převodníkem na hodnotu frekvence.
Budu rád za každý další nápad.
Ono i na digitálu PALtestu či stroboskopu to vypadá na rychlejší reakci, ale řekl bych, že skutečná doba integrace je podstatně delší, než zmíněnou 1s. Ale to klame tím problikáváním číslic na digitálu.
Je fakt, že počítat periody mezi dvěma impulsy můžeš. Na výpočet převrácené hodnoty existuje přece rutina. Ale chvíli to trvá, než tu 0FFh podělí načítanými impulsy - a mezitím nestihne znovu měřit čas. A to je to, co potřebuješ, jinak je přesnost v háji: jestli vystačíš s údajem od 600 ot/min., kdy za 100ms načítáš 255 impulsů, při 6000 ot./min. jich ještě načteš 25, pokud budeš točit 9000 otáček, už jich bude jen 16. Takže, jak vidíš, moc času na výpočet ti nezbývá. A, samozřejmě, ten čas musíš přičíst k počtu skutečně napočítaných impulsů z doby, kdy na to měl procesor čas.
Nebo ti nezbude, než externí čítač, externí hodiny, externí hradlování a přenos načteného údaje do procesoru, pak nulování čítače. Procesor se pak samotným čítáním nemusí zabývat a má čas ta čísla přežvýkat do použitelného tvaru. Vzniká nám z toho ale lokomotiva.
Pokládám si (i tobě) proto otázku:
Jakému speciálnímu účelu má ten otáčkoměr sloužit, čím je ta tvá motorka tak vyjímečná, že do toho tak nutně musí přijít procesor a že musí reagovat rychleji, než je obvyklé?
Jako dosud téměř všichni ostatní, se přikloním k čistě analogovému řešení: Jedna 555 spouštěná impulsem ze zapalování, doba kyvu řekněme 5ms, to stačí do 12000 otáček/min, jestli válec pálí při každé. Za to dvojitý integrační člen 500ms+500ms, sledovač pro zajištění minimálního výstupního odporu, který současně bude tlumit měřidlo, a je to.
Pamätám sa na svoj prvý program v asembleri 8080, po naštartovaní programu som nevidel žiadnu odozvu a tápal som a tápal, až som na to zobral logický analyzátor, a opäť som nič nevidel. Až keď som prepol na krokovanie 1us som videl beh programu. Vtedy som si uvedomil rozdiel medzi analogom a digitalom. Ja som dal opakovanie po sekunde a program dllllllllho nič nerobil, potom preletel inštrukcie (a to mal asi 1k) a opäť čakal.
Hill tu vypočítal, že najnižšie otáčky sú 10/s, to je 100ms, tak obetuj jednu periodu na výpočet otáčok, daj to na výstup pomocou 8bit D/A R2R prevodníka a najbližšie 4 periody počítaj tie ostatné veci. A budeš mať odozvu 0,5s (bez tlmenia meráku).
Ale aj tak som presvedčený že to bude stíhať a väčšinu času čakať na "udalosti".
Len pre zaujímavosť rutina 8x8bit trvá asi 100us (6MHz), (25us - 2051/24MHz). Som presvedčený, že to procesor bezpečne zvládne, máš zbytočné obavy.
Dosud jsem dělal otáčkoměr, jak píše Hill, s 555kou,ale jen jedním integračním článkem a bez sledovače.Funguje taky,ale je dost nelineární. http://www.georgeb.wz.cz/eaot.htm Funkci monostabilního klopného obvodu přenechám procesoru(to bude bez problémů stíhat) a za to tedy dám dvojitý IČ a sledovač s nějakým operákem.
Nechtěl jsem tady rejpat jako,že chci ten nejlepší a nejpřesnější a nejrychlejší otáčkoměr na světě,ale samotného mě nenapadaly metody jak to měřit,tak se ptám.
-
datam
načo?
Načo si komplikovať živoť?
PS: kto má doma páva riadeného AT89C4051?
Zdar inštrukcii NOP
Svietenie LED to je iba inštrukcia: zapni1. -> cakaj5ms -> vypni1. -> zapni2. -> cakaj5ms -> vypni2. -> zapni3. -> ... -> vypni 5. -> zapni1. --> a stále dokola. V tom čase čakania môžeš urobiť 200 násobení 8x8bit. Ty budeš robiť len jedno násobenie, takže ti zostane spústa času na čokoľvek iné.
Pohraj sa s časovaním.
netreba používť NOP, dá sa aj cyklus wait.
ViPali:ukazatel zařazené rychlosti mám už hotový a jelikož procesor není zcela zaneprázdněn,tak jsem se chtěl pokusi měrit s ním otáčky. http://www.georgeb.wz.cz/gearindicator.htm zde jsou fotky ještě s doma dělaným multiplexním displejem.
Datam:Právě dle tvého návrhu již mám na motocyklu otáčkoměr asi 3 roky a vím,že nejsou splněny podmínky pro linearitu integračního článku a že 555ka nenakrmí tento untegrační článek čistě obdélníkovým signálem. Poznámka s PAVem nebyla moc vtipná. Uvědom si,že se chci naučit neco a když se to učím,tak pořádně a nespokojím se s přesností 10%.Ono to jde vždy "nějak nabastlit",ale to já nedělám.
Jestli tato diskuse nepovede k dalším zlepšujícím návrhům,tak chci na závěr poděkovat hlavně Hillovi, který mě navedl na zapojení s dvojitým IČ a nějakým sledovačem pro posílení výstupu.
Na závěr bych měl dotaz jaký vhodný operační zesilovač použít,který bude pracovat na napětí 5V nesymterické. Děkuji