Strona 1 z 10

Driver Flagiusza (programowalny) - nowa odsłona

: piątek 08 sty 2010, 19:36
autor: df
Witam,
po kilku miesiącach przerwy, chciałbym Wam przedstawić kolejny nowy projekt sterownika, który jest efektem zbieranych od ponad 3 lat doświadczeń oraz opracowywania i testowania najrozmaitszych rozwiązań.

Projekt ten nie jest ani demonstracją możliwości, ani rozwiązaniem iście kosmicznym, dalekim od realiów i potrzeb "normalnego" użytkownika - nie jest, bo z założenia taki miał nie być.

Wręcz przeciwnie jego celem było stworzenie rozwiązania wysoce dojrzałego, które połączyłoby wszystko to, co zostało wypracowane w poprzednich wersjach i co sprawdziło się w codziennym użytkowaniu.
Natomiast to, czego w poprzednich moich projektach brakowało, zostało tu uwzględnione i dodane.

Jako wielki pasjonat elektroniki i miłośnik latarek, jak zawsze zadbałem również o to, by rozwiązanie to było pod każdym względem wyjątkowe i bardzo dobrze przemyślane.

Oczywiście nadal moim priorytetem jest przede wszystkim: wysoka intuicyjność, ergonomia i funkcjonalność - w projekcie tym będzie to mam nadzieję bardzo dobrze widoczne. Wysoka dbałość o najdrobniejsze szczegóły ma zapewnić nie tylko komfort i pewność użytkowania, ale i sprawiać ich właścicielowi wiele radości.

W projekcie tym najwięcej ciekawych i innowacyjnych rozwiązań znajduje się w jego środku i choć przeciętny użytkownik nie będzie miał świadomości o tym, co tam w środku tak naprawdę się dzieje, to mimo wszystko zachęcam wszystkich zainteresowanych do dyskusji - chętnie podzielę się zdobytą wiedzą i doświadczeniem oraz opiszę rozwiązania techniczne zastosowane w tym projekcie (a jest ich tam całkiem sporo).

Podobnie jak wszystkie poprzednie moje projekty także i ten powstał całkowicie hobbystycznie, choć jego opracowanie i bardzo dokładne wytestowanie pochłonęło sporo mojego prywatnego czasu, którego niestety ostatnio mam jak na lekarstwo.

OK, to tyle tytułem wstępu - przejdźmy zatem do konkretów :-)
Obrazek
Parametry
  • - zasilanie: 2,9 – 6,0V (1x Li-Ion / 1x Li-FePO / 3x NiCd / 3x NiMH / 3x alcaline 1,5V)
    - sterowanie LED`ami mocy od 1 do 4W (350mA/700mA/1A/1,4A) - możliwość sterowania kaskadowego kolejnymi modułami
    - wymiary PCB: średnica 16.8mm (17mm), wysokość 3.3mm (wersje do 1,4A)
Funkcje
  • - sterownik wielotrybowy (ilość i liczba trybów predefiniowana, zależna od wybranego wariantu)
    - przełączanie trybów w sekwencji np. 1->2->3->1->2->3... itd.
    - pamięć ostatnio używanego trybu o działaniu natychmiastowym
    - możliwość blokady pamięci - konfigurowana sprzętowo (on/off)
    - możliwość programowania jasności przez użytkownika
    - indywidualne nastawy jasności dla każdego trybu niezależnie i dla wszystkich dostępnych trybów (zarówno ciągłych jak i sekwencyjnych)
    - szeroki zakres regulacji: od 0,4% do 100% (w tym super-low ok. 4mA w LED dla wersji 1A)
    - poziomy jasności rozłożone logarytmicznie (równomiernym dla oka)
    - cyfrowe sterowanie (Fast-PWM)
    - no-flickering / no-ringing – brak efektu migotania oraz piszczenia w pełnym zakresie pracy
    - możliwość sprzętowej blokady zmian ustawień (setup`u) z pełnum zachowaniem wszystkich dokonanych uprzednio konfiguracji
    - liniowa stabilizacja prądu diody na bazie układów AMC 7135
    - możliwość sterowania dodatkowymi modułami AMC (wersje >1,4A) w postaci kaskadowego łączenia dodatkowych modułów
    - automatyczna kontrola napięcia zasilania
    - sygnalizacja niskiego poziomu napięcia baterii (<3,2V)
    - moon-mode &#8211; tryb oszczędzania energii o obniżonej jasności (<3,05V)
    - zabezpieczenie ogniwa przed głębokim rozładowaniem (<2,9V) z sygnalizacją pełnego rozładowania
    - wsparcie dla rozwiązań rowerowych, czołówkowych i stacjonarnych
    - wyjście cyfrowe z możliwośią bezpośredniej sygnalizacji stanu pracy sterownika oraz poziomu baterii na dodatkowej diodzie LED małej mocy (np. wyprowadzonej w widocznym miejscu)
    - możliwość sterowania niskoprądowym micro-switch`em astabilnym (np. wyprowadzonym w dobrze dostępnym miejscu)
Sterowanie
  • - zmiana trybu: 2-klik (2 krotne szybkie odcięcie zasilania lub przyciśnięcie micro-switch`a)
    - wejście do trybu konfiguracji jasności: 3-klik (3 krotne szybkie odcięcie zasilania lub przyciśnięcie micro-switch`a)
    - akceptacja wybranej jasności w trybie konfiguracji: 1-klik przy wybranej jasności
    - anulowanie zmian i wyjście z trybu konfiguracji: 1-klik w fazie sygnalizacji konfiguracji (pierwsze 2 sek. od wejścia do ustawień) oraz automatycznie po 6 pełnych cyklach zmian jasności bez dokonania wyboru
    - natychmiastowy powrót do trybu pierwszego (dot. konfiguracji z wyłączoną pamięcią trybów): 1-klik
Sygnalizacja
  • - normalna praca
    • - główny LED: tryby oraz jasność zgodnie z dokonanymi ustawieniami
      - wyjście cyfrowe: stan niski (opcjonalna dioda sygnalizacyjna zgaszona)
    - informacja o wejściu do opcji konfiguracji (setup)
    • - główny LED: 2 podwójne błyski o średniej jasności
      - wyjście cyfrowe: przebieg 4Hz (opcjonalna dioda sygnalizacyjna szybko błyska)
    - sekwencja wyboru ustawień jasności (tryb konfiguracji - setup)
    • - główny LED: cykliczne zmiany jasności od minimum do maksimum i z powrotem z pauzami oraz pojedynczym mignięciem przy wartościach skrajnych
      - wyjście cyfrowe: przebieg 4Hz (opcjonalna dioda sygnalizacyjna szybko błyska)
    - informacja o rozładowaniu ogniwa (<3,2V)
    • - główny LED: krótkie pojedyncze "ciemne" mignięcia powtarzane w odstępach co ok. 8s
      - wyjście cyfrowe: przebieg 1Hz (opcjonalna dioda sygnalizacyjna wolno pulsuje)
    - informacja o zbliżającym się do końca rozładowaniu ogniwa (<3,05V)
    • - główny LED - przejście w tryb o obniżonej jasności (moon-mode) oraz krótkie pojedyncze "ciemne" mignięcia powtarzane w odstępach co ok. 8s
      - wyjście cyfrowe - stan wysoki (opcjonalna dioda sygnalizacyjna świeci światłem ciągłym)
    - informacja o całkowitym rozładowaniu ogniwa (<2,9V)
    • - główny LED - 4 półsekudnowe błyski o niskiej jasności i wyłączenie się sterownika
      - wyjście cyfrowe - 4 półsekudnowe błyski i przejście w stan niski
Opis
Zmiana trybu następuje "dwuklikiem" czyli 2-ma następującymi po sobie miękkimi kliknięciami (odłączającymi zasilanie sterownika), co jest rozwiązaniem bardzo wygodnym i zarazem praktycznym, gdyż dobrze zabezpiecza przed przypadkowym przełączeniem się trybów podczas użytkowania (np. jazda rowerem po wertepach).

Każdy z trybów zarówno ciągłych jak i specjalnych (sekwencje) może mieć dowolnie ustawioną przez użytkownika jasność. Dzięki temu możliwe jest nie tylko ustawienie swoich własnych preferowanych poziomów siły światła w poszczególnych trybach pracy, ale i ich kolejności (np. low->mid->high, high->mid->low, low->high->mid itd.), co czyni całe rozwiązanie niezwykle uniwersalnym.

Zmiana jasności (setup) możliwa jest po wykonaniu 3-kliku i dotyczy ona trybu aktualnie aktywnego.
Sterownik zasygnalizuje ten stan 2-ma podwójnymi błyskami, a następnie przejdzie do procedury wyboru jasności.
Pojedyncze kliknięcie lub wyłączenie latarki podczas sekwencji poprzedzającej wybór ustawień anuluje tryb konfiguracji, bez dokonywania żadnych zmian.
Właściwa sekwencja wyboru rozpoczyna się od poziomu najniższego i stopniowo (co ~0,5s) sterownik zwiększa jasność do wartości maksymalnej, a następnie przebiega w drugą stronę od wartości maksymalnej do minimalnej.
Poziomy skrajne (min i max) trwają nieco dłużej i są sygnalizowane jednym krótkim mignięciem, co doskonale ułatwia ich identyfikację oraz upraszcza wybór wartości skrajnych.

Dostępne jasności zawierają się w bardzo szerokim przedziale (od 0,4 do 100%) i zostały pogrupowane na 9 poziomów rozłożonych w skali logarytmicznej. Rozkład logarytmiczny jest bardziej naturalny niż podział liniowy (proporcjonalny), gdyż sprawia wrażenie, że każdy z kolejnych poziomów jest równo oddalony od poziomu go poprzedzającego. Natomiast ich podział na 9 poziomów daje wystarczająco dużą przestrzeń do wyboru własnej preferowanej siły światła, przy jednoczesnym zachowaniu wysokiej czytelności i powtarzalności wyboru (możliwe jest np. odliczanie kroków od wartości skrajnych).

Wybór siły światła polega na pojedynczym kliknięciu w chwili występowania danej jasności.
Po tym sterownik przechodzi do używanego wcześniej trybu, ale już z ustawioną nową wybraną przez użytkownika jasnością. Od tego momentu wybrana przez użytkownika jasność zostanie zapisana w pamięci sterownika i będzie przypisana do danego trybu, aż do czasu kolejnej jego zmiany (ponownej rekonfiguracji).
Gdy przez 3 pełne cykle nie zostanie dokonany żaden wybór, sterownik automatycznie wyjdzie z trybu konfiguracji przywracając ostatni wybrany tryb i zachowując pierwotną jego jasność.
Każdy z trybów posiada swoje niezależne nastawy jasności, a ich konfiguracja nie różni się niczym, poza wykonaniem operacji wejścia do ustawień (3-kliku) z pozycji innego wybranego przez siebie trybu.

Sterownik posiada możliwość zablokowania opcji konfiguracji, po uaktywnieniu której dalej będzie on respektował wszystkie dokonane uprzednio ustawienia, ale nie pozwoli na ich dalszą zmianę.
Blokada polega na założeniu zwory (lub zwarcie padów np. kroplą cyny) w miejscu PCB oznaczonym symbolem R3. Gdy pole jest otwarte (wartość domyślna) opcja konfiguracji jest dostępna.

Sterownik posiada pamięć ostatnio używanego trybu pracy, dzięki czemu po włączeniu zawsze uruchomi się on w trybie ostatnio używanym - czyli w tym, w którym został on wyłączony.
Także i tę opcję można wyłączyć zwierając pady oznaczone na PCB jako R5. Wówczas przy każdym uruchomieniu sterownik zawsze będzie startował z trybu pierwszego. W tej konfiguracji dostępna jest dodatkowa opcja natychmiastowego przejścia z dowolnego trybu do trybu pierwszego po pojedynczym krótkim kliknięciu (podwójny klik standardowo zmienia tryb na następny).

Stabilizacja prądu diody zrealizowana została w oparciu o specjalizowane układy AMC 7135 zapewniające prawidłowe warunki pracy diody LED zarówno w trybach ciągłych jak i impulsowych. Dzięki temu w bardzo szerokim zakresie napięć zasilania (przy zachowaniu wymaganego dla układów AMC warunku: VCC > VF + 0,15V) oraz w pełnym zakresie poziomów jasności zachowuje on stałą jasność oraz wysoką stabilność barwy światła.

Cyfrowa regulacja jasności zrealizowana w oparciu o szybką modulację szerokości impulsu (Fast-PWM) sprawia iż nawet w najniższych trybach nie widać migotania światła, a praca sterownika w pełnym zakresie jest całkowicie bezgłośna.

Sterownik posiada wbudowaną funkcję automatycznej kontroli stanu rozładowania akumulatora, którego parametry dobrane zostały dla ogniw typu Li-Ion, a które pasują również dla popularnego zasilania 3x NiCd/NiMH.

Elektroniczny układ na bieżąco monitoruje stan rozładowania ogniwa i gdy pozostała ilość energii spadnie poniżej ok. 5%, sterownik zacznie sygnalizować użytkownikowi kończącą się energię krótkimi ciemnymi błyskami powtarzanymi w odstępach co ok. 8 sekund.
Gdy pozostała ilość energii spadnie do wartości ~2,5% latarka automatycznie przełączy się w tryb oszczędny o obniżonej do ok. 4% wartości maksymalnej jasności, zachowując bieżący tryb pracy (np. ciągły, czy strobe itp.).
Jest to tzw. "moon-mode", czyli poziom awaryjny o obniżonej jasności, umożliwiający awaryjne działanie latarki jeszcze przez co najmniej 10-15 minut (wartość orientacyjna dla ogniw typu Li-Ion 18650 / 2500mAh).

Gdy napięcie akumulatora osiągnie minimalną, bezpieczną dla niego wartość (2,9V), sterownik zasygnalizuje użytkownikowi pełne rozładowanie 4-ma półsekundowymi mignięciami poczym wyłączy się. Mechanizm ten zabezpiecza akumulator przed szczególnie niebezpiecznym dla ogniw Li-Ion głębokim rozładowaniem, co istotnie wpływa na jego bezpieczeństwo, pojemność oraz długie i bezawaryjne użytkowanie. Sterownik ten może być zatem bezpiecznie stosowany z ogniwami bez wbudowanych zabezpieczeń (unprotected).

Sterownik ten udostępnia także sygnał cyfrowy informujący o parametrach jego pracy, który to może być bardzo prosto wykorzystany do dodatkowej sygnalizacji np. na "czerwonej" diodzie LED (małej mocy) bieżącego stanu zasilania oraz opcji specjalnych (trybu konfiguracji). Funkcja ta jest jedynie dodatkiem pomocnym w niektórych zastosowaniach i jej użycie nie jest niezbędne do prawidłowego działania sterownika.

Możliwe jest również sterowanie zmianami trybów oraz opcjami konfiguracji przy pomocy chwilowego przycisku astabilnego np. tzw. micro-switch`a.

Obie ostatnie funkcje powstały przede wszystkim z myślą o zastosowaniu w latarkach rowerowych, czołówkach jak i rozwiązaniach stacjonarnych, gdzie dodatkowa opcjonalna "czerwona" dioda sygnalizacyjna może być wyprowadzona w dowolnym dobrze widocznym dla użytkownika miejscu, a możliwość bardzo wygodnej zmiany trybów przy pomocy miniaturowego niskoprądowego przycisku zwiększy pewność i wygodę użytkowania.

Ufff... to tak mniej więcej chyba tyle.

: piątek 08 sty 2010, 19:48
autor: lennin
Musze powiedzieć że testuje właśnie ten sterownik. Wersja trzytrybowa bez wodotrysków. Co do samego zabezpieczenia aku przed nadmiernym rozładowaniem sprawa ma sie troche inaczej niz darek opisuje. Zapomina że przy wysokim poborze prądu napięcie akumulatora dość szybko sięga dna i przechodzi nam sterownik w tryb moon. W tym momencie pobór prądu jest tak mały ze po dwóch godzinach ciągle mamy światło. Ile to potrwa jeszcze nie wiem. Świeci i świeci i pewnie długo jeszcze zanim driverek odetnie zasilanie :) Gratuluje projektu. Jako ciekawostkę muszę dodać iż nie widać tak drażliwego dla poniektórych efektu migotania PWM. To ja idę bawić sie dalej :twisted:

: piątek 08 sty 2010, 20:10
autor: df
Pomiar napięcia akku jest jedynym wyznacznikiem jego stanu rozładowania.
Sterownik nie wie, czy niskie jego napięcie było spowodowane tym, że ktoś "zajeżdżał" akkusa wielkim prądem i po przekroczeniu dolnej granicy napięcia, przy którym następuje przejście w moon-mode pozwoli złapać mu nieco oddechu, czy też akumulator "ciurkał" sobie na niskim trybie i się "wyciurkał" do napięcia, które przełączyło go w moon-mode.

Z wykonanych pomiarów na realnym 18650 brałem pod uwagę najbardziej niekorzystny przypadek - właśnie takiego rozładowywania spokojnego, sytematycznego i do końca.
I przy przejściu do moon-mode sterownik pracował jeszcze przez ok. 18 minut po czym napięcie spadło do 2,9V i sterownik się zgodnie z oczekiwaniem wyłączył.

Testowałem różne algorytmy pomiaru napięcia i reakcji sterownika:
1. z powrotami
2. z zatrzaskiwaniem

Opcja 1 - z powrotami polegała na tym, że sterownik reagował na przekroczenia ustalonych progów napięć w obie strony (z nieznaczną histerezą). I wówczas przy silnym obciążeniu pojawiał się taki efekt, w którym przełączał się on w moon-mode i po chwili wracał do np. max`a i tak w kółko - było to trochę denerwujące, dlatego zrobiłem inaczej

Opcja 2 - z zatrzaskiwaniem polega na tym, że jeżeli sterownik osiągnie w danej chwili wartość najniższą napięcia, to sterownik wykona daną czynność (np. przejdzie w moon-mode), ale nie będzie wracał do stanu poprzedniego nawet jak napięcie po chwili pracy nieznacznie wzrośnie (przekraczając w górę dany próg). Świadomie podjąłem taką decyzję, aby uniknąć efektu opisanego w pkt.1 oraz nie robić za dużej pętli histerezy (bawiłem się ma dV=0,1V i co kilka sekund się przełączało).
Wyszedłem też z innego założenia, że bateria podczas pracy nie będzie raczej ładowana, a więc skoro jej napięcie spadło do danego poziomu, to znaczy, że ogniwo jest wystarczająco mocno rozładowane.

Natomiast w tym stanie (wymuszony moon-mode) dowolne kliknięcie np. pojedyncze kasuje chwilowe wskazania napięcia baterii i przywraca stan pierwotny trybu - a więc możesz samemu sobie "kliknąć" i wymusić na pewien czas ponownie dowolny tryb lub np. przełączyć się z max`a na coś pośredniego, co zaoszczędzi energii, a zarazem będzie czymś mocniejszym niż moon-mode.

Dodam, że po każdym kliknięciu zmiany stanu spowodowane pomiarem napięcia są blokowane na ok. 8 sekund - dzięki czemu przez te kilka sekund, nawet przy bardzo niskim napięciu można spokojnie zmienić tryb na bardziej oszczędny i dalej z latarki korzystać.

I tak też zrobiłem, gdyż uznałem, że tak właśnie będzie najlepiej.

: piątek 08 sty 2010, 20:28
autor: lennin
Widać mam mocno sfatygowane ogniwa. Poubijam inne zobaczymy jak to będzie :mrgreen:

: piątek 08 sty 2010, 20:34
autor: df
Oczywiście jest jeszcze trzecie rozwiązanie - sterowanie adaptatywne, w którym sterownik płynnie zdejmuje obciążenie z akkusa zmniejszając prąd, aż do osiągnięcia stabilności napięcia co najmniej na ustalonym granicznym poziomie.

Jednakże takie podejście powodowałoby rozłożone w czasie stopniowe przygasanie diody bez widocznego efektu zbliżającego się końca.

Moim założeniem było dociągnąć ile się da w trybie jaki chciał użytkownik i już na samych oparach przejść awaryjnie w moon-mode gdzie przez kilkanaście minut poświeci i przy minimalnej wartości napięcia zabezpieczyć ogniwo wyłączając cały sterownik: LED`a, AMC`ki oraz sam procesor. Nie ma nic gorszego, niż nagła i nieoczekiwana utrata światła, którą np. wymusi działające 0/1-kowo zabezpieczenie na akku protected.

Z myślą o CR123, ale i o tych którzy po prostu tak by chcieli niebawem będzie opcja konfiguracji pomiaru napięcia, którą będzie można sobie wedle uznania włączyć lub wyłączyć.

: piątek 08 sty 2010, 20:49
autor: Volt
Gratuluję, bardzo fajny, prosty sterownik. Ostatnio sam wziąłem się za wykonie sterownika na AMC7135, i czytając ten jakże rozległ... znaczy się dokładny :razz: opis, zauważyłem że korzystam z podobnych rozwiązań (min. 4mA, 9 stopni jasności) które w sumie są związane z wykorzystaniem tego akurat procka.
df pisze:chętnie podzielę się zdobytą wiedzą i doświadczeniem oraz opiszę rozwiązania techniczne zastosowane w tym projekcie
No to ja pierwszy: nie widzę na płytce kondensatora podtrzymującego napięcie procka... no chyba że to ten mały jest - jak wobec tego jest zrealizowana tu zmiana trybu? Program podejrzewam że pisany w assemblerze?

Pozdrawiam :wink:
Volt

: piątek 08 sty 2010, 21:12
autor: Darek
Witam.
Świetny sterowniczek.Szczególnie podoba mi się sygnalizacja stanu aku na dodatkowej diodzie.I teraz zasadnicze pytanie kiedy bedzie dostepny i czy bedzie?.
Pozdrawiam.

: piątek 08 sty 2010, 21:19
autor: df
Volt pisze:Gratuluję, bardzo fajny, prosty sterownik.
Dzięki :-)
Volt pisze:(min. 4mA, 9 stopni jasności) które w sumie są związane z wykorzystaniem tego akurat procka.
To nawet nie tyle zależy od samego procka, tylko od 8-mio bitowego timera, na którym sprzętowo realizowany jest PWM. A że w swych rozwiązaniach preferuję logarytmiczną skalę nastaw jasności tak jest po prostu najłatwiej. A rozwiązanie to stosowałem już w 2007 roku, więc też nowością to wielką nie jest ;-)
W części wersji df&cali było więcej poziomów, bo 13-cie i dużo niższy low schodzący do 1:4000 pełnej jasności. Tutaj uznałem, że 0,4% jest wystarczające i nie ma co sztucznie wchodzić w zakresy, z których i tak nikt nie będzie korzystał. To rozwiązanie z założenia miało być praktyczne i użyteczne, a nie stanowić mało praktyczny pokaz możliwości.
Volt pisze:No to ja pierwszy: nie widzę na płytce kondensatora podtrzymującego napięcie procka... no chyba że to ten mały jest - jak wobec tego jest zrealizowana tu zmiana trybu?
Bo tutaj sterowanie zrobione jest w zupełnie inny sposób niż w rozwiązaniach poprzednich.
Po pierwsze procesor bardzo mocno oszczędza prąd - wiele rzeczy robi sprzętowo, większość czasu "śpi" na idle`ach.
Po drugie, zaimplementowana tu logika oraz przechowywanie stanów pośrednich w pamięci pozwala na realizację tych wszystkich funkcji bez konieczności ciągłego utrzymywania procesora przy życiu na dużych pojemnościach podtrzymujących. Dzięki temu nie ma potrzeby wsadzania dużego kondensatora, zwłaszcza, że nie ma tam za wiele miejsca (cały sterownik razem z PCB ma wysokość niespełna 3,3mm).

Działa to tak:
1. procesor startuje (sprawdza kilka różnych rzeczy np. napięcie Vbatt przy starcie itp.) ustawia w pamięci znacznik stanu oznaczający "właśnie się podniosłem"
2. po założonym czasie np. 1/100 s pracy zmienia ten znacznik, co dla jego logiki będzie stanowiło informację "po podniesieniu pracowałem na tyle długo, że nie było klika"

I teraz jeżeli MCU się budzi i widzi stan "1" to wie, że był klik, jak "2" to że nie było klika.
Wielokliki realizuję tak samo, ale dodatkowo zliczam kolejne przejścia typu "1-go".
Proste i zarazem pomysłowe - prawda?

Robię to oczywiście bardzo, bardzo optymalnie, by minimalizować do niezbędnego minimum zapisy do pamięci (częstość, ich liczbę oraz ilość zmienianych danych) jak również stosuję dość zaawansowany algorytm rozpraszania zapisów w całej przestrzeni pamięci by optymalnie zużywać jej cykle zapisów.
Volt pisze:Program podejrzewam że pisany w assemblerze?
Tak - tak jak i wszystkie moje poprzednie, a dlaczego to w szczegółach wyjaśniałem w poprzednich projektach

P.S. Ponieważ zdradzam wszelkie tajniki, które z prawnego punktu widzenia stanowią moją własność intelektualną oraz do których dojścia poświęciłem naprawdę sporo czasu, wiedzy oraz których wypracowanie pochłonęło wymierne koszty, nie wyrażam zgody na ich odpłatne/komercyjne wykorzystywanie, dopuszczając je wyłącznie do zastosowań czysto amatorskich oraz zgodnych z zasadami GPL jednakże pod warunkiem każdorazowego podawania informacji o ich autorze oraz źródle.

: piątek 08 sty 2010, 21:33
autor: df
Darek pisze:Świetny sterowniczek.Szczególnie podoba mi się sygnalizacja stanu aku na dodatkowej diodzie.
Dzięki :-)
Darek pisze:I teraz zasadnicze pytanie kiedy bedzie dostepny i czy bedzie?.
Aktualnie mam kilka pojedynczych sztuk (1A), które mogę odstąpić - szczegóły na PW.

: piątek 08 sty 2010, 21:45
autor: lennin
Z tego co rozumiem procesor ma ograniczoną mozliwość włacz wyłacz czy tylko zmiany trybów? Jak jest przybliżona w kliknieciach(?) żywotność?

: piątek 08 sty 2010, 21:55
autor: Pyra
Witam
Jak zwykle "dałeś czadu".

Tak się akurat składa, że również mam na tapecie od jakiegoś czasu ten driverek, jednak chciałbym podzielić sterowany prąd na dwie wartości, o czym już pisałem.
Będzie to tak: przecinam ścieżkę sterującą AMCkami pomiędzy 5 i 6 nóżką Atmelka, następnie robię mostek pomiędzy nóżką 5 (PWM A) a odciętymi 2 szt AMC. Wtedy R5 pozostanie niestety zajęty przez sygnał PWMA
Mój projekt na razie zatrzymał się na rozwiązaniu detekcji klików, chcę to rozwiązać sprawdzaniem tempa spadku napięcia na zasilaniu procka. W związku z tym, że driverek posiada możliwość pomiaru napięcia zasilania (obniżonego o spadek na diodzie), chciałem je wykorzystać:
Primo - do kontroli stanu rozładowania akumulatora
Secundo - do detekcji klików poprzez wykrywanie odpowiednio szybkiego spadku napięcia. Niestety z braku czasu nie mogę na razie prowadzić doświadczeń, jedyną moją obawą, jest to, że podczas przejścia z Lo do Hi, układ może to wykryć jako klik :-|
Na razie odrzuciłem pierwotny pomysł, z wykryciem spadku napięcia poniżej pewnego progu, bo było by wtedy trudno zrealizować pomiar napięcia i zabezpieczenie przez nadmiernym rozładowaniem AKU.
Mój projekt przewiduje obniżenie trybu po wykryciu spadku napięcia poniżej zaprogramowanego progu, i tak oż do moon mode, który był by ustalony na stałe mimo braku takowego w skonfigurowanych jasnościach, bo chcę zrobić konfigurowaną przez użytkownika jasność trybów. Nad sygnalizacją wymuszonego obniżenia trybu jeszcze się nie zastanawiałem, choć jest ona w planach.
df pisze:Działa to tak:
1. procesor startuje (sprawdza kilka różnych rzeczy np. napięcie Vbatt przy starcie itp.) ustawia w pamięci znacznik stanu oznaczający "właśnie się podniosłem"
2. po założonym czasie np. 1/100 s pracy zmienia ten znacznik, co dla jego logiki będzie stanowiło informację "po podniesieniu pracowałem na tyle długo, że nie było klika"
Pamiętam tą dyskusję z EdiM, też chciałem to zastosować, ale ochrona pamięci przekracza moje możliwości umysłowe :oops:


Pozdrawiam

: piątek 08 sty 2010, 22:25
autor: df
lennin pisze:Z tego co rozumiem procesor ma ograniczoną mozliwość włacz wyłacz czy tylko zmiany trybów? Jak jest przybliżona w kliknieciach(?) żywotność?
Pewnie jak wszystko w życiu ma ograniczoną żywotność.

W tym rozwiązaniu przy kliknięciu lub wyłączeniu jest robiony zapis, a w pewnych sytuacjach max. 2 zapisy podczas normalnej pracy (od włączenia do wyłączenia). Cykle zapisu są jednak rozpraszane w całej pamięci, a zapisywane dane są silnie agregowane, przez co zmieniana jest nie tylko minimalna liczba bajtów, ale i bitów w ich obrębie (zerowanie bitów stanowi problem i tu także są stosowne specjalne zabiegi).

Deklarowana przez producenta (Atmel) żywotność pamięci w tych układach to min. 100.000 cykli kasowania/zapisu. W przyjętym rozwiązaniu rozpraszanie danych jest na całą 64 bajtową pamięć (przestrzeń 512 bitów).

A zatem przy najbardziej skrajnym przypadku, zakładającym, że każda komórka pamięci wytrzyma dokładnie tylko tyle ile deklaruje producent (100.000 cykli) i ani jednego więcej, to liczba pełnych włączeń i wyłączeń sterownika nie powodujących żadnych perturbacji wyniesie grubo ponad 3,2 miliona razy (ok. 6,4 miliona cykli).

Zakładając, że jesteś prawdziwym "kosmitą" i włączasz oraz wyłączasz latarkę raz na 5 minut przez 24 godziny na dobę, 7 dni w tygodniu, przez 365 dni w roku, to przy i tak mocno wyśrubowanych założeniach dojdziesz do gwarantowanej żywotności pamięci po... uwaga: ponad 30 latach! (3.200.000/288/365)

Celowo w wyliczeniach przyjąłem najbardziej niekorzystne wartości, aby pokazać Wam, że przy odpowiednim podejściu nie ma tu najmniejszego zagrożenia.

Jeżeli więc tyle klikasz i przeszkadza Ci to że po 30 latach w pamięci sterownika może pojawić się problem, to rzeczywiście zalecam rozwiązanie z dodatkową dużą pojemnością podtrzymującą - czyli takie jakie stosowałem we wcześniejszych projektach.

Dodam, że oprócz rozpraszania oprogramowanie weryfikuje wszystkie zapisy i gdy pojawi się problem pomija uszkodzoną komórkę pamięci i przeprowadza zapis na kolejnej sprawnej. Zaimplementowany przeze mnie mechanizm mapowania uszkodzonych komórek w dużym przybliżeniu przypomina nieco mechanizm mapowania bad-sectorów w dyskach twardych.

A zatem w rzeczywistości, zwłaszcza że stosuje zapisy bardzo bliskie (0xFF) - czyli minimalizuję liczbę zerowanych bitów, które pamięć zużywają, przy założeniu, że w takich warunkach nie każda komórka wytrzyma tylko i dokładnie tyle ile podaje producent, ale znacznie więcej oraz że jestem w stanie pomijać komórki faktycznie uszkodzone, ten czas jeszcze bardziej się zwiększa co najmniej kilkukrotnie w stosunku do obliczonej super skrajnej wartości.

Schodząc na ziemię - przy założeniu, że przeciętny użytkownik każdego dnia roku w ciągu każdej doby 10x włącza i wyłącza oraz 10x zmienia tryby, to przy założeniu minimalnej deklarowanej żywotności pamięci moje rozwiązanie będzie działać co najmniej: (6.400.000 / ( 2*(365*10) + 1*(365*10))) = 584,5 lat!

Mało?

Dodam, że Chińczycy nie robią żadnych z zabiegów, których arkana w szczegółach Wam opisuję, a zatem ich rozwiązanie jest co najmniej kilkaset razy bardziej narażone na taki przypadek.

Przekonałem?

: piątek 08 sty 2010, 22:47
autor: Gardol
Jestem laikiem elektronicznym ale funkcjonalności wygląda SUUUPER! Gratulacje!
Szczerze mówiąc myślałem o czymś podobnym jako driver i sterowanie do Ledlenser P7 (jest osobny temat) ale mam pytanie o zakres - piszesz do 6V, czyli jak to będzie wyglądało przy 4xAAA (bateria alkaliczna) no i 4xaku NiMH (niby coś koło 4.8V)?

Pozdrawiam, Paweł

: piątek 08 sty 2010, 22:48
autor: df
Pyra pisze:Jak zwykle "dałeś czadu".
Dzięki ;-)
Pyra pisze:W związku z tym, że driverek posiada możliwość pomiaru napięcia zasilania (obniżonego o spadek na diodzie), chciałem je wykorzystać: [...] do detekcji klików poprzez wykrywanie odpowiednio szybkiego spadku napięcia.
Testowałem to - możesz sobie od razu odpuścić.
Przy stosowanej wielkości <1uF nie zdążysz wykryć zaniku by bezpiecznie zrobić zapis do EE, a przy trybach sekwencyjnych (migaczach) będziesz miał fałszywe odczyty i nie zapanujesz nad tym - a przynajmniej mi się to nie udało.
Drugim rozwiązaniem które testowałem (i które także odrzuciłem) było połączenie pinu 5-go z bardzo blisko znajdującą się przelotką od +Vcc i badanie "wprost" stanu logicznego na zasilaniu. Przy tak małej pojemności jest za mało czasu na reakcję i trzeba zwiększać pojemność podtrzymującą - czyli stosować dobrze znane Ci rozwiązanie, na którym opierałem się w poprzednich projektach.
Pyra pisze:jedyną moją obawą, jest to, że podczas przejścia z Lo do Hi, układ może to wykryć jako klik :-|
Dokładnie tak.
Pyra pisze:Mój projekt przewiduje obniżenie trybu po wykryciu spadku napięcia poniżej zaprogramowanego progu, i tak oż do moon mode, który był by ustalony na stałe mimo braku takowego w skonfigurowanych jasnościach, bo chcę zrobić konfigurowaną przez użytkownika jasność trybów. Nad sygnalizacją wymuszonego obniżenia trybu jeszcze się nie zastanawiałem, choć jest ona w planach.
OK, z zainteresowaniem będę śledził Twoje próby.
Pyra pisze:Pamiętam tą dyskusję z EdiM, też chciałem to zastosować, ale ochrona pamięci przekracza moje możliwości umysłowe :oops:
Zgadza się pomysł tego rozwiązania nie jest nowością - na jego temat wielokrotnie dyskutowałem również w ramach tego forum i także z EdiMem, dlatego też pochyliłem się nad tematem i zadbałem o to by wszystko było zaprojektowane w sposób bezpieczny, architektonicznie najbardziej poprawny i nie robię z zastosowanych przeze mnie rozwiązań żadnych tajemnic, gdyż dobrze wiem, że nie ma w nich żadnych "kruczków" - i nie mam tu nic do ukrycia.

To jest tak samo jak z kryptografią - nie jest sztuką zrobić black-box`a i przekonywać na słowo, że jest on odporny na ataki oraz zmuszać łamaczy nie do odnajdywania algorytmicznie słabych punktów nieznanego (utajonego) rozwiązania oraz jego reverse-engeeneringu.
Prawdziwą sztuką jest pokazać rozwiązanie/algorytm w szczegółach, który sam się obroni użytą w nich myślą i nietuzinkowym rozwiązaniem - co w odniesieniu do analogi z dobrą kryptografią nie sprowadza się do "zaufania na słowo", lecz jest jawnym dowodem np. matematycznie uzasadniającym siłę danego rozwiązana na kryptoanalizę.

: piątek 08 sty 2010, 22:59
autor: df
Gardol pisze:funkcjonalności wygląda SUUUPER! Gratulacje!
Dziękuję :-)
Gardol pisze:mam pytanie o zakres - piszesz do 6V, czyli jak to będzie wyglądało przy 4xAAA (bateria alkaliczna) no i 4xaku NiMH (niby coś koło 4.8V)?
4xAAA (bateria alkaliczna) to 4x1,5V = 6V, a zatem jest OK.
4xaku NiMH to 4x1,2V w porywach do 4x1,5V (tuż po skrajnym naładowaniu) = 4,8-6V, a zatem także jest OK.