wykorzystanie interfejsu ethernetowego do sterowania silnikiem
Transkrypt
wykorzystanie interfejsu ethernetowego do sterowania silnikiem
mgr inż. Daniel Lewandowski mgr inż. Grzegorz Lisowski Instytut Automatyki PŁ ul. Stefanowskiego 18/22, 90-924 Łódź [email protected], [email protected] 2006 Poznańskie Warsztaty Telekomunikacyjne Poznań 7 - 8 grudnia 2006 WYKORZYSTANIE INTERFEJSU ETHERNETOWEGO DO STEROWANIA SILNIKIEM ASYNCHRONICZNYM W CZASIE RZECZYWISTYM Streszczenie: Artykuł przedstawia stworzone w Instytucie Automatyki Politechniki Łódzkiej stanowisko do badań nad algorytmami sterowania silnikiem asynchronicznym z wykorzystaniem interfejsu ethernetowego. Prace były prowadzone w ramach grantu nr 1265/T10/2005/28 “Sterowanie wybranymi układami elektromechanicznymi przy wykorzystaniu sieci komputerowych”. • realizowany moment napędowy Koncepcja wykorzystania interfejsu ethernetowego została zrealizowana przy okazji budowania stanowiska laboratoryjnego służącego do badania stanów przejściowych w sterowniku silnika asynchronicznego przeznaczonego do napędów trakcyjnych. 2. 1. OPIS STANOWISKA WPROWADZENIE W dzisiejszych czasach coraz większe znaczenie ma zdalne sterowanie procesami przemysłowymi. W sieciach przemysłowych istnieje wiele rozwiązań protokołów przesyłu danych opartych na sprzętowych liniach RS-485 lub CAN takich jak: • Modbus • Profibus • CANopen • DeviceNet Mają one swoje zalety jak np. łatwość implementacji w istniejących sterownikach (Modbus) lub pewność przesyłania danych (CANopen, DeviceNet). Żadne z tych rozwiązań nie jest w stanie przesyłać dane z prędkością większą niż 500 kbit/s. Dlatego coraz częściej producenci sterowników przemysłowych zwracają się w kierunku protokołów opartych na sieciach ethernetowych. W związku z tym powstała myśl zbudowania stanowiska badawczego realizującego sterowanie silnikiem asynchronicznym w czasie rzeczywistym z wykorzystaniem protokołu TCP/IP. Zadaniem tego stanowiska jest nie tylko nadrzędne sterowanie, ale również rejestrowanie (wizualizacja) rozmaitych sygnałów związanych z tym procesem, takich jak: • prąd i napięcie obwodu pośredniczącego • prądy i napięcia fazowe silnika • stany regulatorów procesu sterowania Elementem wykonawczym jest sterownik napędu, w którym wykorzystano procesor DSP firmy Texas Instruments TMS320F240 wraz z falownikiem napięciowym (3 kW) oraz silnikiem (0.55 kW) wyposażonym w przetwornik impulsowy do pomiaru prędkości obrotowej wału. Ponieważ wyżej wymieniony procesor jest przeznaczony przede wszystkim do realizacji funkcji napędowych, trudno za jego pomocą jednocześnie sterować napędem oraz obsługiwać interfejs ethernetowy. Dlatego drugie zadanie zostało zrealizowane przez osobny moduł mikroprocesorowym MMnet01. Do transmisji danych między procesorem DSP, a modułem ethernetowym postanowiono wykorzystać interfejs szeregowy SPI. Rysunek 1: Schemat blokowy stanowiska laboratoryjnego Sterowanie nadrzędne jest realizowane za pomocą komputera PC przy pomocy programu “Satyna” napisanego przez autorów, który umożliwia sterowanie momentem oraz archiwizację danych przesyłanych w czasie rzeczywistym ze sterownika. Schemat blokowy stanowiska przedstawiono na rysunku nr (1). 3. STEROWNIK NAPĘDU Sterowanie trójfazowego silnika indukcyjnego oparte jest na algorytmie wektorowym o tak zwanej orientacji wektora prądu stojana - rysunek (2) (wszystkie zmienne silnika - napięcie i strumień magnetyczny wirnika odniesione są do układu współrzędnych wirującego synchronicznie z wektorem prądu). Sygnałami wyjściowymi układu sterowania są chwilowe wartości napięć Ua , Ub , Uc realizowane przez falownik napięciowy w postaci fal PWM. Algorytm wektorowy realizowany jest na podstawie wartości zadanej momentu mieszczącej się w przedziale (–0.99, 0.99) momentu znamionowego. 3. Przekształcenie zmierzonych wielkości fazowych prądu na ich reprezentację wektorową. 4. Wyznaczenie, na podstawie sygnału zadanego (moment), nowego stanu elektromagnetycznego silnika (moduł wektora prądu oraz jego położenie). 5. Przekształcenie pomierzonego wektora prądu z układu stacjonarnego do układu wirującego synchronicznie z zadanym wektorem prądu. 6. Wyznaczenie wektora napięcia na podstawie regulatora kompensującego błąd wektora pomierzonego prądu i wektora wyznaczonego w punkcie 4. 7. Przekształcenie wektora napięcia do układu stacjonarnego. 8. Przekształcenie wektora napięcia na wartości chwilowe PWM w poszczególnych fazach (realizacja tzw. SVPWM ). 9. Realizacja algorytmu stanów magnetycznych silnika takich jak: wyłączenie, praca, wzbudzenie, odwzbudzenie, opisanych w [3]. 10. Przygotowanie do komunikacji z modułem ethernetowym. Rysunek 2: Reprezentacja wektorowa zmiennych prądu i strumienia w układzie wirującym Program wykorzystuje ideę stymulatora stanu opisanego w szerzej w [1], [2] opartego na równaniach opisujących silnik indukcyjny w układzie biegunowym (wzory (1) i (2)). Na wyjściu stymulatora otrzymujemy zmienne w postaci pulsacji poślizgu oraz modułu wektora prądu wykorzystywane do realizacji zadanego momentu. Tr d ∗ Ψ = −Ψ∗r + Lm Is∗ cos ϕ∗Ψ dt r d ∗ 1 1 ϕ = − Lm Is∗ ∗ sin ϕ∗Ψ + Ω∗r dt Ψ Tr Ψr (1) (2) Realizacja fali PWM o częstotliwości 2.5 kHz determinuje wykonywanie algorytmu sterowania wektorowego dokładnie co 400 µs. Działanie algorytmu zostaje zapoczątkowane dokładnie w chwili gdy realizowany jest zerowy wektor napięcia. Jest to związane z minimalizacją zakłóceń w analogowym torze pomiarowym prądu. Algorytm wygląda następująco: 1. Pomiar wielkości analogowych. 2. Pomiar prędkości obrotowej oraz wyznaczenie kąta położenia wału. Na wykonanie wszystkich kroków algorytmu procesor DSP potrzebuje ok. 100 µs. Pozostały czas może zostać przeznaczony na komunikację szeregową z modułem ethernetowym. Ze względu na wspomniane reżimy czasowe sterownik napędu narzuca przedział czasowy, w trakcie którego można wykonać transmisję danych. Zezwolenie na transmisję jest sygnalizowane opadającym zboczem sygnału przerwania zewnętrznego. 4. MODUŁ ETHERNETOWY Do stworzenia modułu ethernetowego, pośredniczącego między aplikacją sterującą uruchomioną na komputerze PC a falownikiem, wykorzystano układ MMnet01. Moduł ten jest odmianą Ethernut’a [4] - projektu otwartego oprogramowania mającego na celu stworzenie referencyjnej platformy sprzętowej i programowej dla systemów wbudowanych. Wraz z projektem fizycznego układu dostępny jest również system operacyjny Nut/OS. System jest dostarczany w postaci biblioteki i plików nagłówkowych, które są wykorzystywane w kodzie źródłowym programu użytkownika. W wyniku kompilacji otrzymuje się gotowy plik, który można wgrać do pamięci flash mikrokontrolera. Programowanie mikroprocesora może się również odbywać z wykorzystaniem interfejsu ethernetowego. System Nut/OS zawiera implementację stosu TCP/IP pozwalającą na komunikację za pośrednictwem protokołu TCP, UDP lub z wykorzystaniem dowolnych ramek ethernetowych. Ostatnia możliwość nie jest jednak zalecana, ze względu na trudne do przewidzenia zachowanie innych elementów sieci ethernetowej (inteligentnych przełączników i ruterów). Użycie z kolei protokołu TCP lub UDP pozwala na łatwą integrację z aplikacjami użytkownika uruchamianymi na zwykłym komputerze. Sercem modułu MMnet01 jest 8-bitowy mikrokontroler ATmega128 firmy Atmel. Za komunikację ethernetową odpowiada układ RTL8019AS, który został przyłączony do mikroprocesora poprzez szynę adresową i szynę danych. Ponieważ aplikacje korzystające ze stosu TCP/IP wymagają znacznie więcej pamięci RAM niż posiada mikrokontroler, w module umieszczono dodatkowe 64 kB zewnętrznej pamięci RAM. Pewnym utrudnieniem jest umieszczenie rejestrów układu ethernetowego w innym obszarze pamięci, niż ma to miejsce w referencyjnej platformie. Wymaga to modyfikacji plików konfiguracyjnych systemu Nut/OS. Poza tym moduł posiada funkcjonalność porównywalną z oryginalnym Ethernut’em. Dla modułu MMnet01 stworzono z wykorzystaniem systemu Nut/OS program o nazwie “Orzeszek”, który został podzielony na dwa główne procesy: • Odbiornik - odpowiada za odbieranie pakietów z komputera sterującego, którego adres IP jest jednym z zarejestrowanych w programie adresów. Aby zapobiec sytuacji przypadkowego uruchomienia jednocześnie dwóch lub więcej kopii programu sterującego “Satyna” zastosowano programową blokadę. Polega ona na analizowaniu pakietów UDP o jednym z możliwych adresów źródłowych IP. Każdy poprawnie odebrany pakiet blokuje komunikację z urządzeniami o innych adresach na 60 sekund. • Nadajnik - odpowiada za przygotowanie pakietów UDP do wysłania. Pakiet z danymi zawiera znaczniki i potwierdzenia znaczników czasu, które pozwalają na wyznaczenie wskaźnika RTT. Większą cześć pakietu stanowią ramki z aktualnymi wartościami wybranych sygnałów otrzymanych z falownika za pośrednictwem interfejsu SPI. Pakiety posiadają zmienną wielkość zależną od ilości ramek z danymi otrzymanymi z sterownika napędu od czasu wysłania poprzedniego pakietu UDP. Komunikacja z programem operatora odbywa się z wykorzystaniem protokołu UDP o porcie źródłowym i docelowym równym 17671. Wykorzystanie standardowego protokołu pozwoliło np. na zamknięcie pętli sterującej poprzez uczelnianą sieć komputerową. Komunikacja z procesorem DSP umieszczona została w procedurze obsługi zewnętrznego przerwania, które jest zgłaszane przez sterownik i traktowane przez mikrokontroler ATmega128 jako zezwolenie na rozpoczęcie transmisji (rysunek (3)). Rysunek 3: Komunikacja między mikroprocesorem ATmega128 i TMS320F240 z wykorzystaniem interfejsu SPI. Od góry: dane wysyłane z ATmega128, dane wysyłane z TMS320F240, sygnał zegara SPI, sygnał zezwolenia na transmisję. Wymiana danych odbywa się z wykorzystaniem interfejsu SPI pracującego z zegarem 2 MHz. Z powodu braku buforów sprzętowych konieczne jest stosowanie programowych opóźnień o czasie trwania 1µs pomiędzy kolejnymi bajtami. Zwiększa to czas transmisji o 25% i powoduje pewną stratę mocy obliczeniowej mikrokontrolera. Dodatkowo, ze względu na zachowanie ciągłości transmisji, nie jest możliwe wykorzystanie do tego celu przerwań związanych z interfejsem SPI. W efekcie powoduje to, że komunikacja ze sterownikiem napędu zajmuje 30% czasu pracy mikrokontrolera. Pomimo takiego reżimu prosty procesor 8-bitowy wykonuje wyznaczone mu zadanie w sposób bardzo dobry, biorąc pod uwagę jego niewielką moc obliczeniową. W przypadku utraty komunikacji z wykorzystaniem interfejsu ethernetowego “Orzeszek” wysyła do sterownika napędu polecenie wyłączenia falownika. Awaryjne wyłączenie ma miejsce po upływie ok. 3 sek. od otrzymania ostatniego pakietu UDP. Dodatkową funkcją “Orzeszka” jest sterowanie momentem obciążenia, który jest wytwarzany przez prądnicę obcowzbudną prądu stałego. Wartość prądu płynącego w tworniku jest proporcjonalna do momentu wytwarzanego na wale maszyny. Sygnałem zadającym wartość prądu jest stopień wypełnienia sygnału PWM generowanego przez licznik mikroprocesora ATmega128. Poprzez kształtowanie chwilowej wartości prądu w tworniku możliwe jest realizowanie obciążenia o różnorodnych charakterystykach. 5. PROGRAM STERUJĄCY Nadzór i sterowanie pracą napędu odbywa się poprzez panel sterujący uruchomiony na komputerze operatora. W tym celu stworzono program “Satyna” pozwalający na sterowanie i archiwizację danych z sterownika w czasie rzeczywistym. Aplikacja została napisana w języku Ada 2005 z użyciem biblioteki GtkAda [5]. Biblioteka ta pozwala wykorzystać stwo- rzony w języku C pakiet narzędziowy Gtk [6], który umożliwia wygodne budowanie graficznego interfejsu użytkownika. Użycie powyższych narzędzi pozwoliło na stworzenie programu, który można uruchomić zarówno na platformie Windows jak i Linux. Język Ada 2005 jest przeznaczony do tworzenia aplikacji czasu rzeczywistego i aplikacji dla systemów dedykowanych [7]. Zawiera konstrukcje językowe wspomagające tworzenie wielowątkowych programów, np. typ zadaniowy będący samodzielnym procesem, system synchronizacji w postaci asymetrycznych spotkań oraz chronione obiekty i procedury pozwalające na bezpieczną wymianę danych [8]. Program “Satyna” został podzielony na współpracujące ze sobą procesy (ang. threads): • Odbiornik - odpowiada za odbierania pakietów UDP z “Orzeszka” i zapisywanie danych do pliku dziennika, gdzie są archiwizowane otrzymywane dane. • Nadajnik - odpowiada za wysyłanie pakietów sterujących UDP do “Orzeszka”. • Skryba - odpowiada za wykonywanie skryptu użytkownika, który pozwala na programowe formowanie zadawanego momentu napędowego. • Program główny - odpowiada za obsługę graficznego interfejsu użytkownika oraz uruchamianie i zatrzymywanie powyższych procesów. Interfejs użytkownika pozwala na zmianę zadawanego momentu napędowego oraz momentu oporowego. Wyświetlane są również paski wizualizujące chwilowe wartości wybranych sygnałów sterujących oraz sygnałów realizowanych przez sterownik napędu. Do komunikacji z równolegle wykonywanymi procesami wykorzystano wbudowany w język Ada 2005 mechanizm obiektów i procedur chronionych. Wydzielenie niezależnych procesów pozwoliło na uproszczenie struktury programu. Wygląd okna programu w trakcie poprawnie nawiązanej łączności przestawiono na rysunku (4). Interfejs użytkownika został podzielony na 4 bloki sterujące i 2 bloki informacyjne. Blok przycisków sterujących pozwala na nawiązanie komunikacji z “Orzeszkiem”, włączenie i wyłączenie falownika, oraz zamknięcie programu “Satyna”. Blok ustawień pozwala na wprowadzenie adresu IP lub nazwy internetowej “Orzeszka”, wprowadzenie nazwy pliku dziennika oraz nazwy pliku zawierającego skrypt. Dostępne są również opcje uaktywniające zapisywanie pliku dziennika oraz rozpoczynające wykonywanie skryptu. Język skryptu składa się z kilku prostych poleceń, które umożliwiają modyfikację zadawanego momentu wzorem liczników stosowanych w mikrokontrolerach. W skład poleceń wchodzą instrukcje: • loop - rozpoczyna pętlę, która jest wykonywana przez 60 sekund Rysunek 4: Panel sterujący • loop timeout wartość - rozpoczyna pętlę, która jest wykonywana przez podany w sekundach przedział czasu • end - kończy odpowiadający mu pętlę • exit torque wartość - kończy najbliższą pętlę, gdy wartość realizowanego momentu różni się od podanej wartości o co najwyżej 0.01 • exit speed wartość - działa podobnie jak w przypadku instrukcji powyżej, z tą różnicą, że sprawdzana jest wartość prędkości • set torque wartość - przypisuje zadawanemu momentowi napędowemu wskazaną wartość • increment torque wartość - zwiększa zadawany moment o podaną wartość • decrement torque wartość - zmniejsza zadawany moment o podaną wartość • delay wartość - wstrzymuje wykonanie skryptu o podany interwał czasu Należy zwrócić uwagę na fakt, że moment mieści się w przedziale (−0.99, 0.99) i w przypadku wyjścia poza ten przedział wartość momentu jest ograniczana do najbliższej dopuszczalnej wartości. Natomiast prędkość zawsze pochodzi z przedziału (−2.0, 2.0) prędkości znamionowej i oczywiście nie może być zmieniana bezpośrednio z poziomu skryptu. Ze względu na zachowanie prostoty interpretera zrezygnowano na obecnym etapie badań z możliwości tworzenia własnych zmiennych i wykonywania na nich operacji arytmetyczno - logicznych. Nie stworzono również możliwości tworzenia rozgałęzień w kodzie skryptu. Rysunek 5: Panel sterujący - błąd komunikacji Pomimo skromnej listy instrukcji skrypt użytkownika może służyć do tworzenia złożonych przebiegów sygnałów sterujących np. generator fali trapezowej o różnym współczynniku narastania i opadania. Skrypt realizujący opisany przebieg przedstawiono na listingu (1). set torque 0.0 loop loop increment torque 0.01 exit torque 0.8 delay 0.1 end zadawania obciążenia. Ponieważ rzeczywistym obciążeniem silnika jest prądnica prądu stałego możliwe jest tylko tworzenie momentu oporowego przeciwnego do momentu napędowego. Minusem tego rozwiązania jest niewielki zakres możliwego do uzyskania momentu oporowego dla małych prędkości obrotowych silnika. Pozostałe bloki funkcjonalne pełnią już tylko rolę informacyjną. Blok statusu prezentuje aktualny stan falownika oraz stan procesów komunikacyjnych. Przejście falownika w dany stan sygnalizowane jest ikoną czerwonej lampki obok etykiety (rysunek (4)). Natomiast stan procesów odbiornika i nadajnika sygnalizowany jest za pomocą ikon połączonych wtyczek przy poprawnie nawiązanej komunikacji. Ikona ostrzeżenia w postaci wykrzyknika na żółtym tle jest wspólna dla całego bloku i oznacza sytuację gdy nie ma nawiązanej komunikacji z “Orzeszkiem”, a tym samym nie ma żadnych wiarygodnych danych na temat stanu napędu. Sytuację taką przedstawia rysunek (5). Ostatni blok - blok wartości rzeczywistych prezentuje wybrane sygnały w postaci paska postępu. Ze względu na niewielką prędkość aktualizowania danych (co 100 ms) elementy te pełnią jedynie rolę wizualizacyjną. 6. PRÓBY LABORATORYJNE Poprawność algorytmu sterowania sprawdzono w trzech różnych konfiguracjach sieci komputerowej. Pierwsze próby przeprowadzono przy bezpośrednim podłączeniu komputera sterującego do modułu ethernetowego. Po uzyskaniu poprawnych wyników dokonano prób sterowania poprzez sieć lokalną instytutu oraz sieć rozległą uczelni pomiędzy dwiema jednostkami oddalonymi od siebie o kilka kilometrów. Wyniki tych prób wypadły pomyślnie. delay 1.0 loop decrement torque 0.1 exit torque 0.1 delay 0.1 end delay 1.0 end Listing 1: Skrypt formujący trapezowy sygnał momentu napędowego Blok zadawania momentu napędowego umożliwia precyzyjną zmianę wartości zadanej o 0.05 lub 0.01. Dodatkowo można wykonywać skokową zmianę momentu pomiędzy skrajnymi wartościami oraz wartością zerową. Podobną funkcjonalność posiada blok Rysunek 6: Przebiegi zadawanego momentu, prędkości obrotowej oraz prądów fazowych zmierzonych przez sterownik napędu Na rysunku (6) przedstawiono przebiegi czasowe wybranych sygnałów archiwizowanych w trakcie procesu sterowania z uruchomionym skryptem użytkownika przedstawionym na listingu (1). Uzyskane pomiary pozwalają na odtworzenie stanu elektromagnetycznego napędu. Umożliwia to udoskonalanie al- gorytmu sterowania wektorowego zarówno w stanach dynamicznych jak i w stanach ustalonych. 7. WNIOSKI Próby laboratoryjne pokazały, że jest możliwe sterowanie w czasie rzeczywistym, procesami przemysłowymi o szybkozmiennych sygnałach poprzez interfejs ethernetowy przy pomocy 8-bitowego mikrokontrolera jednoukładowego. Planuje się przeprowadzenie badań nad regulatorem prędkości zaimplementowanym w programie uruchamianym na komputerze PC z zamkniętą pętlą sprzężenia zwrotnego poprzez interfejs ethernetowy. Taki układ pozwoli na zbadanie wpływu opóźnień wprowadzanych przez sieć komputerową oraz opracowanie algorytmów zapewniających poprawne sterowanie w takim systemie. Poprzez możliwość archiwizowania danych pomiarowych i zmiennych procesu mikrokontrolera sterującego silnikiem, stworzone stanowisko bardzo dobrze nadaje się do testowania i analizy algorytmów związanych z napędem. Otrzymywane dane pozwalają na odtworzenie procesów zachodzących w napędzie bez ingerencji w normalną pracę sterownika. Ponieważ autorzy dostrzegli niedogodności czasowe związane z przysyłaniem danych z wykorzystaniem interfejsu SPI, rozważane jest wykorzystanie programowalnych układów logicznych CPLD. Zaimplementowanie sprzętowych buforów typu FIFO pozwoli na przeniesienie funkcji wymiany danych do układu CPLD. Rozważane też jest zastosowanie 32bitowego procesora AT91R40008 firmy Atmel, który zastąpi stosowany do tej pory 8-bitowy mikrokontroler jednoukładowy. Pozwoli to zwiększyć ilość danych przesyłanych siecią komputerową oraz zaimplementować nowe funkcje. Literatura [1] Dębowski A.: Sterowanie pośrednie momentem i strumieniem w falownikowym napędzie tramwaju. Mat. X Ogólnopolskiej Konferencji Naukowej „Semtrak 2002”, Zakopane-Kościelisko, 2002, s.145-154. [2] Chudzik P., Dębowski A., Kobos W., Lisowski G., Szafran J.: Asynchroniczny napęd tramwajowy ze sterowaniem wektorowym – zasada działania (1). Technika Transportu Szynowego, 2004, nr 3, s.52-55. [3] Dębowski A., Chudzik P., Lisowski G.: State transitions in vector controlled AC tram drive. Proceedings of Int. Conf. on Power Electronics and Motion Control, PEMC, Portoroz (Słowenia), August 30 – September 1, 2006. [4] http://www.ethernut.de [5] https://libre2.adacore.com/GtkAda [6] http://www.gtk.org [7] John Barnes: “Programming in ADA 2005”, Addison Wesley, Bk&CD-Rom edition (June 30, 2006) [8] Ada 2005 Language Reference Manual