Zdeněk Buk - Homepage
-------------------------
Kategorie:
 ·Všechny
 ·Astronomie
 ·Elektronika
 ·Fotografování
 ·Počítače
 ·Ostatní
Další:
 ·O mně...
Počet přístupů:
[CNW:Counter]

Linux Powered
Tachometr na kolo se záznamem rychlosti
(01.10.2002)  Kategorie: Elektronika
   Jedná se o jednoduché zařízení, které jsem si postavil letos v červnu, a které slouží k měření rychlosti na kole (ale klidně i na koloběžce :-) )
   Od běžně prodávaných tachometrů se liší (mimo jiné) tím, že nemá žádný displej... on ho totiž nepotřebuje - všechna data se zapisují do paměti tachometru a po připojení k počítači lze zobrazit graf průběhu rychlosti.


   Frekvence zápisu do paměti (a tím výdrž paměti) lze nastavit softwarově, standardně (po resetu paměti) je nastavena na 2 sekundy. Tachometr je napájen standardní 9V baterií. Srdce tachometru je tvořeno monolitickým mikropočítačem Atmel AT89C2051.
   Čidlo pro snímání otáček pracuje na stejném principu jako u většiny "komerčních" tachometrů, tj. na kole je magnet a na vidlici je jazýčkový kontakt, který sepne vždy při průchodu magnetu kolem něj.
  • Podrobnější popis
  •    Tachometr má rozměry 84x60x29 mm. K ovládání slouží tři tlačítka (mikrospínače) a jeden přepínač (ten má velmi důležitou funkci, neboť jím se tachometr zapíná a vypíná :-) ). K indikaci funkce tachometru slouží tři kontrolní LED diody (červená, žlutá a zelená). Podrobný popis indikačních LED i tlačítek viz. tabulka níže.
       Jak jsem již psal v úvodu, je tachometr "poháněn" mikropočítačem AT89C2051 (mým oblíbeným :-)), ten je taktován na frekvenci 11.0592MHz. Tato na první pohled velmi ošklivá hodnota skýtá milé výhody při nastavování rychlosti sériové linky. Tachometr používá ke komunikaci RS-232 s rychlostí 9600baudů, 8bitů, bez parity. Pro převod napěťových úrovní sériové linky jsem použil (jak jinak) integrovaný obvod MAX232.
       Jako paměť lze použít v podstatě libovolnou I2C eeprom. Ale tak jednoduché to není, jelikož jsem byl při psaní software (říkejme mu raději firmware) v dost velkém časovém stresu, napsal jsem ho "natvrdo" na konkrétní typ paměti, to jest 24C265 - jinými slovy 32kB. Rutina pro komunikaci s pamětí je napsána univerzálně (našel jsem jí tady) ale nekteré programové smyčky (např. na mazání, nebo přenos dat) prostě předpokládají výše uvedenou kapacitu...
       Dále tachometr obsahuje již jen pár rezistorů, kondenzátorů a jeden stabilizátor 78L05 (5V).

       Tachometr pracuje v několika módech (nabízí několik funkcí), a podle aktuálního módu se liší význam jednotlivých tlačítek.
       Některé "zásadní" funkce (těmto bych tedy asi říkal módy) se zapínají při zapnutí tachometru stisknutím příslušného tlačítka - tak, že stiskneme tlačítko, držíme ho stisknuté a zapneme tachometr, poté tlačítko uvolníme. No a v každém módu se právě liší význam tlačítek.

    Seznam módů:
  • Běžný provoz
  • Do tohoto módu se tachometr přepne po zapnutí vždy, když není zvolen jiný mód. V tomto módu probíhá normální měření rychlosti a zápis dat do paměti. Pomocí tlačítek lze vložit dva druhy tzv. indexů - to jsou značky vkládané do paměti, které později usnadňují orientaci v datech - například si při cestě můžete vložit v každé vsi nebo městě, kterým projíždíte, značku. Způsob použití je naprosto libovolný. Existuje ještě třetí druh indexu, ale o tom se zmíním až při popisu firmware, protože ten se vkládá automaticky a nelze jeho vkládání ovlivnit.
  • Výmaz paměti
  • Tento mód zřejmě není potřeba dlouze popisovat. Snad jen to, že pokud jednou vyberete tento mód, nelze už vzít tuto volbu zpět - proto se také volí "nejkrkolomnější" kombinací tlačítek :-).
  • Tzv. servisní menu (konfigurace)
  • Zde se nastavuje perioda zápisu do paměti. V tomto módu je dobré mít k sériovému portu tachometru připojený nějaký terminál (já používám "ptelnet" na svém palmu), protože v tomto módu se přes sériový port "zobrazuje" jednoduché menu, ve kterém se vybírá požadovaná hodnota. Firmware je ovšem navržen tak, aby se dala hodnota nastavit i bez připojeného terminálu.
  • Odeslání obsahu paměti
  • Provede odeslání celé paměti po sériovém portu. Abych byl přesný, tak provede odeslání celé zaplněné části paměti, takže pokud s tachometrem podniknete jen krátký výlet, tak se rozhodně nebude odesílat celých 32kB.
    Odeslání dat není nijak destruktivní činnost, takže můžete odeslání libovolněkrát opakovat - dokud vám neodejde pamět eeprom, nebo baterka :-))).

    Popis tlačítek:
    Volba módu (při zapnutí):
    -nic- Běžný provoz.
    A+C Výmaz paměti
    A Sevisní menu
    B Odeslání obsahu paměti

    Ovládání v jednotlivých módech:
    Běžný provoz
    A Vložení indexu č.1.
    (Nutno držet po dobu alespoň jedné sekundy.)
    B Vložení indexu č.2.
    (Nutno držet po dobu alespoň jedné sekundy.)
    Výmaz paměti
    -nic- Neinteraktivní mód. (bez ovládání)
    Sevisní menu
    A Zvýšení periody zápisu o 1 s
    B Snížení periody zápisu o 1 s
    C Zapsání konfigurace do paměti eeprom a ukončení servisního menu.
    (Poté je nutné tachometr vypnou a znovu zapnout.)
    Odeslání obsahu paměti
    -nic- Neinteraktivní mód. (bez ovládání)
    Pohled na tachometr

    Popis indikačních LED:
    (G-zelená, Y-žlutá, R-červená)
    Běžný provoz
    R G B Popis:
    1 B 0 Tachometr se "zapíná", probíhá vyhledávání první volné pozice v paměti. V této době ještě neprobíhá měření, ani zápis do eeprom.
    B * 0 Probíhá měření i zápis do paměti. Toto je běžný provoz. Stav žluté LEDky se invertuje při každé otočce kola.
    B * 1 Byl vložen index (č.1 nebo č.2).
    * * 1 Nastala chyba při zápisu do eeprom. Vím, že tento stav LED lehce koliduje se stavem při vložení indexu, ale vzhledem k tomu, že chyba při zápisu se v praxi vlastně nevyskytuje, tak je to zanedbatelné. Navíc by se musela chyba objevit pravě ve chvíli vkládání indexu.
    Výmaz paměti
    1 1 1 Probíhá výmaz paměti.
    1 0 0 Výmaz dat proběhl bez problémů.
    0 0 1 Při mazání paměti eeprom došlo k chybě.
    Sevisní menu
    0 1 0 Servisní menu je aktivní. Tachometr čeká na vstup z "klávesnice". Pomocí tlačítek A a B nastavte požadované hodnoty, a pomocí tlačítka C nastavení potvrďte.
    1 0 0 Nastavení bylo uloženo. "Nyní můžete počítač bez obav vypnout" :-)
    0 1 0 Došlo k chybě při zápisu nastavení do eeprom.
    Odeslání obsahu paměti
    B 1 0 Probíhá odesílání dat. (Zelená LED bliká velmi pomalu, změní stav vždy po odeslání určitého bloku dat, takže při odesílání velmi krátkých dat nemusi k "bliknutí" vůbec dojít.)
    1 0 0 Odeslání dat proběhlo úspěšně - všechna data byla odeslána.
    0 0 1 Při odesílání dat došlo k chybě.

    Poznámka:
    0 - znamená, že příslušná LED nesvítí.
    1 - příslušná LED svítí.
    * - na stavu příslušné LED nezáleží.
    B - příslušná LED bliká. (na frekvenci nezáleží)
    Možná se vám zdá počet různých stavů neúnosně velký a jejich pochopení (a využití v praxi) příliž složité. Ale není to tak. Například všechny chybové "kódy" můžete v podstatě zapomenout, protože v praxi buď tachometr funguje pořád (no dobře: téměr pořád), nebo vůbec, a navíc když tachometr přestane "blikat" a svítí červená LED, tak lze myslím celkem intuitivně odhadnout, že se jedná o chybu.
    Potom všelijaké stavy kolem odesílání a mazání dat, jsou vlastně jen proto, aby člověk věděl, že "to" nezamrzlo, a že tachometr pracuje... no prostě v praxi je to mnohem jednodušší, než jak to na první pohled vypadá :-).
  • Popis firmware:
  •    Firmware (zkráceně "FW") je napsán v assembleru. V kapitole download jsou k dispozici jak zdrojový kód, tak přeložená verze. FW pracuje tak, že hned po zapnutí tachometru (a inicializaci potřebných promenných) otestuje stav tlačítek a přepne se do příslušného módu (viz tabulka v kapitole "podrobný popis").
       Pokud je aktivován mód "běžný provoz" - to znamená, že uživatel nestiskl žádné tlačítko, snaží se FW najít první volnou pozici v paměti, a od této pozice potom začne zapisovat data. Zápis do paměti totiž probíhá tak, že FW si za poslední platnou hodnotou v pameti "tlačí" jakousi značku. Je zaručeno, že za touto speciální značkou jsou již nedefinovaná data (např. z předchozího výletu). Tento způsob zápisu jsem zvoli proto, protože výmaz celé paměti (resp. vyplnění celé paměti nějakou speciální "neplatnou" hodnotou) trvalo neúnosně dlouho. Při funkci "výmaz paměti" se tady vlasně jen nastaví ona značka na začátek paměti.
       Časové "záležitosti" jsou řešeny tak, že je každých 10ms vyvoláno přerušení (10ms je tedy přesnost měření doby otočky kola) a v obsluze tohoto přerušení jsou inkrementovány dalsí proměnné, které počítají další "větší" časové intervaly - například periodu zápisu do eeprom. Druhé přerušení je vyvoláno při každé otočce kola. Každých 10ms je zvýšena hodnota proměnné, která počítá dobu otočky kola. Při průchodu magnetu kolem čidla (tj. při ukončení otočky) se hodnota z této proměnné přesune do jiné "ostré" proměnné, kde čeká na zápis do eeprom. Když uplyne čas periody zápisu, vezme se hodnota z této "ostré" proměnné, a zapíše se do eeprom. Tento způsob jsem zvolil proto, aby bylo zajištěno, že se do paměti uloží vždy doba poslední ukončené otočky kola.
       Nějak mě už nenapadá, co bych k FW ještě napsal, podrobnosti viz. zdrojový kód.
  • Popis hardware:
  •    Jelikož jsem celé zapojení vymýšlel jaksi "on the fly", tzn. přímo ři zapojování a pájení, nemám k tachometru žádné schéma. Základní popis jsem si samozřejmě potom udělal, abych věděl, jak mám napsat FW (kde mám tlačítka apod.).
       Takže tady to je:
    eeprom 24Cxx:
           SCL             - P1.2
           SDA             - P1.3
    
    snimac                 - P3.2/INT0
    
    tlacitka:
           horni           - P1.5
           prostredni      - P1.6
           dolni           - P1.7
    
    LEDky:
           zelena          - P3.7
           zluta           - P3.5
           cervena         - P3.4
    
    
  • Download:
  • Zdrojový kód: tach6.asm, 34.4kB
    Přeložená verze: tach6.hex, 4.5kB
    SW pro PalmOS: cyklo.prc, 32.4kB
  • Obrázky:
  • Fotky:

    Pohled na tachometr Tachometr připojený k Palmu Vnitřnosti Dráty

    Screenshoty z Palma:

    Screenshot1 Screenshot2 Screenshot3 Screenshot4 Screenshot5 Screenshot6



    zdenek_buk@seznam.cz