Mikroprocesorowy sterownik latarki (Flagiusz)
: niedziela 23 gru 2007, 13:24
Witam,
właśnie jestem na ukończeniu nowej wersji mikroprocesorowego sterownika do latarki, więc z przyjemnością podzielę się z Wami zebranymi w czasie jego projektowania pomysłami.
Jest to już druga wersja sterownika różniąca się od jego poprzednika sposobem sterowania oraz nieznacznie zmienioną architekturą (w pierwszej opisanej tutaj - sterowanie zrealizowane było na dedykowanym przycisku - microswitch`u astabilnym).
W drugiej wersji zmiana trybów realizowana jest przez chwilowe odcięcie zasilania - co jest dużo wygodniejsze przy przerabianiu gotowych obudów latarek z przyciskiem "z tyłu".
Aby porządnie zaprojektować uniwersalny i przede wszystkim wygodny w użyciu sterownik, trzeba sobie odpowiedzieć na kilka zasadniczych pytań.
Ja zanim usiadłem do programowania zastanowiłem się nad następującymi kwestiami.
Wymagania funkcjonalne:
1. tryby pracy (jakie, ile, w jakiej kolejności, grupowanie)?
- tryby ciągłe (jakie - np. 1=100%, 2=def., 3=def.)
- strobe (ile i jakie częstotliwości, wypełnienie)
- sekwencje (jakie: SOS, ...)
2. przełączanie trybów pracy (sterowanie) - jak?
3. programowanie trybów pracy przez użytkownika - co ma być programowalne i w jaki sposób (przykładowy flow - np. jasność: skokowa, płynna)?
4. zapamiętywanie ustawień - kiedy i co?
5. wodotryski:
- beacon
- auto power-off
- informacja świetlna lub automatyczna zmiana trybu w stanie mocnego rozładowania batt/accu.
- "doświetlenie" na żądanie (chwilowe 100% mocy z bieżącego trybu)
- możliwość używania alfabetu morse`a
- itd.
Wymagania techniczne:
1. minimalne / maksymalne napięcie zasilania (co przełoży się na architekturę układu)
2. rodzaj przetwarzania
a) boost kontrolowany przez procesor
b) boost kontrolowany przez zewnętrzny sterownik np. MAX179x
c) buck - procesor
d) buck - sterownik
e) buck-boost - procesor
f) buck-boost - sterownik
3. interfejs sterujący
a) czasowe wyłączanie zasilania
b) jeden przycisk astabilny (microswitch - tak jak w mojej pierwszej wersji)
c) dwa przyciski astabilne (microswitch)
d) jeden wyłącznik (on/off) + przycisk astabilny (microswitch - do przełączania trybów pracy)
e) wyłącznik (on/off) + "przycisk bistabilny" - coś na wzór L1D (przekręcany)
4. sposób sterowania
a) na wyjściu - tranzystor bipolarny lub mosfet tuż przed LED`em
b) na wejściu - np. poprzez sterowanie poprzez linię EN/SHDN zewnętrznego konwertera
5. sygnał sterujący
a) logika (poziomy CMOS + ew. dopasowanie na Res.)
b) polaryzacja
- dodatnia
- ujema
- obie (na różnych wyprowadzeniach typu Q/!Q)
6. regulacja mocy / jasności
a) PWM (100-10kHz)
b) Fast PWM (>10kHz)
c) liniowa (analog.) - raczej odpada w przedbiegach z uwagi na małą sprawność
7. stabilizacja / ograniczenie prądu diody
a) zapewniana przez konwerter
b) realizowana na procesorze
c) rezystor
8. predefiniowana konfiguracja (tryby pracy, kolejność,...)
a) jedna logika (algorytm działania)
b) logika programowalna przez użytkownika
c) kilka predefiniowanych wersji wybieranych stanem na pin`ach (coś a`la sterowanie jumperami)
Inne:
- wymiary
- liczba elementów
- możliwość zmiany firmware`u
Drugim krokiem było odpowiedzenie sobie na pytanie - z czego przeciętny użytkownik będzie na codzień korzystał.
A to z kolei pozwoliło wybrać opcje naprawdę potrzebne i ustawić je "na początku", tak by były szybko i łatwo dostępne.
Opcje rzadziej używane pozostały na końcu.
Tak, jak większość innych rzeczy, latarka musi spełniać podstawową swoją funkcję w sposób szybki, łatwy i skuteczny.
Przeładowanie jej "bajerami" sprawia, że przestaje ona skutecznie spełniać podstawowe swoje funkcje.
Czyli podstawowym założeniem jakie przyjąłem za główny cel - to ergonomia i łatwość korzystania z latarki najlepiej bez ograniczania jej funkcjonalności.
Mój pomysł na to był prosty (co po części zostało już zrealizowane w poprzedniej mojej wersji sterownika):
1. tryb ciągły o jasności zdefiniowanej przez użytkownika #1 (~0-100%)
2. tryb ciągły o jasności zdefiniowanej przez użytkownika #2 (~0-100%)
3. tryb ciągły o jasności zdefiniowanej przez użytkownika #3 (~0-100%) - opcjonalnie fix. na 100%
4. tryb sekwencyjny alarmowy 1 (błyski: 0,1s co 1s)
5. tryb sekwencyjny alarmowy 2 (błyski: 4x 0,05s z przerwami 0,05s co 1s) - opcjonalnie do wyrzucenia
6. strobe 10 Hz (lub zbliżony - dający dla oka ludzkiego najlepszą widoczność)
7. strobe 5Hz
8. strobe 1Hz (wypełnienie 50/50)
9. SOS
... [inne wedle uznania]
10. konfiguracja jasności kolejno dla trybów 1,2 i 3
- płynne przejście "w górę" od ~0% do 100% jasności w czasie 5s (zatrzymanie w trakcie powoduje zapamiętanie trybu)
- po dojściu do max`a - 3 sek na 100% (tak aby można było "wstrzelić się" w pełne 100%)
- płynne przejście "w dół" od 100% do ~0% jasności w czasie 5s (zatrzymanie w trakcie powoduje zapamiętanie trybu)
- po dojściu do min`a - 3 sek na ~0% (tak aby można było "wstrzelić się" w pełne minimum)
[i tak 3x dla #1, #2 i #3]
Przełączenie trybów pracy:
- przez krótkie wyłączenie zasilania (<1s) w dowolnym momencie
- wyłączenie zasilania na dłużej niż przysłowiowa 1s będzie powodować wrócenie latarki do pierwszego (domyślnego) trybu pracy
Dodatkowo konfigurowalna przez użytkownika opcja zapamiętywania ostatnio używanego trybu pracy.
Gdy jest włączona latarka po włączeniu zasilania automatycznie ustawi się w trybie pracy z którego ostatnio korzystał użytkownik, w przeciwnym razie (gdy opcję tę użytkownik wyłączy) latarka zawsze włączy się w trybie pierwszym.
Łatwe w obsłudze? - Chyba łatwiejsze nie będzie
Dzięki temu na początku mamy preferowany (zdefiniowany przez użytkownika) tryb jasności - jak sobie tego zażyczy - może być to max. może być min może być jakiś pośredni, może być SOS, może być strobe itd - pełna dowolność.
Nie wiem jak Wy, ale ja podczas normalnej pracy zwykle używam w:
- 70% czasu - med/low
- 29% - high
- 1% - strobe i inne sekwencyjne (i bardziej traktuje je jako bajer, niż faktyczną potrzebę ich użycia).
Podejrzewam, że inni podobnie (ewentualnie zamienione dwie pierwsze miejscami) - a to bez problemu do max. 2 kliknięć załatwia opisany algorytm w 99% przypadków użycia.
Muszę jeszcze chwilkę pomyśleć nad rozwiązaniem zasilania mikrokontrolera (chcę to wpakować do latarki wielkości Fenix`a L1P zasilanej z 1xAA, a "najniższy" z procków jakie mam chodzi od 1,8V) i trzymać kciuki, że mi to wszystko się tam zmieści
Jakby nie patrzeć funkcje takie ma L1D, który jest o ok. 6 mm dłuższy - a to jest jednak już całkiem więcej miejsca "do zabudowy".
Za wszelką cenę chciałbym uniknąć konieczności dotaczania wydłużających przejściówek, choć biorąc pod uwagę dodatkowe użycie go jako radiatora może nie być to aż takie głupie.
Sterownik jest już praktycznie ukończony, przechodzi ostatnie fazy testów (na razie jeszcze "na pająku"). W tej chwili przygotowuję projekt płytek drukowanych i trzymam kciuki, że mi się to wszystko zmieści.
Jeżeli macie jakieś pytania, uwagi, ciekawe pomysły, to piszcie proszę - chętnie podyskutuję
Jeśli ktoś z Was przerabiał latarkę HX-G011 PowerLight zmieniając LED na Cree lub SSC, to napiszcie proszę ile zostało po takiej zmianie miejsca na elektronikę i jak zrobiliście zwierciadło (czy cięliście oryginalne - jak wyszło skupienie, czy wstawiliście nowe dedykowane pod Cree lub SSC)?
Pozdrawiam,
Flagiusz
właśnie jestem na ukończeniu nowej wersji mikroprocesorowego sterownika do latarki, więc z przyjemnością podzielę się z Wami zebranymi w czasie jego projektowania pomysłami.
Jest to już druga wersja sterownika różniąca się od jego poprzednika sposobem sterowania oraz nieznacznie zmienioną architekturą (w pierwszej opisanej tutaj - sterowanie zrealizowane było na dedykowanym przycisku - microswitch`u astabilnym).
W drugiej wersji zmiana trybów realizowana jest przez chwilowe odcięcie zasilania - co jest dużo wygodniejsze przy przerabianiu gotowych obudów latarek z przyciskiem "z tyłu".
Aby porządnie zaprojektować uniwersalny i przede wszystkim wygodny w użyciu sterownik, trzeba sobie odpowiedzieć na kilka zasadniczych pytań.
Ja zanim usiadłem do programowania zastanowiłem się nad następującymi kwestiami.
Wymagania funkcjonalne:
1. tryby pracy (jakie, ile, w jakiej kolejności, grupowanie)?
- tryby ciągłe (jakie - np. 1=100%, 2=def., 3=def.)
- strobe (ile i jakie częstotliwości, wypełnienie)
- sekwencje (jakie: SOS, ...)
2. przełączanie trybów pracy (sterowanie) - jak?
3. programowanie trybów pracy przez użytkownika - co ma być programowalne i w jaki sposób (przykładowy flow - np. jasność: skokowa, płynna)?
4. zapamiętywanie ustawień - kiedy i co?
5. wodotryski:
- beacon
- auto power-off
- informacja świetlna lub automatyczna zmiana trybu w stanie mocnego rozładowania batt/accu.
- "doświetlenie" na żądanie (chwilowe 100% mocy z bieżącego trybu)
- możliwość używania alfabetu morse`a
- itd.
Wymagania techniczne:
1. minimalne / maksymalne napięcie zasilania (co przełoży się na architekturę układu)
2. rodzaj przetwarzania
a) boost kontrolowany przez procesor
b) boost kontrolowany przez zewnętrzny sterownik np. MAX179x
c) buck - procesor
d) buck - sterownik
e) buck-boost - procesor
f) buck-boost - sterownik
3. interfejs sterujący
a) czasowe wyłączanie zasilania
b) jeden przycisk astabilny (microswitch - tak jak w mojej pierwszej wersji)
c) dwa przyciski astabilne (microswitch)
d) jeden wyłącznik (on/off) + przycisk astabilny (microswitch - do przełączania trybów pracy)
e) wyłącznik (on/off) + "przycisk bistabilny" - coś na wzór L1D (przekręcany)
4. sposób sterowania
a) na wyjściu - tranzystor bipolarny lub mosfet tuż przed LED`em
b) na wejściu - np. poprzez sterowanie poprzez linię EN/SHDN zewnętrznego konwertera
5. sygnał sterujący
a) logika (poziomy CMOS + ew. dopasowanie na Res.)
b) polaryzacja
- dodatnia
- ujema
- obie (na różnych wyprowadzeniach typu Q/!Q)
6. regulacja mocy / jasności
a) PWM (100-10kHz)
b) Fast PWM (>10kHz)
c) liniowa (analog.) - raczej odpada w przedbiegach z uwagi na małą sprawność
7. stabilizacja / ograniczenie prądu diody
a) zapewniana przez konwerter
b) realizowana na procesorze
c) rezystor
8. predefiniowana konfiguracja (tryby pracy, kolejność,...)
a) jedna logika (algorytm działania)
b) logika programowalna przez użytkownika
c) kilka predefiniowanych wersji wybieranych stanem na pin`ach (coś a`la sterowanie jumperami)
Inne:
- wymiary
- liczba elementów
- możliwość zmiany firmware`u
Drugim krokiem było odpowiedzenie sobie na pytanie - z czego przeciętny użytkownik będzie na codzień korzystał.
A to z kolei pozwoliło wybrać opcje naprawdę potrzebne i ustawić je "na początku", tak by były szybko i łatwo dostępne.
Opcje rzadziej używane pozostały na końcu.
Tak, jak większość innych rzeczy, latarka musi spełniać podstawową swoją funkcję w sposób szybki, łatwy i skuteczny.
Przeładowanie jej "bajerami" sprawia, że przestaje ona skutecznie spełniać podstawowe swoje funkcje.
Czyli podstawowym założeniem jakie przyjąłem za główny cel - to ergonomia i łatwość korzystania z latarki najlepiej bez ograniczania jej funkcjonalności.
Mój pomysł na to był prosty (co po części zostało już zrealizowane w poprzedniej mojej wersji sterownika):
1. tryb ciągły o jasności zdefiniowanej przez użytkownika #1 (~0-100%)
2. tryb ciągły o jasności zdefiniowanej przez użytkownika #2 (~0-100%)
3. tryb ciągły o jasności zdefiniowanej przez użytkownika #3 (~0-100%) - opcjonalnie fix. na 100%
4. tryb sekwencyjny alarmowy 1 (błyski: 0,1s co 1s)
5. tryb sekwencyjny alarmowy 2 (błyski: 4x 0,05s z przerwami 0,05s co 1s) - opcjonalnie do wyrzucenia
6. strobe 10 Hz (lub zbliżony - dający dla oka ludzkiego najlepszą widoczność)
7. strobe 5Hz
8. strobe 1Hz (wypełnienie 50/50)
9. SOS
... [inne wedle uznania]
10. konfiguracja jasności kolejno dla trybów 1,2 i 3
- płynne przejście "w górę" od ~0% do 100% jasności w czasie 5s (zatrzymanie w trakcie powoduje zapamiętanie trybu)
- po dojściu do max`a - 3 sek na 100% (tak aby można było "wstrzelić się" w pełne 100%)
- płynne przejście "w dół" od 100% do ~0% jasności w czasie 5s (zatrzymanie w trakcie powoduje zapamiętanie trybu)
- po dojściu do min`a - 3 sek na ~0% (tak aby można było "wstrzelić się" w pełne minimum)
[i tak 3x dla #1, #2 i #3]
Przełączenie trybów pracy:
- przez krótkie wyłączenie zasilania (<1s) w dowolnym momencie
- wyłączenie zasilania na dłużej niż przysłowiowa 1s będzie powodować wrócenie latarki do pierwszego (domyślnego) trybu pracy
Dodatkowo konfigurowalna przez użytkownika opcja zapamiętywania ostatnio używanego trybu pracy.
Gdy jest włączona latarka po włączeniu zasilania automatycznie ustawi się w trybie pracy z którego ostatnio korzystał użytkownik, w przeciwnym razie (gdy opcję tę użytkownik wyłączy) latarka zawsze włączy się w trybie pierwszym.
Łatwe w obsłudze? - Chyba łatwiejsze nie będzie
Dzięki temu na początku mamy preferowany (zdefiniowany przez użytkownika) tryb jasności - jak sobie tego zażyczy - może być to max. może być min może być jakiś pośredni, może być SOS, może być strobe itd - pełna dowolność.
Nie wiem jak Wy, ale ja podczas normalnej pracy zwykle używam w:
- 70% czasu - med/low
- 29% - high
- 1% - strobe i inne sekwencyjne (i bardziej traktuje je jako bajer, niż faktyczną potrzebę ich użycia).
Podejrzewam, że inni podobnie (ewentualnie zamienione dwie pierwsze miejscami) - a to bez problemu do max. 2 kliknięć załatwia opisany algorytm w 99% przypadków użycia.
Muszę jeszcze chwilkę pomyśleć nad rozwiązaniem zasilania mikrokontrolera (chcę to wpakować do latarki wielkości Fenix`a L1P zasilanej z 1xAA, a "najniższy" z procków jakie mam chodzi od 1,8V) i trzymać kciuki, że mi to wszystko się tam zmieści
Jakby nie patrzeć funkcje takie ma L1D, który jest o ok. 6 mm dłuższy - a to jest jednak już całkiem więcej miejsca "do zabudowy".
Za wszelką cenę chciałbym uniknąć konieczności dotaczania wydłużających przejściówek, choć biorąc pod uwagę dodatkowe użycie go jako radiatora może nie być to aż takie głupie.
Sterownik jest już praktycznie ukończony, przechodzi ostatnie fazy testów (na razie jeszcze "na pająku"). W tej chwili przygotowuję projekt płytek drukowanych i trzymam kciuki, że mi się to wszystko zmieści.
Jeżeli macie jakieś pytania, uwagi, ciekawe pomysły, to piszcie proszę - chętnie podyskutuję
Jeśli ktoś z Was przerabiał latarkę HX-G011 PowerLight zmieniając LED na Cree lub SSC, to napiszcie proszę ile zostało po takiej zmianie miejsca na elektronikę i jak zrobiliście zwierciadło (czy cięliście oryginalne - jak wyszło skupienie, czy wstawiliście nowe dedykowane pod Cree lub SSC)?
Pozdrawiam,
Flagiusz