Stroboskop s LEDTi, kteří se těšili na stroboskop na diskotéku, budou zklamaní. Tohle je stroboskop sloužící k seřizování předstihu zážehových motorů. Chtěl jsem si vyrobit jednoduchý a levný stroboskop na měření předstihu. Jal jsem se tedy googlovat, nicméně ničeho světoborného jsem se nedogoogloval. Polovina návodů na stavbu stroboskopů na Internetu jsou právě ta blikátka na diskotéky - proto ten varovný úvod. Přístroje, které slouží k nastavování předstihu a které jsem našel mezi prvními výsledky vyhledávání, mě ničím zvláštním neoslnily. Ty opravdové perly jsou zřejmě skryty v nějakých temnějších koutech Internetu, kam pan Google moc nekouká. Nakonec jsem si to tedy i vymyslel sám - tedy téměř celé. Vstupní obvod pro kapacitní snímání pulsů z vysokonapěťového kabelu jsem z jednoho z těch nalezených návodů oprásknul. Jako sonda slouží plastový kolíček na prádlo. V místě, kde obepíná vysokonapěťový kabel, je provrtaný a opatřený šroubem M3 se zapuštěnou hlavou - ta se dotkne kabelu. Z venku je pod matičkou přichycený živý vodič stíněného kabelu. Stínění je nezapojeno a odstraněno. Jak už nadpis napovídá, jako zdroj světla je použito LED diod s vysokou svítivostí. Stroboskop je postaven na procesoru PIC16F84A - to je dnes již legendární stařec. Nicméně na tuhle aplikaci stačí (když tedy pominu souboj s PICC Lite překladačem o RAMku). Kromě blikání LEDkou ještě měří otáčky motoru a zobrazuje je na LCD displeji. Na místě LEDky jsem použil pětici bílých LED diod s pastovým reflektůrkem ze starého světýlka na jízdní kolo. Poměrně dobře to svítí a má to poměrně malý vyzařovací úhel. Stroboskop mění šířku pulsu LEDky podle otáček - to poskytuje více světla při nízkých otáčkách, kdy je pulzů málo a přitom mohou být delší, aniž by docházelo k příliš velkému rozmazání obrazu. Při vysokých otáčkách se délka pulsu zkracuje, ale je jich zase podstatně více. Viditelným výsledkem je, že nedochází ke změně jasu v závislosti na otáčkách. Stroboskop pracuje od nuly klidně do 50000 otáček za minutu (takovej motor bych chtěl vidět :-) ), otáčky měří zhruba od 150 za minutu. Popis zapojeníVstupní díl komentovat nebudu - jak jsem se zmínil, to zapojení není moje, opráskul jsem ho odjinud. Vstupní signál zpracovaný do TTL úrovní je přivedený do procesoru na vstup RA4. Paralelně k tranzistoru vstupního dílu je připojeno tlačítko, které slouží k přepínání režimu dvoutaktního a čtyřtaktního motoru (celé kouzlo je v tom, že pro čtyřtaktní motor se otáčky násobí dvěma). Pin RA3 tahá pomocí tranzistoru za LEDku. Ostatní IO piny obsluhují displej. Odpor R3 omezuje proud LEDkou. Ta ale pracuje pouze v krátkých pulsech a nějaký ten proud musí vydržet. Proto je za odporem ještě elektrolyt, ze kterého bere LEDka proudové špičky. Výrazně to zvyšuje jas. V tom zapojení opravdu nehledejte žádnou záludnost. Mechanické provedeníVzhledem k tomu, že se jedná o dílenský přístroj, snažil jsem se vymyslet trochu robustnější konstrukci. Nakonec jsem uřízl kousek ocelového jeklu 40x40 mm, na jedné straně jsem zavařil dno, kterým procházejí kabely. Tišťák je připevněn pomocí distančních sloupků. U tišťáku pozor - displej je ze strany spojů. Popis činnostiTedy vlastně popis programu. Jenom pro doplnění - program jsem vytvořil v "Céčku" v beta verzi prostředí MPLAB X a přeložil jej Lite verzí překladače PICC od Hi-techu. Bohužel, od nádherných konstrukcí, které strukturované programování umožňuje a k jakým všechny učebnice programování vybízejí, mě nedostatek RAMky, kterou mi překladač při volání funkcí ukusoval obrovskou tlamou, zahnal ke stupidní a neinvenční implementaci. Nicméně ideu programu jsem před překladačem ubránil. Procesor PIC16F84A má jediný časovač/čítač - TMR0. Ten jsem použil v režimu čítače pulsů z RA4 ke generování přerušení. Přerušení je generováno s každou sestupnou hranou na vstupu RA4 - čítač tedy čítá do jedné (tenhle procesor také umí generovat přerušení při změně na vstupech portu B, ale ten jsem celý použil na data pro displej). Uvnitř přerušení se rozsvítí LEDka na dobu odvozenou od periody napočítané mezi pulsy. Napočítaná perioda se uloží pro výpočet a zobrazení na displeji. Počítadlo, které měří periodu, se vynuluje, přesněji řečeno, inicializuje se na konstantu, která odpovídá době provádění přerušení. Toť vše. V hlavní smyčce program konejší watchdog a inkrementuje dvě dvojbajtová počítadla. Jedno slouží k měření periody mezi pulsy - s tímto počítadlem pracuje přerušení. Druhé slouží jako časovač pro aktualizaci displeje. Pokud žádné z počítadel nepřeteče, trvá (s procesorem 20 MHz) jeden průchod hlavní smyčkou asi 6,4 us. Tedy k přetečení dvojbajtového počítadla dojde za necelou půlsekundu, přesněji za zhruba 420 ms. To je tedy perioda aktualizace displeje. Potom také tato hodnota omezuje nejnižší měřitelné otáčky na zhuba 150 za minutu. Při přetečení počítadla mezi pulsy se nastaví nulová hodnota otáček a zároveň, pokud je vstup RA4 v logické nule, se přepne typ motoru. Je třeba si uvědomit, že k tomuto přetečení nedochází v době, kdy stroboskop dostává na vstup pulsy, protože přerušení toto počítadlo nuluje. Naopak přetečení počítadla, které slouží k aktualizaci displeje, probíhá zcela pravidelně. Perioda se lehce prodlužuje při zvyšujících se otáčkách - tehdy probíhá častěji přerušení, které hlavní smyčku zdržuje. Konečně, dojde-li k tomu, že máme aktualizovat displej, podělíme "magické číslo" naměřenou periodou, případně vynásobíme dvěma pro čtyřtaktní motor, převedeme na ASCII a výsledek napereme do displeje. Pro výpočet je použita čtyřbajtová proměnná, aby měl výsledek rozumnou přesnost. Magické číslo je konstanta, která zahrnuje všechny koeficienty výpočtu. Byl jsem líný studovat výsledek překladu a počítat instrukce, tak jsem se tohoto čísla dobral podvodem. Zvolil jsem hodnotu odhadem, budil jsem stroboskop z generátoru obdélníkem se střídou 1:10 a z otáček, které stroboskop ukázal, jsem vypočítal správnou hodnotu magického čísla trojčlenkou. Obsluha displeje není ničím výjimečná, přesto mě docela potrápila. Displej jsem vyraboval z nějakého šrotu a nesehnal jsem k němu datasheet. Dařilo se mi zapisovat jenom prvních osm znaků. Po hodinách laborování jsem se na Internetu dočetl, že by se displej mohl chovat jako dvouřádkový, tedy jako 2x8 znaků místo 1x16. Taky že jo. Ale to nebylo všechno. Druhý zádrhel byl v tom, že jsem s displejem začínal komunikovat moc brzy po zapnutí napájení. Jakmile jsem dal displeji 100 ms na rozkoukání, začalo to šlapat jako hodinky. OživeníPrvní zapnutí ukázalo několik nedostatků, které se mi naštěstí zdá se podařilo odstranit. Vstup byl příliš citlivý. Sondu jsem ani nemusel nikam připojovat, stačilo se stroboskopem k motoru přiblížit. Snížit citlivost nebylo zas tak jednoduché, jak jsem si to představoval. Nakonec jsem to vyřešil přidáním kondenzátoru mezi kolektor a emitor vstupního tranzistoru. Stroboskop teď začíná reagovat, pokud se k zapalovacímu kabelu sonda přiblíží na několik centimetrů. Puls do LEDky byl příliš dlouhý. Výsledkem byl rozmazaný obraz. Zkrátil jsem délku pulsu čtyřikrát - při volnoběhu ze zhruba 3,5 ms na zhruba 900 us. Obraz je už dostatečně ostrý a přitom ještě zřetelný i za běžného okolního světla. Zkrácení délky pulsu odhalilo další problém, který jsem musel vyřešit. Při zapálení jiskry vznikají tlumené kmity. Puls byl natolik krátký, že obvod stíhal zpracovávat i doznívání těchto kmitů a ukazoval nesmyslně vysoké otáčky. Vyřešil jsem to konstantním zdržením uvnitř přerušení na zhruba 1 ms. Tím se omezily maximální měřitelné otáčky na zhruba 50000, ale problém se zákmity se podařilo spolehlivě odstranit. Pro ty, kteří by si chtěli tohle zařízení vyrobit, je tady ke stažení HEX programu. No a pro ty, kteří by se v tom chtěli šťourat, přikládám celý projekt. | |
P15/1, K15 - prosinec 2006, naposledy aktualizováno: leden 2024 |