Roboty Przemysłowe laboratorium Budowa silnika bezszczotkowego i sterowanie silnikiem bezszczotkowym Autorzy: Piotr Sokół Paweł Szymański Rafał Wareliś
1. Karta AD/DA Karta PCI -1710 firmy Advantech jest urządzeniem do gromadzenia i sterowania przepływem informacji przeznaczonym do współpracy z magistralą PCI. Jej głównymi cechami są: unikalny projekt karty, pełny zestaw funkcji do zbierania danych i ich kontrolowania, możliwość konwersji sygnałów analogowych na cyfrowe i odwrotnie, oprócz wyjść i wejść cyfrowych i analogowych posiada również timery i liczniki, dostarcza specyficzne funkcje wymagane przez użytkownika. Karta ta dostarcza użytkownikowi najczęściej wymaganych funkcji pomiarowych dzięki następującym cechom: Rozdzielczość przetwornika A/C: 12 bitów Szybkość przetwornika A/C: 100kHz Pojemność pamięci FIFO: 4k próbek Liczba kanałów A/C: 16 SE (ze wspólną masą) lub max. 8 DIFF (różnicowych) Wejściowe zakresy napięciowe unipolarne: 0 10, 0 5, 0 2.5, 0 1.25 [V] Wejściowe zakresy napięciowe bipolarne: ±10, ±5, ±2.5, ±1.25, ±0.625 [V] Wyzwalanie konwersji: programowe, wewnętrznym generatorem lub sygnałem zewnętrznym Transmisja danych z karty: programowa lub na przerwaniu Rozdzielczość przetwornika C/A: 12 bitów Liczba kanałów C/A: 2 Wyjściowe zakresy napięciowe: 0 5V, 0 10V Przepustowość: 38kHz 16 wejść i 16 wyjść cyfrowych TTL 1 szesnastobitowy licznik Złącze doprowadzenia sygnałów: SCSI-II 68 pinów Wymiary: 175x100mm Dostępne akcesoria: PCLD-8710, PCL-10168, ADAM-3968 Karta PCI-1710 wykrywana jest w systemie Windows jako urządzenie Plug&Play. Po zainstalowaniu sterowników karty możliwa jest jej konfiguracja programowa w dostarczonym przez producenta programie narzędziowym. Dołączone biblioteki DLL pozwalają na tworzenie własnych aplikacji współpracujących z kartą. 1
2. C++ Język C++ jest wieloparadygmatowym językiem programowania, m.in. również obiektowo zorientowanym. Obecnie stanowi jeden z najpopularniejszych standardów programowania. Początkowo język C++ był dostępny w takim standardzie, w jakim opracowano ostatnią wersję kompilatora Cfront (tłumaczący C++ na C), później opublikowano pierwszy nieformalny standard zwany ARM (Annotated Reference Manual), który sporządzili Bjarne Stroustrup i Margaret Ellis. Standard języka C++ powstał w 1998 roku (ISO/IEC 14882-1998 "Information Technology - Programming Languages - C++"). Standard ten zerwał częściowo wsteczną zgodność z ARM w swojej bibliotece standardowej; jedyne, co pozostało w stanie w miarę nienaruszonym to biblioteka iostream. Nazwa języka została zaproponowana przez Ricka Mascitti w 1983 roku, kiedy to po raz pierwszy użyto tego języka poza laboratorium naukowym. Odzwierciedla ona fakt, że język ten jest rozszerzeniem języka C (w C wyrażenie zmienna++ oznacza inkrementację czyli zwiększenie o jeden). Wcześniej używano nazwy "C z klasami". Na język C++ wpływ miały, poza językiem C, jako jego podstawą, przede wszystkim Simula, z której zaczerpnął właściwości obiektowe, a także języki takie, jak Algol, Ada, ML i Clu. Początkowo najważniejszą rzeczą wprowadzoną w C++ w stosunku do C było programowanie obiektowe, później jednak wprowadzono do niego mnóstwo ulepszeń, czyniąc ten język wygodniejszym i bardziej elastycznym od swojego pierwowzoru. Nie od rzeczy jest też wspomnieć, że niektóre zmiany w standardzie języka C były w większości zainspirowane językiem C++. Kompilacja Każdy program komputerowy musi w momencie wykonania składać się z instrukcji zrozumiałych dla procesora. Niewielu jest jednak ludzi potrafiących zapisać w kodzie maszynowym choćby najprostsze instrukcje, nie mówiąc o całych programach. Dlatego właśnie wymyślono języki programowania, które pozwalają tworzyć aplikacje w sposób wiele bardziej zrozumiały dla człowieka. Niestety, to, co dla człowieka jest oczywiste, dla procesora jest tylko "bełkotem". Kompilacja jest swego rodzaju tłumaczeniem pomiędzy językami zrozumiałymi dla człowieka i maszyny. Polega na zamianie ciągu liter, którego używa człowiek do reprezentacji jakiejś operacji na odpowiadający mu ciąg instrukcji w postaci zer i jedynek. W zależności od złożoności języka, proces ten jest mniej lub bardziej skomplikowany. Dla języków niskiego poziomu (np. asemblera) kompilacja wygląda tak, jak tłumaczenie dosłowne ze słownikiem. Przy czym dany "wyraz" ma tylko jeden odpowiednik w kodzie maszynowym. Języki wyższego poziomu wymagają czegoś, co można przyrównać do tłumaczenia kontekstowego, gdzie w zależności od poprzednich i następnych poleceń, aktualnie analizowane przyjmuje inną reprezentację w kodzie maszynowym. Pierwsze kompilatory języka C++, podobnie jak Cfront, były wyłącznie translatorami na język C. Kompilatory takie dostępne są i dziś. Jednym z nich jest Comeau C++ - jeden z niewielu kompilatorów oferujących pełne wsparcie dla standardu języka. Pierwszym 2
kompilatorem natywnym (produkującym od razu kod asemblerowy) dla języka C++ był g++ z pakietu GCC, którego pierwszym autorem był Michael Tiemann, założyciel Cygnus Solutions. Środowisko projektowe Rynek oprogramowania oferuje wiele profesjonalnych a co najważniejsze darmowych (dosyć często rozprowadzanych na zasadach licencji GNU) narzędzi z którymi warto rozpocząć swoją przygodę z programowaniem. Często są to całe środowiska projektowe łączące w sobie edytor kodu, kompilator, debugger i inne narzędzia ułatwiające projektowanie aplikacji. Dla początkujących programistów ważną częścią takiego pakietu jest bardzo dobrze opracowana pomoc, z której często od podstaw poznamy elementy programowania. Oto kilka pozycji godnych polecenia: Dev-C++ Zintegrowane środowisko programistyczne na licencji GNU, dla programistów języka C i C++. Jest zintegrowany z kompilatorem MinGW, czyli windowsowym odpowiednikiem linuksowego GCC. Program jest napisany w Delphi, a jego linuksowy odpowiednik w Kylix. Program jest przechowywany na witrynie Sourceforge. Dev-C++ został pierwotnie stworzony przez programistę Colina Laplace'a i jego zespół - Bloodshed Software. Dev-C++ działa pod Windowsem, posiada też linuksowy odpowiednik, jednak ten projekt został niedawno zawieszony. Aktualna wersja 4.9.9.2 Producent Bloodshed Software Licencja GPL Platforma systemowa Windows Oficjalna witryna http://www.bloodshed.net/dev Visual Studio 2005 Microsoft Visual Studio to zestaw narzędzi programistycznych (IDE), w skład którego wchodzi: Microsoft Visual C# Microsoft Visual C++ Microsoft Visual Basic Microsoft Visual J# Microsoft Visual Studio pozwala na pisanie aplikacji graficznych systemu windows (tzw. Winapi), posiada on zestaw klas ułatwiajacych pisanie kodu. Najnowsza wersja Visual Studio 2005 jest przeznaczona wyłącznie dla systemów MS Windows 2000/XP/2003. Na witrynie Microsoftu dostępna jest wersja Express Edition przeznaczona dla hobbystów i małych firm, może być używana bezpłatnie bez ograniczeń czasowych. Najbardziej istotnymi zmianami w stosunku do poprzedniej wersji są: 3
zastosowanie wersji 2.0.NET Framework, a co za tym idzie zmiany w językach programowania możliwość kompilacji dla procesorów 64-bitowych różnych typów Aktualna wersja 2005 (27 października 2005) Producent Microsoft Licencja Komercyjna Platforma systemowa Windows 98/ME/2000/XP/2003 Oficjalna witryna msdn.microsoft.com/vstudio Borland C++ Builder Borland C++ Builder to narzędzie programistyczne typu RAD firmy Borland do tworzenia aplikacji w języku C++. Zaletą tego IDE jest wykorzystanie dostępnej również w środowisku Delphi, w pełni obiektowej biblioteki VCL, znacznie ułatwiającej budowę interfejsu użytkownika w systemie Windows. Obecnie dostępna jest wersja 2006 tego środowiska. C++ Builder, do samej budowy programu wykorzystuje kompilator BCC32 oraz linker ILINK32 firmy Borland. Alternatywną wersją C++ Builder jest C++ Builder X, które nie zawiera biblioteki VCL. Środowisko, to pozwala na stosunkowo łatwe tworzenie programów wieloplatformowych. Wersja Borland C++ Builder Personal przeznaczona jest do zastosowaniach niekomercyjnych (przede wszystkim edukacyjnym), można ją nabyć bezpłatnie - po zarejestrowaniu się na stronie Borlanda. Aktualna wersja 6 Producent Borland Licencja Komercyjna Platforma systemowa Windows 98/ME/2000/XP Oficjalna witryna http://www.borland.com 4
3. Silniki bezszczotkowe Z pojęciem tym zetknęła się zapewne większość z Was. Czym naprawdę są te silniki i jak działają? Jak nazwa wskazuje - nie ma w nich szczotek ani komutatorów - czyli elementów podlegających najszybszemu zużyciu w tradycyjnych silnikach. Szczotki i komutatory są przedmiotem ciągłej troski użytkowników - podczas pracy silnika występuje na nich ciągłe iskrzenie - czyli łuk elektryczny temperaturze kilku tysięcy stopni. Mimo stosowania materiałów odpornych na wysokie temperatury (spieki grafitowe) lub dobrze rozpraszających energię cieplną (miedź), to elementy te szybko się wypalają i trzeba je regenerować/wymieniać na nowe. Iskrzenie powoduje wydzielanie dużych ilości ciepła - silnik może nabrać wysokiej temperatury, co może doprowadzić do stopienia izolacji na drutach nawiniętych na rdzeń - w efekcie zwarcia i zniszczenia silnika. Iskrzenie to również strata energii - silniki szczotkowe nie są zbyt sprawne. Silniki bezszczotkowe, poza ceną, wydają się mieć same zalety - nie ma w nich ani szczotek, ani komutatorów - nie ma się więc co zużywać, nie ma co iskrzyć czyli zwiększać temperatury, powodować straty energii. Dzięki temu silniki pracują długotrwale bezobsługowo. Mogą być więc też stosowane w miejscach, które po montażu są niedostępne. Jak zbudowany jest silnik bezszczotkowy i jak działa? W tradycyjnych silnikach cewki elektryczne nawinięte są na rdzeń i wirują ich ruch obrotowy powoduje "przełączanie" się zasilania cewek, które odpychane są lub przyciągane przez magnesy, które są na stałe przymocowane wewnątrz obudowy silnika. W silniku bezszczotkowym role zostały odwrócone - to cewki są nieruchome wewnątrz obudowy, a magnes osadzono na obracającym się rdzeniu. Prąd na cewki podawany jest przez regulator obrotów - oczywiście musi to być specjalny regulator - po pierwsze ze względu na to, że silniki bezszczotkowe mają trzy bieguny (fazy), a nie dwie, jak zwykłe, szczotkowe silniki, a po drugie musi to być regulator "wiedzący" w jakim położeniu względem cewek znajduje się aktualnie magnes, aby móc podać napięcie na odpowiednie cewki i w odpowiednią "stronę". Silnik, którym się zajmiemy (patrz rysunek 1) to silnik prądu stałego z komutacją elektroniczną opracowany przez firmę Dunkermotoren z serii BG44SI zawierający cyfrowy wzmacniacz regulujący prędkość obrotową silnika. Silnik wyposażony jest w przekładnie planetarną PLG42S pozwalającą uzyskiwanie przełożeń od 4:1. W standardowym wykonaniu obudowa chroni silnik i zintegrowaną elektronikę zgodnie z normą IP40 przed kurzem i wilgocią. Silniki podłącza się poprzez okrągłe 8-stykowe złącze o stopniu ochrony IP65 (rysunek 2). 5
Rysunek 1. Silnik firmy Dunkenmotoren z serii BG44SI wyposażony w przekładnie planetarną PLG42S Rysunek 2. Ośmiostykowe złącze silnika Dwa przewody elektryczne doprowadzają napięcie zasilania odpowiednio o wartości 12 lub 24V. Poprzez cyfrowe wejście sterujące można odpowiednio ruch silnika wystartować lub zatrzymać, poprzez drugie wejście kontrolować kierunek obrotów. Na innym przewodzie sterującym napięcie o wartości od 0V do 10V decyduje o prędkości obrotowej napędu. Dodatkowe dwa wyjścia cyfrowe dostarczają odpowiednio 12 impulsów na obrót rotora na jednym, a sygnału błędu na drugim. Wyjście impulsowe pozwala na monitorowanie prędkości obrotowej lub osiąganej przez napęd pozycji. Dane (przy temperaturze otoczenia 20 C dla pracy ze standardową elektroniką) BG44x25SI BG44x50SI Napięcie znamionowe 24V DC 24V DC Moc znamionowa Ok. 20 W Ok. 40 W Moment znamionowy 6 Ncm 11 Ncm Znamionowy prąd 1,5 A 2,6 A Prędkość znamionowa 3300obr/min 3600obr/min Prędkość biegu jałowego 5400obr/min 4900obr/min Prąd biegu jałowego 0,2 A 0,3 A Moment startowy 17 Ncm 37 Ncm Moment bezwładności 34 gcm2 64 gcm2 Waga Ok. 470g Ok. 660g 6
4. Sterowanie silnikiem bezszczotkowym z użyciem języka C/C++ Poniżej zamieszczony został kod źródłowy prostego programu w języku C++, którym możemy posłużyć się w celu sterowania silnikiem bezszczotkowym. Aby porozumieć się z silnikiem użyliśmy karty analogowej PCI 1710 firmy Advantech opisanej w pierwszym rozdziale. Po to by skompilować i uruchomić aplikację potrzebny będzie zestaw bibliotek łącznie z biblioteką driver.h dostarczana wraz ze sterownikiem urządzenia. Do sterowania silnikiem potrzebujemy dwóch wyjść cyfrowych jedno do uruchomienia i zatrzymania silnika, drugie do sterowania obrotami lewo, prawo i jednego wyjścia analogowego do regulacji prędkości obrotowej. Prędkość znamionowa silnika wynosi 3600 [obr/min] a jej regulacji dokonujemy w zakresie 0 10 V. #include <stdio.h> #include "..\include\driver.h" void main() { DWORD dwerrcde; ULONG ldevnum=0x60, OutVel=800; long ldriverhandle; PT_DioWriteBit DOut[2]; PT_AOVoltageOut AOut; // numer urządzenia (karta PCI-1710) // prędkość obrotowa silnika // Szukanie urządzenia dwerrcde = DRV_DeviceOpen(lDevNum, &ldriverhandle); if (dwerrcde!= SUCCESS) { ErrorHandler(dwErrCde); printf("nie znaleziono PCI-1710. Program zakonczony!\n"); exit(1); } // ustawianie wyjść cyfrowych DOut[0].port = 0; // port: 0 DOut[0].bit = 0; // kanał: 0 DOut[0].state = 1; // stan: 1 DOut[1].port = 0; // port: 0 DOut[1].bit = 1; // kanał: 1 DOut[1].state = 1; // stan: 1 // wyjscie analowowe AOut.chan = 0; // kanał: 0 AOut.OutputValue = 10.0*OutVel/3600; // wartość wyjściowa napięcia proporcjonalna do prędkości obrotowej // koniec pracy z urządzeniem DRV_DeviceClose(&lDriverHandle); } 7
Program najpierw szuka urządzenie PCI 1710 i próbuje nawiązać z nim połączenie. Jeżeli go nie znajdzie wyświetli odpowiedni komunikat. Następnie ustawia dwa wyjścia cyfrowe w stan wysoki, a na wyjście analogowe podaje napięcie proporcjonalne do zadeklarowanej na początku programu prędkości obrotowej (stała OutVel). Na zakończenie program zamyka urządzenie. I to wszystko. Ta prosta aplikacja pokazuje tylko niewielką część możliwości karty AD/DA. Zachęcam do zapoznania się z kodem przykładowych aplikacji dostarczonych wraz ze sterownikiem karty i poszerzenia możliwości pokazanego programu. W razie problemów proszę zapoznać się z plikiem pomocy sterownika. 8