|
Počet přístupů: |
|
|
|
|
|
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í) |
|
|
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:
Screenshoty z Palma:
|
|
|
|