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
Softwarovo to nemas sancu vyriesit. Pri spustani hranou namerias vzdy rovnake napatie, pretoze spust… nový
Java250 02.11.2014 16:20
Java250
Ten Schmittův obvod bych musel postavit na nepájivém poli, to je jedné co mám. A součástky koupit. O… nový
Niko Bellic 02.11.2014 16:44
Niko Bellic
Mozes sa pokusit laborovat a prisposobit rutinu konkretnemu kusu spinaca. Akurat ho potom nevymienaj… nový
Java250 02.11.2014 16:50
Java250
Dobře díky za tip. :-) nový
Niko Bellic 02.11.2014 16:59
Niko Bellic
Teď jsem našel, že ten Schmittův KO existuje i jako integrovaný obvod a stojí pár korun. Tak to by u… nový
Niko Bellic 02.11.2014 17:39
Niko Bellic
schmittov klopny obvod nemusí vyriešiť problém ak mechanický kontakt bude generovať seriu velmi krát… nový
Joseph 02.11.2014 19:09
Joseph
Dobře díky, vidím že tohle je problematika poněkud složitější. Pro začátek zkusím vytvořit zpoždění… nový
Niko Bellic 02.11.2014 20:03
Niko Bellic
Schmittův klopný obvod ti pouze vytvaruje výstup ze snímače, ale nepotlačí falešné impulsy. Ty musíš… nový
JoPe 02.11.2014 19:15
JoPe
Na to je celkem idealni obycejny prahistoricky NE555 http://pandatron.cz/elektronika2/555_556_mon_s… nový
Lucifer nepřihlášen 02.11.2014 20:16
Lucifer nepřihlášen
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

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.

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.

schmittov klopny obvod nemusí vyriešiť problém ak mechanický kontakt bude generovať seriu velmi krátkych impulzov, akurát ich pekne vytvaruje, potrebuješ mať na vstupe impulz určiteho minimálneho trvania, možno bude postačovať na ošetrenie zákmitov rezistor a malá kapacita, integračný RC článok a toto pripojiť na vstup schmittovho klopného obvodu, malo by to byť poriešené

zhruba identickú funkčnosť by vykonal kod ktorý by po detekovaní zmeny stavu opakovane testoval trvanie stavu, s požiadavkou identického stavu, samozrejme všetko musí to byť správne spočítané v počtoch strojových cyklov, pretože dnes sú frekvencie procesorov vysoké a aj veľmi krátke zákmity by to mohlo vyhodnotiť ak platné

jednoducho je potrebné zhruba spočítať minimálny čas koľko trvá v milisekundách ? mikrosekundách ? správne vygenerovaný impulz od snímača, príliš krátke impulzy ktoré nemôžu byť správne odfiltruješ, budeš ich ignorovať

všetko co má hlúpu maticovú klávesnicu funguje takto, kalkulačky dialkové ovladače

... :puff:

Dobře díky, vidím že tohle je problematika poněkud složitější. Pro začátek zkusím vytvořit zpoždění a opakovaně testovat hodnotu signálu. Předpokládá se max. 9999 ot/min, což je max. rozsah stupnice (nastavitelné). Tak z toho si spočítám max. frekvenci/s a vím, kde spínač sepne a kde rozepne - vzdálenost od magnetu - zkusím převést na úhel a vypočítat minimální délku impulzu (při té max. frekvenci) - zpoždění nastavím třeba na polovinu.

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ů.

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