Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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 :-)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Mozna by docela stacilo pri preruseni u vzestupne hrany ohlasit signal a zapamatovat si cas, potom v… poslední
gilhad 03.11.2014 02:45
gilhad

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.

Zpět do poradny Odpovědět na původní otázku Nahoru