
Mikrokontrolér - zákmity na snímači
Pěkné nedělní odpoledne.
Programuji aplikaci na měření otáček pomocí mikrokontroléru MSP430F2616, který je na kitu s FPGA a periefiemi. Signál generuje přípravek (vlastní výroby), na kterém motorek pohání kolo s magnetem a ten projíždí pod snímačem z cyklocomputeru. Při sepnutí se přivede na vstupní pin 3,3 V a při rozepnutí je tam 0 (zajištěno přes pull-down rezistor). Bylo nám doporučeno počítat impulzy pomocí přerušení, které se vyvolá při vzestupné nebo sestupné hraně. A tam nastává problém.
Pokud měřím hodnotu log. hodnoty na vstupu bez přerušení ve funkci main každou 1 ms, zvyšuji hodnotu čítače atd. tak vše funguje dobře - počítá to libovolné otáčky. Když ale stejný kus kódu přesunu do obslužné rutiny přerušení (které reaguje na hranu), tak se čítač inkrementuje velmi nepravidelně, občas je v něm velmi vysoká hodnota a jindy zase 0, jako by rutina vůbec neproběhla. Je to poznat i tak, že když přidám do rutiny rozsvícení/zhasnutí ledky, tak ta bliká nepravidelně (ve funkci main bliká pravidelně).
Chtěl bych přijít na to, kde by mohla být chyba. Nejspíš za to mohou zákmity na tom snímači. Uvnitř je nejspíš obyčejný jazýčkový kontakt a ten asi neprodukuje moc pěkný tvar signálu, ale je zajímavé, že když měřím hodnotu v mainu bez přerušení a ne hranu, tak to funguje. Jaké byste doporučili (aspoň částečné) řešení? Pokud možno softwarové ošetření. Četl jsem, že se to dá ošetřit i nějakým klopným obvodem, ale ten si jen tak jednoduše nemohu postavit. A jde jen o projekt na VŠ.
Díky
edit: Marek by určitě věděl, ten si v tom frčí, tak snad poradí pokud projde kolem
Softwarovo to nemas sancu vyriesit. Pri spustani hranou namerias vzdy rovnake napatie, pretoze spustacia logika prevadza rozdielnu uroven napatia na normovanu velkost s definovanym stavom. Mas velky problem, ked si zavrhol riesenie, ktore sa bezne pouziva. Spinace sa normalne osadzuju schmitovym kl.obvodom, ktory predlzuje spinaci cas, cim odstrani zakmity. To co namerias ty na tom vystupe sa podoba fazovej modulacii.
Ten Schmittův obvod bych musel postavit na nepájivém poli, to je jedné co mám. A součástky koupit. On je to projekt do školy, ne profi aplikace k průmyslovému nasazení (to by bylo jiné kafe
). Nějaké drobné nedostatky mít může, tak aspoň softwarově bych je chtěl minimalizovat.
Mozes sa pokusit laborovat a prisposobit rutinu konkretnemu kusu spinaca. Akurat ho potom nevymienaj za iny a neprevazdkuj to v inych podmienkach (vlhkost, tlak, mechanicke a elektricke vplivy). Ak by som to robil neprofesionalne a tak ako sa to nikde nerobi, zrejme by som pouzil samplovanie s vacsou rychlostou ako je doba spicky, ktora preklopi spinaciu logiku a matematicky dopocital pravdepodobnost zopnutia.
Teď jsem našel, že ten Schmittův KO existuje i jako integrovaný obvod a stojí pár korun. Tak to by už použít šlo, to je mnohem přijatelnější, než kupovat tranzistory a odpory. Ale nevyznám se v parametrech. Mohl bys prosím doporučit nějaký typ použitelný pro ty hodnoty co mám, tedy log. 1 při 3,3 V ?
hledat
Schmittův klopný obvod ti pouze vytvaruje výstup ze snímače, ale nepotlačí falešné impulsy. Ty musíš odfiltrovat buď pomocí software, nebo by mohl pomoci i monostabilní klopný obvod, který by po prvním impulsu ze snímače po nějakou dobu potlačoval další. Jeho časovou konstantu by jsi musel přizpůsobit maximální možné frekvenci impulsů.
Na to je celkem idealni obycejny prahistoricky NE555
http://pandatron.cz/elektronika2/555_556_mon_sch.g if
Mozna by docela stacilo pri preruseni u vzestupne hrany ohlasit signal a zapamatovat si cas, potom vsechna preruseni (pokud jejich cas je jen o malo vetsi nez zapamatovany) ignorovat a potom totez udelat se setupnou hranou (zase si zapamatovat cas a pak chvilku ignorovat). Pokud zvolis dobre tu "chvilku", tak ti pokryje zakmity, ale zaroven ti nestihne probehnout cely pulz/mezera, takze snadno odchytis i druhou stranu.
Jen je potreba mit tu obsluhu preruseni dost rychlou, abys v ni nepromeskal cely impulz.