Popularny post Matthias Napisano Styczeń 18, 2021 Popularny post Udostępnij Napisano Styczeń 18, 2021 (edytowany) Witam wszystkich!!! Po długiej przerwie w końcu znalazłem czas aby opublikować swój kolejny projekt. Po mojej serii ostatnich artykułów dotyczących zalet Arduino UNO ten będzie można uznać poniekąd za ostatni z tej serii. Uważam bowiem, że temat sposobów ułatwiających wgrywanie sketchy oraz bootloaderów do procesorów Atmega8/168/328 stosowanych w popularnym Arduino UNO (głównie ten ostatni) został przeze mnie wyczerpany. Dziękuje wszystkim, którzy przeczytali moje poprzednie artykuły i sprawia mi ogromną satysfakcję, jeżeli informację w nich zawarte komuś mogły pomóc. Tyle tytułem wstępu. Teraz przejdę do opisu mojego projektu dlaczego powstał i dlaczego zrealizowałem go w taki, a nie inny sposób. Dotąd projektowałem dość proste układy, które realizowałem na zaprojektowanych przez siebie PCB tylko jednowarstwowych i wykonanych w warunkach domowych metodą termo transferu z wykorzystaniem elementów THT. Jako, że pracuję jako technik w jednej z firm gdzie mam okazję montować urządzenia na profesjonalnych PCB z wykorzystaniem elementów SMD poczułem chęć zrealizowania jakiegoś swojego projektu w tej właśnie technologii, a także zaprojektowania płytki PCB dwuwarstwowej. Jako, że ostatnie moje artykuły są związane z Arduino UNO oraz, że mam też swoją wizję tej platformy. Dlatego postanowiłem zaprojektować właśnie odpowiednik Arduino UNO wg swojej koncepcji. Nazwa odpowiednik nie jest bez powodu bo nie jest to typowy "klon" tej platformy. Generalnie powiem, że od razu nie poszedłem na całość tzn. planuje za jakiś czas zrobić drugą jego wersję, która będzie ostateczną bo będzie zawierać dodatkowe funkcje. Na początku skorzystałem z ułatwień takich jak posiadany przeze mnie konwerter USB UART RS232, który podłączany jest do złącza na płytce aby móc komunikować się z procesorem. Generalnie chciałem sprawdzić jak moja koncepcja sprawdzi się w rzeczywistości oraz czy PCB jest dobrze zaprojektowane, tzn. czy urządzenie działa poprawnie i nie ma w nim zakłóceń, które mogłyby wpłynąć na stabilność jego pracy. Po uruchomieniu urządzenia okazało się, że działa ono prawidłowo, oraz że moja koncepcja sprawdza się. Tak powstało MWuino UNO. Dwie pierwsze litery w nazwie pochodzą: pierwsza od mojego imienia a druga od nazwiska. Zatem czym MWuino UNO różni się od typowych klonów Arduino UNO. Zacznijmy od wizualnych różnic: 1. PCB ma zupełnie inny kształt i jest dłuższe w stosunku do oryginału i klonów o 1,5cm. MWuino UNO ma długość 8cm, szerokość zaś to 5cm. Krańce PCB zostały łagodnie zaokrąglone aby wygodnie można było trzymać płytkę w ręce. 2. Inne ułożenie elementów elektronicznych, aby można było je na powierzchni 5x8cm dobrze rozmieścić i odpowiednio poprowadzić ścieżki zarówno na stronie TOP jak i BOTTOM. Stąd też inne ułożenie gniazd/złącz sygnałowych dla procesora IC2 3. Najważniejsza widoczna różnica. Na PCB znajdują się dwa procesory IC1 oraz IC2, które zostaną omówione później. 4. Dodatkowe elementy, których nie ma w oryginalnym arduino, czyli: - włącznik zasilania. Koniec z wyciąganiem wtyczki z gniazda zasilania. Jednym ruchem palca możemy wygodnie wyłączyć zasilanie. - zamontowane złącza zarówno w wersji męskiej jak i żeńskiej. W zależności jakie przewody połączeniowe posiadamy możemy szybko podłączyć podłączyć elementy do gniazd procesora IC2 Poniżej zdjęcia prezentujące gotowe urządzenie: Strona TOP Strona BOTTOM Działające urządzenie z podłączonym konwerterem Nie chciałem wykonywać idealnej kopii tej platformy gdyż jest ich mnóstwo w internecie. Fakt, że niektóre z tych urządzeń mają bardzo ciekawe rozwiązania względem typowych kopii, które tak naprawdę nie oferują nic nowego poza niską ceną, a niekiedy ich jakość wykonania pozostawia wiele do życzenia. Ze względu na pewne rozwiązanie które jest mocną zaletą mojej wersji oraz tego aby wymiarowo było zbliżone do oryginału, pewne ułożenie elementów takich jak np: gniazda/złącza sygnałowe podłączone do procesora mają inne ułożenie niż ma to miejsce w oryginale. Generalnie dla mnie to nie jest problem, gdyż jak zaczynałem naukę z Arduino UNO nie czułem potrzeby używania tak zwanych shield -ów, tylko mając elementy łączyłem je na płytce stykowej, a z płytki stykowej za pomocą przewodów do odpowiednich pinów gniazd na płytce Arduino UNO. Co więcej takie ułożenie złącz przy procesorze gwarantuje najkrótsze połączenie z pinami procesora oraz ze względu na ich bliskość możliwość stosowania przewodów połączeniowych o zbliżonych długościach, gdyż przy rozstawie złącz w oryginalnym UNO oraz jego klonach, zdarzyło mi się kilka razy, że nie miałem przewodów o potrzebnej mi długości. Do urządzenia możemy podłączyć dowolny konwerter UART/RS232 TTL. Dzięki zastosowaniu złącz w wersji męskiej jak i żeńskiej nie będzie problemu z podłączeniem go do płytki za pomocą odpowiednich przewodów połączeniowych. Na zdjęciu jak widać mój konwerter jest wpięty bezpośrednio do gniazda żeńskiego na płytce, a to dlatego że na etapie projektowania linie sygnałowe i zasilania są dopasowane do wyprowadzeń posiadanego przeze mnie konwertera. Najważniejszą zaletą mojego projektu jest możliwość wgrywania bootloaderów do procesora IC2. Przedstawię najkrócej jak się da opis budowy i działania najważniejszych elementów układu. Dodatkowo w pliku do pobrania, zamieszczam schemat budowy, przydatny przy analizowaniu poniższego opisu, pliki gerber PCB w rev.2, zmodyfikowany skecz Arduino ISP-wymagany doi prawidłowego działania urządzenia, oraz listę elementów użytych do budowy-BOM. plik do pobrania:MWuinoUNO-rev.2.zip Starałem się możliwie w miarę zwięźle i ogólnie opisać działanie urządzenia. Tak więc: Procesor IC1 ma wgrany na stałe skecz Arduino ISP. Skecz tez został przeze mnie nieco zmodyfikowany tzn. dodano obsługę switcha S2(SELECT), Diody LED Status - BTLDR i PROGR oprócz standardowych (PMODE, HBEAT, ERROR) oraz sterowanie układami MUX/DEMUX - IC6,IC7, które są odpowiedzialne za przełączanie sygnałów TX,RX konwertera na odpowiednie wejścia RX,TX procesorów IC1 oraz IC2 oraz sygnałem z pinu (16) -IC1 na wejście (1)RESET IC2 – IC8. Układy MUX/DEMUX sterowane są z jednego wyjścia procesora IC1(4). Najprościej rzecz ujmując. Po uruchomieniu MWuinoUNO, zapalają się diody PROGR - zielona oraz HBEAT - niebieska. W tym trybie układy MUX/DEMUX nie są sterowane z IC1, a ich domyślne ustawienie powoduje, że sygnały RX,TX konwertera są podane na piny RX,TX procesora IC2. Ustawienie w tym trybie - PROGR, umożliwia nam wgrywanie skeczy do procesora IC2. Dla przykładu uruchamiamy środowisko Arduino IDE i wybierzmy standardowy skecz blink. Najpierw pamiętamy o ustawieniach czyli "Narzędzia" następnie "Port" COM - do którego podłączone jest nasz konwerter oraz "Płytka".Jeżeli w podstawce IC2 mamy procesor ATmega328 w polu "Płytka" wybieramy "Arduino UNO". Jeżeli używamy procesora ATmega8/168 to w polu "Płytka" wybieramy "Arduino NG or older" po czym ponownie klikamy na "Narzędzia" i w polu „Procesor” wybieramy właściwy, który aktualnie znajduje się w podstawce IC2. Kiedy wszystkie ustawienia są odpowiednie, klikamy na "Wgraj" i tu teraz jest bardzo ważna kwestia do omówienia. Jeżeli nasz konwerter ma tylko wyjścia TXD(TX), RXD(TX) oraz wyjścia zasilania, to tuż zanim nastąpi wgrywanie skecza do procesora musimy nacisnąć szybko przycisk S2(RESET) aby nasz procesor mógł się zaprogramować. Teraz napiszę jak to zrobić aby ta czynność przebiegła dość sprawnie. Klikamy "Wgraj" i patrzymy na napis na zielonym pasku nad czarnym okienkiem w którym pojawiają się informacje. Jeżeli jest napis "kompilowanie szkicu..." i obok jest pasek postępu, nie wciskamy przycisku S3(RESET). Kiedy pasek postępu dobiegnie końca i pojawi się komunikat "Wgrywanie" szybko wciskamy i puszczamy przycisk S3(RESET). Dlatego przed wgraniem dobrze jest mieć palec blisko tego przycisku i obserwować komunikaty, które powyżej napisałem. Osoby, które dysponują konwerterem z dodatkowym wyjściem oznaczonym jako DTR, nie muszą przed wgraniem skecza naciskać switcha S3(RESET), gdyż dzięki sygnałowi z DTR z konwertera, procesor IC2 zostanie automatycznie zresetowany. Bardzo istotną rzeczą przed wgrywaniem skeczy jest to aby programowany przez nas procesor posiadał wcześniej wgrany bootloader, gdyż bez niego nie wgramy skecza do procesora. W MWuinoUNO. Możemy wgrywać bootloadery do procesorów takich jak ATmega 8/168/328, gdyż Arduino IDE wspiera te procesory. Wystarczy że włożymy czysty procesor w podstawkę IC2 i możemy w ciągu chwili wgrać bootloader niż ma to miejsce w przypadku Arduino UNO i jego klonów, gdzie potrzebny jest shield do Arduino umożliwiający nam wykonanie tej czynności lub płytka stykowa z elementami takimi jak kwarc, kondensatory i rezystor(do pinu RESET procesora). Elementy te nie zawsze możemy mieć pod ręką, a i podłączenie całego układu zajmie nam chwilę i jak to bywa w przypadku płytek stykowych, może się okazać, że mamy przerwę w połączeniu i będzie problem z wgraniem bootloadera, a my dodatkowo stracimy kilka minut na poszukiwaniu usterki. Teraz opiszę jak wgrać bootloader do procesora IC2 w MWuinoUNO. Uruchamiamy środowisko Arduino IDE i sprawdzamy ustawienia programu tak samo jak opisałem to powyżej dla trybu PROGR. czyli "Port" i "Płytka". Następnie naciskamy i przytrzymujemy switch S2(SELECT) po czym zapala się czerwona dioda led opisana jako BTLDR. Jest to tryb w którym możemy wgrać bootloader do procesora IC2. W tym trybie procesor IC1 - z wgranym zmodyfikowanym skeczem "Arduino ISP" steruje układami MUX/DEMUX sprawiając, że układy IC6,IC7 przełączają komunikację konwertera (RX,TX) z procesora IC2 na procesor IC1 oraz IC8, z którego resetowanie procesora IC2 odbywa się z pinu (16) procesora IC1. Dzięki temu, wgrywanie bootloadera do procesora IC2 jest w pełni automatyczne i nie wymaga ręcznego resetowania procesora. Bootloader z PC zostaje wysłany przez konwerter do procesora IC1, który jest w tym momencie programatorem i z tego procesora liniami MISO, MOSI, SCK do linii MISO, MOSI, SCK procesora IC2 zostaje przesłany. Diody na liniach MOSI, MISO, SCK, sprawiają, że każda linia może przysyłać dane tylko w jednym kierunku. W przypadku linii MISO i SCK są dodatkowe rozwiązania z poziomu zmodyfikowanego przeze mnie skecza Arduino ISP. Ma to na celu sprawienie, że gdy wykorzystamy te piny w naszym programie, który wgramy do IC2, sygnały te nie będą absorbowane przez piny IC1. Szczególne znaczenie ma to dla linii SCK, gdyż tak samo jak w Arduino UNO i jego klonach podłączona jest dioda L, której działanie uaktywnia się na przykład po wgraniu standardowego skecza blink do IC2, a także jest aktywna w momencie wgrywania bootlodera do IC2, zatem może być sterowana zarówno z procesora IC1 jak i IC2 i nie nastąpi sytuacja aby wyjścia SCK obu procesorów w jednym czasie mogłyby nią sterować lub na przykład linia SCK IC1 będzie w stanie niskim absorbując sygnał w stanie wysokim z linii SCK IC2. Przekaźniki K1 oraz K2 przełączają zasilanie z konwertera na zasilanie podłączone z zewnętrznego źródła zasilania, czyli zasilacza podłączonego do DC jack. Oczywiście aby to nastąpiło najpierw musimy ustawić przełącznik S4 (ON, OFF) w odpowiedniej pozycji. Cewki przekaźnika pobierają zasilanie z zewnętrznego źródła zasilania jakim jest zasilacz, dzięki temu może nastąpić proces przełączenia zasilania z konwertera na zewnętrzne źródło zasilania. Oczywiście taki sposób przełączania zasilania nie jest idealny tzn. chodzi o szybkość. W momencie przełączania następuje resetowanie procesorów IC1,IC2 w wyniku chwilowego zaniku napięcia ich zasilania. Generalnie wiedziałem, że takie zjawisko wystąpi i myślę, że nie jest to duży problem. Częściowo można temu zaradzić dodając dodatkowy kondensator tantalowy o pojemności 100u za stykami przekaźnika, a dokładniej w okolicy zasilania najlepiej IC2. Unikniemy resetu w momencie podłączania zewnętrznego źródła zasilania jakim jest zasilacz. Niestety problem ten nie zniknie w momencie odłączania zewnętrznego źródła zasilania i ponownego przełączenia zasilania, na zasilanie z konwertera USB. Procesory ATmega328 dość szybko się uruchamiają w przeciwieństwie do ATmega8. Zauważyłem, że wszystkie procesory ATmega8 jakie posiadam potrzebują ok 8 sekund na uruchomienie programu (skecza). Opisałem najważniejsze koncepcje i sposoby ich realizacji w moim projekcie. Część z nich wynikała z tego, że wykorzystałem posiadane już przeze mnie elementy takie jak przekaźniki oraz konwerter oraz to, że pewne zjawiska takie jak ręczne resetowanie procesora przed wgraniem programu lub chwilowy zanik napięcia zasilania podczas jego przełączania dla mnie nie są jakoś specjalnie istotne. Najważniejsze, że cały projekt działa stabilnie oraz założenia, które w nim wdrożyłem także się sprawdziły. Tak jak wcześniej napisałem za jakiś czas przedstawię wersję bardziej rozbudowaną, w której będą wyeliminowane wyżej opisane niedogodności, a także dodatkowe nowe funkcje. Z ciekawości przejrzałem wszystkie możliwe klony Arduino UNO oraz rozwiązania i funkcje jakie zostały do nich dodane, a które naprawdę mogą się przydać większości użytkowników tej platformy. Obecnie wszystko mam już sprawdzone i jestem na etapie projektowania PCB. Pozostałe zdjęcia Na zakończenie chcę dodać, że przedstawione na zdjęciu urządzenie to rev.1 urządzenia. Zamieściłem pliki gerber w nowszej rewizji rev.2 mojego projektu, jeżeli ktoś będzie zainteresowany to bez problemu będzie mógł zamówić PCB. W skrócie wymienię różnice pomiędzy rev.1 a rev.2 MWuino UNO -Powiększone opisy pinów złącz/gniazd sygnałowych podłączonych do procesora IC2 -Obniżenie switcha S2(SELECT) oraz przesunięcie złącza zasilania J1 oraz kondensatora C2 w lewo, aby łatwiej było naciskać switch S2(SELECT) -Zmiana złącz konwertera z 5pin na 6pin oraz dodatkowe elementy R12,C21. Dodanie tym samym obsługi DTR z konwertera, dzięki czemu osoby które posiadają konwerter USB UART z linią DTR nie będą musiały ręcznie restartować procesora IC2 przed wgraniem do niego programu (skecza) -Przesunięty kondensator C9 w lewo aby łatwiej można było zamontować złącze JP1 (goldpin, żeńskie) -Dodany kondensator C20 do pinu RESET IC1. Urządzenie pracujące w obszarze dużych zakłóceń, a nawet dotknięcie palcem pinu RESET IC1 może zadziałać tak samo jak wciśnięcie switcha S1(RESET). Dodanie tego kondensatora eliminuje całkowicie ten problem. -Dodany C22 tantalowy do podtrzymania chwilowego zasilania procesora IC2 w momencie przełączania zasilania z konwertera na zewnętrzne źródło zasilania jakim jest zasilacz podłączony do gniazda J1 -Pady rezonatora kwarcowego GND podłączone do masy na PCB. Nie jest to konieczne, ale jeżeli producent opisał te piny jako GND, a ja generalnie trzymam się tego co jest napisane w dokumentacji. Wymagało to ode mnie zmodyfikowania domyślnej biblioteki rezonatorów kwarcowych programu Eagle, gdyż dostępne w tej bibliotece elementy szczególnie pasujące do zastosowanego przeze mnie rezonatora kwarcowego, piny te są pozostawione jako niepodłączone. -Poprawiono zamienione w rev.1 nazwy diod – HBEAT, ERROR -Dodanie rezystora R13-1M do pinu SCK procesora IC2 oraz IC1 (katoda diody D1). Do pinu SCK dodatkowo podłączone jest wejście nieodwracające wzmacniacza operacyjnego, pracującego w trybie wtórnika napięcia, którego zadaniem jest sterowaniem diody LED L, tak aby nie obciążać jednocześnie linii zegarowej SCK lub gdy ta linia pełni rolę we/wy. W momencie kiedy pin procesora IC2 nie jest zdefiniowany jako we/wy a tym samym nie ma ustawionego stanu H/L wejście wzmacniacza „wisi w powietrzu” powodując świecenie diody L. Tak duża wartość rezystora nie obciąża pinu SCK procesora, ale polaryzuje wejście wzmacniacza do masy w przypadku, gdy pin SCK nie jest określony jako we/wy a tym samym nie ma ustawionego stanu H/L. Co ciekawe oryginalne Arduino UNO oraz jego klony też nie posiadają rezystora polaryzującego wejścia wzmacniacza operacyjnego i tym samym wyżej opisane zjawisko w nich występuje (świecenie diody L) Powyższe zmiany jakie zostały wprowadzone do rev.2 MwuinoUNO. U mnie urządzenie w rev.1 działa bez najmniejszych problemów. Jedyną z powyższych zmian jaką zrobiłem to dolutowanie kondensatora do pinu (1)RESET-IC1 oraz rezystor do wejścia nieodwracającego wzmacniacza operacyjnego IC9. Wszystko sprawuje się dobrze i działa prawidłowo. Do prawidłowego działania urządzenia po zmontowaniu potrzebujemy koniecznie 1 szt. procesora z wgranym już bootloaderem. Jeżeli mamy czysty procesor oraz znamy kogoś kto ma Arduino nie koniecznie musi to być UNO i wie jak wgrywać bootloadery lub my sami posiadamy taką wiedzę, to już połowa sukcesu. Ewentualnie pozostaje nam zakup procesora z wgranym bootloaderem. Następnie co musimy zrobić to wgrać zmodyfikowany przeze mnie skecz Arduino ISP. Skecz ten wgrać możemy już w MWuinoUNO. Teraz kolejna zaleta w tym urządzeniu. Tryb PROGR działa także bez udziału IC1-jedynie diody LED status będą nieaktywne, z wyjątkiem diody L. Procesor umieszczamy w podstawce IC2 i wgrywamy zmodyfikowany sketch Arduino ISP (plik o nazwie „MwuinoUNO”). Po wgraniu wyjmujemy procesor z podstawki IC2 i umieszczamy w podstawce IC1. Od teraz możemy zamawiać czyste procesory Atmega8/168/328 tzn. bez wgranego bootloadera, i sami w łatwy sposób wgramy bootloader dla procesora, którego aktualnie zamierzamy używać. Poniżej link do filmu przedstawiającego działanie MWuinoUNO https://www.youtube.com/watch?v=oWh97v3rdZE Edytowano Styczeń 18, 2021 przez Matthias 3
marek1707 Styczeń 23, 2021 Udostępnij Styczeń 23, 2021 Dnia 19.01.2021 o 00:42, Matthias napisał: Diody na liniach MOSI, MISO, SCK, sprawiają, że każda linia może przysyłać dane tylko w jednym kierunku. To jakaś nowatorska koncepcja, bo nie wiem czy wiesz, ale wysyłanie jedynek i zer do pasywnego portu (bez podciągów) wymaga aktywnego generowania tych stanów za pomocą tranzystorów (schowanych wewnątrz scalaka), które zwierają pin wyjściowy do masy i do plusa. To nie prąd do zaróweczki, że możesz wstawić diodę i będziesz "przysłać dane tylko w jednym kierunku". Dioda zwyczajnie separuje jeden z tranzystorów portu i stan niski lub wysoki (w zależności od jej kierunku) jest zdegenerowany: czas narastania jest ogromny i nie ma żadnej pewności, że w ogóle stan ten dotrze do odbiornika. A gdy ten jeszcze będzie czymś obciążony (o czym poniżej), to klęska. Programator - jeśli jest tak jak tu podpięty na stałe do procka "użytkowego", powinien zwyczajnie odwieszać swoje wszystkie piny SPI do stanów "INPUT" kiedy nie pracuje i tyle. Nie obciąża wtedy sygnałów docelowych a gdy zaczyna programowanie (a przecież wie kiedy to się dzieje) zaczyna od wystawienia RESETu i dopiero po kilku us może "przypiąć się" do SPI przez przestawienie dwóch pinów na OUTPUT. Żadne tu diody nie są potrzebne a to co wymyśliłeś to pomyłka. Radzę obejrzyj oscylokopem sygnały SPI na pinach procesora za diodami (w szczególności porównaj sygnały np. na pinach 17 obu procesorów w czasie programowania, gdy ten lewy wysyła dane do prawego), a najlepiej od razu je wytnij i zapomnijmy o tej przykrej wpadce. A jeśli nie wierzysz, to jako "układ użytkowy" podłącz do arduinowego pinu ~11 (np. na złączu SV2) opornik 1k podciągający do +5V. Taka głupia symulacja powiedzmy przekaźnika albo diodki LED (włączanych stanem niskim) załatwia Twój programator, bo ten nie jest w stanie wysłać przez Twoją diodę stanu niskiego na linię MOSI (to samo z SCK, choć tutaj 1M do masy trochę poprawia aczkolwiek nie ma szans w przypadku "walki" z 1k). Jako bufora dla diodki na SCK nie musiałeś dawać żadnego wzmacniacza analogowego. Do separacji wystarczy bramka typu 1G17, 1G04 lub podobna, a nawet mały MOSFET. Wzmacniacze nie są do tego, a akurat ten LMV zasilany z 5V nie powienien widzieć na wejściu więcej niż 4V. Do czego są D7/D8? Rozumiem, że użycie dwóch przekaźników odpalanych tym samym sygnałem (zamiast jednego DPDT) było spowodowane tylko ich posiadaniem w szufladzie, tak? 1
Matthias Styczeń 23, 2021 Autor tematu Udostępnij Styczeń 23, 2021 (edytowany) @marek1707 Witam. Dziękuje za odpowiedź. Odnośnie tych diod nie miałem do końca pewności czy jest to idealne rozwiązanie. Tak naprawdę nie byłem pewny swoich założeń z tymi diodami, ale ten post je rozwiał i teraz wiem, że w kolejnej wersji nie będzie diod. Ostatnio faktycznie na płytce stykowej zbudowałem fragment tego obwodu i faktycznie okazało się, że mogło się obejść bez tych diod. Generalnie moje pierwsze założenie było takie, że wgrywając bootloadery do procka na IC2 nie będzie nic do niego podłączone. Po prostu ktoś zakupi sobie określoną ilość procesorów i sobie do nich na przyszłość wgra bootloadery. Przydatne kiedy w urządzeniu jeden z procesorów ulegnie uszkodzeniu i będziemy dysponować gotowym aby go zastąpić. Faktycznie zrobiłem próbę z rezystorem i rozumiem teraz o co chodzi. W takim przypadku działanie diody polegające na przewodzeniu w jedną stronę jest faktycznie pomyłką. Bardzo dziękuje za ten wpis i wyjaśnienie działania tych wyjść bo przyznaje się bez bicia nie miałem o tym pojęcia. Postaram się zaktualizować pliki i tą informację o diodach. Faktycznie przekaźniki miałem kiedyś od znajomego z pracy. Rozmiarowo idealnie się nadawały oraz pobór prądu przez 1 przekaźnik wg datasheet to jak pamiętam 15 lub 30 mA. Tak więc przy stabilizatorze o wydajności 1A to mało. Diody na cewkach przekaźnika to standardowe zabezpieczenie, fakt stosowane głównie kiedy przekaźnik jest sterowany z tranzystora ale z tego co wiem to cewka przekaźnika jest elementem indukcyjnym, przez co gromadzi energię w wytworzonym polu magnetyczny w trakcie gdy przekaźnik jest włączony. Diody D7 i D8 Eliminują indukowane napięcia (o odwrotnej polaryzacji niż zasilanie) podczas rozłączania przekaźnika. Rzadko projektuje urządzenia z przekaźnikami i tu też się zastanawiałem ale wiedząc jakie są skutki gromadzenia się energii na cewce przekaźnika wolałem dodać te diody. Zwłaszcza, że elementy zamawiałem na TME a zakup jest od określonej ilości sztuk więc mając ich jeszcze kilka dodałem je do cewek tych przekaźników. Odnośnie wzmacniacza operacyjnego takie samo rozwiązanie jest zastosowane w oryginalnym Arduino i jego klonach. Fakt można to też rozwiązać za pomocą tranzystora. Generalnie aby mieć pewność działania mojego układu korzystałem już rozwiązań, które zostały już wykorzystane w oryginalnym Arduino. Generalnie nie jest buforem tej diody tylko, żeby sygnał z SCK z IC1 przechodzący przez te diodę mógł zaświecić diodę podobnie jak sygnał SCK z IC2. 2 godziny temu, marek1707 napisał: Dioda zwyczajnie separuje jeden z tranzystorów portu i stan niski lub wysoki (w zależności od jej kierunku) jest zdegenerowany: czas narastania jest ogromny i nie ma żadnej pewności, że w ogóle stan ten dotrze do odbiornika. A gdy ten jeszcze będzie czymś obciążony (o czym poniżej), to klęska. Nie powiem dobrze wiedzieć, że takie mogą być skutki ale akurat u mnie o dziwo działa wszystko dobrze bo wgrywałem bootloadery pod rząd do około dziesięciu ATMEG i nie było problemu, ale tak jak napisałem teraz wiem, że pomysł z diodami nie był trafiony. Jeszcze raz bardzo dziękuje za wyprowadzenie mnie z błędu bo gdyby nie ten komentarz miałbym pewność, że moje założenia były słuszne. Generalnie też wychodzę z założenia, że jak nie jestem pewien. Chodzi o te zabezpieczenia to lepiej wstępnie je dać w projekcie, bo jak okażą się nie skuteczne i niepotrzebne to można je odlutować i zastąpić rezystorem 0R lub kawałkiem drutu niż jak pominąć i potem rozcinać ścieżki i rzeźbić na PCB aby dało się przylutować. Edytowano Styczeń 23, 2021 przez Matthias 1
marek1707 Styczeń 23, 2021 Udostępnij Styczeń 23, 2021 To po kolei: 49 minut temu, Matthias napisał: ale wiedząc jakie są skutki gromadzenia się energii na cewce przekaźnika wolałem dodać te diody No to może wiedząc jakie są te skutki, opisz co się będzie działo z tą energią podczas wyłączania zasilania. Wystarczy kilka zdań, chętnie przeczytam. Wtedy wyjdzie czy wstawiłeś je bo teoria i Twoja wiedza to uzasadniała, czy wrzuciłeś bo zwykle obok przekaźników (i tranzystorów) są, to nie zaszkodzi. Oczywiście argument kupowania w celu przekraczania kolejnych progów cenowych w TME rozumiem, sam tak robię.. Ale o diodkach chciałbym coś od Ciebie jeszcze usłyszeć. 53 minuty temu, Matthias napisał: Odnośnie wzmacniacza operacyjnego takie samo rozwiązanie jest zastosowane w oryginalnym Arduino i jego klonach. Tak myślałem, że dasz ten przykład (bo kalka jest uderzająca), ale tam jest to zrobione wyłącznie z powodu oszczędności. Potrzebowali komparatora w innym miejscu więc drugi w obudowie został i wstawili go do sterowania LEDa. Ani nie przenosi to pełnego pasma sygnału CLK (więc np. jasność diodki nie będzie dobrze oddawała CLK użytego jako PWM - to tylko przykład błędów wnoszonych przez tego typu separator) ani wejście układu analogowego tego typu nie pasuje do charakteru sygnału cyfrowego. U Ciebie jest to na zrobione "z rozpędu", co więcej, musiałeś specjalnie poszukać wzmacniacz i go wstawić (nie czytając jego karty katalogowej) - naprawdę mimo dobrych chęci, żadnych argumentów "za" nie widzę. 59 minut temu, Matthias napisał: Generalnie nie jest buforem tej diody tylko, żeby sygnał z SCK z IC1 przechodzący przez te diodę mógł zaświecić diodę No właśnie to jest rola bufora: nie obciążamy sygnału wejściowego a na wyjściu mamy spory prąd, np. dla diody LED. Ogólna moja opinia jest taka: Twój układ cierpi na parę ułomności, ale nie są one krytyczne. Powiedziałbym, że raczej typowe dla człowieka na początku krzywej rozwoju idącej ostro w górę Wynikają głównie z braku doświadczenia. Po usunięciu diodek (i zmianie programu na "odwieszający" piny SPI w tryb INPUT) zostaje jedynie to niefortunne przełączanie zasilań przekaźnikami - rozwiązanie łopatologiczne i raczej niestosowane po stronie już stabilizowanego napięcia właśnie z powodu nieuniknionych zakłóceń. Kondensator jest tylko łatą, przy większym poborze prądu (a przecież w końcu dodasz LCD, czujniki czy co tam Ci przyjdzie do głowy) Vcc i tak będzie zdychać. Z tego co jednak widzę, bardziej traktujesz ten projekt jako wygodny programator z podstawką do czystych procesorów niż jako płytę Arduino - chociaż padła ta nazwa w tytule. A jeśli programator, to trochę brakuje mi np. funkcji programowania HV w celu przywracania do życia "zbrickowanych" niechcący kostek. Skoro już podjąłeś taki wysiłek, to może trzeba było pójść jeszcze krok dalej? BTW: Co z tym 8-sekundowym wstawaniem układów mega8? Coś tam jest nie tak, sprawdzałeś z jakim zegarem wstają, co się dzieje na wejściu RESET i jak mają ustawione fusebity? Oba procesory (mega8 i 328) mają bardzo podobne mechanizmy startu i o ile mają wgrane to samo robiące bootloadery (bo przecież nie takie same) i podobnie ustawione fusebity, to start powinien zajmować praktycznie tyle samo czasu. Weź podrąż ten temat. 1
Matthias Styczeń 23, 2021 Autor tematu Udostępnij Styczeń 23, 2021 Odnośnie cewki to cewka przekaźnika jest elementem indukcyjnym, przez co gromadzi energię w wytworzonym polu magnetycznym w trakcie gdy przekaźnik jest włączony. W momencie wyłączenia energia ta jest częściowo oddawana z powrotem do cewki przekaźnika, w bardzo niebezpieczny dla układu sposób, generujący tzw. "szpilki" wysokiego napięcia wielokrotnie przewyższającego napięcie zasilania przekaźnika. Co więcej, generowane przez przekaźnik podczas jego wyłączania szpilki mają przeciwną biegunowość do napięcia zasilania. Z tego co czytałem w zależności od budowy przekaźnika szpilki napięcie mogą mieć nawet kilkaset Volt. Jak widać w obwodzie gdzie znajduje się cewka są stabilizatory, które są półprzewodnikowe. W obwodzie tym znajdują się także kondensatory elektrolityczne oraz ceramiczne, które mają napięcie pracy na 25V. Zastosowanie diody ma jedną wadę - wydłuża się około 3-krotnie czas wyłączania przekaźnika. Może to mieć znaczenie w projektach niektórych urządzeń, tak jak tutaj. Bo napisałem, że przy zastosowaniu kondensatora urządzenie włącza się bez zaniku napięcia na procku, natomiast problem zaniku występuje właśnie w momencie odcięcia zasilania cewek przekaźnika, czyli odłączeniu zewnętrznego źródła zasilania. Jeśli chodzi o dobór diody to standardowo stosuje się na przykład: 1N4007 o parametrach 1kV prądzie przewodzenia 1A Prąd w impulsie maks. 30A. Zastosowane przeze mnie diody są o zbliżonych parametrach. Tak jak napisałem w poście, że można dodać kondensator. Zapomniałem napisać też bo nie sprawdziłem obciążenia jakie będzie sterowane przez procesor, ale domyślałem się, że kondensator nie jest idealnym rozwiązanie dla bardziej rozbudowanych obwodów znaczy że nie zapewni w pełni podtrzymania napięcia na procku w chwili przełączania zasilania z konwertera na zasilanie z zewnątrz i odwrotnie. Sprawdzi się jedynie przy prostych projektach, gdzie pobór prądu jest mały. Fakt odnośnie wzmacniacza operacyjnego w Arduino zastosowali układ scalony, który zawiera dwa takie wzmacniacze. Niedawno przeczytałem analizę budowy Arduino i faktycznie tak wykorzystali drugi wzmacniacz. Widziałem że w KAmduino UNO, że tam sterowanie diody L zrealizowane jest na tranzystorze N-MOSFET BSS138 i coś mi się wydaję, że to pewnie byłoby lepsze od tego co zrobiłem. Zwłaszcza, że MOSFET jest sterowany napięciem a nie prądem jak ma to miejsce w przypadku tranzystorów bipolarnych, czyli tym samym też nie obciąży nam linii SCK. Fakt trochę sam poszedłem na łatwiznę tak jak Ci którzy kopiują 1:1 Arduino, ale tak się zapaliłem do tego, że po prostu chciałem już z programu, w którym projektowałem PCB już mieć to fizycznie. Tak jak też napisałem zrobiłem pewne założenia, które na chwilę obecną były mi na rękę a zakładałem, że prawdopodobnie zrobię drugą wersję lepszą. Metodą małych kroków. Przede wszystkim chciałem zobaczyć jak mi wyjdzie PCB i czy jest ogólnie dobrze zaprojektowane tzn. prawidłowość działania no i ogólnie po paru poprawkach, które opisałem wszystko póki co działa. Ogólnie mój warsztat póki co jest ubogi nie mam oscyloskopu, ale niedługo będę miał dostęp po znajomości. Ogólnie to tylko pracuję z Arduino. Tak więc to moje jedyne narzędzie w jakim programuje procki i pisze programy dla własnych celów. Póki co mi wystarcza do moich projektów. Tak więc programator i wgrywanie skeczy jest w 100% zgodne z tą platformą i nie planowałem innych funkcji póki co. Nie mam także jak sprawdzić ustawień procesora oraz przeprowadzić ich modyfikacji bo nie dysponuje narzędziami do tego. Problem polega z procesorami polega na tym, że przykładowo mamy ATmegę8 oraz 328. Oczywiście opisuję teraz to co u siebie zauważyłem. Wgrywam bootloader właściwy dla ATmega8 oraz właściwy dla 328. Z resztą próbowałem nawet (bo tego wcześniej nie wiedziałem) wgrać inny bootloader przez Arduino IDE niż ten który powinien być i nie dało się. Bootloadery są dostarczone ze środowiskiem Arduino IDE. Po wgraniu bootloadera wgrywam skecz blink. Procesory podmieniam w podstawce dzięki czemu taktowane są tym samym kwarcem 16MHz oraz podłączonymi do kwarcu kondensatorami 22p. Po włączeniu zasilania procesor ATmega 328 od razu działa to znaczy skecz blink powoduje cykliczne zaświecenie i zgaszenie diody L, natomiast ATmega 8 zaczyna realizować ten skecz dopiero po około 8 sekundach od podłączenia jej zasilania. Mam kilka sztuk tych dwóch procków i zawsze jest tak samo. Na pewno poszukam informacji czy ktoś nie miał podobnie, bo skoro takie zjawisko wystąpiło u mnie to jest też prawdopodobne, że i u kogoś mogło wystąpić. W kolejnej wersji nie zamierzam robić przełączania na przekaźnikach. Na początku jak zabierałem się za projektowanie to szukałem oryginalnego schematu Arduino UNO a nie klonów. Fakt chęci i zapał do pomysłu spowodowały, że nie do końca wszystko przemyślałem. Dopiero jak już zapał ten opadł sam faktycznie zauważyłem, że pewne rzeczy można było zrobić lepiej. Teraz jest mi łatwiej jak mam już działający fizycznie układ, zlokalizować co można poprawić a co zrobić lepiej. Generalnie powiem tak bo tak działają nawet firmy (nie wszystkie ale niektóre rozwiązania lub fragmenty są skopiowane) , które konkurują też między sobą, co nawet widać po Arduino, generalnie większość to po prostu kopie 1:1. Niektóre firmy nawet dodają coś od siebie przez co jest ciekawy wybór. Ja chciałem dla siebie przede wszystkim zrobić urządzenie, które będzie zawierało przydatne rozwiązania z tego co znalazłem w internecie i scalić je w jednym projekcie. To co zrobiłem na chwilę obecną to jest próba przed tym co będę dalej chciał zrobić. Tak więc dzięki tej dyskusji dowiedziałem się kilku rzeczy jak i także podczas uruchamiania tego projektu. Pozostaje mi tylko wyciągnąć wnioski, nie spieszyć się i dopracować to co już zrobiłem. Naprawdę bardzo dziękuje za wskazanie mi błędów oraz to co można było by lepiej zrobić i na pewno postaram się to zrobić. Najpierw zajmę się tymi diodami na na liniach MISO, MOSI, SCK. Pozdrawiam 2
Kasha Maj 30, 2022 Udostępnij Maj 30, 2022 Czy dobrze rozumiem, że owe szpilki to inaczej przebicie? Jeżeli nie to jaki jes odpowiednik tej nazwy po angielsku?
trainee Maj 31, 2022 Udostępnij Maj 31, 2022 13 godzin temu, Kasha napisał: jaki jes odpowiednik tej nazwy po angielsku? Voltage spike/surge.
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »