POLITECHNIKA POZNAŃSKA INSTYTUT AUTOMATYKI I INŻYNIERII INFORMATYCZNEJ Projekt przejściowy Power Line Communication Transmisja danych przez sieci elektroenergetyczne Dokumentacja projektu Projekt wykonali: Maciej Brencz Mateusz Rutkowski Opiekun projektu: dr inż. Paweł Drapikowski Robotyka, semestr VII, rok akademicki 2006/2007
Spis treści Spis treści... 2 Wstęp do PLC... 3 Definicja...3 Podział i zastosowania...3 Zastosowania w budynkach mieszkalnych... 3 Kontrola sieci przesyłu energii elektrycznej...3 Transmisja programów radiowych...3 Automatyzacja w pojazdach drogowych...3 Przegląd standardów...3 X10...3 POWERNET...4 LonWorks...4 KNX...4 HomePlug...4 Wpływ PLC na jakość energii elektrycznej...4 Projekt modemu PLC... 5 Opis protokołu X10...5 Bloki funkcjonalne modemu...5 Blok zasilania...5 Blok odbioru...5 Blok nadawczy...5 Część wykonawcza...5 Zasilacz transformatorowy...6 Zasilacz beztransformatorowy...6 Detekcja nośnej...6 Układ detekcji przejścia przez zero (Zero Cross Detector).. 7 Nadawanie danych...7 Płytka modemu...8 Obsługa komunikacji przez mikrokontroler... 8 Algorytm odbioru danych...8 Realizacja praktyczna... 8 Bezpieczeństwo...9 Podsumowanie...9 Literatura i materiały dodatkowe... 10 Załączniki do dokumentacji... 11 Schematy ideowe części elektronicznej...11 Kod źródłowy oprogramowania w języku AVR-GCC... 12 Zawartość płyty CD...15
Wstęp do PLC Definicja Power Line Communication (PLC) to termin odnoszący się do transmisji danych poprzez istniejącą instalację elektroenergetyczną. Transmisja taka bywa także określana jako Mains Communication, Power Line Telecoms (PLT), Powerband czy Power Line Networking (PLN). Transmisja odbywa się poprzez wprowadzenie dodatkowego sygnału analogowego do sieci elektroenergetycznej. Urządzenie nadawcze i odbiorcze PLC zawierają w swej strukturze odpowiednie filtry pozwalając e odseparować napięcie panujące w sieci od sygnałów zawierających transmitowane dane. Podział i zastosowania Systemy PLC można podzielić na dwie grupy pod względem oferowanej przez nie szybkości transmisji. Broadband over Power Lines (BPL) z transmisją poniżej 1 Mbit/s i Narrowband over Power Lines (NPL) z dużą większymi szybkościami. Zastosowania w budynkach mieszkalnych Systemy PLC takie jak opisane poniżej X10 czy HomePlug używane są w systemach automatyki budynkowej do zdalnego sterowania oświetleniem i urządzeniami AGD bez konieczności instalacji dodatkowego okablowania. Systemy takie bazują zwykle na wstawianiu do sieci elektroenergetycznej krótkich (rzędu milisekund) impulsów o częstotliwości od 20-200 khz. Urządzenia działające w systemie mają przydzielone unikalne identyfikatory i dzięki temu mogą być indywidualnie sterowane z centralki lub też przez inne urządzenia (np. czujnik światła słonecznego może wykryć zmierzch i zapalić światła w przydomowym ogródku). Kody domowe (House Codes) zapobiegają ew. konfliktom w przypadku używania systemu PLC przez sąsiadujące ze sobą domy. Kontrola sieci przesyłu energii elektrycznej Firmy obsługujące sieci przesyłowe używają sygnałów o częstotliwości 30-300 khz, które umożliwiają kontrolę i zarządzanie urządzeniami przesyłowymi, np. odłączenie fragmentu sieci w przypadku wykrycia uszkodzenia. Transmisja programów radiowych PLC bywa także używane do nadawania programów radiowych poprzez sieć elektroenergetyczną i telefoniczną. W Niemczech używano systemu Drahtfunk, szwajcarski Telefonrundspruch używał sieci telefonicznej. W ZSSR odbiorniki radiowe PLC były niezwykle rozpowszechnione z uwagi na niemożność odbioru innych niż wybrane przez nadawcę stacji. W Norwegii do 1987 roku używano systemu Linjesender wykorzystującego sieci elektroenergetyczne jako gigantyczną antenę, szczególnie w obszarach górskich. Automatyzacja w pojazdach drogowych Systemy takie jakie CAN-bus, LIN-bus over power line (DC-LIN) czy DC-bus umożliwiają transmisję danych, głosu, muzyki i obrazu video poprzez linie zasilania DC w samochodach. Wykorzystują one złożone techniki komunikacji sprawdzające się w trudnym i bogatym w zakłócenia środowisku pracy. Przegląd standardów X10 X10 jest standardem przemysłowym i de facto standardem w budowie systemów automatyki budynkowej. Bazuje on na częstotliwościach radiowych (120 khz), których krótkie impulsy wprowadzane są do sieci. X10 zostało opracowane w 1975 roku przez szkocką firmę Pico Electronics. Jego celem było zapewnienie zdalnej kontroli nad urządzeniami gospodarstwa domowego. Była to Power Line Communication dokumentacja projektu 3
pierwsza tego typu technologia na świecie i do dzisiaj pozostaje najbardziej rozpowszechniona. POWERNET PowerNet jest projektem Komisji Europejskiej. Stawia sobie za cel opracowanie i wdrożenie systemu typu plug n play szerokopasmowej komunikacji poprzez linie elektroenergetyczne (Cognitive Broadband over Power Lines - CBPL) spełniającego normy emisji fal elektromagnetycznych, umożliwiającego przesłanie dużej ilości danych w wąskim zakresie częstotliwości przy dużym odstępie sygnału do szumu. LonWorks Jest to platforma sieciowa stworzona dla zapewnienia niezawodności, łatwości instalacji i utrzymania systemów sterowania. LonWorks bazuje na protokole stworzonym przez Echelon Corporation, używającym takich kanałów transmisji jak skrętka, światłowody, sieć elektroenergetyczna, transmisja radiowa. Stosowany jest w systemach sterowania oświetleniem i klimatyzacją. KNX Określony normą EN 50090 standard bazujący na modelu OSI. KNX jest następcą łączącym cechy trzech starszych standardów: European Home Systems Protocol (EHS), BatiBUS i European Installation Bus (EIB). Transmisja może odbywać się poprzez skrętkę, światłowód, podczerwień, łącze radiowe, sieć elektroenergetyczną oraz Ethernet (KNX-over-IP). HomePlug HomePlug Powerline Alliance jest międzynarodową organizacją zrzeszającą 65 członków, w tym takie firmy jak GE, Intel, Linksys, Cisco, Motorola, Samsung, Sharp i Sony. Założona w marcu 2000 roku organizacja stawia sobie za cel promocję, adaptację i implementację standardów i produktów dla domowych sieci elektroenergetycznych, które konkurowałyby wydajnością i ceną z innymi standardami. HomePlug Powerline Alliance zdefiniowało już kilka standardów: HomePlug 1.0 (łączenie urządzeń gospodarstwa domowego poprzez sieć elektroenergetyczną, np. przesył sygnału telewizji kablowej do odbiornika), HomePlug AV (transmisja sygnału telewizji wysokiej rozdzielczości HDTV oraz VoIP wewnątrz domu), HomePlug CC (tania technologia o małej szybkości transmisji umożliwiająca zaawansowane sterowanie oświetleniem, klimatyzacją oraz urządzeniami związanymi z bezpieczeństwem i ochroną gospodarstwa domowego). W HomePlug wykorzystywane są częstotliwości nośne w paśmie od 2 do 24 MHz. Komunikacja jest szyfrowana z użyciem 56-bitowego klucza i przeprowadzana z szybkością dochodzącą do 150 MBit/s. Wpływ PLC na jakość energii elektrycznej Rozporządzenie Ministra Gospodarki i Pracy z dnia 20 grudnia 2004 r. w sprawie szczegółowych warunków przyłączenia podmiotów do sieci elektroenergetycznych, ruchu i eksploatacji tych sieci (Dz. U. z 2005 r. Nr 2, poz. 6) określa dopuszczalną zawartość poszczególnych harmonicznych w napięciu sieci oraz dopuszczalną wartość współczynnika odkształcenia harmonicznych THD. Dla harmonicznych o krotności większej niż 25 dopuszczalna wartość określona jest wzorem 25 0.2 + 0.5 (%) h gdzie h to numer harmonicznej. Podstawiając częstotliwość 125 khz (2500 harmoniczna częstotliwości sieci), którą używać będziemy w komunikacji otrzymujemy wartość 0,025% co odpowiada 50 mv dopuszczalnej amplitudy częstotliwości 125 khz. PLC spotyka się także z krytyką krótkofalowców, gdyż często staje się źródłem fal radiowych powodujących zakłócenia. Niezgodnie z prawem urządzenia PLC nie są uznawane za urządzenia radiowe. Power Line Communication dokumentacja projektu 4
Projekt modemu PLC Opis protokołu X10 Protokół X10 został stworzony ponad ćwierć wieku temu i stał się światowym standardem w automatyce budynkowej. Fizyczna implementacja X10 zasadza się na kilku prostych zasadach. Transmisja danych ma miejsce w okolicach przejścia przez zero napięcia sieci (szczelina czasowa o długości 1ms). Dzięki temu minimalizuje się wpływ zakłóceń na jakość transmisji (np. załączenie triaka poza zerem wywołuje zakłócenie o szerokim spektrum). Transmisja odbywa się w sposób binarny. Modem wykrywa obecność częstotliwości nośnej 125 khz w czasie 1 ms od przejścia napięcia sieci przez zero, przy czym jeden bit transmitowany jest w okolicy dwóch zer sieci. Jedynka kodowana jest jako obecność, a następnie brak nośnej, zaś zero odwrotnie. Zapewnia to dodatkową pewność transmisji i stosunkowo dużą odporność na zakłócenia typowe w domowych instalacjach elektrycznych (ściemniacze, zasilacze i ładowarki impulsowe itp). umożliwiają przenikanie między fazami sygnałów modemów PLC). W sieciach jednofazowych implementowana jest obsługa tylko pierwszej szczeliny czasowej. Taką też implementację zawarliśmy w projekcie. Częstotliwość nośna 125 khz została wybrana z uwagi na łatwość jej uzyskania w mikrokontrolerze (jej okres to 8 cykli przy zegarze 1 MHz) oraz jej zbliżoną wartość ze 120 khz używanymi w standardzie X1o oraz wartościami przytaczanymi w literaturze [8]. Bloki funkcjonalne modemu Modem PLC można podzielić na kilka części funkcjonalnych: Blok zasilania Zasilanie części cyfrowej (mikrokontroler ATmega oraz dodatkowe elementy specyficzne dla konkretnego urządzenia wyświetlacze LCD, czujniki światła, temperatury, dymu...) odbywa się przez transformator co zapewnia galwaniczną separację od sieci. Część bezpośrednio połączona z siecią zasilana jest zasilaczem beztransformatorowy oraz izolowana od części cyfrowej optoizolatorem oraz transformatorem sygnał0wym. Blok odbioru W celu odbioru danych modem PLC musi odfiltrować częstotliwość sieciową, a następnie wykryć częstotliwość 125 khz. Blok nadawczy Nadawanie danych odbywa się poprzez dodanie do sieci częstotliwości 125 khz o odpowiednio dobranej amplitudzie. Prezentowany powyżej wykres ilustruje zasadę działania protokołu X10 w USA (60 Hz, 110V). Trzy przedziały czasowe są implementowane w sieciach trójfazowych (odpowiednie filtry zapewniają separację między fazami dla zasilania sieci, a jednocześnie Część wykonawcza Składa się z mikrokontrolera AVR kontrolującego transmisję i realizującego warstwę logiczną protokołu X10 oraz ew. dodatkowych elementów (wyświetlacze, przełączniki, diody LED) i czujników. Power Line Communication dokumentacja projektu 5
Zasilacz transformatorowy Część z mikrokontrolerem zasilana jest przez transformator typową aplikacją stabilizatora serii 78xx. Obecność kilku kondensatoróww bloku zasilania podyktowana jest koniecznością odfiltrowania bardzo wysokich harmonicznych wprowadzanych do sieci przez modem. Zasilacz beztransformatorowy Zasilanie części nadawczej i odbiorczej modemu odbywa się poprzez prosty zasilacz beztransformatorowy. Kondensator o odpowiednio dobranej pojemności ogranicza swoją impedancją prąd (nie powodując przy tym strat mocy czynnej, dodatkowy rezystor o znaczej rezystancji wpięty równolegle odpowiada za rozładowanie kondensatora w momencie wyłączenia modemu), mostek zaś prostuje napięcie sinusoidalne, dodatkowo wygładzane za pomocą kondensatora. Dioda Zenera odpowiada za obniżenie amplitudy napięcia za mostkiem Graetza do poziomu ok. 5,1V (SVCC). Powyżej znajduje się zaobserwowany oscyloskopem przebieg napięcia na wyjściu transformatora sygnałowego w obecności nośnej (sygnał ten trafia na przetwornik A/D mikrokontrolera). Działka osi Y odpowiada 50mV. Działka osi X odpowiada czasowi 2μs. Można przypuszczać, że obecność wyraźnych picków związana jest ze zboczami prostokątnej fali nośnej (co 4μs) i innymi zjawiskami zachodzącymi w sieci elektroenergetycznej w obecności sygnałów o wysokiej częstotliwości. Detekcja nośnej Układ detekcji nośnej (częstotliwość 125 khz) zbudowano w oparciu o transformator sygnałowy (model Y8848-A firmy Coil-Craft, dostępny u producenta jako sample) z uzwojeniem pierwotnym wpiętym między dwa przewody sieciowe oraz szeregowo z kondensatorem 33nF ograniczającym impendacyjnie prąd. Transformator został obciążony rezystorem 36k, jeden z końców uzwojenia wtórnego został zwarty z masą części izolowanej od sieci. Drugi koniec uzwojenia został podłączony do oscyloskopu, a przebiegi sygnałów zbadane dla dwóch przypadków: obecność nośnej 125 khz w sieci brak obecności nośnej w sieci Drugi przebieg przedstawia napięcie na uzwojeniu wtórnym transformatora sygnałowego przy braku nośnej. Podstawa czasu pozostaje bez zmian, oś Y została wyskalowana na 20mV/dz. Z analizy tych przebiegów można stwierdzić, że detekcję nośnej można zrealizować poprzez stosunkowo prostą komparację napięcia na uzwojeniu wtórnym transformatora z odpowiednio dobranym napięciem odniesienia. Unika się tym samym bardziej złożonej analizy częstotliwości (np. poprzez filtry pasmowo- czy górnoprzepustowe). Power Line Communication dokumentacja projektu 6
W tym celu drugi koniec uzwojenia wtórnego (pierwszy został zwarty do masy) zostaje połączony z wejściem przetwornika A/D w mikrokontrolerze, który będzie odpowiedzialny za wspomnianą komparację napięcia. Układ detekcji przejścia przez zero (Zero Cross Detector) Wydaje się, że właściwą wartością referencyjną będzie wartość 40mV, odpowiednio (ponad 2-krotnie) oddalona od maksimów przebiegu przy braku nośnej oraz nie za duża dla przebiegu w obecności nośnej. Picki na pierwszym przebiegu osiągają wartość 200mV, jednakże układ wejściowy przetwornika A/D musi mieć zapewnioną możliwie stałą wartość mierzonego napięcia na czas pomiaru (Sample&Hold) trwającego ok. 1,5 taktu zegara ADC (co przy zegarze 1MHz daje 1,5μs), który jest zdecydowanie dłuższy niż czas trwania picków. Wartości szczytowe przebiegów w obecności nośnej silnie zależą od drogi jaką przebywa sygnał oraz charakteru i mocy urządzeń podłączonych do sieci. W czasie testów udało się jednak przesłać sygnał na dość duże odległości (także poprzez liczniki oraz między gniazdkami umieszczonymi na różnych fazach) przy zachowaniu odpowiedniej różnicy w przebiegach, umożliwiającej detekcję nośnej. Detekcja przejścia przez zero fazy sieci odbywa się przy użyciu transformatora zasilającego część izolowaną od sieci. Powoduje to co prawda pewne minimalne przesunięcie fazowe związane z niewielką indukcyjnością uzwojeń, jednakże zabieg ten pozwala na wprowadzenie sinusoidy na wejście komparatora zbudowanego na wzmacniaczu operacyjnym LM311. Wyjście komparatora (fala prostokątna ze zboczami w chwili wykrycia przejścia przez zero) jest podłączone na wejście przerwania INT0, gdzie układ detekcji zbocza wykrywa przejście przez zero. Zamieszczony powyżej schemat ideowy przedstawia sytuację, w której komparator zasilany jest napięciem symetrycznym +V CC -V EE. W naszym przypadku prostokąt na wyjściu komparatora osiąga wartości odpowiadające stanom logicznym TTL, dzięki czemu upraszcza się jego podłączenie do logiki mikrokontrolera. Podciąganie wyjścia do V CC jest konieczne z uwagi na pracę wyjścia komparatora jako otwarty kolektor (OC). Nadawanie danych Nośną 125 khz wytwarza układ modulacji szerokości impulsów (PWM) mikrokontrolera. Sygnał ten (kluczowany poprzez mikro-switch na płytce modemu) poprzez optoizolator 6n135 trafia na bramkę tranzystora NPN 2n2222. Linia nadawcza jest podciągania przez rezystor 1k do napięcia zasilania Modem PLC złożony na płytkach stykowych części nieizolowanej (ok. 5,1V), w momencie otwarcia tranzystora następuje jej zwarcie do masy. Power Line Communication dokumentacja projektu 7
Wbrew pozorom, nie jest to szczególnie niekorzystne dla sieci czy samego modemu. Zwieranie to odbywa się przy stosunkowo małych amplitudach (nadawanie odbywa się w okolicy zera sieci) oraz w części, która posiada impendancyjnie ograniczony prąd oraz ograniczone dwoma diodami Zenera 6,8V (wpiętymi szeregowo przeciwsobnie) napięcie (w celu uniknięcia uszkodzenia tranzystora zbyt dużym napięciem). Warto także zauważyć, że nadawanie i odbiór danych jest niezależne od sposobu podłączenia modemu do sieci. Nie jest istotne, który przewód jest przewodem gorącym L, a który neutralnym N. Płytka modemu Modem PLC składa się z kilku wymienionych już wcześniej części: dwóch bloków zasilania (stabilizowanego, izolowanego od sieci oraz nieizolowanego), bloku nadawczego i odbiorczego, detektora zera sieci oraz części cyfrowej niskonapięciowej z mikrokontrolerem. Rozmieszczenie elementów na płytce odpowiada powyższemu podziałowi, a przesył danych pomiędzy częścią niskonapięciową (mikrokontroler), a wysokonapięciową odbywa się poprzez optoizolator i transformator sygnałowy. Na powierzchni płytki znajdują się wyprowadzenia sygnałów dla programatora PonyProg [9] na szynie goldpin oraz trzy diody diagnostyczne LED. Wszystkie sygnały doprowadzone do mikrokontrolera oraz jego zasilanie są galwanicznie (poprzez transformatory oraz optoizolator) odizolowane od sieci. Obsługa komunikacji przez mikrokontroler W celu implementacji protokołu komunikacji PLC w mikrokonrotelrze AVR wykorzystaliśmy układ ATmega8 oraz następujące jego elementy składowe: układ modulacji szerokości impulsów (PWM) przetwornik analogowo-cyfrowy (ADC) timer 8-bitowy porty do podłączenia diagnostycznych diod LED Algorytm odbioru danych Opisana na wstępie niniejszego sprawozdania idea działania protokołu X10 została zrealizowana w sposób sprzętowy oraz częściowo programowo w mikrokontrolerze ATmega. Komunikacja jest synchronizowana przejściami fazy sieci przez zero układ detekcji zera (Zero Cross Detection ZCD) wytwarza na swoim wyjściu sygnał prostokątny o częstotliwości 50Hz, który swoimi zboczami wyzwala przerwania INT0 co 10 ms. W momencie nastąpienia przerwania, następuje zablokowanie przerwania INT0 oraz ustawienia flagi zero_cross_detected. Zostaje także uruchomiony timer odmierzający czas 1 ms oraz układ przetwornika A/D w trybie konwersji ciągłej Free Run z wewnętrznym napięciem odniesienia 2,56V. W przypadku detekcji nośnej (wynik konwersji w rejestrze ADCH powyżej wartości referencyjnej) zostaje ustawiona flaga carriage_detected. Odliczenie 1 ms timer sygnalizuje przerwaniem. Zostaje on wówczas zatrzymany, przetwornik A/D wyłączony w celu minimalizacji zużycia energii, a przerwanie INT0 aktywowane. W przypadku ustawionej flagi wykrycia nośnej odpowiednie dane zostają zapisane do bufora odbiorczego. Następuje także wyzerowanie ustawionych wcześniej flag. Realizacja praktyczna Układ realizuje funkcję prostego telegrafu po sieci energetycznej umożliwiając nadawanie i odbiór danych binarnych za pomocą przycisku mikro-switch i grupy diod LED, na których można obserwować działanie modemu: dioda czerwona: sygnalizuje obecność zasilania (gaśnie w czasie trwania milisekundowej szczeliny czasowej po wykryciu zera sieci) układ przerwań wyzwalanych zboczem (INT0) Power Line Communication dokumentacja projektu 8
dioda żółta: sygnalizuje generację nośnej przez układ PWM (w trakcie szczeliny czasowej), sama nośna zanim trafi do sieci, jest kluczowana ręcznie za pomocą dip-switch'a umieszczonego obok mikrokontrolera i transoptora dioda zielona: sygnalizuje detekcję nośnej w sieci Na płytce znajduje się także dioda LED sygnalizująca napięcie bezpośrednio za stabilizatorem 78L05. Szczegółowy opis działania oprogramowania znajduje się w komentarzach w kodzie źródłowym zamieszczonym na końcu dokumentacji projektu. Bezpieczeństwo metrów, a także między dwoma fazami i poprzez licznik. Jakość jak i zasięg transmisji jest uzależniona od samej sieci elektroenergetycznej oraz liczby, mocy i charakteru podłączonych do niej urządzeń. Sama transmisja PLC nie wpływa niekorzystnie na pracę innych urządzeń podłączonych do sieci. Można pokusić się o stwierdzenie, że na układy tego typu będzie coraz większe zainteresowane związane z udostępnianiem połączenia z Internetem poprzez sieć elektroenergetyczną ( Internet w gniazdku ) jak i z coraz bardziej popularną automatyką domową ( inteligentne budynki) z uwagi na wykorzystanie już istniejącego okablowania. Z uwagi na obecność napięcia sieciowego na płytce modemu należy zachować ostrożność przy badaniu i używaniu modemu! Modem został zabezpieczony bezpiecznikami 100mA na każdym z przewodów sieciowych oraz warystorem. Przy badaniu przebiegów oscyloskopem o masie uziemionej poprzez sieć należy zwrócić uwagę na możliwość przepłynięcia prądu od masy układu do masy oscyloskopu z uwagi na różnicę potencjałów. Kondensatory znajdujące się na płytce mogą po odłączeniu zasilania nadal posiadać pewien ładunek, który stopniowo rozładowuje się poprzez równolegle podłączone rezystory. Podsumowanie Załączone ze sprawozdaniem dwa uniwersalne modemy PLC pozwalają na wprowadzenie dodatkowych funkcji, o których wspomniano już wcześniej. Oprogramowanie mikrokontrolera umożliwia stosunkowo proste rozszerzenie możliwości modemu. W czasie testów modemu udało się dokonać transmisji między dwoma domami na odległość ok. 100 200 Power Line Communication dokumentacja projektu 9
Literatura i materiały dodatkowe 1. Mikrokontrolery AVR w praktyce Jarosław Doliński, Wydawnictwo BTC, Warszawa 2003 2. Nota aplikacyjna firmy Microchip: AN236 X-10 Home Automation Using the PIC16F877A 3. Nota aplikacyjna firmy Microchip: AN521 Interfacing to AC Power Lines 4. Nota aplikacyjna firmy Microchip: AN954 Transformerless Power Supplies: Resistive and Capacitive 5. Nota aplikacyjna firmy Microchip: TB008 Transformerless Power Supply 6. Nota aplikacyjna firmy Atmel: AVR182 - Zero Cross Detector 7. Nota kalogowa firmy ATMEL dla mikrokontrolera AVR ATmega8(L) 8. Design of a Powerline Home Automation System - Final Report, G.A. Richter, University of Pretoria 9. http:www.lancos.com/e2p/betterstk200.gif schemat programatora PonyProg z wyprowadzeniami na szynę goldpin Power Line Communication dokumentacja projektu 10
Załączniki do dokumentacji Schematy ideowe części elektronicznej Powyżej zamieszczono schemat ideowy płytki modemu PLC z podziałem na bloki funkcjonalne. Obok zaś znajduje się schemat części z mikrokontrolerem nadzorującym pracę modemu oraz realizującym warstwę fizyczną protokołu transmisji. Trzy diagnostyczne diody LED umożliwiają obserwację działania modemu. Power Line Communication dokumentacja projektu 11
Kod źródłowy oprogramowania w języku AVR-GCC #define f_osc 1000000UL fosc = 1 MHz #include <avr/io.h> ATmega8 #include <avr/interrupt.h> #include <avr/signal.h> #include "misc.h" piny dla diod LED (PD5 - PD7) #define LED1 5 #define LED2 6 #define LED3 7 flagi char zero_cross_detected = 0; char carriage_detected = 0; FUNKCJE INICJALIZACYJNE inicjalizacja PWM na wyjsciu PB1 - pin 15 (p. 87-88, 95-99) void init_pwm() WGM13:0 = 15 TCCR1A = (1 << WGM11) (1 << WGM10); TCCR1B = (1 << WGM13) (1 << WGM12); COM1A1:0 = 1 TCCR1A = (1 << COM1A0); ustawienie prescalera (fosc = 1 MHz) TCCR1B = (1 << CS10); ustawienie PB1 jako wyjście bez podciągania DDRB = 0x02; PORTB &= ~0x02; ustawienie okresu PWM OCR1AL = 0x03; pełny okres fali -> 8 okresów zegara -> f PWM = fosc / 8 = 125 khz OCR1AH = 0x00; inicjalizacja przetwornika ADC na ADC0 (PC0) void init_adc() napiecie ref 2.56 V wewnetrzne + wyrownanie wynikow (8 bitow w ADCH) ADMUX = (1<<REFS1) (1<<REFS0) (1<<ADLAR); kanał ADC0 - PC0 MUX = 0 dopuszczenie przerwania po zakończeniu konwersji ADCSRA = (1<<ADEN) (1<<ADIE); ADCSRA = (1<<ADIE); konwersja ciągła (Free Run) ADCSRA = (1<<ADFR); start konwersji ADCSRA = (1<<ADSC); Power Line Communication dokumentacja projektu 12
inicjalizacja przerwań na INT0 (p. 64-66) void init_zcd() INT0 - detekcja przejść przez zero fazy zasilania (Zero Crossing Detection) MCUCR = (1 << ISC00); zgoda na przerwanie od INT0 GICR = (1 << INT0); inicjalizacja przerwania zegarowego od przepełnienia Timera0 void init_timer() TIMSK = (1 << TOIE0); Timer Overflow OBSŁUGA PRZERWAŃ obsluga przerwan z ADC SIGNAL(SIG_ADC) if (ADCH > 4) 10 x 4 = 40 (40/1024 * 2,56 => 40 mv) wart. referencyjna carriage_detected = 1; detekcja przejścia przez zero - ZCD (początek szczeliny czasowej) SIGNAL(SIG_INTERRUPT0) zablokuj detekcję zera GICR &= ~(1 << INT0); zero_cross_detected = 1; sygnalizujemy detekcję zera na diodzie zasilania cbi(portd, LED1); początek szczeliny czasowej - start Timera0 odliczamy 1 ms = 1000 us (1000 / 8 cykli = 125) TCNT0 = 255-125; TCCR0 = (1 << CS01); preskaler CK/8 póki co nic nie odebrano cbi(portd, LED3); uruchamiamy PWM TCCR1B = (1 << CS10); sbi(portd, LED2); uruchomienie przetwornika ADC + start konwersji sbi(adcsra, ADEN); sbi(adcsra, ADSC); przepełnienie timera (koniec szczeliny czasowej) SIGNAL(SIG_OVERFLOW0) zatrzymujemy timer Power Line Communication dokumentacja projektu 13
TCCR0 &= ~(0x07); zapalenie diody zasilania sbi(portd, LED1); zatrzymujemy PWM TCCR1B &= ~(0x07); cbi(portd, LED2); zatrzymanie ADC cbi(adcsra, ADEN); sprawdzenie stanu flagi odbioru if (carriage_detected) sbi(portd, LED3); carriage_detected = 0; zapalamy LED1 dla sygnalizacji zasilania sbi(portd, LED1); zero_cross_detected = 0; zgoda na ponowną detekcję zera GICR = (1 << INT0); INICJALIZACJA PRACY MODEMU I PRZEJŚCIE W OBSŁUGĘ ZGŁOSZEŃ OD PRZERWAŃ int main() globalna zgoda na przerwania sei(); ustawienie portów jako wyjscia dla diod diagnostycznych LED1 R - zasilanie modemu (przygasa w trakcie 1ms szczeliny czasowej) LED2 Y - zapala się w momencie wysyłania danych LED3 G - zapala się w momencie odbioru danych DDRD = (1 << LED1) + (1 << LED2) + (1 << LED3); modem włączony sbi(portd, LED1); test diod diagnostycznych sbi(portd, LED2);sbi(PORTD, LED3);wait_ms(10); cbi(portd, LED2);cbi(PORTD, LED3);wait_ms(10); sbi(portd, LED2);sbi(PORTD, LED3);wait_ms(10); cbi(portd, LED2);cbi(PORTD, LED3); inicjalizacje init_pwm(); init_adc(); init_zcd(); init_timer(); PWM (generacja nośnej) przetwornik A/D (detekcja nośnej) przerwania na INT0 od zbocza (ZCD) przerwania od timera (szczelina czasowa 1ms) praca ciągła -> czekanie na przerwania while(1); return 0; Power Line Communication dokumentacja projektu 14
Zawartość płyty CD Na płytce dołączonej do projektu znajdują się: wersja elektroniczna dokumentacji projektu wersja elektroniczna schematów ideowych płytki modemu kod źródłowy oprogramowania mikrokontrolera w języku AVR-GCC komplet dokumentacji oraz not katalogowych zastosowanych elementów Power Line Communication dokumentacja projektu 15