
Witam,
Chciałbym przedstawić swoją konstrukcję, która była tematem mojej pracy na studiach inżynierskich.
W dzisiejszych czasach prawie nikt już nie bawi się bramkami logicznymi, licznikami, rejestrami, które zostały wyparte przez sterowniki PLC. Urządzenia te wykorzystujemy do wykonywania pewnych zadań/sekwencji, ale dla przeciętnego kowalskiego ceny firmowych sterowników np. Siemensa są nie do przełknięcia(nie poruszając tematu chińskich sterowników). Dlatego większość ludzi decyduje się na naukę języka C/Basic i wykorzystaniu mikrokontrolera AVR lub ostatnio ARM aby zaoszczędzić pieniądze, co jest słusznym posunięciem. A co jeśli mieliśmy do czynienia wcześniej ze sterownikami PLC i nie chcemy uczyć się od podstaw języka C oraz wertować noty katalogowe mikrokontrolera szukając który bit, którego rejestru odpowiada za dany preskaler w przypadku użycia Timera itd.? Tu z pomocą może przyjść środowisko LDmicro, dzięki któremu możemy napisać program w języku drabinkowym LAD i przekonwerterować go do pliku wsadowego .hex, który wgrywamy poprzez programator do mikrokontrolera. Jest to też dobre rozwiązanie dla osób zaczynających swoją przygodę z AVR - bardzo łatwo nauczyć się graficznego sposobu programowania mikrokontrolera i może być pomostem między językiem C, którego naukę szczerze polecam. Sam zanim zacząłem korzystać z LDmicro miałem dobrze opanowany język C.
Podstawowym założeniami przy budowie tego sterownika były:
– ogólnodostępne części elektroniczne,
– programowanie przy pomocy języka drabinkowego za pomocą zewnętrznego złącza,
– izolacja mikrokontrolera od obwodów wejścia i wyjścia (ja musiałem bo było to narzucone, ale wymagane nie jest),
– uniwersalne wejścia cyfrowe,
– wyjścia tranzystorowe o wydajności min. 1A,
– sygnalizacja stanu wejść i wyjść za pomocą diod LED,
– obwody drukowane o grubości ścieżek możliwych do wytrawienia metodą termotransferu,
– stosunkowo niski koszt konstrukcji przy zachowaniu dobrych parametrów,
– moduł ethernetowy podłączany do sterownika za pomocą wejść cyfrowych(możliwość wysterowania samych przekaźników bezpośrednio z modułu ethernetowego),
– zasilanie modułu ethernetowego bezpośrednio ze sterownika.


Obwód wejść:


Obwód wejściowy zbudowany jest w taki sposób, aby wejście było uniwersalne 5-24V. Poprzez zastosowanie transoptora PC817 porty wejściowe sterownika oraz komputer podłączony pod sterownik są odizolowane od obwodów wejściowych. Poprzez zastosowanie rezystora 2,7 kΩ, prąd płynący przez diodę transoptora jest ograniczony do wartości bezpiecznych dla tego elementu. Rezystor ten także realizuje funkcję uniwersalności wejścia. Jeżeli na wejściu pojawi się stan wysoki o potencjale 5-24V, transoptor zwiera do masy bazę tranzystora PNP BC556. Jak wiadomo, tranzystor bipolarny typu PNP po podaniu na bazę stanu niskiego, zaczyna przewodzić na złączu emiter-kolektor. Do każdego portu wejściowego mikrokontrolera podłączone zostały dwa rezystory 1kΩ, jeden ograniczający prąd przy pojawieniu się stanu wysokiego, a drugi zwiera port do masy w przypadku stanu niskiego na danym porcie. Układ zrealizowany jest w ten sposób, ponieważ porty wejściowe w mikokontrolerach uaktywniają się przy zwarciu ich do masy. Złącze JP1 wlutowane jest bezpośrednio w obwód centralny mikrokontrolera, a poszczególne wejścia X są zrealizowane na złączach ARK-5, które wyprowadzone są na zewnątrz sterownika.
Obwód wyjść:


Obwód wyjściowy sterownika zrealizowany został także w oparciu o transoptor PC817 podobnie jak w przypadku obwodu wejściowego. Ten zabieg z kolei zabezpiecza mikrokontroler sterownika oraz komputer w fazie programowania przed zakłóceniami pochodzącymi z obwodu wyjściowego. Firmowe sterowniki odizolowane są od obwodów wyjściowych w podobny sposób. Poszczególne porty wyjściowe sterownika wlutowane są bezpośrednio do złącza JP2 na płytce obwodów wyjściowych. Między transoptorami PC817, a portami mikrokontrolera znajdują się rezystory 1kΩ ograniczające prąd na wejściu transoptora. Obwód wyjściowy pracuje w podobny sposób jak w przypadku obwodu wejściowego, jeżeli chodzi o wysterowanie tranzystora na wyjściu transoptora, a różni się tylko typem tranzystora – tranzystor małej mocy BC556 zastąpiony został przez tranzystor średniej mocy BD140. W chwili pojawienia się „1” na wyjściu mikrokotrolera (cewka danego wyjścia została załączona), transoptor zwiera bramkę tranzystora BD140 do masy. Po pojawieniu się „0” na bramce tranzystora PNP, potencjał przyłożony do emitera tranzystora, pojawia się na jego kolektorze. Tranzystor jest średniej mocy, ponieważ wyjście potrzebuje większej wydajności prądowej niż wejście sterownika - w tym przypadku jest to 1,5A. Płytka została tak zaprojektowana, aby możliwa była zmiana napięcia na wyjściach sterownika – na złącze JP3 podawane jest 24V.
Wejścia ADC podpięte są pod mikrokontroler tylko poprzez zabezpieczenie diodą zenera 5V1.
Płytka centralna:


Obwód sygnalizacji LED x2:


Moduł ethernetowy :



Podsumowując, sterownik zbudowany został z ogólnodostępnych elementów elektronicznych, a obwody drukowane wykonane w warunkach domowych. Wyjścia cyfrowe sterownika zostały zrealizowane w oparciu o klucze tranzystorowe BD140, charakteryzujące się między innymi maksymalnym prądem kolektora IC=1,5A. Ta cecha sterownika pozwala na załączanie nie tylko małych przekaźników, ale nawet dużych styczników z cewkami 24V. Płytki obwodów drukowanych zostały wykonane za pomocą metody termotransferu (żelazko), a wytrawione przy pomocy nadsiarczanu sodu (B327). Sterownik zasilany jest poprzez zmodyfikowany zasilacz impulsowy (ładowarka laptopowa) o mocy 90W. Zbudowany sterownik PLC_AVR udowadnia, że możliwe jest zbudowanie sterownika PLC w domowych warunkach, programowanego przy pomocy języka drabinkowego. Środowisko Ldmicro pozwala na zbudowanie bardziej zaawansowanego sterownika, z wyjściem PWM, obsługującego komunikację poprzez RS232 czy RS485, a także z dużo większą ilością wejść/wyjść. W oparciu o transmisję szeregową można także sterować wyświetlaczem graficznym pozwalającym na wizualizację procesu technologicznego. Przy budowie modułu ethernetowego wykorzystano mikrokontroler Atmega328P ze względu na większą ilość pamięci flash oraz pamięci RAM. Ten układ pozwala na bezproblemowe działanie stosu TCP/IP niezbędnego do działania w sieci. W module zastosowane zostało gotowe rozwiązanie w oparciu o układ ENC28J60. Płytka ta ze względów ekonomicznych nie została wykonana samodzielnie, ponieważ gotowy moduł wraz z gniazdkiem RJ45 kosztował tyle samo co sam układ ENC28J60. Moduł posiada zbyt mało pamięci flash, aby na stronie znalazły się obrazki, ładnie sygnalizując stany poszczególnych wyjść. Ten problem można rozwiązać na dwa sposoby:
rozbudowa modułu o czytnik kart pamięci i umieszczenie na niej plików graficznych
umieszczenie plików graficznych na zewnętrznym serwerze
W wyżej przedstawionym module miało zostać wykorzystane drugie rozwiązanie, jednak w przypadku działania modułu w sieci wewnętrznej danego zakładu, bez dostępu do Internetu, strona główna modułu nie wyglądałaby dobrze bez wyświetlonych grafik. Założeniem dla modułu była prostota i szybkość działania, dlatego szata graficzna w przeglądarce internetowej jest czysto tekstowa. Można też uznać to za zaletę, ponieważ w razie podłączenia modułu do sieci Internet, użytkownicy smartfonów zużyją mniej danych pakietowych przy przeglądaniu strony bez plików graficznych. Moduł spełnia swoje zadanie, a może być wykorzystany także samodzielnie bez sterownika, załączając przekaźniki z cewką 5V. Jednak przy działaniu samodzielnym można sterować urządzeniami tylko na zasadzie włącz/wyłącz. Ze względu na obecność transoptorów na wejściu sterownika nie istniała potrzeba stosowania ich także na wyjściu modułu ethernetowego.
Wygląd zewnętrzny sterownika:

Opis wyprowadzeń sterownika:
1 → Wyjścia cyfrowe Y0-Y7
2 → GND wyjść cyfrowych sterownika
3 → Sygnalizacja stanu wyjść
4 → Sygnalizacja stanu wejść
5 → +5V dla ADC oraz zasilania modułu ethernetowego
6 → +24V dla wejść cyfrowych sterownika
7 → Przewód zasilacza
8 → Wejścia cyfrowe X0-X7
9 → Wejścia analogowo-cyfrowe ADC0-ADC3
10 → Złącze programowania (od spodu)
Widok zewnętrzny modułu ethernetowego wraz z opisem wyprowadzeń:

Opis wyprowadzeń modułu ethernetowego:
11 → Zasilanie modułu (od góry GND +5V)
12 → Wyjścia modułu (Od dołu X7-X0)
13 → Przycisk zmiany adresu IP
14 → Złącze ethernetowe RJ-45
Współpraca sterownika z modułem ethernetowym
Po zbudowaniu sterownika narodził się pomysł, aby do sterowania urządzeniem wykorzystać prosty serwer www, który pozwalałby na załączenie każdego z 8 wejść sterownika z poziomu dowolnej przeglądarki internetowej. W ten sposób mając przy sobie smartfon'a mamy możliwość sterowania danym urządzeniem z każdego miejsca na Ziemi, w którym mamy możliwość podłączenia się do Internetu. W sieci można znaleźć wiele przykładów serwerów www na mikrokontrolerze, ale najczęściej są to przykłady, w których ten serwer służy do wyświetlania danych z czujników (temperatury, wilgotności itd.) lub zdalnego załączenia przekaźnika(np. załączenie oświetlenia). Największym problemem w przypadku budowy takiego serwera jest konieczność napisania stosu TCP/IP. Autorzy strony internetowej http://www.tuxgraphics.org/ pracowali dość długo nad stworzeniem małego i szybkiego stosu TCP/IP pod mikrokontrolery, które posiadają bardzo mało pamięci operacyjnej oraz pamięci EEPROM. Programiści z tej strony internetowej stworzyli przy pomocy tego stosu serwer API w oparciu o małe 8-bitowe mikrokontrolery Atmega88, Atmega168 i Atmega328. Warstwa transportowa stosu składa się z dwóch podstawowych typów protokołów: UDP i TCP. Oba te protokoły różnią się od siebie tym, że protokół UDP nie daje żadnej gwarancji dotarcia pakietów danych do celu, ale jest szybszy od TCP. Protokół TCP zapewnia pewny kanał transmisji danych, w którym dotarcie danych jest potwierdzane przez odbiorcę. Protokół TCP do połączenia wymaga zgody drugiego urządzenia, a w przypadku protokołu UDP nie musi on uzyskiwać zgody - po prostu wysyła dane do określonego odbiorcy bez sprawdzania czy całość tych danych do niego dotarła. W stosie zawarty jest także protokół ARP, czyli protokół odwzorowania adresów. Protokół ten wysyła pytanie o adres MAC i czeka na odpowiedź urządzeń. Komunikat ARP przesyłany jest wewnątrz ramki sprzętowej (ethernet). W celu wysłania pakietu danych ustalony musi być adres sprzętowy (MAC) odpowiadający adresowi IP.Ze względu na małą moc obliczeniową mikrokontrolerów oraz fakt, że posiadają tylko 1-2kB pamięci RAM należało stworzyć taki stos, aby nie powodował pracy procesora na granicy możliwości. Można to osiągnąć na dwa sposoby: ograniczyć ilość równoległych połączeń(sesji) z serwerem (np. maksymalnie 2-3 połączeń równoległych) lub zmniejszyć ilość danych pojedynczego pakietu IP. Autorzy stosu pokazali przykład takiego serwera www na mikrokontrolerze, na którym opiera się moduł ethernetowy pracujący wraz z prezentowanym sterownikiem PLC_AVR. Stos podzielili oni na następujące pliki:
enc28j60.c oraz plik nagłówkowy enc28j60.h → gotowy driver dla modułu ethernet dostarczony przez producenta układu ENC28j60.
ip_arp_udp_tcp.c oraz plik nagłówkowy ip_arp_udp_tcp.c → wszystkie podstawowe funkcje
stosu TCP.
ip_config.h → plik nagłówkowy, który służy do konfiguracji stosu TCP.
net.h → plik nagłówkowy, w którym zawarte są wszelkie definicje konieczne do obsługi drivera.
timeout.h → plik nagłówkowy, w którym zawarte są funkcje potrzebnych opóźnień czasowych.
websrv_help_functions.h →plik nagłówkowy dostarczony przez producenta modułu ethernetowe
go, w którym znajdują się funkcje potrzebne do działania protokołu IP.
Do programu głównego main.c zostały dołączone powyższe biblioteki i zostały one odpowiednio zainicjowane. W oryginalnym pliku main.c ze strony autorów stosu zostały wprowadzone zmiany, które dostosowały serwer do zastosowania w sterowniku.



Możliwa jest także zmiana adresu IP serwera poprzez przytrzymanie przycisku na obudowie modułu:


W załączniku dodaję także opis środowiska LDmicro (opis instrukcji oraz konfiguracja do pracy z danym mikrokontrolerem) stworzony przeze mnie dla osób, które będą chciały zacząć zabawę z tym środowiskiem. Co do płytek to ktoś może zadać pytanie dalczego jest ich aż tyle - wszystko osobno? A to dlatego, że założeniem miała być modułowa budowa i przy zmianie płytki centralnej z Atmegi 8 np na Atmegę 128 możemy zastosować większą ilość jednobajtowych płytek wejść oraz wyjść cyfrowych.
Niestety nie posiadam już tego sterownika - musiałem oddać go wraz z projektem i nie posiadam żadnych zdjęć środka sterownika oraz modułu. Do zasilania mikrokontrolera była jeszcze płytka ze stabilizatorem napięcia oraz bezpiecznikiem, na którą wchodziło zasilanie z zasilacza 24V. Sterownik został sprawdzony na uczelnianej makiecie taśmociągu, z którą poradził sobie równie dobrze jak Siemens S7-300. Sterownik ten nie jest doskonały, ale też czas oraz miejsce w obudowie nie pozwalało mi zastosować chociaż komunikacji poprzez RS-232. Wszelkie kody źródłowe modułu ethernetowego wyślę na maila osobom zainteresowanym - proszę o kontakt na PW. Projekt nie był próbą stworzenia czegoś nowego, a próbą obniżenia kosztów związanych z zastosowaniem sterowników PLC. Projekt ten też udowadnia, że środowisko LDmicro nie jest takie złe jak go opisują ludzie na tym forum. Za opis programu LDmicro pozwalam sobie nałożyć prowizję ze względu na nakład pracy związany z tym opisem. Opis ten nie jest częścią projektu, a pomocą dla osób zainteresowanych.
Cool? Ranking DIY