W poprzednim odcinku przedstawiłem pomysł na urządzenie. Dla przypomnienia, projektuję układ synchronizujący lampę błyskową i aparat Sony A5100 z wykorzystaniem gniazda wielofunkcyjnego tego aparatu. Układ będzie działać też jako zewnętrzny spust dla aparatu z licznymi, dodatkowymi funkcjami. Ze wstępnego śledztwa opisanego w poprzednim odcinku wynika, iż przycisk spustu w aparacie i przycisk spustu zewnętrznego są połączone równolegle, co bardzo ułatwia dwukierunkową synchronizację. Ale to tylko jeden element tego projektu. Zatem co jeszcze musimy sobie wykoncypować? Zróbmy listę:
1. Jak sterować lampą błyskową?
2. Jak powinien wyglądać interfejs użytkownika?
3. Jak zrealizować zasilanie?
4. Jak połączyć układ z aparatem?
5. Jak programować czasy opóźnień?
6. Jak programować funkcję timelapse?
7. Jak wykonać fotocelę?
Tymi, i innymi elementami naszego układu zajmiemy się w ramach wstępnego projektu, wybierzemy najkorzystniejsze rozwiązania układowe i zaczniemy dobierać elementy. Decyzje tu popełnione zaważą na ostatecznym kształcie gotowego urządzenia - mój wewnętrzny księgowy nie pozwoli na budowę kilkunastu prototypów by zaprojektować urządzenie iteracyjnie. Zewnętrzny księgowy, czyli moja żona, nie pozwoli mi też wydać na ten projekt więcej jak 100-200 złotych. Zatem już wstępny projekt musi być w miarę przyzwoity, by później poprawiać w nim jak najmniej.
Projektowanie układów jako zabawa klockami
Jeśli weźmiemy do ręki schematy kilku tranzystorowych wzmacniaczy audio, łatwo zauważymy, iż zasadniczo składają się z łatwych do zidentyfikowania bloków. Mamy parę różnicową na wejściu, stopień wzmacniający napięcie (a przy okazji sterujący następnym stopniem) i stopień wzmacniający prąd. Tranzystory mogą być zgoła odmienne, inne będą też wartości pozostałych elementów, inne moce, napięcia zasilania, a nawet dodatkowe układy, jak zabezpieczenia przeciwzwarciowe, przeciwprzeciążeniowe i inne. Większość wzmacniaczy operacyjnych składa się z dokładnie takich samych bloków. Podobnie jest z wieloma innymi układami.
Dlaczego?
Odpowiedź jest prosta: przez dziesięciolecia istnienia elektroniki różni inżynierowie opracowali wszystkie możliwe rozwiązania układowe, opisali je wzorami przydatnymi przy projektowaniu i pokazali je światu. Konstrukcje wszystkich wzmacniaczy tranzystorowych oraz znakomitej większości wzmacniaczy operacyjnych zostały opracowane ponad sto lat temu, gdy pionierzy pracowali jeszcze z triodami i innymi lampami elektronowymi. Pierwsze wzmacniacze operacyjne były modułami lampowymi stosowanymi w analogowych komputerach i systemach kontrolnych.
Projektanci elektroniki z zasady nie muszą niczego wymyślać od zera. Muszą za to znać dziesiątki, setki, czy wręcz tysiące gotowych układów. Wiedzieć, co one robią i jak dobrać w nich wartości elementów. Potem z tych układowych klocków projektanci budują nowe urządzenia. Nawet najbardziej zaawansowany układ scalony, na przykład GPU w najnowszych modelach kart graficznych składa się z "klocków". Znajdziemy w nim zaawansowane jednostki obliczeniowe, bufory, generatory sygnałów zegarowych, elementy sterujące i synchronizujące pracę, układy zarządzania zasilaniem i inne. Większość tych złożonych struktur składa się z pojedynczych bramek logicznych, komórek pamięci, a czasami prostych analogowych układów tranzystorowych. Ktoś zaprojektował te pojedyncze klocki, ktoś inny poskładał je w bardziej złożone struktury, ktoś te struktury ułożył w plan nowego procesora, a na koniec program napisany przez wielu innych "ktosiów" wygenerował i przetestował fizyczną strukturę nowego układu, który potem fabryka zaczęła produkować.
Co z tego wynika dla nas?
Ponieważ wszystko już zostało wymyślone, to musimy jedynie poszukać i wybrać potrzebne nam "klocki", złożyć je ze sobą i ewentualnie podobierać niektóre wartości elementów. A gdzie znajdziemy te klocki? W notach katalogowych, notach aplikacyjnych czy na schematach różnych układów i urządzeń. Wiele z tych "klocków" to układy tak podstawowe, że rysuje się je z pamięci. Zajmijmy się zatem wyborem tych "klocków" i układaniem ich w coś sensownego.
Nasze "klocki"
Zasilanie
Tutaj pójdziemy wręcz na totalną łatwiznę i użyjemy gotowego modułu. Konkretnie to modułu ładowarki Li-Ion/Li-Po na układzie TP4056, do kupienia na znanym portalu aukcyjnym za 3-6PLN. Ogniw Li-Ion z laptopów mam ponad setkę, a i na znanym portalu kosztują pojedyncze złotówki. Wybierzemy model z wbudowanym zabezpieczeniem dla ogniwa, i cały moduł po prostu przylutujemy do płytki naszego urządzenia. Rozwiązania w tym stylu są spotykane od lat, tylko zwykle dotyczą modułów radiowych ISM, ZigBee czy Wi-Fi. Producenci decydują się na takie rozwiązania, jeśli idzie o moduły radiowe wszelkiej maści, bo unikają w ten sposób zdobywania certyfikatów zgodności FCC i CE - moduły są już certyfikowane.
Poza samym modułem zasilania przydałoby się nam zastanowić nad tym, czy chcemy zasilać całość bezpośrednio z ogniwa, czy też chcemy podnieść lub obniżyć napięcie. Podnoszenie napięcia wymaga albo dołożenia przetwornicy typu Boost, albo zaprojektowania własnej przetwornicy. Napięcie obniżyć zaś można albo regulatorem napięcia LDO, albo przetwornicą typu Buck. Możemy też zapomnieć o regulacji napięcia, bo mikrokontroler i inne układy mają dość szeroki zakres napięć zasilania i niski pobór prądu. Co więcej, moduł ładowarki odetnie zasilanie, gdy napięcie ogniwa spadnie do 2,5V, minimalne napięcie mikrokontrolerów PIC1xF wynosi typowo 2,3V. Ponieważ mikrokontrolery mają system detekcji zbyt niskiego napięcia zasilania, i możemy próg jego zadziałania ustawić na, powiedzmy 2,85V, oraz aktywować go z poziomu programu dopiero po rozpoczęciu jego pracy, to w łatwy sposób da się zaimplenemtować sygnalizację stanu zbyt niskiego napięcia baterii. Dokładnie tę procedurę omówię w części poświęconej tworzeniu programu.
Dodatkowo musimy dodać kondensatory odsprzęgające zasilanie mikrokontrolera oraz obwód POR/BOR, który znajdziemy w nocie katalogowej. Dodany został też sprzętowy włącznik zasilania w nietypowej konfiguracji, bo pozwalający "obejść" zasilanie bateryjne, Będzie to wyjaśnione niżej. Schemat tego "klocka" będzie wyglądał mniej-więcej tak:
Sterowanie lampą błyskową
W czasach aparatów analogowych z mechaniczną migawką zewnętrzna lampa błyskowa była wyzwalana przez mechaniczne zwarcie dwóch styków. Zwykle lampa miała albo tzw. "gorącą stopę", albo gniazdko (w jednym z wielu standardów) do podłączenia kabla synchronizacyjnego z migawką. Pierwszą myślą początkującego elektronika jest wstawienie w tym miejscu przekaźnika. Niestety, to rozwiązanie, choć proste, ma dość poważną wadę: jest wolne. Typowy, tani przekaźnik potrzebuje od 5 do 20ms by się "przełączyć". Szybkie przekaźniki skracają ten czas do ~100µs. Aparat Sony A5100 ma minimalny czas migawki 1/8000s, czyli 125µs, to całkowicie eliminuje typowe, tanie przekaźniki, i mocno ogranicza użycie przekaźnika szybkiego. Ktoś jednak pewnie wytknie mi: "Hola, hola! Czy w poprzedniej części nie napisałeś, że od wyzwolenia migawki do zrobienia zdjęcia mija minimum 21ms? To oznacza, że nawet zwykły przekaźnik da radę!". Dałby, gdyby nie jeden problem: przekaźnik przekaźnikowi nierówny. Jeden załączy lampę w 5ms, drugi w 20ms, szybki zrobi to w 100µs, a inny w 250µs. Każdy docelowy użytkownik tego układu by musiał sprawdzić, jak zachowa się jego konkretny przekaźnik, bo rozrzut tego parametru zależy nie tylko od marki i modelu, ale też różni się między poszczególnymi egzemplarzami. Ponadto przekaźniki są jeszcze duże i prądożerne, a nasze urządzenie jest zasilane z akumulatora.
"No to może tranzystor?" ktoś zapyta nieśmiało. No, tylko problem w tym, ze napięcie na wejściu wyzwalania lampy może wynosić kilkaset woltów. Tranzystor musi to znieść. No ale tranzystor na Vce 1,5kV kosztuje w znanej hurtowni niecałe 8,5PLN. Tylko ta obudowa taka duża. Ale jest jeden problem: co jeśli trafimy na lampę o odwrotnej polaryzacji i nagle Vce wyniesie nie 200-600V, a -200V? Tranzystor "wybierze papieża", a przebicie do bazy może załatwić też resztę układu. Potrzebny jest więc element, któremu nie robi różnicy polaryzacja prądu, ale który działa szybciej i bardziej przewidywalnie, niż przekaźnik.
Takim elementem jest triak. W naszym przypadku sensownie będzie wykorzystać optotriak, czyli triak z izolacją optyczną. Zdecydowałem się wybrać dość tani układ MOC3052, ale można zastosować inne, podobne. Jedna uwaga: optotriak powinien nie przełączać w zerze. Inaczej pisząc taki MOC3063 już nie pasuje. Sam układ jest banalny w użyciu: katodę diody podłączamy do masy, anodę przez rezystor do wyjścia mikrokontrolera, zaś oba piny triaka podłączamy do wyjścia sterującego lampą błyskową. A jaką wartość powinien mieć rezystor ograniczający prąd diody? Wg. noty katalogowej prąd Ift gwarantujący zadziałanie triaka powinien mieć wartość przynajmniej 10mA. Powinniśmy jednak uwzględnić też starzenie się optotriaka oraz wpływ temperatury, dlatego przyjmijmy prąd 20mA. By policzyć wartość rezystora należy od napięcia zasilania odjąć spadek napięcia na diodzie, i wynik podzielić przez pożądany prąd. Spadek napięcia na diodzie wynosi 1,18V, napięcie zasilania zaś 2,85-4,2V. Policzmy zatem wartość rezystora oraz prąd przy maksymalnym napięciu zasilania:
(2,85V - 1,18V) / 20mA = 83,5Ω
(4,2V - 1,18V) / 83,5Ω = 36,2mA
To trochę za dużo dla wyjścia mikrokontrolera, które ma wydajność prądową na poziomie 25mA. Policzmy zatem w drugą stronę:
(4,2V - 1,18V) / 20mA = 151Ω
(2,85V - 1,18V) / 151Ω = 11,1mA
Teraz z kolei prąd jest ciut za niski przy niskim napięciu. Policzmy dla 24mA:
(4,2V - 1,18V) / 24mA = 125,7Ω
(2,85V - 1,18V) / 125,7Ω = 13,3mA
Zaokrąglijmy teraz do najbliższej wartości w szeregu:
(4,2V - 1,18V) / 120Ω = 25,2mA
(2,85V - 1,18V) / 120Ω = 13,8mA
Nie do końca to lubię, ale jedyną opcją na zwiększenie prądu wyzwalającego optotriak będzie dodanie bufora na tranzystorze. Użycie tranzystora doda nam dodatkowy spadek napięcia 0,7V na złączu kolektor-emiter. Rezystor diody będzie musiał mieć wartość 82Ω, co da nam pożądany prąd przy niskim napięciu.
Przy okazji możemy albo dodać drugi optotriak równolegle z pierwszym, albo jako niezależny kanał. Ba, możemy od razu dodać wyjście z transoptorem dla dodatkowych układów zewnętrznych. W roli transoptora dla dodatkowego wyjścia możemy użyć układu PC817, lub któregoś z jego licznych klonów. Ten układ powszechnie występuje w przetwornicach impulsowych, w tym w zasilaczach ATX, w parze z programowalną diodą Zenera TL431. Spadek napięcia na diodzie w PC817 może wynieść 1,4V, prąd diody ustalmy na 30mA:
(2,85V - 1,4V) / 30mA = 48,3Ω
(4,2V - 1,4V) / 48,3Ω = 58mA
Troszkę za dużo. Liczmy zatem 45mA przy maksymalnym napięciu zasilania:
(4,2V - 1,4V) / 45mA = 62,2Ω
(2,85V - 1,4V) / 62,2Ω = 23,2mA
Najbliżej w szeregu jest 62Ω, więc będzie dobrze. No ale nadal mamy spadek Vce na tranzystorze, który powinniśmy uwzględnić. Rezystor powinien mieć wartość 47Ω, ale na razie nie będziemy robić tej zmiany na schemacie Dodajmy też rezystor 100Ω by zabezpieczyć tranzystor wewnątrz PC817. Schemat będzie wyglądał tak:
Łączność z aparatem i wejście sterowania zewnętrznego
To prościzna, po prostu podłączymy przewód wyzwalający bezpośrednio do mikrokontrolera. Mikrokontroler ma wbudowane zabezpieczenia dla pinów, zresztą przypuszczam, iż rezystory podciągające po stronie aparatu mają wartość kilkuset Ω do kilkunastu kΩ. Jako wejścia piny w PICach i nie tylko mają dość wysoką impedancję, jako wyjścia tolerują prądy do 25mA, więc tutaj problemów nie będzie.
Wejście zewnętrznego sterowania rozwiążemy z pomocą PC817. Aha, jako gniazd wszędzie będziemy używać standardowych gniazd TRS 3,5mm w wersjach mono i stereo. Schemat wygląda tak:
Fotocela
Jest to w sumie najtrudniejszy aspekt całego projektu, bo elementy światłoczułe nie występują zbyt często w praktycznych układach, a jak się pojawiają, to raczej w formie prostych detektorów ciemno/jasno. Nam jednak potrzebny jest detektor, który odróżni normalne warunki oświetleniowe od nagłego błysku. Częściową pomocą w tym zadaniu może być kolorowy filtr na detektorze, ale i tak będzie potrzebny jakiś interfejs.
W roli detektora będzie pracować popularna fotodioda PIN BPW34. Dioda pracuje w kierunku zaporowym, a jej prąd upływu zależy od jasności i zmienia się w zakresie od 2nA do 100µA. Standardowym układem współpracującym z fotodiodą PIN jest wzmacniacz operacyjny. Moim zdaniem to przerost formy nam niepotrzebny, dlatego zdecydowałem się na użycie tranzystora PNP. Tranzystor ten zaczyna przewodzić wtedy, gdy prąd Ib zaczyna wypływać z bazy, czyli odwrotnie niż w przypadku tranzystora NPN. Prąd przepływający między emiterem, a kolektorem tranzystora zależy od prądu wypływającego z bazy pomnożonego przez wzmocnienie tranzystora. Dodając rezystor w kolektorze tranzystora możemy łatwo zmienić prąd diody na napięcie, które da się zmierzyć mikrokontrolerem. Jeden problem: tranzystory tego samego typu i z tej samej partii mogą mieć skrajne wartości wzmocnienia prądowego. Dla BC327-40 jest to na przykład wartość od 250 do 630. Policzmy zatem prąd płynący przez złącze emiter-kolektor dla skrajnych przypadków prądu diody PIN Ira i wzmocnienia tranzystora β:
2nA * 250 = 500nA
2nA * 630 = 1,25µA
100µA = 250 = 25mA
100µA * 630 = 63mA
Nie za bardzo mi się to podoba. Optymalnie by było, gdyby wzmocnienie prądowe tranzystora zawsze wynosiło 100, niezależnie od samego tranzystora. Oczywiście można taki układ zaprojektować i obliczyć dla konkretnego napięcia zasilania, ale przy zakresie od 2,85V do 4,2V parametry mogą się za bardzo "rozjeżdżać".
Z drugiej strony nie musimy znać konkretnej wartości jasności, zwłaszcza że filtr na diodzie PIN ją ograniczy. Wystarczy tylko, jak wykryjemy nagły błysk, czyli skok prądu diody PIN. Dobrze by było też, by ten detektor był niezależny od napięcia zasilania, czyli by miał napięcie niższe niż napięcie zasilania. Wykorzystamy do tego kolejny element z zasilaczy impulsowych, czyli regulowaną diodę Zenera TL431. Wartość jasności będzie mierzona za pomocą modułu ADC z częstotliwością kilku do kilkudziesięciu kHz. Jeśli wartość bieżącego pomiaru będzie znacząco wyższa od wartości średniej, to błysk zostanie zarejestrowany. Schemat tego "klocka" na razie prezentuje się tak:
Interfejs do konfiguracji opóźnień
Tu będzie bardzo ambitnie, bo użyjemy interfejsu USB, i to bez żadnych "przelotek" USB<>UART. Wykorzystamy bowiem mikrokontroler ze sprzętową obsługą USB i skonfigurujemy go jako emulator interfejsu szeregowego. W trybie łączności USB główny program będzie wyłączony. Przy okazji gniazdko USB posłuży też do ładowania akumulatora. "Obejście" baterii zostało dodane dlatego, iż protokół USB wymaga napięcia 3,3V, więc jak bateria jest poniżej tego napięcia, komunikacja USB nie będzie poprawnie działać. Nie jest to zbyt eleganckie rozwiązanie, ale nie chce mi się dokładać kolejnych układów zabezpieczeń baterii. Schemat jest prosty:
Interfejs użytkownika
Tu skopiuję rozwiązanie z innego urządzenia tego typu, czyli SmartTrig. Użyję zadajnika kodu HEX/BCD. A dokładniej to dwóch zadajników S-1130 firmy Copal. Jeden będzie odpowiadał za wybór trybu pracy, drugi za odstępy czasu dla funkcji Timelapse. Do tego jeszcze dojdą dwa przyciski: AF i wyzwalacza/startu Timelapse. Dodamy do tego dwie diody LED do sygnalizacji stanu urządzenia. Możemy całość zrealizować z użyciem multipleksowania, albo bez. Opcja pierwsza wymaga dodatkowych elementów, ale oszczędza piny. Rozważmy obie wersje. Schemat z multipleksowaniem wygląda tak:
Wersja bez multipleksowania wygląda tak:
Wersja z multipleksowaniem jest bardziej "oszczędna", a diody 1N4148 użyte na schemacie stanowią tak znikomy koszt całości, że tę właśnie wersję użyjemy. Debouncing drgających styków zrealizujemy programowo.
Mikrokontroler
O wyborze rodziny mikrokontrolerów decyduje głównie własne doświadczenie i posiadane narzędzia. Większość hobbystów w Polsce miało do czynienia z mikrokontrolerami AVR, za granicą z kolei przez lata dominowały mikrokontrolery PIC. Teraz większość używa takich platform, jak Arduino czy ESP8266/ESP32. Ja wybrałem rodzinę Microchip PIC, bo z nią miałem najwięcej do czynienia, no i mam też programator/debugger PICKit3. Dla fanów innych platform konwersja z PIC albo napisanie całości od zera nie powinno nastręczać problemów, a może się okazać dobrym ćwiczeniem. O tym będzie dużo więcej w części poświęconej programowi.
O wyborze konkretnego mikrokontrolera decydują następujące czynniki:
- liczba pinów;
- sprzętowa obsługa USB;
- cena;
- wielkość pamięci programu i SRAM.
To ile pinów potrzebujemy? Zasilanie i reset/POR/BOR zabierze trzy piny, USB zabierze kolejne trzy. Dwa piny na łączność z aparatem, dwa dla lamp błyskowych, jeden na dodatkowe wejście i jeden na fotocelę. To łącznie dwanaście pinów. Na interfejs potrzebne będzie między osiem, a dwanaście pinów, czyli łącznie 20-24 piny. Kryteria te spełniają mikrokontrolery:
PIC16F1459;
PIC18F1xK50;
PIC18F2xK50;
PIC18F2455;
PIC18F2550.
Pośród tych układów najkorzystniej wypada PIC18F25K50. Cenę ma dość wysoką, bo ponad 17 złotych, ale w zamian oferuje 32kB pamięci programu i 2kB pamięci SRAM i 256B pamięci EEPROM. Część pinów generuje przerwania w razie zmiany, a część ma wbudowane rezystory podciągające. Znajdziemy też w tym układzie tryby niskiego poboru prądu (XLP), moduły ADC, DAC, CTMU (do obsługi klawiszy dotykowych), timery, interfejsy szeregowe i inne moduły, które można włączać i wyłączać w miarę potrzeb i oszczędności zasilania. Warto wspomnieć o rozbudowanym systemie zegarowym pozwalającym na zmianę prędkości układu "w locie", co też wpływa na pobór prądu.
Za PIC18F25K50 przemawiają jeszcze dwie rzeczy: dodatkowe piny przydadzą się w razie rozbudowy układu, a do tego mam starszego brata, czyli PIC18F45K50 w formie płytki prototypowej.
Podsumowanie
Wstępny projekt wygląda tak:
Projekt ten jednak może ulec zmianie, zwłaszcza jeśli macie jakieś sugestie dodatkowych funkcji. Myślę, że na początek jednak tyle wystarczy.
W następnym odcinku zajmiemy się symulowaniem obwodu fotoceli, rozważaniami na temat funkcji, które chcemy mieć w tym wyzwalaczu oraz wstępnym projektem płytki drukowanej. Tymczasem zapraszam do komentowania oraz sugerowania zmian i poprawek.
1. Jak sterować lampą błyskową?
2. Jak powinien wyglądać interfejs użytkownika?
3. Jak zrealizować zasilanie?
4. Jak połączyć układ z aparatem?
5. Jak programować czasy opóźnień?
6. Jak programować funkcję timelapse?
7. Jak wykonać fotocelę?
Tymi, i innymi elementami naszego układu zajmiemy się w ramach wstępnego projektu, wybierzemy najkorzystniejsze rozwiązania układowe i zaczniemy dobierać elementy. Decyzje tu popełnione zaważą na ostatecznym kształcie gotowego urządzenia - mój wewnętrzny księgowy nie pozwoli na budowę kilkunastu prototypów by zaprojektować urządzenie iteracyjnie. Zewnętrzny księgowy, czyli moja żona, nie pozwoli mi też wydać na ten projekt więcej jak 100-200 złotych. Zatem już wstępny projekt musi być w miarę przyzwoity, by później poprawiać w nim jak najmniej.
Projektowanie układów jako zabawa klockami
Jeśli weźmiemy do ręki schematy kilku tranzystorowych wzmacniaczy audio, łatwo zauważymy, iż zasadniczo składają się z łatwych do zidentyfikowania bloków. Mamy parę różnicową na wejściu, stopień wzmacniający napięcie (a przy okazji sterujący następnym stopniem) i stopień wzmacniający prąd. Tranzystory mogą być zgoła odmienne, inne będą też wartości pozostałych elementów, inne moce, napięcia zasilania, a nawet dodatkowe układy, jak zabezpieczenia przeciwzwarciowe, przeciwprzeciążeniowe i inne. Większość wzmacniaczy operacyjnych składa się z dokładnie takich samych bloków. Podobnie jest z wieloma innymi układami.
Dlaczego?
Odpowiedź jest prosta: przez dziesięciolecia istnienia elektroniki różni inżynierowie opracowali wszystkie możliwe rozwiązania układowe, opisali je wzorami przydatnymi przy projektowaniu i pokazali je światu. Konstrukcje wszystkich wzmacniaczy tranzystorowych oraz znakomitej większości wzmacniaczy operacyjnych zostały opracowane ponad sto lat temu, gdy pionierzy pracowali jeszcze z triodami i innymi lampami elektronowymi. Pierwsze wzmacniacze operacyjne były modułami lampowymi stosowanymi w analogowych komputerach i systemach kontrolnych.
Projektanci elektroniki z zasady nie muszą niczego wymyślać od zera. Muszą za to znać dziesiątki, setki, czy wręcz tysiące gotowych układów. Wiedzieć, co one robią i jak dobrać w nich wartości elementów. Potem z tych układowych klocków projektanci budują nowe urządzenia. Nawet najbardziej zaawansowany układ scalony, na przykład GPU w najnowszych modelach kart graficznych składa się z "klocków". Znajdziemy w nim zaawansowane jednostki obliczeniowe, bufory, generatory sygnałów zegarowych, elementy sterujące i synchronizujące pracę, układy zarządzania zasilaniem i inne. Większość tych złożonych struktur składa się z pojedynczych bramek logicznych, komórek pamięci, a czasami prostych analogowych układów tranzystorowych. Ktoś zaprojektował te pojedyncze klocki, ktoś inny poskładał je w bardziej złożone struktury, ktoś te struktury ułożył w plan nowego procesora, a na koniec program napisany przez wielu innych "ktosiów" wygenerował i przetestował fizyczną strukturę nowego układu, który potem fabryka zaczęła produkować.
Co z tego wynika dla nas?
Ponieważ wszystko już zostało wymyślone, to musimy jedynie poszukać i wybrać potrzebne nam "klocki", złożyć je ze sobą i ewentualnie podobierać niektóre wartości elementów. A gdzie znajdziemy te klocki? W notach katalogowych, notach aplikacyjnych czy na schematach różnych układów i urządzeń. Wiele z tych "klocków" to układy tak podstawowe, że rysuje się je z pamięci. Zajmijmy się zatem wyborem tych "klocków" i układaniem ich w coś sensownego.
Nasze "klocki"
Zasilanie
Tutaj pójdziemy wręcz na totalną łatwiznę i użyjemy gotowego modułu. Konkretnie to modułu ładowarki Li-Ion/Li-Po na układzie TP4056, do kupienia na znanym portalu aukcyjnym za 3-6PLN. Ogniw Li-Ion z laptopów mam ponad setkę, a i na znanym portalu kosztują pojedyncze złotówki. Wybierzemy model z wbudowanym zabezpieczeniem dla ogniwa, i cały moduł po prostu przylutujemy do płytki naszego urządzenia. Rozwiązania w tym stylu są spotykane od lat, tylko zwykle dotyczą modułów radiowych ISM, ZigBee czy Wi-Fi. Producenci decydują się na takie rozwiązania, jeśli idzie o moduły radiowe wszelkiej maści, bo unikają w ten sposób zdobywania certyfikatów zgodności FCC i CE - moduły są już certyfikowane.
Poza samym modułem zasilania przydałoby się nam zastanowić nad tym, czy chcemy zasilać całość bezpośrednio z ogniwa, czy też chcemy podnieść lub obniżyć napięcie. Podnoszenie napięcia wymaga albo dołożenia przetwornicy typu Boost, albo zaprojektowania własnej przetwornicy. Napięcie obniżyć zaś można albo regulatorem napięcia LDO, albo przetwornicą typu Buck. Możemy też zapomnieć o regulacji napięcia, bo mikrokontroler i inne układy mają dość szeroki zakres napięć zasilania i niski pobór prądu. Co więcej, moduł ładowarki odetnie zasilanie, gdy napięcie ogniwa spadnie do 2,5V, minimalne napięcie mikrokontrolerów PIC1xF wynosi typowo 2,3V. Ponieważ mikrokontrolery mają system detekcji zbyt niskiego napięcia zasilania, i możemy próg jego zadziałania ustawić na, powiedzmy 2,85V, oraz aktywować go z poziomu programu dopiero po rozpoczęciu jego pracy, to w łatwy sposób da się zaimplenemtować sygnalizację stanu zbyt niskiego napięcia baterii. Dokładnie tę procedurę omówię w części poświęconej tworzeniu programu.
Dodatkowo musimy dodać kondensatory odsprzęgające zasilanie mikrokontrolera oraz obwód POR/BOR, który znajdziemy w nocie katalogowej. Dodany został też sprzętowy włącznik zasilania w nietypowej konfiguracji, bo pozwalający "obejść" zasilanie bateryjne, Będzie to wyjaśnione niżej. Schemat tego "klocka" będzie wyglądał mniej-więcej tak:
Sterowanie lampą błyskową
W czasach aparatów analogowych z mechaniczną migawką zewnętrzna lampa błyskowa była wyzwalana przez mechaniczne zwarcie dwóch styków. Zwykle lampa miała albo tzw. "gorącą stopę", albo gniazdko (w jednym z wielu standardów) do podłączenia kabla synchronizacyjnego z migawką. Pierwszą myślą początkującego elektronika jest wstawienie w tym miejscu przekaźnika. Niestety, to rozwiązanie, choć proste, ma dość poważną wadę: jest wolne. Typowy, tani przekaźnik potrzebuje od 5 do 20ms by się "przełączyć". Szybkie przekaźniki skracają ten czas do ~100µs. Aparat Sony A5100 ma minimalny czas migawki 1/8000s, czyli 125µs, to całkowicie eliminuje typowe, tanie przekaźniki, i mocno ogranicza użycie przekaźnika szybkiego. Ktoś jednak pewnie wytknie mi: "Hola, hola! Czy w poprzedniej części nie napisałeś, że od wyzwolenia migawki do zrobienia zdjęcia mija minimum 21ms? To oznacza, że nawet zwykły przekaźnik da radę!". Dałby, gdyby nie jeden problem: przekaźnik przekaźnikowi nierówny. Jeden załączy lampę w 5ms, drugi w 20ms, szybki zrobi to w 100µs, a inny w 250µs. Każdy docelowy użytkownik tego układu by musiał sprawdzić, jak zachowa się jego konkretny przekaźnik, bo rozrzut tego parametru zależy nie tylko od marki i modelu, ale też różni się między poszczególnymi egzemplarzami. Ponadto przekaźniki są jeszcze duże i prądożerne, a nasze urządzenie jest zasilane z akumulatora.
"No to może tranzystor?" ktoś zapyta nieśmiało. No, tylko problem w tym, ze napięcie na wejściu wyzwalania lampy może wynosić kilkaset woltów. Tranzystor musi to znieść. No ale tranzystor na Vce 1,5kV kosztuje w znanej hurtowni niecałe 8,5PLN. Tylko ta obudowa taka duża. Ale jest jeden problem: co jeśli trafimy na lampę o odwrotnej polaryzacji i nagle Vce wyniesie nie 200-600V, a -200V? Tranzystor "wybierze papieża", a przebicie do bazy może załatwić też resztę układu. Potrzebny jest więc element, któremu nie robi różnicy polaryzacja prądu, ale który działa szybciej i bardziej przewidywalnie, niż przekaźnik.
Takim elementem jest triak. W naszym przypadku sensownie będzie wykorzystać optotriak, czyli triak z izolacją optyczną. Zdecydowałem się wybrać dość tani układ MOC3052, ale można zastosować inne, podobne. Jedna uwaga: optotriak powinien nie przełączać w zerze. Inaczej pisząc taki MOC3063 już nie pasuje. Sam układ jest banalny w użyciu: katodę diody podłączamy do masy, anodę przez rezystor do wyjścia mikrokontrolera, zaś oba piny triaka podłączamy do wyjścia sterującego lampą błyskową. A jaką wartość powinien mieć rezystor ograniczający prąd diody? Wg. noty katalogowej prąd Ift gwarantujący zadziałanie triaka powinien mieć wartość przynajmniej 10mA. Powinniśmy jednak uwzględnić też starzenie się optotriaka oraz wpływ temperatury, dlatego przyjmijmy prąd 20mA. By policzyć wartość rezystora należy od napięcia zasilania odjąć spadek napięcia na diodzie, i wynik podzielić przez pożądany prąd. Spadek napięcia na diodzie wynosi 1,18V, napięcie zasilania zaś 2,85-4,2V. Policzmy zatem wartość rezystora oraz prąd przy maksymalnym napięciu zasilania:
(2,85V - 1,18V) / 20mA = 83,5Ω
(4,2V - 1,18V) / 83,5Ω = 36,2mA
To trochę za dużo dla wyjścia mikrokontrolera, które ma wydajność prądową na poziomie 25mA. Policzmy zatem w drugą stronę:
(4,2V - 1,18V) / 20mA = 151Ω
(2,85V - 1,18V) / 151Ω = 11,1mA
Teraz z kolei prąd jest ciut za niski przy niskim napięciu. Policzmy dla 24mA:
(4,2V - 1,18V) / 24mA = 125,7Ω
(2,85V - 1,18V) / 125,7Ω = 13,3mA
Zaokrąglijmy teraz do najbliższej wartości w szeregu:
(4,2V - 1,18V) / 120Ω = 25,2mA
(2,85V - 1,18V) / 120Ω = 13,8mA
Nie do końca to lubię, ale jedyną opcją na zwiększenie prądu wyzwalającego optotriak będzie dodanie bufora na tranzystorze. Użycie tranzystora doda nam dodatkowy spadek napięcia 0,7V na złączu kolektor-emiter. Rezystor diody będzie musiał mieć wartość 82Ω, co da nam pożądany prąd przy niskim napięciu.
Przy okazji możemy albo dodać drugi optotriak równolegle z pierwszym, albo jako niezależny kanał. Ba, możemy od razu dodać wyjście z transoptorem dla dodatkowych układów zewnętrznych. W roli transoptora dla dodatkowego wyjścia możemy użyć układu PC817, lub któregoś z jego licznych klonów. Ten układ powszechnie występuje w przetwornicach impulsowych, w tym w zasilaczach ATX, w parze z programowalną diodą Zenera TL431. Spadek napięcia na diodzie w PC817 może wynieść 1,4V, prąd diody ustalmy na 30mA:
(2,85V - 1,4V) / 30mA = 48,3Ω
(4,2V - 1,4V) / 48,3Ω = 58mA
Troszkę za dużo. Liczmy zatem 45mA przy maksymalnym napięciu zasilania:
(4,2V - 1,4V) / 45mA = 62,2Ω
(2,85V - 1,4V) / 62,2Ω = 23,2mA
Najbliżej w szeregu jest 62Ω, więc będzie dobrze. No ale nadal mamy spadek Vce na tranzystorze, który powinniśmy uwzględnić. Rezystor powinien mieć wartość 47Ω, ale na razie nie będziemy robić tej zmiany na schemacie Dodajmy też rezystor 100Ω by zabezpieczyć tranzystor wewnątrz PC817. Schemat będzie wyglądał tak:
Łączność z aparatem i wejście sterowania zewnętrznego
To prościzna, po prostu podłączymy przewód wyzwalający bezpośrednio do mikrokontrolera. Mikrokontroler ma wbudowane zabezpieczenia dla pinów, zresztą przypuszczam, iż rezystory podciągające po stronie aparatu mają wartość kilkuset Ω do kilkunastu kΩ. Jako wejścia piny w PICach i nie tylko mają dość wysoką impedancję, jako wyjścia tolerują prądy do 25mA, więc tutaj problemów nie będzie.
Wejście zewnętrznego sterowania rozwiążemy z pomocą PC817. Aha, jako gniazd wszędzie będziemy używać standardowych gniazd TRS 3,5mm w wersjach mono i stereo. Schemat wygląda tak:
Fotocela
Jest to w sumie najtrudniejszy aspekt całego projektu, bo elementy światłoczułe nie występują zbyt często w praktycznych układach, a jak się pojawiają, to raczej w formie prostych detektorów ciemno/jasno. Nam jednak potrzebny jest detektor, który odróżni normalne warunki oświetleniowe od nagłego błysku. Częściową pomocą w tym zadaniu może być kolorowy filtr na detektorze, ale i tak będzie potrzebny jakiś interfejs.
W roli detektora będzie pracować popularna fotodioda PIN BPW34. Dioda pracuje w kierunku zaporowym, a jej prąd upływu zależy od jasności i zmienia się w zakresie od 2nA do 100µA. Standardowym układem współpracującym z fotodiodą PIN jest wzmacniacz operacyjny. Moim zdaniem to przerost formy nam niepotrzebny, dlatego zdecydowałem się na użycie tranzystora PNP. Tranzystor ten zaczyna przewodzić wtedy, gdy prąd Ib zaczyna wypływać z bazy, czyli odwrotnie niż w przypadku tranzystora NPN. Prąd przepływający między emiterem, a kolektorem tranzystora zależy od prądu wypływającego z bazy pomnożonego przez wzmocnienie tranzystora. Dodając rezystor w kolektorze tranzystora możemy łatwo zmienić prąd diody na napięcie, które da się zmierzyć mikrokontrolerem. Jeden problem: tranzystory tego samego typu i z tej samej partii mogą mieć skrajne wartości wzmocnienia prądowego. Dla BC327-40 jest to na przykład wartość od 250 do 630. Policzmy zatem prąd płynący przez złącze emiter-kolektor dla skrajnych przypadków prądu diody PIN Ira i wzmocnienia tranzystora β:
2nA * 250 = 500nA
2nA * 630 = 1,25µA
100µA = 250 = 25mA
100µA * 630 = 63mA
Nie za bardzo mi się to podoba. Optymalnie by było, gdyby wzmocnienie prądowe tranzystora zawsze wynosiło 100, niezależnie od samego tranzystora. Oczywiście można taki układ zaprojektować i obliczyć dla konkretnego napięcia zasilania, ale przy zakresie od 2,85V do 4,2V parametry mogą się za bardzo "rozjeżdżać".
Z drugiej strony nie musimy znać konkretnej wartości jasności, zwłaszcza że filtr na diodzie PIN ją ograniczy. Wystarczy tylko, jak wykryjemy nagły błysk, czyli skok prądu diody PIN. Dobrze by było też, by ten detektor był niezależny od napięcia zasilania, czyli by miał napięcie niższe niż napięcie zasilania. Wykorzystamy do tego kolejny element z zasilaczy impulsowych, czyli regulowaną diodę Zenera TL431. Wartość jasności będzie mierzona za pomocą modułu ADC z częstotliwością kilku do kilkudziesięciu kHz. Jeśli wartość bieżącego pomiaru będzie znacząco wyższa od wartości średniej, to błysk zostanie zarejestrowany. Schemat tego "klocka" na razie prezentuje się tak:
Interfejs do konfiguracji opóźnień
Tu będzie bardzo ambitnie, bo użyjemy interfejsu USB, i to bez żadnych "przelotek" USB<>UART. Wykorzystamy bowiem mikrokontroler ze sprzętową obsługą USB i skonfigurujemy go jako emulator interfejsu szeregowego. W trybie łączności USB główny program będzie wyłączony. Przy okazji gniazdko USB posłuży też do ładowania akumulatora. "Obejście" baterii zostało dodane dlatego, iż protokół USB wymaga napięcia 3,3V, więc jak bateria jest poniżej tego napięcia, komunikacja USB nie będzie poprawnie działać. Nie jest to zbyt eleganckie rozwiązanie, ale nie chce mi się dokładać kolejnych układów zabezpieczeń baterii. Schemat jest prosty:
Interfejs użytkownika
Tu skopiuję rozwiązanie z innego urządzenia tego typu, czyli SmartTrig. Użyję zadajnika kodu HEX/BCD. A dokładniej to dwóch zadajników S-1130 firmy Copal. Jeden będzie odpowiadał za wybór trybu pracy, drugi za odstępy czasu dla funkcji Timelapse. Do tego jeszcze dojdą dwa przyciski: AF i wyzwalacza/startu Timelapse. Dodamy do tego dwie diody LED do sygnalizacji stanu urządzenia. Możemy całość zrealizować z użyciem multipleksowania, albo bez. Opcja pierwsza wymaga dodatkowych elementów, ale oszczędza piny. Rozważmy obie wersje. Schemat z multipleksowaniem wygląda tak:
Wersja bez multipleksowania wygląda tak:
Wersja z multipleksowaniem jest bardziej "oszczędna", a diody 1N4148 użyte na schemacie stanowią tak znikomy koszt całości, że tę właśnie wersję użyjemy. Debouncing drgających styków zrealizujemy programowo.
Mikrokontroler
O wyborze rodziny mikrokontrolerów decyduje głównie własne doświadczenie i posiadane narzędzia. Większość hobbystów w Polsce miało do czynienia z mikrokontrolerami AVR, za granicą z kolei przez lata dominowały mikrokontrolery PIC. Teraz większość używa takich platform, jak Arduino czy ESP8266/ESP32. Ja wybrałem rodzinę Microchip PIC, bo z nią miałem najwięcej do czynienia, no i mam też programator/debugger PICKit3. Dla fanów innych platform konwersja z PIC albo napisanie całości od zera nie powinno nastręczać problemów, a może się okazać dobrym ćwiczeniem. O tym będzie dużo więcej w części poświęconej programowi.
O wyborze konkretnego mikrokontrolera decydują następujące czynniki:
- liczba pinów;
- sprzętowa obsługa USB;
- cena;
- wielkość pamięci programu i SRAM.
To ile pinów potrzebujemy? Zasilanie i reset/POR/BOR zabierze trzy piny, USB zabierze kolejne trzy. Dwa piny na łączność z aparatem, dwa dla lamp błyskowych, jeden na dodatkowe wejście i jeden na fotocelę. To łącznie dwanaście pinów. Na interfejs potrzebne będzie między osiem, a dwanaście pinów, czyli łącznie 20-24 piny. Kryteria te spełniają mikrokontrolery:
PIC16F1459;
PIC18F1xK50;
PIC18F2xK50;
PIC18F2455;
PIC18F2550.
Pośród tych układów najkorzystniej wypada PIC18F25K50. Cenę ma dość wysoką, bo ponad 17 złotych, ale w zamian oferuje 32kB pamięci programu i 2kB pamięci SRAM i 256B pamięci EEPROM. Część pinów generuje przerwania w razie zmiany, a część ma wbudowane rezystory podciągające. Znajdziemy też w tym układzie tryby niskiego poboru prądu (XLP), moduły ADC, DAC, CTMU (do obsługi klawiszy dotykowych), timery, interfejsy szeregowe i inne moduły, które można włączać i wyłączać w miarę potrzeb i oszczędności zasilania. Warto wspomnieć o rozbudowanym systemie zegarowym pozwalającym na zmianę prędkości układu "w locie", co też wpływa na pobór prądu.
Za PIC18F25K50 przemawiają jeszcze dwie rzeczy: dodatkowe piny przydadzą się w razie rozbudowy układu, a do tego mam starszego brata, czyli PIC18F45K50 w formie płytki prototypowej.
Podsumowanie
Wstępny projekt wygląda tak:
Projekt ten jednak może ulec zmianie, zwłaszcza jeśli macie jakieś sugestie dodatkowych funkcji. Myślę, że na początek jednak tyle wystarczy.
W następnym odcinku zajmiemy się symulowaniem obwodu fotoceli, rozważaniami na temat funkcji, które chcemy mieć w tym wyzwalaczu oraz wstępnym projektem płytki drukowanej. Tymczasem zapraszam do komentowania oraz sugerowania zmian i poprawek.
Cool? Ranking DIY