Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

Sterownik PLC na mikrokontrolerze ATmega1284P

lukraz1989 04 Mar 2017 16:20
  • Sterownik PLC na mikrokontrolerze ATmega1284P

    Witam,

    Chciałbym przedstawić projekt własnego sterownika PLC, opartego o mikrokontroler ATmega1284P. Jest to ATmega o największej ilości pamięci flash (128kB), dostępna w obudowie DIP, jaką udało mi się znaleźć. Sterownik składa się z pięciu modułów montowanych na wspólnej płycie głównej. Poniżej przedstawiam grafiki poszczególnych modułów.

    Sterownik PLC na mikrokontrolerze ATmega1284P Sterownik PLC na mikrokontrolerze ATmega1284P Sterownik PLC na mikrokontrolerze ATmega1284P Sterownik PLC na mikrokontrolerze ATmega1284P Sterownik PLC na mikrokontrolerze ATmega1284P Sterownik PLC na mikrokontrolerze ATmega1284P

    Sterownik charakteryzuje się następującymi parametrami:

    - 64kB pamięci programu
    - zasilanie 24VDC
    - 8 wejść cyfrowych 24VDC, izolowanych galwanicznie
    - 8 wyjść cyfrowych 24VDC, 500mA, izolowanych galwanicznie
    - 4 wejścia analogowe 0-10V
    - 4 wyjścia analogowe 0-10V
    - zegar czasu rzeczywistego RTC
    - interfejs komunikacyjny RS232

    Sercem jednostki CPU, jak już wcześniej wspomniałem, jest 8-bitowy mikrokontroler ATmega1284P. Oprócz niego moduł posiada także podtrzymywany bateryjnie układ RTC, dzięki któremu możliwe jest tworzenie funkcji uzależnionych od czasu. Do programowania sterownika wykorzystałem interfejs RS232. Moduł wejść cyfrowych składa się z 8 izolowanych galwanicznie wejść. Każde z nich wyposażone jest w diodę LED i zabezpieczone przed obciążeniem indukcyjnym. Podobnie jest w przypadku wyjść cyfrowych. Wejścia analogowe wykorzystują 10-bitowy przetwornik ADC ATmegi. Każde z nich zabezpieczone jest przeciwprzepięciowo za pomocą transila. W związku z tym, że użyty mikrokontroler nie został wyposażony w przetwornik DAC, budowa wyjścia analogowego opiera się o sygnał PWM, który filtrowany jest dolnoprzepustowo, a następnie wzmacniany. Dzięki temu na wyjściu otrzymujemy sygnał 0-10V zależny od wypełnienia PWM. Każde z wyjść również zabezpieczone jest transilem. W załączniku wstawiam PDF-y ze schematami (schematic.zip) i wydrukami płytek PCB (pcb.zip) oraz wsad mikrokontrolera i ustawienia fusebitów (atmega.zip). Wszystkie płytki oprócz płyty głównej (MB101) są dwustronne.

    Jeśli chodzi o koszty to za wszystkie elementy zapłaciłem ok. 100 zł. Najdroższa wyszła ATmega bo kosztowała aż 40 zł. Pracuję aktualnie nad kolejnym projektem PLC opartym o 32-bitowy STM32. Dla porównania cena takiego układu to ok. 15 zł. a możliwości o wiele większe. W załączniku wstawiam spis elementów (partlist.zip).

    Do programowania sterownika stworzyłem niezależne środowisko programistyczne napisane w języku C#. Jego najważniejsze funkcje to:

    - tworzenie oprogramowania PLC w języku FBD
    - zapisywanie i odczytywanie stworzonych projektów
    - możliwość dodawania wielu urządzeń w ramach jednego projektu
    - możliwość podziału programu na bloki
    - wgrywanie i pobieranie programu ze sterownika
    - wbudowany symulator
    - możliwość podglądu online
    - programowanie RTC czasem systemowym komputera

    Aplikację stworzyłem w języku angielskim, bo wydaje mi się, że jest bardziej uniwersalny. Aktualnie pracuję nad kolejną wersją, w której planuję dodać język polski. Starałem się aby obsługa środowiska była intuicyjna. W celu utworzenia nowego projektu wystarczy kliknąć przycisk „New Project”. Pojawi się kreator, gdzie będziemy mogli określić parametry projektu. Jeśli nie chcemy nic zmieniać wystarczy potwierdzać przyciskiem „OK”. Po utworzeniu projektu można już dodawać poszczególne funkcje z drzewka „Library”. Niestety aplikacja nie posiada żadnej pomocy. Zabrakło też czasu na stworzenie porządnej instrukcji, dlatego w razie pytań chętnie pomogę. Poniżej wstawiam przykładowy rzut z działania środowiska w trybie online a w załączniku jego instalkę (setup.exe).

    Sterownik PLC na mikrokontrolerze ATmega1284P

    Na zakończenie powiem, że projekt powstał w celach edukacyjnych ale ze względu na to, że nie lubię tworzyć sam dla siebie postanowiłem podzielić się nim z innymi. Może komuś z Was się przyda i będzie z niego jakiś pożytek. Pozdrawiam i czekam na opinie.

  • #2 04 Mar 2017 18:32
    Simon79
    Poziom 14  

    Witam,
    Własny sterownik PLC z pewnością daje wiele satysfakcji przy jego tworzeniu ale i wykorzystaniu w praktyce. Wiem, bo mimo iż mam LOGO!24 i S7200 CPU214 wykonałem jeszcze dwie "samoróbki" - jeden na bazie DCI-PLC, drugi podobnie jak kolegi, na ATMEGA32 i LDmicro. Obydwa niestety nie posiadają np. zegara czasu rzeczywistego.
    Taki PLC oprócz walorów edukacyjnych, ze względu na ograniczenia, może przydać się w "przydomowej automatyce".
    Jeśli chodzi o konstrukcję wejść/wyjść, zasilanie to jest dość minimalistyczna, ale mnie się podoba, szczególnie ta aplikacja.
    LOGO SOFT COMFORT to może nie jest, ale i tak robi wrażenie :spoko: .
    Przydała by się krótka instrukcja obsługi programu.
    Z pewnością wykonam Kolegi sterownik.
    Pozdrawiam.

  • #3 04 Mar 2017 21:03
    bisz
    Poziom 18  

    W jakim formacie napisany program LD/FBD trafia do sterownika (mikrokontrolera)?
    Czy kontroler posiada bootloader/firmware który realizuje wyżej stworzony kod ?

  • #4 04 Mar 2017 21:22
    lukraz1989
    Poziom 4  

    Simon stworzenie własnego sterownika rzeczywiście daje sporo satysfakcji. Chciałbym go jeszcze wykorzystać do sterowania jakimś prostym układem, bo do tej pory testowałem go tylko na biurku podłączając na wyjście niewielki wentylator. Co do konstrukcji to masz rację - jest minimalistyczna, ale właściwie to takie były moje założenia. Nie zamierzam wyprzeć Siemensa z rynku :D W projekcie wykorzystałem montaż przewlekany, tak abym mógł zlutować płytki w domu bez używania profesjonalnego sprzętu. W tym przypadku każdy dodatkowy element zabiera sporo miejsca na płytce, co jest pewnym ograniczeniem. Jak już wspomniałem zamierzam opracować kolejną wersję sterownika na STM32. Tutaj już będę musiał użyć techniki SMD i pewnie ulepszę konstrukcję.
    Aplikacja posiada na razie podstawowe funkcje. Duży nacisk kładłem na to, żeby w miarę dobrze wyglądała i dobrze działała. Sporo czasu straciłem na to aby wyeliminować wszystkie nieobsłużone wyjątki (jeśli projektujesz aplikacje na Windowsa to będziesz wiedział o co mi chodzi). Kolejnym krokiem jaki zamierzam zrobić to dodać możliwość tworzenia bloków funkcyjnych no i oczywiście zrobienie instrukcji. Może na początek jakiś krótki opis działania wszystkich funkcji.
    Dziękuję za zainteresowanie i pozdrawiam.

    Dodano po 13 [minuty]:

    Bisz stworzona aplikacja przy kompilacji programu tłumaczy go na język IL (czyli coś w rodzaju assemblera). Instrukcje w tej postaci trafiają do pamięci flash ATmegi. Pamięć flash podzieliłem na dwie sekcje (po 64kB). Jedną zajmuje oczywiście firmware, a do drugiej zapisywane są instrukcje programu. Firmware posiada funkcję, która skanuje pamięć programu i w zależności od znalezionej tam instrukcji wykonuje odpowiednie działanie.
    Pozdrawiam.

  • #6 04 Mar 2017 22:07
    Marek_Ertew
    Poziom 12  

    Przesyłam garść konstruktywnej krytyki.

    lukraz1989 napisał:

    Bisz stworzona aplikacja przy kompilacji programu tłumaczy go na język IL (czyli coś w rodzaju assemblera). Instrukcje w tej postaci trafiają do pamięci flash ATmegi. Pamięć flash podzieliłem na dwie sekcje (po 64kB). Jedną zajmuje oczywiście firmware, a do drugiej zapisywane są instrukcje programu. Firmware posiada funkcję, która skanuje pamięć programu i w zależności od znalezionej tam instrukcji wykonuje odpowiednie działanie.
    Pozdrawiam.

    Skoro cały firmware zmieścił się w 64kB, to zastosował bym procesor typu ATmega644 a wszystkie instrukcje logiczne wyrzucił do zewnętrznej pamięci eeprom lub dataflash.
    Z punktu widzenia amatorskiego różnica jest praktycznie żadna. Jednakże w przypadku silnych zakłóceń elektromagnetycznych (warunki przemysłowe) istnieje ryzyko że podczas nadpisywania pamięci flash uC nadpisze istotny fragment pamięci i będzie po zabawie.

    Druga rzecz, ja bym nie łączył wejść/wyjść cyfrowych bezpośrednio pod piny uC lecz zastosował zatrzaski 8-bitowe. W ten sposób jedna magistrala 8-biowa może obsłużyć wiele modułów we/wy, a każdy z nich potrzebuje tylko jedną linię do zatrzaśnięcia stanu wyjść lub odczytania wejść.

  • #7 04 Mar 2017 22:22
    lukraz1989
    Poziom 4  

    Simon aplikacja posiada dwa przykładowe projekty. Domyślna lokalizacja to Dokumenty\PacsiSoft\Projects\Examples. Jeden to rozruch silnika gwiazda-trójkąt, a drugi to sterowanie dwuręczne. W pierwszym przypadku należy ustawić DI3 (Stop awaryjny) w stan wysoki, a potem przytrzymać przez sekundę DI1 (Start). Na 10 sekund zostanie ustawione wyjście DO1 (gwiazda) i zacznie migać DO3 (lampka). Po sekundowej przerwie zostanie wysterowane DO2 (trójkąt) a lampka (DO3) zaświeci się na stałe. Po wciśnięciu DI2 (Stop) przez sekundę silnik zostanie wyłączony.
    W drugim projekcie należy ustawić DI3 (Stop awaryjny) w stan wysoki i jednocześnie (maksymalnie w przeciągu 1 sekundy) wcisnąć DI1 oraz DI2. Wtedy zostanie wysterowane wyjście DO1. Po ustawieniu któregokolwiek wejścia w stan niski wyjście DO1 zostaje ustawione na 0.

  • #9 04 Mar 2017 23:17
    lukraz1989
    Poziom 4  

    Marek_Ertew myślałem o zastosowaniu mniejszej ATmegi i użyciu pamięci zewnętrznej jednak zdecydowałem się zmieścić wszystko w jednym mikrokontrolerze. Użycie zewnętrznej pamięci skomplikowałoby trochę projekt zarówno od strony sprzętowej jak i programistycznej. Podczas działania sterownika pamięć flash nie jest nadpisywana. Wszystkie zmienne trzymane są w pamięci SRAM.
    Co do konstrukcji wejść/wyjść to rzeczywiście fajny pomysł. W pierwszej wersji nie myślałem o tym, żeby rozszerzać sterownik o dodatkowe moduły ale możliwe, że ulepszę kolejną konstrukcję o taką funkcję.
    Pozdrawiam.

  • #10 05 Mar 2017 00:50
    Paweł Es.
    Pomocny dla użytkowników

    Te wejścia DI to są jakieś dziwne, one na pewno działają ?

    Dioda na wejściu (zabezpieczająca) powinna być albo szeregowo z wejściem (diodą transoptora) albo antyrównolegle do niej (za a nie przed rezystorem) bo przy przypadkowym podłączeniu odwrotnym poleci ona albo źródło zewnętrzne.

    W układzie wyjściowym czyli po tranzystorze transoptora nie ma jednoznacznego wymuszenia stanu niskiego na wejściu procesora przez co układ może być wrażliwy na zakłócenia. Dioda świecąca ma wysokie napięcie przewodzenia a bez polaryzacji nie przewodzi prądu, więc stanowi dużą rezystancję czyli wejście niejako wisi w powietrzu na co zakłócenia tylko czekają. Trzeba tam dać jakiś rezystor bezpośrednio od emitera fototranzystora do masy, równolegle do istniejących rezystora i diody LED.

  • #11 05 Mar 2017 08:42
    Sonku01
    Poziom 11  

    Witam,

    Mogę liczyć na źródła do mikrokontrolera ATmega?

    Pozdrawiam
    sonku01(malpa)wp.pl

  • #13 05 Mar 2017 13:57
    gosztekseba
    Poziom 31  

    Witam, zarowno projekt sprzetowy jak i aplikacja wyglada fajnie - popieram takie działania. Czy aplikacja posiada protokół MODBUS RTU? Jeśli nie to czy kolega zamierza coś takiego zaimplementować? Wykonałem 2 projekty sterowników PLC, ale Modbus RTU dopiero ostatnio udało mi się dodać, ale w postaci dodatkowego modułu. Pozdrawiam i powodzenia w rozwijaniu sterownika:)

  • #14 05 Mar 2017 14:48
    Szaryszereg
    Poziom 6  

    Super projekt gdyby była możliwość chętnie bym zobaczył kod źródłowy tej aplikacji. Chciałbym zbudować coś podobnego

  • #15 05 Mar 2017 16:37
    lukraz1989
    Poziom 4  

    Paweł Es. napisał:
    Te wejścia DI to są jakieś dziwne, one na pewno działają ?

    Dioda na wejściu (zabezpieczająca) powinna być albo szeregowo z wejściem (diodą transoptora) albo antyrównolegle do niej (za a nie przed rezystorem) bo przy przypadkowym podłączeniu odwrotnym poleci ona albo źródło zewnętrzne.

    W układzie wyjściowym czyli po tranzystorze transoptora nie ma jednoznacznego wymuszenia stanu niskiego na wejściu procesora przez co układ może być wrażliwy na zakłócenia. Dioda świecąca ma wysokie napięcie przewodzenia a bez polaryzacji nie przewodzi prądu, więc stanowi dużą rezystancję czyli wejście niejako wisi w powietrzu na co zakłócenia tylko czekają. Trzeba tam dać jakiś rezystor bezpośrednio od emitera fototranzystora do masy, równolegle do istniejących rezystora i diody LED.


    Co do diody na wejściu to faktycznie lepiej jak by była za rezystorem. Wtedy przy odwrotnym podłączeniu będzie bezpieczna. Poprawię schemat i płytkę.

    Podciągnięcie emitera do masy poprzez rezystor rzeczywiście poprawia sytuację. Poniżej wstawiam wyniki symulacji bez i z rezystorem.

    Sterownik PLC na mikrokontrolerze ATmega1284P Sterownik PLC na mikrokontrolerze ATmega1284P

    W pierwszym przypadku przy stanie niskim mamy 275, uV w drugim około 550 nV. Wejście ATmegi w stanie wysokim przy zasilaniu 5V potrzebuje co najmniej 0,6 * Vcc = 3V (tak jest w dokumentacji). Myślę, że w warunkach domowych takie skoki napięcia raczej nie będą występować ale warto by się zastanowić nad dodaniem tego rezystora. Jak mi się zmieści na płytkę to dodam.

    Dodano po 1 [godziny] 2 [minuty]:

    Sonku01 napisał:
    Witam,

    Mogę liczyć na źródła do mikrokontrolera ATmega?

    Pozdrawiam
    sonku01(malpa)wp.pl


    Szaryszereg napisał:
    Super projekt gdyby była możliwość chętnie bym zobaczył kod źródłowy tej aplikacji. Chciałbym zbudować coś podobnego


    Nie obraźcie się na mnie ale nie chcę udostępniać kodów źródłowych. Tworzenie aplikacji i programu mikrokontrolera kosztowało mnie ponad rok pracy. Zachęcam do samodzielnego projektowania. Jeśli będziecie mieli jakieś pytania to chętnie pomogę.

    Pozdrawiam.

    Dodano po 6 [minuty]:

    leonow32 napisał:
    Pomyślane jest bardzo ładnie i fajna jest koncepcja modułowa. Masz w planach jakieś dodatkowe moduły?

    Dlaczego wszystko robisz na elementach przewlekanych? SMD lutuje się znacznie łatwiej :) wbrew pozorom


    Myślałem żeby zrobić jeszcze moduł wyjść przekaźnikowych albo mieszany np. 4 wyjścia tranzystorowe i 4 przekaźnikowe.
    No z tymi elementami SMD to mnie zainspirowałeś:) Naprawdę lutuje się je łatwo? Nigdy nie próbowałem. Wystarczy zwykła oporówka czy trzeba mieć Hot Air?

    Dodano po 11 [minuty]:

    gosztekseba napisał:
    Witam, zarowno projekt sprzetowy jak i aplikacja wyglada fajnie - popieram takie działania. Czy aplikacja posiada protokół MODBUS RTU? Jeśli nie to czy kolega zamierza coś takiego zaimplementować? Wykonałem 2 projekty sterowników PLC, ale Modbus RTU dopiero ostatnio udało mi się dodać, ale w postaci dodatkowego modułu. Pozdrawiam i powodzenia w rozwijaniu sterownika:)


    Pierwsza wersja sterownika miała być prosta. Nie implementowałem żadnego dodatkowego protokołu oprócz RS232. Z tym Modbusem to fajna sprawa bo sterownik mógłby pracować w sieci. Myślę, że zaimplementuję go w kolejnej wersji.
    Pozdrawiam.

  • #16 05 Mar 2017 18:33
    Szaryszereg
    Poziom 6  

    jest to złożony projekt jestem początkującym w tej tematyce projekt jest super :) jak zbudować aplikację w C# aby można było przesyłać logikę do procka ?? na czym się wzorowałeś jak to zrobić ??

  • #17 05 Mar 2017 20:03
    lukraz1989
    Poziom 4  

    Szaryszereg napisał:
    jest to złożony projekt jestem początkującym w tej tematyce projekt jest super :) jak zbudować aplikację w C# aby można było przesyłać logikę do procka ?? na czym się wzorowałeś jak to zrobić ??


    Cieszę się, że projekt Ci się podoba. Aplikację tworzyłem w Visual Studio używając interfejsu Windows Forms. Aktualnie lepszym rozwiązaniem jest WPF bo daje więcej możliwości. Jak zaczynałem projektować to niestety nie wiedziałem o jego istnieniu. Aktualnie projektuję drugą wersję aplikacji ale już w WPF.

    Do mikrokontrolera przesyłane są instrukcje znak po znaku przez RS232. Instrukcje są w języku IL, który opracowałem na podstawie języków innych producentów (np. Siemensa, tam to się nazywa STL). Zapisywane są one w pamięci flash mikrokontrolera. Po przełączeniu sterownika w tryb RUN wywoływana jest funkcja która w pętli odczytuje te instrukcje i je wykonuje.

    Samo zaimplementowanie obsługi RS232 w C# nie jest trudne. Język ten posiada bardzo rozbudowaną bibliotekę funkcji, które znacznie ułatwiają programowanie. Wystarczy stworzyć odpowiedni obiekt, zainicjalizować go i już można wysyłać instrukcje.

  • #18 05 Mar 2017 20:20
    Szaryszereg
    Poziom 6  

    aplikacje typu rs232 już pisałem czy też obsługujące USB w stm32 po prostu jeszcze nie wykorzystywałem tego w takich projektach jak twój aczkolwiek myślałem o tym... wszystko to jest dla mnie ciekawe i na pewno będę coś podobnego chciał zrobić. Dzięki za inspiracje może uda mi się coś podobnego zrobić

  • #19 06 Mar 2017 17:44
    atmosferyczny
    Poziom 9  

    Czy jest jakiś ustandaryzowany IL?
    Wtedy byłoby to bardziej uniwersalne, wymienne...

  • #20 06 Mar 2017 18:07
    lukraz1989
    Poziom 4  

    atmosferyczny napisał:
    Czy jest jakiś ustandaryzowany IL?
    Wtedy byłoby to bardziej uniwersalne, wymienne...


    Języki PLC opisuje norma IEC-61131-3, ale nie wiem co jest w niej konkretnie zawarte. Myślę, że narzuca ona pewne standardy odnośnie struktury języka ale pozostawia producentowi wolną rękę w pewnych kwestiach takich jak nazwy konkretnych instrukcji itp. W IL zdarzyło mi się programować Siemensy (chociaż Siemens nazywa swój język STL) i Mitsubishi. Nazwy ich instrukcji nie są identyczne.

  • #21 06 Mar 2017 19:47
    cosimo
    Poziom 11  

    Gratuluje projektu – robi wrażenie !
    Mam pytanie jak mikrokontroler przetwarza IL(STL) w formie tekstowej czy zamieniasz na jakiś własny binarny format instrukcji. Druga sprawa jaki masz czas obiegu pętli dla załączonych przykładów ? Symulator pokazuje 10ms – ale mam wrażenie że co bym nie dopisał zawsze pokazuje to samo.

  • #22 06 Mar 2017 20:09
    lukraz1989
    Poziom 4  

    cosimo napisał:
    Gratuluje projektu – robi wrażenie !
    Mam pytanie jak mikrokontroler przetwarza IL(STL) w formie tekstowej czy zamieniasz na jakiś własny binarny format instrukcji. Druga sprawa jaki masz czas obiegu pętli dla załączonych przykładów ? Symulator pokazuje 10ms – ale mam wrażenie że co bym nie dopisał zawsze pokazuje to samo.


    Instrukcje są zapisywane w pamięci w postaci tekstowej. Przyznam, że chciałem (i cały czas chcę) zrobić kompilator na format binarny. Na pewno zaoszczędziłbym w ten sposób trochę miejsca w pamięci i pewnie zmalałby czas cyklu sterownika. Zabrakło mi jednak czasu, żeby się z tym pobawić. Ale wszystko przede mną:)
    Co do symulatora to on ma domyślnie ustawione 10 ms. Musiałem tak zrobić, bo gdy pomiędzy obiegami pętli nie było żadnej przerwy program zawieszał się tzn. symulacja cały czas działała ale nie można było nic innego zrobić. W sterowniku program wykonuje się w 7 ms gdy jest w trybie online. W opisie projektu załączyłem zrzut. Tutaj trzeba doliczyć jeszcze czas wysyłania wszystkich zmiennych przez RS232 co znacznie wydłuża cykl. Spróbuje napisać program który zmierzy mi czas cyklu i wyrzuci w formie binarnej na wyjścia cyfrowe bo sam jestem ciekawy jaki będzie wynik.

  • #23 07 Mar 2017 12:22
    cosimo
    Poziom 11  

    Dzięki. Intryguje mnie jeszcze sama synteza FB do STL. Temat wydaje się nie trywialny. Ustalasz na początku kolejność przetwarzania tych bloków np. według odległości od źródła, czy też może kryterium znanego stanu na wejściu bloku ?

  • #24 07 Mar 2017 13:30
    lukraz1989
    Poziom 4  

    Jeśli chodzi o kolejność przetwarzania bloków to sprawa jest prosta. Dałem użytkownikowi możliwość jej ustalenia. Służy do tego nr bloku znajdujący się jego w lewym górnym rogu, który można zmienić.

  • #25 08 Mar 2017 18:32
    Paweł Es.
    Pomocny dla użytkowników

    Cytat:
    Podciągnięcie emitera do masy poprzez rezystor rzeczywiście poprawia sytuację. Poniżej wstawiam wyniki symulacji bez i z rezystorem.
    W pierwszym przypadku przy stanie niskim mamy 275, uV w drugim około 550 nV. Wejście ATmegi w stanie wysokim przy zasilaniu 5V potrzebuje co najmniej 0,6 * Vcc = 3V (tak jest w dokumentacji). Myślę, że w warunkach domowych takie skoki napięcia raczej nie będą występować ale warto by się zastanowić nad dodaniem tego rezystora.



    Proszę się nie sugerować wynikami symulacji pokazującej wyidealizowany układ.

    Proszę dodać trochę realizmu do układu, w postaci np. upływności pomiędzy nóżkami tranzystora transoptora, np. w postaci wrzuconego równolegle do tranzystora rezystora 200 kΩ, zobaczy Pan jak nagle z mikrowoltów się zrobią wolty (spadek napięcia na diodzie LED) na wejściu co powoduje, że wejście znajdzie się dużo bliżej progu przełączania niż powinno być przy zerowym napięciu wejściowym.

    Upływność pojawi się z czasem na skutek osiadania kurzu i wilgoci z powietrza, i układ może się zacząć zachowywać w sposób nieprzewidywalny.

    W profesjonalnych układach wejść dwustanowych stosuje się trochę inne rozwiązania, a obowiązkową częścią toru analogowego przed procesorem jest filtr dolnoprzepustowy RC wycinający wszelkie śmiecie. Sterownik próbkuje wejścia powiedzmy co 10ms (100Hz) czyli zgodnie z teorią filtr RC powinien mieć częstotliwość graniczną nie większą niż 50Hz.

    W załączniku jest schemat wejść zrysowany z profesjonalnego sterownika PLC.

    3 diody (wspólne dla wszystkich wejść) ustalają próg zadziałania tychże wejść, a jednocześnie zabezpieczają przed odwrotnym podaniem napięcia na wejście. Dla większej ilości wejść (w źródłowym sterowniku było ich 24) można dać diody serii 1N400x

    W oryginalne z kondensatorów filtrów poszczególnych torów sygnał był podawany na wejścia układów 74HC241 obsługujących po 8 wejść (wyjścia były na wspólną magistralę 8 bitową do procesora). Tu sygnały można podać bezpośrednio na wejścia procesora (Atmegi mają na wejściu układy Schmitta, więc dodatkowo uodparnia to wejście na zakłócenia.)
    W kolektorach transoptorów są rezystory i diody świecące sygnalizujące wysterowanie danego wejścia.

    Przy podanych wartościach elementów wejścia są na 24V (rezystory 1k na wejściach transoptorów o mocy 0.25W - w oryginale to były drabinki 4 rezystorowe). Ciekawostką, którą spotkałem w tym układzie były drabinki ... kondensatorowe (po 4 kondensatory 10nF w jednym bloczku ceramicznym 5 wyprowadzeniowym, jak na razie to nie spotkałem czegoś takiego w naprawianych czy demontowanych urządzeniach ;)

  • #26 08 Mar 2017 21:51
    lukraz1989
    Poziom 4  

    Dziękuję za cenne rady. Na pewno wykorzystam je w kolejnych projektach. W szczególności przyda mi się załączony schemat. Ja sam nie mogłem nic ciekawego znaleźć dlatego musiałem trochę improwizować. W przyszłości będę starał się zwracać większą uwagę na eliminację zakłóceń a nie tylko na to żeby układ działał w symulatorze:)
    Pozdrawiam.

  • #27 09 Mar 2017 07:17
    gpls
    Poziom 8  

    Przechodzi certyfikacje LVD i EMC?
    Miał robione badania w komorze na emisję i promieniowanie, próby na przepiecia, próby na zakłócenia zaburzajace emitowane przez klamre?
    Jeżeli nie, to projekt nie jest skończony nawet na etapie prototypu.

  • #28 09 Mar 2017 07:53
    lukraz1989
    Poziom 4  

    Myślę, że nie zrozumiałeś istoty projektu. Jak już wspominałem jest to projekt AMATORSKIEGO sterownika, który powstał w celach edukacyjnych. Nie zamierzam stosować go przecież w przemyśle. Zrobiłem go dla własnej satysfakcji. Nie rozumiem więc do czego byłyby mi potrzebne wymienione przez Ciebie certyfikaty.

  • #29 09 Mar 2017 08:10
    gpls
    Poziom 8  

    Wiedza na temat spełnienia wymagań dalaby Ci odpowiedź najważniejsza w celach edukacyjnych: czy umiesz projektować urządzenia , czy tylko rysować schematy.

  • #30 09 Mar 2017 08:45
    lukraz1989
    Poziom 4  

    Z jednej strony masz rację, ale myślę że dla amatorskich projektów szkoda czasu i pieniędzy na takie zabawy. Gdybym chciał skonstruować urządzenie i wypuścić je na rynek, to oczywiście musiałbym przeprowadzić odpowiednie badania i włożyć trochę więcej czasu w jego zaprojektowanie. W tej prostej konstrukcji najważniejsze dla mnie jest to, że w ogóle działa.