Układ sterowania dla manipulatora badawczego
Transkrypt
Układ sterowania dla manipulatora badawczego
Politechnika Wrocławska Układ sterowania dla manipulatora badawczego Krzysztof Jarzabek ˛ Promotor: dr inż. Marek Wnuk — Wrocław 1999 — Spis treści 1 Wst˛ep 1.1 Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Cel pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Opis zawartości pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 7 2 Manipulator 2.1 Konstrukcja mechaniczna . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Układ elektryczny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 9 3 Koncepcja układu sterowania 12 4 Dokumentacja układu sterowania 4.1 System uruchomieniowy z magistrala˛ VME . . . . . . . . . . . . . . . . 4.2 Sterownik VFMC - strona sygnałowa . . . . . . . . . . . . . . . . . . . . 4.2.1 Jednostka centralna . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 Interfejs magistrali VME . . . . . . . . . . . . . . . . . . . . . . 4.3 Sterownik VFMC - strona obiektowa . . . . . . . . . . . . . . . . . . . . 4.3.1 Układ przetwornika analogowo-cyfrowego. . . . . . . . . . . . . 4.3.2 Pomiar sygnału napi˛eciowego z pradnicy ˛ tachometrycznej. . . . . 4.3.3 Pomiar sygnału napi˛eciowego pradu ˛ płynacego ˛ w obwodzie silnika. 4.3.4 Układ wzmacniacza z zabezpieczeniem dla sygnału gotowości sterownika (CONTROL READY). . . . . . . . . . . . . . . . . . 4.3.5 Układ sterowania wzmacniaczem mocy PWM. . . . . . . . . . . 4.3.6 Interfejs kodera. . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.7 Konstrukcja mechaniczna. . . . . . . . . . . . . . . . . . . . . . 4.4 Wzmacniacz mocy PWM . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 Wejściowy układ formowania sygnałów PWM i DIR . . . . . . . 4.4.2 Układ wyzwalania mostka H . . . . . . . . . . . . . . . . . . . . 4.4.3 Mostek mocy typu H . . . . . . . . . . . . . . . . . . . . . . . . 4.4.4 Układ pomiaru pradu ˛ . . . . . . . . . . . . . . . . . . . . . . . . 4.4.5 Układ zabezpieczajacy ˛ przed przeciażeniem ˛ wyjścia . . . . . . . 4.4.6 Układ sygnalizacji pracy . . . . . . . . . . . . . . . . . . . . . . 4.4.7 Pomiar temeperatury . . . . . . . . . . . . . . . . . . . . . . . . 4.4.8 Konstrukacja mechaniczna. . . . . . . . . . . . . . . . . . . . . 4.5 Rozdzielacz sygnałów . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Zasilacz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1 Zasilacze niskonapi˛eciowe. . . . . . . . . . . . . . . . . . . . . . 4.6.2 Zasilacz silników. . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.3 Konstrukcja mechaniczna. . . . . . . . . . . . . . . . . . . . . . 15 17 17 19 22 24 26 28 28 29 30 31 33 34 36 37 37 38 38 38 39 39 41 44 45 46 47 SPIS TREŚCI 5 3 Oprogramowanie sterownika. 5.1 Oprogramowanie sterownika VFMC . . . . . . . . . . . . . . . . . . . . 5.1.1 Inicjacja jednostki centralnej . . . . . . . . . . . . . . . . . . . . 5.1.2 Inicjacja interfejsu magistrali VME . . . . . . . . . . . . . . . . 5.1.3 Programowanie pamieci FLASH ROM . . . . . . . . . . . . . . 5.1.4 Ładowanie programu do VFMC. . . . . . . . . . . . . . . . . . . 5.2 Oprogramowanie jednostki nadrz˛ednej. . . . . . . . . . . . . . . . . . . 5.2.1 Program do wysyłania S-rekordów (vfmcload) . . . . . . . . . . 5.2.2 Sterownik niskiego poziomu (troper). . . . . . . . . . . . . . . . 5.2.3 Programy pomocnicze. . . . . . . . . . . . . . . . . . . . . . . . 5.3 Metody przygotowywania i uruchamiania programów. . . . . . . . . . . 5.3.1 Transmisja i ładowanie programów do pami˛eci RAM sterownika VFMC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.2 Użycie programu bootload do programowania pami˛eci FLASH ROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 49 49 51 53 53 56 57 57 58 58 6 Podsumowanie 60 7 Dodatki 7.1 Sterownik VFMC. . . . . . 7.2 Wzmacniacz mocy PWM. 7.3 Rozdzielacz sygnałów. . . 7.4 boot code. . . . . . . . . . 7.5 flash.h. . . . . . . . . . . . 7.6 flash.c. . . . . . . . . . . . 7.7 bootload.c. . . . . . . . . 7.8 buser.c. . . . . . . . . . . 7.9 treset.c. . . . . . . . . . . 7.10 vfmcload.c. . . . . . . . . 7.11 troper.a. . . . . . . . . . . 7.12 troptest.c. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 59 62 63 74 80 86 90 91 95 99 100 101 104 108 Spis rysunków 2.1 2.2 Dwuwahadło. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schemat połaczeń ˛ elektrycznych manipulatora. . . . . . . . . . . . . . . 8 10 3.1 Ogólny schemat blokowy układu sterowania manipulatorem. . . . . . . . 13 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 Schemat blokowy sterownika manipulatora. . . . . . . . . . . Schemat blokowy VFMC. . . . . . . . . . . . . . . . . . . . Schemat blokowy VFMC - strona obiektowa . . . . . . . . . Płytka sterownika VFMC. Widok z góry. . . . . . . . . . . . . Schemat blokowy wzmacniacza mocy PWM. . . . . . . . . . Płytka wzmacniacza mocy PWM. Widok z boku. . . . . . . . Rozdzielacz sygnałów. Widok z boku. . . . . . . . . . . . . . Schemat blokowy zasilacza. . . . . . . . . . . . . . . . . . . Kasetka zasilaczy niskonapi˛eciowych. . . . . . . . . . . . . . Widok ogólny kaset z zasilaczem i sterwonikiem manipulatora. . . . . . . . . . . 16 18 25 33 35 40 43 44 46 48 5.1 5.2 5.3 5.4 Pami˛eć sterownika VFMC po resecie. . . . . . . . . . . . Pami˛eć sterownika VFMC po inicjacji dekoderów adresów. Przepisywanie programu z FLASH ROM do RAM. . . . . Zawartość pami˛eci po wykonaniu operacji przepisywania mi˛eci RAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . do . . . . . . . . . . . pa. . . 54 54 55 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 65 66 67 68 69 70 71 75 76 77 78 81 82 83 84 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 . . . . . . . . . . . . . . . . . . . kodu . . . VFMC - strona obiektowa. Schemat. . . . . . . . . . . . . . . . VFMC - strona sygnałowa. Schemat. . . . . . . . . . . . . . . . VFMC. Obwód drukowany M1. . . . . . . . . . . . . . . . . . VFMC. Obwód drukowany M2. . . . . . . . . . . . . . . . . . VFMC. Obwód drukowany M3. . . . . . . . . . . . . . . . . . VFMC. Obwód drukowany M4. . . . . . . . . . . . . . . . . . VFMC. Rozmieszczenie elementów na płytce. Góra. . . . . . . VFMC. Rozmieszczenie elementów na płytce. Spód. . . . . . . Wzmacniacz mocy PWM. Schemat. . . . . . . . . . . . . . . . Wzmacniacz mocy PWM. Obwód drukowany M1. . . . . . . . Wzmacniacz mocy PWM. Obwód drukowany M2. . . . . . . . Wzmacniacz mocy PWM. Rozmieszczenie elementów na płytce. Rozdzielacz sygnałów. Schemat. . . . . . . . . . . . . . . . . . Rozdzielacz sygnałów. Obwód drukowany M1. . . . . . . . . . Rozdzielacz sygnałów. Obwód drukowany M2. . . . . . . . . . Rozdzielacz sygnałów. Rozmieszczenie elementów na płytce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Spis tablic 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21 20 21 21 22 22 23 24 27 27 30 31 31 31 32 34 36 37 39 41 41 4.23 4.24 4.25 Sygnały sterujace ˛ blokiem pami˛eci VFMC . . . . . . . . . . . . . . . . . CON402. Interfejs QSPI. Opis wyprowadzeń . . . . . . . . . . . . . . . CON403. Interfejs BDM. Opis wyprowadzeń . . . . . . . . . . . . . . . CON404. Interfejs transmisji pomi˛edzy sterownikami. Opis wyprowadzeń CON405. Interfejs łacza ˛ RS232. Opis wyprowadzeń . . . . . . . . . . . CON401.VFMC - magistala VME.Opis wyprowadzeń . . . . . . . . . . Przełaczanie ˛ magistrali danych TROOPER’a. Opis sygnałów . . . . . . . Przetwornik A/C. Wykorzystane wejścia . . . . . . . . . . . . . . . . . . CON303. Wejścia przetwornika A/C. Opis wyprowadzeń. . . . . . . . . CON301.Interfejs VFMC-Wzmacniacz mocy PWM. Opis wyprowadzeń . CON302. Łacze ˛ kodera, I/O i tachometru. Opis wyprowadzeń . . . . . . J301. Konfiguracja kodera. Opis wyprowadzeń . . . . . . . . . . . . . . J302. Konfiguracja kodera. Opis wyprowadzeń . . . . . . . . . . . . . . J303. Konfiguracja kodera. Opis wyprowadzeń . . . . . . . . . . . . . . CON201. Gniazdo dla przewodu VH we wzmacniaczu mocy PWM . . . CON204. Gniazdo wyjściowo-zasilajace ˛ wzmacniacza mocy PWM . . . Logiczny układ formowania sygnału PWM i DIR . . . . . . . . . . . . . CON202, CON203. Łacze ˛ układu pomiaru temperatury . . . . . . . . . . CON503. Rozdzielacz sygnałów. Łacze ˛ manipulatora. Opis wyprowadzeń. CON504. Rozdzielacz sygnałów. Łacze ˛ zasilacza. Opis wyprowadzeń. . . CON501. Rozdzielacz sygnałów. Łacze ˛ sterownika VFMCP . Opis wyprowadzeń. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CON502. Rozdzielacz sygnałów. Łacze ˛ sterownika VFMCQ . Opis wyprowadzeń. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J501, J502, J503. Rozdzielacz sygnałów. Blokowanie sygnału gotowości. Łacze ˛ H11 zespołu zasilaczy. Opis wyprowadzeń. . . . . . . . . . . . . . Łacze ˛ H15 zespołu zasilaczy. Opis wyprowadzeń. . . . . . . . . . . . . . 5.1 Połaczenie ˛ TROOPER II - jednostka centralna sterownika VFMC. . . . . 51 7.1 7.2 7.3 7.4 VFMC-strona sygnałowa. Spis elementów VFMC-strona obiektowa. Spis elementów Wzmacniacz mocy PWM. Spis elementów Rozdzielacz sygnałów. Spis elementów . 72 73 79 85 4.22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 42 43 45 45 Rozdział 1 Wst˛ep 1.1 Wprowadzenie W trakcie prac badawczych zwiazanych ˛ ze sterowaniem robotami konieczne jest testowanie opracowywanych algorytmów. Zazwyczaj pierwszym etapem testowania jest symulacja komputerowa. Metoda ta, poza niezaprzeczalnymi zaletami, ma poważne wady. Model symulacyjny nie uwzgl˛ednia wszystkich zjawisk wyst˛epujacych ˛ w rzeczywistym obiekcie. Istotnym problemem staje si˛e dost˛ep do odpowiednio elastycznego stanowiska badawczego, które pozwoliłoby implementować nowe algorytmy w warunkach rzeczywistych bez nadmiernego zagł˛ebiania si˛e w szczegóły techniczne. Niestety, dost˛epne roboty posiadaja˛ zamkni˛ete, trudne do zmodyfikowania układy sterowania, do których zazwyczaj brak jest odpowiednio dokładnej dokumentacji, aby można było dokonać pożadanych ˛ zmian. 1.2 Cel pracy Celem pracy jest opracowanie i zrealizowanie sterownika dla manipulatora typu ”podwójne wahadło” nap˛edzanego silnikami pradu ˛ stałego. W zakres pracy wchodzi przygotowanie oprogramowania sterownika umożliwiajacego ˛ implementacj˛e przykładowych algorytmów sterowania manipulatora. Sterownik manipulatora powinien pracować w systemie otwartym, czasu rzeczywistego. Poszczególne elementy sterownika powinny stanowić odr˛ebne samodzielne moduły. Cały układ sterownika powinien posiadać mechaniczny standard eurokarty. Oprogramowanie sterowników VFMC jak i jednostki nadrz˛ednej powinno być tworzone także w j˛ezykach wyższego rz˛edu (nie zagł˛ebiajac ˛ si˛e w szczegóły techniczne) korzystajac ˛ ze sterowników niskiego poziomu. Tworzenie oprogramowania na niskim poziomie, wraz z przesyłaniem go do sterownika powinno być elastyczne. Cały układ sterownika powinien spełniać ogólne przepisy BHP odnośnie, wyłaczni˛ ków awaryjnych (na sterowniku i przy manipulatorze) i uziemienia. Powinien posiadać także czujniki termiczne na elementach wydzielajacych ˛ ciepło i zabezpieczenia przecia˛ żeniowe. 1.3 Opis zawartości pracy 1.3 7 Opis zawartości pracy W trakcie prac projektowych i konstrukcyjnych wykorzystano wcześniejsze opracowania [15], [11]. Praca zawiera opis konstrukcji oraz dokumentacj˛e wykonanego i uruchomionego sterownika. Obejmuje zarówno cz˛eść sprz˛etowa: ˛ dwa sterowniki VFMC, dwa wzmacniacze mocy PWM, rozdzielacz sygnałów, zasilacz, jak i programowa: ˛ inicjacja sterownika VFMC, przesyłanie i uruchamianie programów na sterowniku VFMC, driver w systemie OS-9. W trakcie tworzenia sterownika konieczne było wykonanie szerokiego zakresu prac o różnym charakterze: budowa modelu, testowanie modelu, projekt obwodów drukowanych, montaż prototypów, uruchomienie i montaż prototypów, oprogramowanie sterownika VFMC (j˛ezyk C, asembler), oprogramowanie jednostki nadrz˛ednej (OS-9). Uzyskany wynik to sterownik dwuwahadła umożliwiajacy ˛ programowanie algorytmów sterowania na różnych poziomach (w tym na najniższym - jednokrokowy algorytm sterowania silnikiem w VFMC). Ze wzgl˛edu na możliwości systemu nadrz˛ednego i systemu OS-9, praca z manipulatorem możliwa jest także poprzez sieć ethernet. Rozdział 2 Manipulator 2.1 Konstrukcja mechaniczna Manipulator mechaniczny typu ”podwójne wahadło” został wykonany w Zakładach Automatyki Przemysłowej w Ostrowie Wielkopolskim na zlecenie Politechniki Wrocławskiej. Jest on umieszczony na podstawie, która nadaje całej konstrukcji odpowiednia˛ stabilność, ustawiajac ˛ jednocześnie przestrzeń robocza˛ w położeniu pionowym [14]. Za kresy katów ˛ ruchu ramion wynosza˛ 360 i n 360 , odpowiednio dla osi P i Q [16]. Rysunek 2.1: Dwuwahadło. W manipulatorze możemy wyróżnić nast˛epujace ˛ elementy składowe (rysunek 2.1): 2.2 Układ elektryczny 9 1. kolumna obrotu głównego, 2. nap˛ed ramienia I (oś P), 3. nap˛ed ramienia II (oś Q), 4. rami˛e I, 5. rami˛e II, 6. przekładnia ramienia II, 7. obciażniki, ˛ 8. puszka wyprowadzeń elektrycznych. Silnik osi P jest umocowany na kolumnie obrotu głównego i za pomoca˛ przekładni harmonicznej o przełożeniu 158:1 nadaje ruch pierwszemu ramieniu (l=557.2mm) z maksymalna˛ pr˛edkościa˛ 31 [s 1 ]. Silnik osi Q jest umieszczony na ramieniu pierwszym i poprzez przekładni˛e planetarna˛ 35:1 porusza ramieniem drugim (l=400mm) manipulatora z maksymalna˛ pr˛edkościa˛ 23 [s 1 ]. Zastosowanie profili aluminiowych, a także zastosowanie przekładni pasowej umożliwiajacej ˛ umieszczenie obu silników współosiowo powoduje, że cała konstrukcja może być uznawana za sztywna.˛ Obciażniki ˛ zamocowane na obu ramionach daja˛ możliwość zmiany rozkładu mas, a zatem łatwych zmian parametrów dynamicznych manipulatora. 2.2 Układ elektryczny Manipulator jest nap˛edzany za pomoca˛ dwóch silników pradu ˛ stałego PZTK 88-35 TRR. Podstawowe parametry silnika: Maksymalne napi˛ecie pracy 35 [V], Maksymalny prad ˛ w impulsie 18 [A], Maksymalna pr˛edkość 53 13 [s 1 ]. W osi wału silnika została umieszczona pradnica ˛ tachometryczna PATO 62-07R, oraz koder impulsowo-przyrostowy incremental encoder MOZ30. Rozdzielczość kodera wynosi 1024 cykle na obrót, co przy wykorzystaniu czterech zboczy sygnałów A i B daje ziarno odczytu 0.088 stopnia (5’17”). Uwzgl˛edniajac ˛ przełożenia przekładni ziarno odczytu wynosi 2” i 9” odpowiednio dla osi P i Q. Przewody sterujace ˛ manipulatorem, oraz przewody z czujników sa˛ wyprowadzone do puszki znajdujacej ˛ si˛e na podstawie robota (rysunek 2.1). Wyprowadzenia te wraz puszka˛ zostały wykonane w ramach pracy. 2.2 Układ elektryczny 10 fhg i jPg kml n qYr s tYu v wyx8z${} | ~ 8 $ ¢£ ¤¥§¦Y¨¦N© ª8«+¬® ¡ èRé ê åRæ ç ëNì !"#$ %!& '(" ) (*%+&, ô8õ½ö§÷§ø§ù ú û8ü½ý§þ§ÿ í8î½ï§ð§ñò ó -./012 34/65 780 9 8*3:5<; ^]_P`badc]e @'ABC+D E F'GHI+J K %'&()+* , -'./0+1 2 3'45'687 9 :';<'=8> ? LNMPORQRSUTWVYX[Z]\ = o ¯}°±"²³ ²´§µ·¶°§¸+¹ º'»½¼ ¾ ¿ À8Á Âà ÄÅÆ Ç$È ÉÊ½È É½Ë§Ì[È ÍyÎ ÏÐ Ñ Ò8Ó§ÔÕ Ö E*FHG PRQ6SUTV I6JK LMN6O × Ø§ÙÚ Û[Ü Ý$Þßà áâãä "!$# N$y "N 8' >@?A B6CD p W@XZY\[^]`_bacWed qor s tvuxwzy\u { mon p fhg`iZjlk Rysunek 2.2: Schemat połaczeń ˛ elektrycznych manipulatora. 2.2 Układ elektryczny 11 Do puszki manipulatora jest doprowadzona wiazka ˛ trzech kabli: 1. sterowanie silnikami - 4 żyły, 2. pomiarowy - 25 żył, 3. zerujacy ˛ - 1 żyła. W puszce sygnały rozdzielaja˛ si˛e w kierunku osi P i Q. Przewody wprowadzone do puszki można łatwo odłaczyć ˛ od robota: przewód 4 żyłowy jest przykr˛ecany do kostki zaciskowej, przewód 25 żyłowy jest połaczony ˛ w puszce za pomoca˛ łacza ˛ szufladowego typu DB25, przewód 1 żyłowy przykr˛ecany jest poza puszka˛ do podstawy robota. Okablowanie zostało zaprojektowane i wykonane tak, aby maksymalnie uprościć sposób doprowadzenie sygnałów do elementów sterownika. Rozdział 3 Koncepcja układu sterowania Zgodnie z założeniami pracy dotyczacymi ˛ modułowości jak i pracy w czasie rzeczywistym układ sterowania manipulatora oparto o system modułowy z magistrala˛ VME [13]. Jest to jeden ze standardów określajacych ˛ budow˛e komputera modułowego. Sens modularności polega na tym, że w ramach danego standardu komputera modułowego użytkownik ma dost˛ep do wzajemnie zgodnych pod wzgl˛edem mechanicznym, elektrycznym i funkcjonalnym podzespołów, które może indywidualnie dobierać. Wybór tego typu systemu wiaże ˛ si˛e nast˛epujacymi ˛ korzyściami typowymi dla systemów otwartych: elastyczność w konfigurowaniu sprz˛etu i oprogramowania, dynamiczny rozwój dost˛epnych na rynku modułów, szeroka oferta rynkowa najróżniejszych typów sprz˛etu oraz oprogramowania, dost˛ep do standardów w dziedzinie oprogramowania takich jak system operacyjny UNIX, OS-9, rodzina protokołów sieciowych TCP/IP. VMEbus implementuje architektur˛e komputerowa˛ typu master-slave. Jednostka centralna pracuje w wielozadaniowym systemie czasu rzeczywistego OS-9, który oparty jest na koncepcji modułów pami˛eci. Został tak zaprojektowany, by każdy moduł realizował określone funkcje. Modularność ta umożliwia właczanie ˛ lub usuwanie poszczególnych modułów w trakcie konfigurowania OS-9 dla potrzeb konkretnego systemu komputerowego. W skład cz˛eści sprz˛etowej układu sterowania wchodza: ˛ jednostka centralna VM662 wraz ze sterownikiem dysków CXM-SCSI, sterownik nap˛edu VFMC (dla każdej z osi), wzmacniacz mocy PWM (dla każdej z osi), zasilacz. Pakiet VM662 zawiera: jednostk˛e centralna˛ MC68060 @50MHz (3.3V), sterownik komunikacyjny - MC68EN360 @33MHz, 13 ¥ «<¬ ª `¡ ¯®° ¦ ±²¯³´ §¨© µ¶· ¥¦ ¸¹º ¼ ½ ¼¾ »¼ ÅÆ ê à æèé4 î ðñ ê òóô ß áâ ãäåçï àß ïî ï à Û ëìí ÜÝÞ à Û ï ØÙÚ4Û |~}v ¢¤£ ê ¿À  à ÂÄ Á ~v Ô ÒÑ Ô ÑÓ Õ×Ö ÊË Ç*È^ É Ç ÊÍÌ ÎÐÏ z <z õö÷ù ø ú<ûüýöþ ø ÿ üý Rysunek 3.1: Ogólny schemat blokowy układu sterowania manipulatorem. pami˛eć - 16MB DRAM (32bit), 1MB FLASH, 1MB DPRAM, interfejs VME, sterownik dysków CXM-SCSI, Sterownik nap˛edu VFMC [15] (VMEbus Free Programmable Motion Controller) zbudowany jest w oparciu o 32-bitowy mikrokontroler MC68332 [4] jako moduł slave i interrupter magistrali VME. Komunikacja z jednostka˛ centralna˛ odbywa si˛e przy pomocy interfejsu VME (TROOPER II). Sterownik ma możliwość wykonywania pomiaru parametrów takich jak: położenie ramienia (koder), pr˛edkość ramienia (koder, pradnica ˛ tachometryczna), temperatura radiatorów we wzmacniaczu mocy PWM prad ˛ płynacy ˛ w obwodzie silnika a także posiada wyjścia sterujace: ˛ wzmacniaczem mocy PWM (PWM-wypełnienie, DIR-kierunek), sygnałem gotowości Control Ready dla zasilacza. 14 Sterownik nap˛edu osi VFMC jest pomostem łacz ˛ acym ˛ jednostk˛e centralna˛ ze wzmacniaczem mocy PWM. Jednostka nadrz˛edna komunikuje si˛e poprzez magistral˛e VME przy pomocy 16-sto 16-bitowych dwustronnie dost˛epnych rejestrów (mailbox)wbudowanych w interfejs TROOPER II. Wzmacniacz mocy PWM ma za zadanie sterować nap˛edem osi robota, na podstawie sygnałów PWM i DIR. Posiada wbudowane zabezpieczenie pradowe ˛ oraz czujniki temperatury na obu radiatorach. Sterowanie nap˛edem odbywa si˛e w układzie mostka typu H, w skład którego wchodza˛ tranzystory mocy typu MOSFET. Załaczaniem ˛ tranzystorów steruje układ logiki poddajacy ˛ obróbce sygnały sterujace. ˛ Zasilacz dostarcza napi˛ecia obiektowe +5V, +12V, 12V, +24V, oraz napi˛ecie +50V, które może zostać właczone ˛ dopiero po pojawieniu si˛e sygnału gotowości. Oprogramowanie sterownika manipulatora można podzielić na dwie cz˛eści: oprogramowanie sterowników VFMC, programy sterujace ˛ z magistrali VME. Oprogramowanie sterowników jest przesyłane w postaci S-rekordów z jednostki nadrz˛ednej poprzez magisral˛e VME do sterowników VFMC. Przesyłanie to umożliwia program bootload, który umieszczony jest w pami˛eci typu FLASH ROM w sterowniku VFMC. Umieszczenie innego programu startowego w pami˛eci FLASH ROM jest możliwe poprzez interfejs BDM jednostki centralnej sterownika VFMC. Programem wysyłajacym ˛ S-rekordy od strony magistrali VME jest vfmcload. Do wysyłania programów, do jednostki nadrz˛ednej dla sterownika VFMC można posłużyć si˛e programem kermit. Programem sterujacym ˛ niskiego poziomu (driver) jest troper. Posiada on funkcje umożliwiajace ˛ odczyt/zapis danych z/do sterownika VFMC. W celach testowych zostały napisane programy sterujace ˛ z magistrali VME: buser - testujacy ˛ obecność sterownika na magistrali adresowej, treset - resetujacy ˛ sterownik VFMC, troptest - testujacy ˛ sterownik niskiego poziomu. Rozdział 4 Dokumentacja układu sterowania W układzie starowania manipulatora można wyróżnić cz˛eść obiektowa˛ i sygnałowa˛ (rysunek 4.1).Po stronie sygnałowej sterownika znajduje si˛e: 1. system uruchomieniowy z magistrala˛ VME, 2. dwa sterowniki VFMC - strony sygnałowe. Jednostka nadrz˛edna ze sterownikiem dysku osadzone sa˛ w kasecie 6U magistrali VME. Całość została wykonana przez firm˛e PEP Modular Computers. Sterownik VFMC został zaprojektowany, wykonany (wraz z obwodem drukowanym) i przetestowany w ramach tej pracy na podstawie [15] i [11]. W cz˛eści obiektowej możemy wyróżnić: 1. dwa sterowniki VFMC - strony obiektowe, 2. dwa wzmacniacze mocy PWM, 3. rozdzielacz sygnałów, 4. zasilacz, Wzmacniacz mocy PWM, rozdzielacz sygnałów oraz zasilacz zastał zaprojektowany, wykonany (wraz z obwodem drukowanym) i przetestowany w ramach pracy (wzmacniacz mocy PWM na podstawie [11]) Obie cz˛eści posiadaja˛ osobne masy i sa˛ galwanicznie odseparowane od siebie za pomoca˛ transoptorów. Zabezpiecza to całkowicie układ nadrz˛edny przed skutkami awarii układu wykonawczego. 16 ÌÎÍÐÏÑÌÐÒÓÑÌÎÍ ÊË Å ï Æ Ê ÄÂÃÄ íîïð É ÆÇÈ ì ê ëì éê ¾ ÀÁ ¾¿ ¼½ º» ÔÐÕÐÖ q op v ¡ ¤ § ª ° ³´ ¢£ ¥¦ ©¨ «¬ ®¯ ²± mn tu rs ¡¢ £¤¥¦§¥ mn qr u yx | kl op st wv z{ ~} %& )* - 10 4 7 : = @ C FG #$ '( +, /. 23 65 89 <; >? AB ED þÿ ý %' $ & ,- 243 9: ?4@ EF K'L Z[ ab i j "# *+ 01 78 => CD IJ X YW _ `^ ed ! ( ) . / 5 6 ; < A B G H U V \ ] c hg f ST O'P QR MN ¸¹ JK NO R VU Y \ _ b e h kl HI LM PQ ST XW Z[ ]^ a` cd fg ji ¸ ¼ Ã Ê ¶· ¹º» ÌÍ ¾¿ ÀÁ ÅÆ ÇÈÉ Ë ½ Ä µ µ¶· ´ ÓÕÔ Û'Ü áâ ç'è íî ó'ô ùú ÿ ÒÎ ÏÐÑ Ú Ù ßà åæ ëì ñò ÷ø ýþ Ö ×Ø Ý Þ ã ä é ê ï ð õ ö û ü ³ ² ! " °± ®¯ Ù Ü ÚÛ ×Ø ]_b ^`a ~{ xy z{ Z[\ »¸¼ j k r l t s u dfc e ghi mfn opq v ¿ µ¶ w } º y z{| ¾ ·¸ EFGI D KL HJ wxy ß ÝÞ ab hi no tu {,| , ãä ßà ` ^_ g ef lm rs y zx çæ ë ì áâ ÝÞ \ ] c d j k p q v w } ~ å êé è § ¨ ° © ² ± ³ ¢f¡ £ ¤¥¦ ª¬« ®¯ v ´ ¶½ ·¸¹ OPR Q TWY VUX SU NM ´µ¶ â PO TSR XWV Y N Q U Z[ Ì Ë Í ÓUÔ Î Å Ù Ú ðUñ Î ö ÷ üUý Ä ÆÎ àvÞ ß á vç å æ è ÑÒ Ø× îï õô úû Ï Ð Õ Ö ì í ò ó ø ù þ ÿ Û ÜÝ â ãä À ÁÂÃ Ç ÈÉÊ U ¢£ ©ª ÕÖ ÛÜ ¼,½ Ã,Ä óô ïð ¡ ¨ ¦§ ¯® ° µ³´ ¶ ÉÇÈ Ê ÏÍÎ Ð ÓÔ ÙÚ º »¹ Á ÂÀ ÷ö û ü ñò íî ¤ ¥ « ¬ ± ² Å Æ Ë Ì Ñ Ò × Ø · ¸ ¾ ¿ õ úù ø #$ 89 >? DE JK *,+ 2,3 !" 67 <= BC HI ( ) 0 1 4 5 : ; @ A F G % '& - /. LM ãä åæ !& (- /5 !" ()* ' /01 . #!%$ ,+ 7; çè <= : 23%4 789 6 C >@AB >? Rysunek 4.1: Schemat blokowy sterownika manipulatora. ë êé àá «¬ ¨©ª y ~ |} ~ y{ yz wx 4.1 System uruchomieniowy z magistrala˛ VME 4.1 17 System uruchomieniowy z magistrala˛ VME System uruchomieniowy z magistrala˛ VME produkcji PEP Modular Computers został zakupiony ze środków grantu aparaturowego KBN w 1998 roku. W skład systemu wchodzi: 1. system operacyjny OS-9, 2. jednostka nadrz˛edna VM662 wraz z: pami˛ecia˛ RAM 16MB, pami˛ecia˛ FLASH 1MB, karta˛ sieciowa˛ Ethernet 10B2, 3. sterownik dysku CXM-SCSI, 4. dysk twardy, 5. nap˛ed dyskietek 1.4 MB, 6. zasilacz, 7. 15 slotowa magistrala VME ze złaczami ˛ J1,J2, 8. kaseta 6U. Jednostka nadrz˛edna jest zbudowana w oparciu o procesor MC68060 50MHz, MC68EN360 33MHz. Posiada 256 KB pami˛eci SRAM, 6 portów szeregowych (w tym pi˛eć dost˛epnych na płycie czołowej jako RS232 (RJ45)), interfejs CXC i oprogramowanie firmowe PEPbug. Sterownik dysku CXM-SCSI, jest kompatybilny ze standardem SCSI1 i SCSI2. Maksymalna pr˛edkość transmisji dla tego sterownika wynosi 5MB/s zarówno dla transmisji synchronicznej jak i niesynchronicznej. 4.2 Sterownik VFMC - strona sygnałowa Cz˛eść sygnałowa sterownika VFMC oparta jest na mikrokontrolerze Motoroli MC68332 i interfejsie magistrali VME firmy TUNDRA (TROOPER II). Mikrokontroler wraz z pami˛eciami RAM i FLASH ROM, zegarem i interfejsem RS232 stanowi samodzielna˛ jednostk˛e obliczeniowo - sterujac ˛ a.˛ W połaczeniu ˛ z interfejsem TROOPER II staje si˛e całkowicie funkcjonalnym modułem typu slave magistrali VME. 4.2 Sterownik VFMC - strona sygnałowa 18 ~ n v xyz ª ghi jk ef b cd _`a ]^ [\ YZ PQR JKL STU P HI G VWX M @A « 89 BF MO DE >? BC <= 67 45 :; MN °±² §¨ ¾¿nÁ À ¼½ s rt u pqnr n ®¯ o lnm wq {|n} n ¤¥¦ ¢£ ¡ n øùúû ñô üýþÿ õö÷ ñòó ¹ºn» ¬ © ¶·¸ ³´µ ÎÏ ËÌnÍ ÓÔ ÐÑnÒ 23 +, ÂÃnÄ 01 )* -./ '( & ÅÆ !" %$ #$ )( '( %& ØÙ ÕÖn× ò ðñ îï ìí ! "#$ àâ ßà á n Ê ù ÇÈnÉ ÷ø õö óô äæ ãä å n ÝÞ ÚÛnÜ þÿ üý úû êë çèné Rysunek 4.2: Schemat blokowy VFMC. *+, 4.2 Sterownik VFMC - strona sygnałowa 4.2.1 19 Jednostka centralna W skład jednostki centralnej wchodzi: 1. mikrokontroler MC68332 wraz z układem zegara, 2. 2 pami˛eci SRAM 128k 8, 3. pami˛eć FLASH ROM 128k 8, 4. interfejs łacza ˛ transmisji szeregowej RS232 (MAX232ACWE), 5. łacza ˛ QSPI, TPU, SCI i BDM. Mikrokontroler w obudowie PQFP 132pin wraz z układem zegara jest umieszczony na górnej warstwie druku (rysunek 7.7). Na sygnałach wejściowych mikrokontrolera: PF1 . . . PF6, T ST ME, HALT , BERR, DSACK0 - DSACK1, AV EC, BKPT , T2CLK. wymuszony został stan wysoki poprzez drabink˛e rezystorów 4.7kΩ RP401 i RP402 oraz rezystor R404 820Ω (RESET ). Linie danych D0, D3 i D9 podłaczone ˛ sa˛ poprzez rezystory R401..R403 i diody D401..D403 do sygnału RESET. Powoduje to wymuszenie stanu niskiego na tych liniach podczas resetu mikrokontrolera (na pozostałych liniach jest wymuszany stan wysoki wewnatrz ˛ mikrokontrolera). Wymuszenie stanu niskiego na liniach powoduje ustwanienie portów dwufunkcyjnych na: CSBOOT - 8bit (D0), ADDR19 (D3), PORTF (D9). Do adresownia pami˛eci SRAM wykorzystuje si˛e linie A01-A17. Pierwsza pami˛eć, U403, podłaczona ˛ jest do górnej cz˛eści magistrali danych (D08-D15), druga zaś U404, do dolnej (D00-D07). Podłaczenie ˛ to zapewnia dost˛ep do 16 bitowej pami˛eci SRAM w obszarze 128k 16. Pami˛eć FLASH ROM adresowana jest liniami A00-A16 magistrali adresowej a jej linie danych przyłaczone ˛ sa˛ do górnej cz˛eści magistrali (D08-D15). Blok pami˛eci sterowany jest za pomoca˛ 6 linii wyboru (chip select) mikrokontrolera. Sygnały sterujace ˛ zawarte sa˛ w tabeli 4.1. 4.2 Sterownik VFMC - strona sygnałowa 20 Tablica 4.1: Sygnały sterujace ˛ blokiem pami˛eci VFMC chip select CSBOOT CS0 CS1 CS2 CS2 CS6 CS7 pami˛eć sygnał FLASH ROM U405 E SRAM U403 W SRAM U404 W SRAM U403 E1 SRAM U404 E1 FLASH ROM U405 G FLASH ROM U405 W Mikrokontroler Mikrokontroler Motoroli MC68332 [4] wykonany jest w technice HCMOS w obudowie 132 wyprowadzeń. W jego skład wchodza: ˛ jednostka centralna CPU32 - 32 bitowy procesor pracujacy ˛ z zegarem maks. 25MHz, mikroprogramowalny układ czasowy TPU o 16 kanałach pracujacych ˛ w wielu trybach, podsystemy do komunikacji szeregowej - synchronicznej (QSPI) i asynchronicznej (SCI), 2kB pami˛eci statycznej RAM, programowalny układ dekodera adresów (chip select), wbudowany emulator BDM (Background Debugging Mode). Mikroprogramowalny układ czasowy TPU jest wykorzystywany do sterowania wzmacniacza mocy PWM sygnałem PWM (funkcja QOM Queued Output Match). Funkcje TPU FQD (Fast Quadrature Decode) oraz NITC (New Input Transition Counter) służa˛ w sterowniku do odczytu pozycji z koderów. TPU wykorzystuje si˛e także do komunikacji pomi˛edzy sterownikami. Podsystem komunikacji szeregowej synchronicznej QSPI (Queued Serial Peripheral Interface) wykorzystuje si˛e do odczytu pomiarów z przetwornika A/C. Podsystem SCI (Serial Communication Interface), jest wyprowadzony poprzez interfejs MAX232 w postaci łacza ˛ pomocniczego. Pami˛eć SRAM M628188 firmy SGS Thomson [6] jest asynchroniczna˛ pami˛ecia˛ statyczna RAM 1M bitowa˛ z sygnałem output enable. Została wykonana w obudowie SOJ 400 mils. Cykl pojedynczego kroku wynosi 20ns, zaś dost˛ep do pami˛eci trwa 15ns. Podczas pracy pami˛eć pobiera 175mA, a w trybie oszcz˛edzania energii (standby) 4mA. Zasilanie układu wynosi 5V. 4.2 Sterownik VFMC - strona sygnałowa 21 Pami˛eć ta jest wykorzystywana przez sterownik VFMC do przechowywania danych oraprogramu użytkownika. Ze wzgl˛edu na krótki czas dost˛epu (który jest 5 krotnie krótszy od FLASH ROM), Program umieszczony we FLASH ROM po uruchomieniu przekopiowuje si˛e do pami˛eci SRAM i tam si˛e uruchamia. Pami˛eć FLASH ROM 29F010 firmy AMD [9] jest 5V 1M bitowa˛ pami˛ecia˛ FLASH ROM o 70ns dost˛epie. Pobór pradu ˛ przez układ wynosi 30mA podczas odczytu i 50mA podczas cyku zapisu lub kasowania. W stanie oszcz˛edzania energi pami˛eć pobiera <25µA. Zastosowany układ jest w obudowie TSOP 32pin typu Reverse. Ilość cyklów kasowania wynosi 100 000. Pami˛eć FLASH ROM służy do przechowywania kodu programu użytkownika. Interfejs łacza ˛ szeregowego RS232 MAX232ACWE firmy MAXIM [8] jest dwukanałowym driverem linii RS232 o maksymalne pr˛edkości 200kbps. Zasilany jest napi˛eciem 5V a do pracy układ potrzebuje tylko czterech zewn˛etrznych kondensatorów. Zastosowany interfejs jest w obudowie 16pin typu SO. Omawiany interfejs stanowi cz˛eść składowa˛ pomocniczego łacza ˛ SCI. Tablica 4.2: CON402. Interfejs QSPI. Opis wyprowadzeń sygnał GND PCS0 PCS2 SCK MOSI pin 1 3 5 7 9 pin 2 4 6 8 10 sygnał VCC PCS1 PCS3 MISO GND Tablica 4.3: CON403. Interfejs BDM. Opis wyprowadzeń sygnał DS GND GND RESET VCC pin 1 3 5 7 9 pin 2 4 6 8 10 sygnał BERR BKPT FREEZE IFETCH IPIPE 4.2 Sterownik VFMC - strona sygnałowa 22 Opis łacz ˛ Cz˛eść sygnałowa sterownika posiada wyprowadzone sygnały za pomoca˛ łaczówek ˛ typu m˛eskiego. Wyprowadzone złacza ˛ to: CON402 (tabela 4.2)- 5 2 pin - interfejs QSPI CON403 (tabela 4.3)- 4 2 pin - interfejs BDM CON404 (tabela 4.4)- 7 2 pin - interfejs do komunikacji pomi˛edzy sterownikami VFMC CON405 (tabela 4.5)- 2 5 pin - interfejs łacza ˛ RS232 Tablica 4.4: CON404. Interfejs transmisji pomi˛edzy sterownikami. Opis wyprowadzeń sygnał NC TP5 TP7 TP9 TP11 TP13 VCC pin 1 3 5 7 9 11 13 pin 2 4 6 8 10 12 14 sygnał T2CLK TP6 TP8 TP10 TP12 TP14 GND Tablica 4.5: CON405. Interfejs łacza ˛ RS232. Opis wyprowadzeń sygnał NC TP5 TP7 TP9 TP11 TP13 VCC 4.2.2 pin 1 3 5 7 9 11 13 pin 2 4 6 8 10 12 14 sygnał T2CLK TP6 TP8 TP10 TP12 TP14 GND Interfejs magistrali VME Interfejs magistrali VME oparty jest o układ TROOPER II firmy Tundra. Wraz z czterema 8-bitowymi dwukierunkowymi buforami trójstanowymi tworzy układ wymiany danych pomi˛edzy jednostka˛ centralna˛ (MC68332) a nadrz˛edna˛ (VM662). 4.2 Sterownik VFMC - strona sygnałowa 23 Tablica 4.6: CON401.VFMC - magistala VME.Opis wyprowadzeń wyprowadzenie 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 kolumna a D00 D01 D02 D03 D04 D05 D06 D07 GND NC GND DS1* DS0* WRITE* GND DTACK* GND AS* GND IACK* IACKIN* IACKOUT* AM4 NC NC A05 A04 A03 A02 A01 NC VCC kolumna b NC NC NC NC NC NC NC NC NC NC NC NC NC NC NC AM0 AM1 AM2 AM3 GND NC NC GND IRQ7* IRQ6* IRQ5* IRQ4* IRQ3* IRQ2* IRQ1* NC VCC kolumna c D08 D09 D10 D11 D12 D13 D14 D15 GND NC NC SYSRESET* LWORD* AM5 A23 A22 A21 A20 A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A09 NC NC VCC TROOPER II jest pojedynczym układem typu slave magistrali VME. Komunikuje si˛e za pomoca˛ 16 wewn˛etrznych rejestrów mailbox dost˛epnych zarówno od magistrali VME jak i od strony sterownika. Posiada możliwość generacji przerwań na magistrali VME na siedmiu poziomach priorytetowych. Układ może być adresowany z magistrali VME w trybach A32, A24 i A16 i obsługuje dane w trybie D16 i D8. Od strony sterownika (lokalnej) układ jest kompatybilny z rodzina˛ 68K, oraz zgłasza przerwania na czterech poziomach. TROOPER II ma wbudowany dekoder adresowy dla magistrali VME, który umożliwia programowanie (od strony lokalnej) adresu (slave address) i modyfikatorów (address modifiers). Magistrala danych TROOPER-a (LD0..LD15) jest podłaczona ˛ pomi˛edzy cztery bufory U406..U409 pozwalajace ˛ na przełaczanie ˛ linii danch. Połaczenie ˛ magistrali danych 4.3 Sterownik VFMC - strona obiektowa 24 . do jednostki centralnej lub do magistrali VME zależne jest od sygnałów BW R BRD (Data Buffer Direction Control), LBENB (Local Data Buffer Enable Control) i V BENB (VMEBus Data Buffer Enable Control) (tabela 4.7) Tablica 4.7: Przełaczanie ˛ magistrali danych TROOPER’a. Opis sygnałów operacja TROOPER -> VME VME -> TROOPER TROOPER -> MC68332 MC68332 -> TROOPER . BW R BRD LBENB V BENB H H L L H L H L H L L H Sygnały V IRQ1. . . V IRQ7 połaczone ˛ zostały do magistrali VME poprzez inwertery U410 i U411 do sygnałów IRQ1*. . . IRQ7*. Do sygnału SYSRESET* został podłaczony ˛ rezystor R407 w celu wymuszenia stanu wysokiego, jednakże o rezystancji na tyle dużej, by pozwolić na reset linii. Interfejs magistrali VME nie wykorzystuje wszyskich sygnałów dost˛epnych na ła˛ czówce P1. Sygnały doprowadzone do sterownika VFMC poprzez złacze ˛ CON401 znajduja˛ si˛e w tabeli 4.6 4.3 Sterownik VFMC - strona obiektowa Cz˛eść obiektowa sterownika VFMC ma za zadanie galwaniczne odseparowanie sygnałów obiektowych z cz˛eści sygnałowej, zebranie pomiarów z obiektu i wzmocnienie sygnału CONTROL READY (rysunek 7.1). W cz˛eści obiektowej można wyróżnić nast˛epujace ˛ bloki funkcjonalne: 1. Układ przetwornika analogowo - cyfrowego, 2. Prostownik sygnału napi˛eciowego z tachometru, 3. Filtr sygnału napi˛eciowego z pomiaru pradu ˛ pobieranego przez silnik, 4. Układ wzmacniacza z zabezpieczeniem sygnału gotowości sterownika CONTROL READY, 5. Układ sterowania wzmacniaczem mocy PWM, 6. Interfejs kodera, 7. Wejście sygnału synchronizacji (PF7). 4.3 Sterownik VFMC - strona obiektowa 25 ±@²´³ oqpsrft 02143 5 687:9<;81:= / ¬f®¯[° ¨@© ª « >@?8A B4C D2E4F GIHKJ L2M4N OQP8R SUTWVYX[Z]\ ^ uwvyxhz[{m| } ~m _a`cb@d2ef`cgheaikjml2n [[ :k I [ c] ¡ ¢ £¤¥¦§ Rysunek 4.3: Schemat blokowy VFMC - strona obiektowa 4.3 Sterownik VFMC - strona obiektowa 4.3.1 26 Układ przetwornika analogowo-cyfrowego. Układ przetwornika analogowo-cyfrowego składa si˛e z: przetwornika A/C TLC2543, złacza ˛ dodatkowych wejść pomiarowych, źródła napi˛ecia odniesienia Ref02, trzech transoptorów HCPL2631. Przetwornik AD TLC2543 Zastosowany przetwornik TLC2543 U309 firmy Texas Instruments [5] do pomiaru napi˛eć pochodzacych ˛ ze wzmacniacza mocy PWM ma nast˛epujace ˛ własności: rozdzielczość 12 bitów, czas konwersji 10µs, 11 wejść analogowych, 3 tryby testowe (Ref+, Ref-, (Ref+ - Ref- )/2), próbkowane wejścia sample-and-hold, bład ˛ liniowości 1 LSB, wewn˛etrzny zegar max 4.1 MHz, wyjście sygnalizacji końca przetwarzania End Of Conversion, programowalna kolejność bitów MSB lub LSB programowalna funkcja oszcz˛edzania energi Power Down, programowalna długość słowa danych interfejs SPI obudowa PSOP Przetwornik jest połaczony ˛ z jednostka˛ centralna˛ za pomoca˛ interfejsu QSPI. Sygnały DINP (Data Input), I/O Clock oraz CS sa˛ wejściami połaczonymi ˛ odpowiednio do sygnałów MOSI (Master Out Slave In), SCK, PCS0 poprzez transoptory U301, U302 i U303. W sterowniku przewidziano możliwość pomiaru dodatkowych zew˛etrznych napi˛eć doprowadzanych przez łacze ˛ CON303 (tabela 4.9) 4.3 Sterownik VFMC - strona obiektowa 27 Tablica 4.8: Przetwornik A/C. Wykorzystane wejścia sygnał VI Vtemp1 Vtemp2 Vtacho wejście AIN0 AIN1 AIN2 AIN3 Tablica 4.9: CON303. Wejścia przetwornika A/C. Opis wyprowadzeń. wyprowadzenie 1 2 3 4 5 6 7 8 9 10 sygnał +5V wejście AIN10 wejście AIN9 wejście AIN8 wejście AIN7 wejście AIN6 wejście AIN5 wejście AIN4 REF+ GND obiektowe Napi˛ecie odniesienia Ref02 Układ Ref02 dostarcza napi˛ecia +5V i GND dla wejść Ref+ i Ref- układu przetwornika [10]. Ref02 jest zasilany napi˛eciem 12V. Kondensatory C303..C305 stanowia˛ układ filtracji napi˛ecia odniesienia. Podstawowe parametry układu: napi˛ecie zasilania +8V. . . +40V, pobór pradu ˛ 1.4mA, napi˛ecie wyjściowe +5V 15V, 15mV, zakres temepratur -40 C. . . 85 C. Transoptor HCPL2631 Układ HCPL261 firmy Texas Instruments jest podwójnym transoptorem o izolacji galwanicznej min 3 kV [2]. Maksymalna pr˛edkość przełaczania ˛ wynosi 75ns. Pozostałe parametry to: max napi˛ecie zasilania 7V max prad ˛ wyściowy 16mA max prad ˛ wejściowy 15mA 4.3 Sterownik VFMC - strona obiektowa 28 W sterowniku VFMC transoptory typu HCPL 2631 sa˛ zasilone napi˛eciem 5V. Służa˛ one do transmisji danych w standardzie TTL. W celu dopasowania wejść i wyjść transoptora zastosowano rezystory ograniczajace ˛ podłaczone ˛ szeregowo. I tak, dla wejść pod1 µ 6V łaczano ˛ rezystor 560Ω, który ograniczał prad ˛ diody nadawczej do 5V560Ω ˛ ¶ 6mA. Prad 6mA jest wystarczajacy, ˛ by załaczyć ˛ klucz transoptora, a jednocześnie na tyle mały, aby mogło go wymusić dowolne wyjście TTL lub port wyjściowy MC68332. W szereg z tranzystorem wyjściowym właczano ˛ rezystor 330Ω, który ograniczał prad ˛ w kolektorze 5V 0 µ 6V ˛ ten jest wystarczajacy ˛ do zapewnienia wystarczajacej ˛ klucza do 330Ω ¶ 13mA. Prad szybkości narastania zboczy sygnału przy sterowaniu dowolnego wejścia typu TTL, czy HCMOS. 4.3.2 Pomiar sygnału napi˛eciowego z pradnicy ˛ tachometrycznej. Sygnał napi˛eciowy z pradnicy ˛ tachometrycznej umieszczonej na osi silnika manipulatora może wynosić maksymalnie ok 80V. W zależności od kierunku obrotów silnika, napi˛ecie to może si˛e równać +80V lub -80V. Pierwszym etapem dostosowania napi˛ecia z tachometru do standardu przetwornika TLC2543 jest układ dzielnika napi˛ecia z układem całkujacym. ˛ Napi˛ecie z pradnicy ˛ tachometrycznej jest dzielone w dzielniku napi˛ecia R317, R318 i R319 w stosunku 1:16.4 (1kΩ:16.4kΩ). Maksymalne napi˛ecie za dzielnikiem napi˛ecia może wynieść około +4V lub -4V. Rezystor wejściowy dzielnika został podzielony na dwie cz˛eści po 8.2kΩ tworzac ˛ z kondensatorem 10nF układ całkujacy ˛ o stałej całkowania 4.1kΩ 10 nF = 410µs. Diody D302 i D303 zabezpieczaja˛ lini˛e przed pojawieniem si˛e wyższego napi˛ecia niż +12V lub -12V. Tak ograniczony sygnał trafia na układ prostownika. Za prostownikiem otrzymujemy nieujemne napi˛ecie, które poprzez układ zabezpieczajacy ˛ (0. . . 5V) D304, D305 trafia do przetwornika A/C do wejścia AIN3. Prostownik składa si˛e z dwóch wzmacniaczy operacynych pracujacych ˛ w układach wzmacniaczy z ujemnym sprz˛eżeniem zwrotnym [12]. W przypadku, gdy napi˛ecie z pradnicy ˛ tachometrycznej jest dodatnie, na obu wejściach wzmacniacza operacyjnego U312 pojawia si˛e ten sam potencjał. Ten dodatni potencjał blokuje wyjście wzmacniacza U311. Układ U312 pracuje teraz jako wzmacniacz 10kΩ sygnału ze sprz˛eżeniem zwrotnym o wzmocnieniu 10kΩ ¶ 1. Natomiast, gdy napi˛ecie z pradnicy ˛ tachometrycznej jest ujemne układ U311 dzi˛eki ujemnemu sprz˛eżeniu zwrotnemu wymusza prad ˛ płynacy ˛ przez R320. Prad ˛ ten wymusza podniesienie potencjału wejścia dodatniego układu U312 do poziomu 0V. U312 pracuje wtedy jako wzmacniacz odwracajacy ˛ o wzmocnieniu -1. 4.3.3 Pomiar sygnału napi˛eciowego pradu ˛ płynacego ˛ w obwodzie silnika. Prad ˛ jest mierzony metoda˛ pośrednia.˛ Spadek napi˛ecia na rezystorach pomiarowych w obwodzie silnika we wzmacniaczu mocy PWM jest wzmacniany i filtrowany przez filtr 4.3 Sterownik VFMC - strona obiektowa 29 typu T. Filtr ten złożony z rezystorów R324 i R325 oraz z kondensatora C311 stabilizuje napi˛ecie pomiarowe. Stała czasowa filtru wynosi 1.95kΩ 10µF = 195 ms. Sygnał jest zabezpieczony przed przepi˛eciem za pomoca˛ diod D306 i D307 i jest połaczony ˛ do wejścia AIN0 przetwornika A/C. 4.3.4 Układ wzmacniacza z zabezpieczeniem dla sygnału gotowości sterownika (CONTROL READY). Sygnał gotowości sterownika CONTROL READY zezwala na załaczenie ˛ napi˛ecia 50V/30A zasilajacego ˛ mostkek mocy we wzmacniaczu mocy PWM. Sygnał ten jest połaczony ˛ łańcuchowo przez oba sterowniki VFMC oraz przez manipulator. Sterowanie tym sygnałem polega zatem na zamkni˛eciu łańcucha pradowego, ˛ którego poczatkiem ˛ jest napi˛ecie +24V, a końcem przekaźnik na napi˛ecie 24V. Sygnał sterujacy ˛ CONTROL READY (PF0) jest podwójnie odwracany przez inwentery z wejściami Schmitt’a i załacza ˛ poprzez rezystor R313 transoptor U305. Po załacze˛ niu układu, port PF0 jest ustawiony jako wejście. Powoduje to pojawienie si˛e logicznego zera na wyjściu bramki U308E, a zatem zablokowaniu poprzez bramk˛e U308C i transoptor U305 sygnału CONTROL READY. Transoptor MCT2E. Układ MCT2E firmy Texas Instruments jest pojedynczym transoptorem o izolacji galwanicznej min 3.55 kV [2]. Maksymalna pr˛edkość przełaczania ˛ wynosi 5µs. Pozostałe parametry to: · maksymalne napi˛ecie U 70V, CB · maksymalne napi˛ecie U 30V, CE · typowy prad ˛ wyściowy 5mA, · maksymalny prad ˛ wejściowy 20mA. W sterowniku VFMC zastosowano jeden transoptor typu MCT2E [2], gdyż sygnał CONTROL READY wymaga klucza pracujacego ˛ przy napi˛eciu 24V. Nie wymaga natomiast krótkiego czasu przełaczania, ˛ który w przypadku tego transoptora wynosi aż 5 us. ¸ 1 µ 5V Rezystor R313 powoduje ograniczenie pradu ˛ do 5V300Ω ¶ 12mA. Wyjście transoptora steruje tranzystorem T301 w układzie Darlingtona. Dioda D312 zabezpiecza układ przed pojawieniem si˛e w łańcuchu sygnałowym napi˛ecia wi˛ekszego niż 30V. Układ zabezpieczajacy ˛ przed zwarciem linii CONTROL READY do masy składa si˛e z tranzystora T302 i rezystorów R229 i R230. Zwarcie linii do masy, spowoduje wzrost napi˛ecia na rezystorze R229 (1Ω), które po przekroczeniu ok 0.6V załaczy ˛ tranzystor T302. Załaczenie ˛ T302 spowoduje zwarcie bazy tranzystora wyjściowego transoptora U305 do wymuszonej masy (CR ¸ ) i wyłaczenie ˛ tranzystora sterujacego ˛ T301. 4.3 Sterownik VFMC - strona obiektowa 4.3.5 30 Układ sterowania wzmacniaczem mocy PWM. Wzmacniacz mocy PWM narzuca na sygnały PWM i DIR standard CMOS +12V. Z tego powodu do sterowania tymi sygnałami użyto transoptora HCPL2531, którego wyjścia moga˛ pracować przy napi˛eciu do 15V. Zrezygnowano z transoptora MCT2E ze wzgl˛edu na dość mała˛ szybkość, a także z konieczności użycia dwóch układów zamiast jednego podwójnego (w modelu testowano takie wobec chwilowego braku HCPL2531; z powodzeniem przetestowano takie rozwiazanie). ˛ Transoptor HCPL2531 Układ HCPL2531 firmy Texas Instruments jest podwójnym transoptorem o izolacji galwanicznej min 3 kV [2]. Maksymalna pr˛edkość przełaczania ˛ wynosi 800ns. Pozostałe parametry to: · max napi˛ecie zasilania 15V, · max prad ˛ wyściowy 8mA, · max prad ˛ wejściowy 25mA. Rezystor R310 powoduje wymuszenie jedynki logicznej, przy braku sygnału TP15, na wejściu bramki U308B, która blokuje poprzez U308A sygnał PWM (TP15). Sygnał sterujacy ˛ DIR (PF1) jest zanegowany przez bramk˛e U308D. Rezystory R311 i R312 ogra¸ 1 µ 6V 11mA. Klucze wyjściowe transniczaja˛ prad ˛ diody wejściowej transoptora do 5V300Ω ¶ optora wyprowadzone sa˛ na łaczówk˛ ˛ e CON301 (tabela 4.10). Tablica 4.10: CON301.Interfejs VFMC-Wzmacniacz mocy PWM. Opis wyprowadzeń sygnał PWM DIR0 GND GND GND pin 1 3 5 7 9 pin 2 4 6 8 10 sygnał GND GND VI Vtemp1 Vtemp2 4.3 Sterownik VFMC - strona obiektowa 4.3.6 31 Interfejs kodera. Koder przyrostowo-impulsowy (incremental encoder) służy do odczytu położenia osi sil˛ ponika. Wytwarza on dwa sygnały A i B przesuni˛ete w fazie o 14 okresu. Bieżace łożenie uzyskuje si˛e poprzez zliczanie zboczy tych sygnałów w liczniku rewersyjnym. Bezwzgl˛edne położenie osi silnika uzyskuje si˛e poprzez wykorzystanie sygnału indeksowego. Na wyjściu C kodera pojawia si˛e jeden impuls na jeden obrót silnika. Tablica 4.11: CON302. Łacze ˛ kodera, I/O i tachometru. Opis wyprowadzeń sygnał CRSynchKodAKodBKodCTachoB GND -12Vs pin 1 3 5 7 9 11 13 15 pin 2 4 6 8 10 12 14 16 sygnał CR+ Synch+ KodA+ KodB+ KodC+ TachoA +5V +12Vs Wyjścia kodera można skonfigurawać jako różnicowe (wykorzystujac ˛ oba sygnały + i –) oraz jako pojedyncze pobierajac ˛ sygnał tylko z cz˛eści dodatnich. Sygnał różnicowy jest bardziej odporny na zakłócenia, jednakże wymaga dodatkowych trzech połaczeń ˛ z kodera. Do konfiguracji trybu pracy kodera służa˛ zwory J301, J302 i J303. Tablica 4.12: J301. Konfiguracja kodera. Opis wyprowadzeń sygnał A+ B+ C+ pin 1 2 3 Tablica 4.13: J302. Konfiguracja kodera. Opis wyprowadzeń sygnał wejście transoptora A+ wejście transoptora B+ wejście transoptora C+ pin 1 2 3 4.3 Sterownik VFMC - strona obiektowa 32 Tablica 4.14: J303. Konfiguracja kodera. Opis wyprowadzeń sygnał +5V +5V +5V pin 1 2 3 Sygnały dodatnie z kodera (A+, B+ i C+) sa˛ doprowadzone na łaczówk˛ ˛ e J302. Połaczenie ˛ ich 1:1 z łaczówk ˛ a˛ J301 spowoduje, że na diodach nadawczych transoptorów U306 i U307, b˛edzie pojawiało si˛e napi˛ecie mierzone w stosunku do katody: · 1.6V, gdy dioda jest spolaryzowan w kierunku przewodzenia (prad ˛ płynacy ˛ przez 5V ¸ 1 µ 6V diod˛e wynosi 300Ω ¶ 11mA) · -5V, gdy dioda jest spolaryzowana w kierunku zaporowym. Połaczenie ˛ łaczówki ˛ J302 z J303 1:1, spowoduje, że napi˛ecie mierzone w ten sam sposób b˛edzie wynosiło: · 1.6V, gdy dioda jest spolaryzowan w kierunku przewodzenia (prad ˛ płynacy ˛ przez 5V ¸ 1 µ 6V diod˛e wynosi 300Ω ¶ 11mA) · 0V, gdy dioda jest spolaryzowana w kierunku zaporowym. Aby wyjście kodera pracowało w trybie różnicowym, należy zewrzeć styki: · J301.1 z J302.1, · J301.2 z J302.2, · J301.3 z J302.3, gdzie J302.3 oznacza końcówk˛e numer 3 łaczówki ˛ J302. W przypadku pracy pojedynczej, należy zewrzeć: · J302.1 z J303.1 · J302.2 z J303.2 · J302.3 z J303.3 W opisywanym sterowniku manipulatora wykorzystano sygnał różnicowy kodera. Sygnały z kodera sa˛ połaczone poprzez transoptory do wejść TP0, TP1 i TP2 mikrokontrolera MC68332. Rezystory R314, R315 i R316 dopasowuja˛ wyjścia tranoptorów do wejść TPU (podobnie jak w przypadku łacza ˛ QSPI). W celu zmniejszenia zakłóceń zastosowano kondensatory blokujace ˛ 10nF na każdym z wejść TP0..TP3. 4.3 Sterownik VFMC - strona obiektowa 4.3.7 33 Konstrukcja mechaniczna. Płytka drukowana sterownika VFMC została zaprojektowana na czterech warstwach druku o powierzchni 1.6 dm2 . Warstwy wewn˛etrzne zawieraja˛ powierzchnie VCC i GND z punktami termicznymi oraz izolacyjnymi (7.3). Płytka drukowana sterownika VFMC ma wymiary Eurokarty 3U i jest zamontowana w kasetce z płyta˛ czołowa˛ 6U 4TE do gniazda J1 (Rysunek 4.10). Na czole płyty umieszczone sa˛ łacza ˛ CON301 i CON302 oraz diody sygnalizacyjne LED. Z tyłu płytki znajduje si˛e łacze ˛ P1 (CON401) do magistrali VME (Rysunek 4.4). » ¼ ¾ º ¹ ½¿ Rysunek 4.4: Płytka sterownika VFMC. Widok z góry. Opis rysunku płytki drukowanej sterownika VFMC 4.4 1. CON301 - łaczówka ˛ przewodu VH do wzmacniacza mocy PWM, 2. CON302 - łaczówka ˛ przewodu VR do rozdzielacza sygnałów, 3. przetwornik A/C, 4. pami˛eci RAM, 5. CON401 - łaczówka ˛ P1 magistrali VME 6. mikrokontroler M68332, 7. interfejs magistrali VME - TROOPER II. À 4.4 Wzmacniacz mocy PWM 4.4 34 Wzmacniacz mocy PWM Wzmacniacz mocy PWM na podstawie wypełnienia sygnału PWM i oraz sygnału kierunku DIR, steruje silnikiem nap˛edu osi. Sygnał wejściowy PWM oraz DIR powinien być nieujemnym sygnałem o amplitudzie 12V wzgl˛edem masy. Sygnały te, poddawane sa˛ obróbce cyfrowej i trafiaja˛ do układów wyzwalania tranzystorów mocy w mostku typu H. Wyjściem wzmacniacza mocy PWM jest sygnał PWM o napi˛eciu 50V i maksymalnym obciażeniu ˛ 30A zależny od wejść PWM i DIR. Wzmacniacz mocy PWM został tak zaprojektowany, by mógł wysterować silnik PZTK 88-35 TRR osi robota. Dodatkowo wzmacniacz został wyposażony w układ pomiaru pradu ˛ płynacego ˛ przez silnik, a także układ zabezpieczajacy ˛ przed przeciażeniem ˛ wyjścia. Na radiatorach z tranzystorami mocy zastały zamontowane układy pomiaru temperatury. Wejścia, oraz wyjścia pomiarowe połaczone ˛ sa˛ ze sterownikiem VFMC za pomoca˛ przewodu 10-żyłowego VH. Tablica 4.15: CON201. Gniazdo dla przewodu VH we wzmacniaczu mocy PWM sygnał PWM DIR GND GND GND pin 1 3 5 7 9 pin 2 4 6 8 10 sygnał GND GND Vi Vtemp2 Vtemp1 Zasilanie wzmacniacza mocy PWM, oraz sygnały sterujace ˛ silnikiem wyprowadzone sa˛ na tylnej ściance kasetki poprzez łacze ˛ typu H15. We wzmacniaczu mocy PWM można wydzielić nast˛epujace ˛ bloki funkcjonalne: 1. Wejściowy układ formowania sygnałów PWM i DIR, 2. Układ wyzwalania mostka H, 3. Mostek mocy typu H (W1. . . W4), 4. Układ pomiaru pradu, ˛ 5. Układ zabezpieczajacy ˛ przed przeciażeniem ˛ wyjścia, 6. Układ sygnalizacji pracy (LED), 7. Układ pomiaru temperatury. 4.4 Wzmacniacz mocy PWM 35 !" #!$ A>BCDFE ÁÃÂÅÄ <>=?=5@ %&(' )*,+ -.0/1-23)546 )879:4)' ;2 ÆÈÇÊÉ G>HIHJ K>LMONP QRSOT UË ÌÎÍ ÏÑÐ ÒÓÕÔQÒÖØ× ÖÙÑÚ Ö ikj oqp Uë ìÎí îáï ðäñÕòQðóèô óèõÑö ó ÛUÜÞÝ ßáà âäãÕåQâæèç æèéáê æ lnm UVXW rts ÷UøÎù úÑû üäýÕþQüÿ ÿ ÿ xzy { |~}f z Y>Z[F\]^ _`ba_5c8d e`f_Ogh\ Rysunek 4.5: Schemat blokowy wzmacniacza mocy PWM. uwv 4.4 Wzmacniacz mocy PWM 36 Tablica 4.16: CON204. Gniazdo wyjściowo-zasilajace ˛ wzmacniacza mocy PWM sygnał pin pin z4 sygnał NC z8 +12Vs z12 -12Vs z16 +50V z20 M1 z24 M2 z28 GND z32 GND NC d6 +12V d10 +50V d14 +50V d18 M1 d22 M2 d26 GND d30 4.4.1 Wejściowy układ formowania sygnałów PWM i DIR Wejściowy układ formowania zapewnia właczenie ˛ układu wyzwalania: · W2 i W4 - stop · W1 i W4 - obrót w prawo · W2 i W3 - obrót w lewo Posiada również układ zabezpieczajacy ˛ przed skutkami opóźnień przy wyłaczaniu ˛ kluczy w mostku mocy. Sygnał PWM jest wymuszany poprzez wyjście transoptora U304 (VFMC - strona obiektowa) połaczone ˛ szeregowo z rezystorem R201 6.8kΩ. W momencie właczenia ˛ klu¸ 0 µ 5V cza prad ˛ płynacy ˛ przez R201 wynosi 12V6 µ 8kΩ 1 7mA. Dodatkowo przez klucz płynie ¶ niewielki prad ˛ wymuszajacy ˛ stan 0 na wejściu bramki U202A. Wyłaczenie ˛ klucza powoduje, że poprzez rezystor R201 i R202 wymuszany jest stan wysoki na wejściu bramki ¸ 0 µ 5V 1 7mA do masy. U201A. Powoduje to doprowadzenie poprzez wejście bramki 12V6 µ 9kΩ ¶ Dobór wartości rezystancji rezystora R201 jest optymalny i został potwierdzony pomiarami oscyloskopem sygnału na wejściu U202A. Sygnałem aktywnym wejścia PWM jest 0 logiczne. Odłaczenie ˛ przewodu łacz ˛ acego ˛ sterownik VFMC i wzmacniacz mocy PWM (rezystor R201 wymusza stan wysoki) spowoduje automatyczne wyłaczenie ˛ silnika (zerowe wypełnienie). Rezystory wejściowe R205 i R206 dla sygnału DIR zostały dobrane w ten sam sposób. Układ logiczny ma na celu uaktywnienie odpowiednich układów wyzwalania mostka na podstawie dwóch sygnałów PWM i DIR. Zatrzymanie silnika (stop) nast˛epuje poprzez zwarcie wyprowadzeń silnika do masy. Jest to typowe rozwiazanie ˛ hamowania silnika elektrycznego. 4.4 Wzmacniacz mocy PWM 37 Tablica 4.17: Logiczny układ formowania sygnału PWM i DIR PWM 1 0 1 0 1 0 1 0 DIR 1 1 0 0 1 1 0 0 U206[7] 1 1 1 1 0 0 0 0 U202C 1 0 1 1 1 1 1 1 UU204A 1 0 1 1 1 1 1 1 U202D 1 1 1 0 1 1 1 1 U205A 1 1 1 0 1 1 1 1 opis stop prawo stop lewo stop stop stop stop Układ złożony z bramek U201B, U201C oraz z kondensatora C201 820pF i rezystora R204 4.7kΩ stanowi opóźnienie dla sygnału PWM o stałej czasowej 820pF 4.7kΩ = 3.9µs. Z opóźnienia tego korzystaja˛ bramki U203A i U202B, które powoduja˛ wcześniejsze wyłaczenie ˛ przed właczeniem ˛ w innej konfiguracji kluczy. 4.4.2 Układ wyzwalania mostka H We wzmacniaczu mocy PWM sa˛ dwa rodzaje wyzwalaczy tranzystorów MOSFET - dla tranzystorów typu N i typu P. Układ wyzwalania dla tranzystorów typu N nie potrzebuje specjalnych mechanizmów wyłaczania ˛ tranzystorów. Składa si˛e on z 6 inwerterów połaczonych ˛ równolegle. Sygnał sterujacy ˛ z wyjścia inwerterów jest wystarczajacy, ˛ aby właczyć ˛ i wyłaczyć ˛ tranzystory. Sygnał logiczny 1 pojawiajacy ˛ si˛e na zrównoleglonych wyjściach inwerterów powoduje właczenie ˛ tranzystorów MOSFET. Układy wyzwalania tranzystora typu P składaja˛ si˛e z cz˛eści załaczajacej ˛ i wyłacza˛ jacej ˛ tranzystor. Rozważmy układ sterownia tranzystorem T208,T209. W stanie, gdy na wejściu układu wyzwalania jest stan wysoki, tranzystor T214 jest zamkni˛ety. Dioda Zenere D202 i rezystor R221 powoduja˛ przewodzenie tranzystora T212, a tym samym blokad˛e tranzystora mocy. Pojawienie si˛e sygnału niskiego spowoduje włacznie ˛ tranzystora T214. Tranzystor T212 zostanie zatkany, natomiat T213 spowoduje właczenie ˛ sie tranzystora mocy poprzez zwarcie jego bramki z masa.˛ Wyłaczenie ˛ klucza typu P nast˛epuje po zdj˛eciu sygnału niskiego z wejścia. Układ wyzwalania tranzystorów T204 i T205 jest identyczny. 4.4.3 Mostek mocy typu H Stopień końcowy wzmacniacza mocy został wykonany jako wzmacniacz z czterema kluczami. Klucze przełaczaj ˛ a˛ obciażenie ˛ (silnik) pomi˛edzy +50V a masa˛ poprzez rezystor pomiarowy. 4.4 Wzmacniacz mocy PWM 38 Zastosowane tranzystory maja˛ nast˛epujace ˛ parametry [7]: · maksymalny prad ˛ przewodzenia ID 30A · dopuszczalne napi˛ecie pracy U DSS 60V · rezystancja wejściowa R DSON – typ N 50mΩ – typ P 80mΩ Zostały one połaczone ˛ po dwa równolegle w celu zwi˛ekszenie maksymalnego pradu ˛ szczytowego 4.4.4 Układ pomiaru pradu ˛ Pomiar pradu ˛ dokonuje si˛e pośrednio poprzez pomiar napi˛ecia na rezystorach R214. . . R217. Rezystory te połaczone ˛ równolegle daja˛ wypadkowa˛ rezystancj˛e 0.025 Ω. Wzmocnienie napi˛ecia z pomiaru dokonuje si˛e w układzie ze wzmacniaczem U208. Jest to wzmacniacz z ujemnym sprz˛eżeniem zwrotnym o wzmocnieniu 10. Wzmocniony sygnał jest dostarczany do łacza ˛ CON201, a także do układu zabezpieczaj˛ecego przed nadmiernym obciażeniem. ˛ 4.4.5 Układ zabezpieczajacy ˛ przed przeciażeniem ˛ wyjścia Sygnał napi˛eciowy po dziesi˛eciokrotnym wzmocnieniu podawany jest na wejście - komapartora U206. Porównywany jest tam z napi˛eciem z dzielnika R228 i R229. Napi˛ecie na 390Ω 12V dzielniku wynosi: 390Ω ecie jest niższe od 4.9V (co odpowiada 560Ω ¶ 4 9V . Jeżeli napi˛ pradowi ˛ < 20A) na wyjściu komparatora pojawia si˛e sygnał wysoki, który steruje bramka˛ U202A. W przypadku, gdy prad ˛ przekroczy 20A, napi˛ecie na wejściu komparatora wzrośnie. Spowoduje to wymuszenie logicznego 0 na wejściu bramki U202A. Sygnał ten spowoduje wyłaczenie ˛ kluczy (tabela 4.17) 4.4.6 Układ sygnalizacji pracy Układ sygnalizacji pracy silnika zbudowano w celu kontroli sygnału sterujacego ˛ silnikiem (M iM ¸ ). Aby sygnalizacja była widoczna już dla ruchów o niewielkich pr˛edkościach zastosowano układ pseudo-logarytmiczny. Przy napi˛eciu poniżej 12V prad ˛ diody jest 12V ¸ 1 µ 6V ograniczony rezystancja˛ 330Ω i 1kΩ 1 µ 33kΩ ¶ 8mA. Gdy napi˛ecie pomi˛edzy M i M ¸ wzrośnie powyżej 12V właczy ˛ si˛e układ stabilizatora opartego na diodach D203 i D204, oraz rezystorach R223 i R224.Układ stabilizatora utrzymuje stałe napi˛ecie 12V 4.4 Wzmacniacz mocy PWM 39 na diodach (gdy napi˛ecie jest wi˛eksze od 12V).Moc rezystorów została tak dobrana, aby 38V 38V spadek napi˛ecia na nich mógł wynosić 38V 330Ω 330Ω ¶ 2 2W – czyli każdy po 1.1W). Układ sygnalizacji jest symetryczny wzgl˛edem obu linii M i M ¸ . 4.4.7 Pomiar temeperatury Pomiar temperatury na radiatorach realizowany jest przez układ LM35 firmy National Semiconductors [1]. Napi˛ecie wyjściowe układu wzrasta o 10mV na każdy stopień od poziomu 0 stopni = 0V. Podstawowe parametry układu: · zakres temepratur -40 C. . . +110 C · napi˛ecie zasilania 4V. . . 20V · dokładnośc 0 4 C przy 25 C Układy pomiarowe połaczone ˛ sa˛ z płyta˛ wzmacniacza mocy PWM za pomoca˛ łacz ˛ CON202 i CON203. Tablica 4.18: CON202, CON203. Łacze ˛ układu pomiaru temperatury sygnał +12V GND Utemp 4.4.8 pin 1 2 3 Konstrukacja mechaniczna. Obwód drukowany na płytce wzmacniacza mocy PWM został zaprojektowany i wykonanany na dwóch warstwach. Wymiary płytki odpowiadaja˛ standardowi Eurokarty 3U. Na pierwszej warstwie płytki przewidziano miejsce na dwa radiatory dla stopni mocy mostka. Na czole płyty 3U 12T wyprowadzone zostały dwie diody sygnalizacyjne oraz łacze ˛ 10pin CON201 do sterownika VFMC (rysunek 4.6. Dwie kasetki ze wzmacniaczami mocy PWM sa˛ umieszczone w kasecie z zasilaczem (rysunek 4.10). 4.4 Wzmacniacz mocy PWM 40 Rysunek 4.6: Płytka wzmacniacza mocy PWM. Widok z boku. Opis zdj˛ecia 4.6 wzmacniacza mocy PWM. 1. CON204 - łacze ˛ typu H15 z sygnałami do/z manipulatora i zasilacza, 2. rezystory pomiarowe R214. . . R217, 3. tranzystory stopnia końcowego, 4. CON201 - łacze ˛ 10pin do sterownika VFMC. 4.5 Rozdzielacz sygnałów 4.5 41 Rozdzielacz sygnałów Rodzielacz sygnałów służy do dekompozycji sygnałów z manipulatora oraz zasilacza na sygnały dla sterownika VFMC. Przewód połaczony ˛ z manipulatorem jest podłaczony ˛ do gniazda żeńskiego CON503 typu DB25. Tablica 4.19: CON503. Rozdzielacz sygnałów. Łacze ˛ manipulatora. Opis wyprowadzeń. sygnał KodAP KodBP KodCP GND TachoPA SynchP¸ +24V SynchQ¸ TachoQ B GND KodCQ KodBQ KodAQ pin 1 2 3 4 5 6 7 8 9 10 11 12 13 pin 14 15 16 17 18 19 20 21 22 23 24 25 sygnał KodAP¸ KodBP¸ KodCP¸ TachoPA SynchP +5V Control Ready SynchQ TachoQ A KodCQ¸ KodBQ¸ KodAQ¸ Przewód ZR łacz ˛ acy ˛ zasilacz z rozdzielaczem jest połaczony ˛ do gniazda m˛eskiego CON504 typu BD15. Tablica 4.20: CON504. Rozdzielacz sygnałów. Łacze ˛ zasilacza. Opis wyprowadzeń. sygnał CONTROL READY +24V +24V +12V +5V +5V -12Vs +12Vs pin 1 2 3 4 5 6 7 8 pin 9 10 11 12 13 14 15 sygnał GND GND GND GND GND GND GND Sygnały z tych dwóch łaczy ˛ sa˛ rozprowadzone do gniazd CON501 i CON502 skad ˛ P Q przewodami VR i VR przesyłane sa˛ do sterowników VFMC. 4.5 Rozdzielacz sygnałów 42 Tablica 4.21: CON501. Rozdzielacz sygnałów. Łacze ˛ sterownika VFMCP . Opis wyprowadzeń. sygnał CRP¸ SynchP¸ KodAP¸ KodBP¸ KodCP¸ TachoPA GND -12Vs pin 1 3 5 7 9 11 13 15 pin 2 4 6 8 10 12 14 16 sygnał CRP SynchP KodAP KodBP KodCP TachoPB +5V +12Vs Tablica 4.22: CON502. Rozdzielacz sygnałów. Łacze ˛ sterownika VFMCQ . Opis wyprowadzeń. sygnał Q CR ¸ SynchQ¸ KodAQ¸ KodBQ¸ KodCQ¸ TachoQ A GND -12Vs pin pin sygnał 1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16 CRQ SynchQ Q KodA KodBQ Q KodC TachoQ B +5V +12Vs 4.5 Rozdzielacz sygnałów 43 Sygnał CONTROL READY jest połaczony ˛ w łańcuch pradowy ˛ z zasilacza, poprzez sterowniki VFMC, manipulator z powrotem do zasilacza. Łańcuch ten, można zablokować, dla każdego ze sterowników VFMC oraz dla manipulatora odłaczaj ˛ ac ˛ w ten sposób kontrol˛e nad sygnałem gotowości. Łańcuch pradowy ˛ sygnału gotowości można zablokować poprzez zamkni˛ecie wybranej łaczówki ˛ J501, J502 i J503. Tablica 4.23: J501, J502, J503. Rozdzielacz sygnałów. Blokowanie sygnału gotowości. łaczówka ˛ J501 J502 J503 blokada sygnału gotowości dla urzadzenia ˛ manipulator sterownik VFMCP sterownik VFMCQ Rysunek 4.7: Rozdzielacz sygnałów. Widok z boku. Rozdzielacz sygnałów wykonano na dwuwarstwowej płytce drukowanej o długości 6U. Na czole płyty znajduja˛ si˛e złacza ˛ (rysunek 4.7): 1. CON501 16pin - łacze ˛ do sterownika P VFMC, 2. CON502 16pin - łacze ˛ do sterownika Q VFMC, 3. CON504 DB15F - łacze ˛ do zasilacza. 4. CON503 DB25M - łacze ˛ do manipulatora, Płytka jest zamontowana na płytce czołowej 6U 4TE (rysunek 4.7). 4.6 Zasilacz 4.6 44 Zasilacz Zasilacz został wykonany jako zespół zasilajacy ˛ dla sterownika manipulatora. W skład zespołu zasilajacego ˛ wchodzi: · układ zasilaczy niskonapi˛eciowych, – +5V/7A, – +12V/2.2A, – +12V/1A, – +24V/1.2A, · zasilacz silników z układami: – stopu awaryjnego, – gotowości. 5 ©ª5«3¬®bª¯ , ¢¡h£1 ¤ £¥X¦8§h¨ °²± ³z´µ ¶¸·O¹º Ä ÅÆÇÈ5É ÄËÊÆÌ ÍÎÊ5ÏÄËÐ ¿¸ÀOÁ¢à »b¼½¾ Rysunek 4.8: Schemat blokowy zasilacza. 4.6 Zasilacz 4.6.1 45 Zasilacze niskonapi˛eciowe. Układ zasilaczy niskonapi˛eciowych został zmontowany w kasetce 6U z wyprowadzonymi łaczami ˛ typu H11 i typu H15 (rysunek 4.9). Napi˛ecia wyjściowe sa˛ sygnalizowane poprzez diody LED na panelu zasilacza. Wyjścia zasilaczy, a także zasilania zostały wyprowadzone na łaczówki ˛ typu H15 i H11 na tylnej ściance kasetki. Tablica 4.24: Łacze ˛ H11 zespołu zasilaczy. Opis wyprowadzeń. sygnał +5V +5V GND GND NC +12V GND +12V 220V 0 ziemia pin 1 2 3 4 5 6 7 8 9 10 11 Tablica 4.25: Łacze ˛ H15 zespołu zasilaczy. Opis wyprowadzeń. sygnał pin GND d6 +24V d10 pin z4 sygnał +12V z8 GND z12 NC NC d14 z16 NC NC d18 z20 NC NC d22 z24 NC NC d26 z28 220V 0 d30 z32 ziemia 4.6 Zasilacz 46 Do budowy układu zostały użyte fabryczne zasilacze (rysunek 4.9): 1. NT85 ( 12V/1A, 5V/7A) firmy Intron. 2. USPS 25 (24V/1.2A) firmy Elplast, 3. USPS 25 (12V/2.2A)firmy Elplast, Ñ Ò Ó Rysunek 4.9: Kasetka zasilaczy niskonapi˛eciowych. 4.6.2 Zasilacz silników. Zasilacz silników zasilany jest z sieci trójfazowej 3 Ô 380V. Obudowa zasilacza jest uziemiona do przewodu uziemiajacego ˛ sieci. W zasilaczu silników możemy wyróżnić dwa moduły: Õ Õ zasilacz główny 50V/30A, układ sterujacy ˛ sygnałem gotowości (CONTROL READY). Napi˛ecie z sieci 380V jest obniżane do wartości 34V dla każdej fazy na transformatorze 1.6 kVA. Nast˛epnie zamieniany jest na napi˛ecie stałe poprzez prostownik trójfazowy złożony z diod D101. . . D103. Poddawany jest filtarcji przez kondensatory o pojemności 14.1 mF i jest wyprowadzony dla urzadzeń ˛ zewn˛etrznych. 4.6 Zasilacz 47 Układ gotowości składa si˛e z układu załaczania ˛ napi˛ecia dla silników, oraz z włacz˛ nika zasilania i stopu awaryjnego. Zasilanie +50V/30A dla silników zostanie właczone ˛ dopiero po pojawieniu si˛e sygnału gotowości (CONTROL READY) ze sterowników oraz z manipulatora. Stan ten jest sygnalizowany kontrolka˛ w przycisku właczenia ˛ gotowości. Właczenie ˛ przycisku stop awaryjny powoduje przerwanie łańcucha pradowego ˛ sygnału gotowości i wyłaczenie ˛ napi˛ecia 50V. Ponowne właczenie ˛ jest możliwe po wyciśni˛eciu przycisku i ponownym właczeniu ˛ gotowości. Napi˛ecie wyjściowe jest zabezpieczone bezpiecznikiem 63A, oraz po stronie pierwotnej transformatora 3 4A (zwłoczne). 4.6.3 Konstrukcja mechaniczna. Zasilacz silników jest zmontowany w kasecie znajdujacej ˛ si˛e nad kaseta˛ ze sterownikiem. W kasecie tej znajduje si˛e także kastetka ze wzmacniaczami mocy PWM, oraz ze zasilaczami niskonapi˛eciowymi (rysunek 4.10): 1. przycisk gotowości zasilacza, 2. przycisk stopu awaryjnego, 3. kontrolka napi˛ecia +50V za kondensatorami filtrujacymi, ˛ 4. wyłacznik ˛ główny zasilaczy, 5. przewód ZR do rozdzielacza sygnałów, 6. kontrolka napi˛ecia dla silników, 7. bezpiecznik dla napi˛ecia silników, 8. +50V 9. GND, 10. kontrolka +5V, 11. kontrolka +12V, 12. kontrolka -12V, 13. przewód VHQ, 14. kontrolka +24V, 15. kontrolka +12V, 16. przewód VHP, 17. przewód sieci ethernet, 18. przewód RM, 19. przewód VRQ, 20. przewód VRP. 4.6 Zasilacz 48 Ö ßwà × Ø áwá Ù æ>ç è>é âwã êìë Ý Ú Û Þ äzå Ü íìî ówô ïwð ñ1ò Rysunek 4.10: Widok ogólny kaset z zasilaczem i sterwonikiem manipulatora. Rozdział 5 Oprogramowanie sterownika. Tworzenie oprogramowania (zgodnie z założeniami) powinno być jak najprostsze. W tym celu przygotowano oprogramowanie dla sterowników VFMC jak i dla jednostki nadrz˛ednej pracujacej ˛ w systemie OS-9. 5.1 Oprogramowanie sterownika VFMC Jednostk˛e centralna˛ sterownika VFMC stanowi mikrokontroler z procesorem CPU32. Oprogramowanie dla tej jednostki może być napisane w j˛ezyku C lub w j˛ezyku niższego poziomu - asemblerze. Do kompilacji programów dla CPU32 służa˛ kompilatory skrośne dla środowiska DOS lub Windows. Możliwe jest również wykorzystanie kompilatora C w systemie OS-9. 5.1.1 Inicjacja jednostki centralnej Inicjacja jednostki centralnej polega na skonfigurowaniu dekoderów adresu dla dwóch pami˛eci RAM i jednej pami˛eci FLASH ROM. Ustawienie dekodera adresu CS0 dla sygnału W RIT E pami˛eci RAM U403: · CSBAR0 = 0000000000000 101 (adres 000000, 256k) · CSOR0 = 0 10 10 1 0000 11 000 0 (asynchroniczny, górny bajt danych, zapis, DS, 0 ws, przestrzeń adresowa S/U, wszystkie poziomy przerwania,autowektor wyła˛ czony) 5.1 Oprogramowanie sterownika VFMC 50 Ustawienie dekodera adresu CS1 dla sygnału W RIT E pami˛eci RAM U404: · CSBAR1 = 000000000000 101 (adres 000000, 256k) · CSOR1 = 0 10 10 0 1100 11 000 0 (asynchroniczny, dolny bajt danych, zapis, DS, 0 ws, przestrzeń adresowa S/U, wszystkie poziomy przerwania,autowektor wyła˛ czony) Ustawienie dekodera adresu CS2 dla sygnału ENABLE obu pami˛eci RAM: · CSBAR2 = 0000000000000 101 (adres 000000, 256k) · CSOR2 = 0 11 11 0 0000 11 000 0 (asynchroniczny, słowo danych, zapis/odczyt, AS, 0 ws, przestrzeń adresowa S/U, wszystkie poziomy przerwania,autowektor wyłaczony) ˛ Ustawienie dekodera adresu CSBOOT dla sygnału ENABLE FLASH ROM: · CSBOOT = 0000010000000 100 (adres 040000, 128k) · CSORBT = 0 10 11 0 0010 11 000 0 (asynchroniczny, górny bajt, zapis/odczyt,AS, 2 ws, przestrzeń adresowa S/U, wszystkie poziomy przerwania,autowektor wyła˛ czony) Ustawienie dekodera adresu CS6 dla sygnału G FLASH ROM: · CSBAR6 = 0000010000000 100 (adres 040000, 128k) · CSOR6 = 0 10 01 0001 01 100 00 (asynchroniczny, górny bajt, odczyt,AS, 2 ws, przestrzeń adresowa S/U, wszystkie poziomy przerwania,autowektor wyłaczony) ˛ Ustawienie dekodera adresu CS7 dla sygnału W RIT E FLASH ROM: · CSBAR7 = 0000010000000 100 (adres 040000, 128k) · CSOR7 = 0 10 10 0001 01 100 00 (asynchroniczny, górny bajt, odczyt,AS, 2 ws, przestrzeń adresowa S/U, wszystkie poziomy przerwania,autowektor wyłaczony) ˛ Po wykonaniu powyższych instrukcji pami˛eć RAM 128k 16bit jest dost˛epna od adresu 0x000000, natomiast pami˛eć FLASH ROM 128k 8bit od adresu 0x040000 rysunek 5.4. 5.1 Oprogramowanie sterownika VFMC 5.1.2 51 Inicjacja interfejsu magistrali VME Inicjacja interfejsu magistrali VME TROOPER II składa si˛e z dwóch etapów. W pierwszym etapie jednostka VFMC inicjuje dekoder adresu, aby TROOPER II był dost˛epny na lokalnej magistrali adresowej. Odblokowuje także linie przerwań i inicjuje dekodery adresów do generacji autowektorów. Drugi etap, to inicjacja wewn˛etrznych rejestrów interfejsu VME. Po wykonaniu tych czynności 16 dwudost˛epnych rejestrów mailbox może służyć do przekazywania danych pomi˛edzy jednostka˛ nadrz˛edna˛ a centralna˛ sterownika VFMC. Interfejs magistrali VME jest połaczony ˛ lokalnie (od strony jednostki centralnej sterownika VFMC) za pomoca˛ linii: Tablica 5.1: Połaczenie ˛ TROOPER II - jednostka centralna sterownika VFMC. TROOPER II LA1. . . LA5 LCE LIRQ0 LIRQ2 LDTACK LRESET LLDS õ LU DS LR ö W LAS CLOCK Jednostka centralna A01. . . A05 CS8 IRQ0 IRQ2 DSACK RESET DS Rö W AS CLKOUT opis linie magistrali adresowej chip select 8 linie przerwań sygnał potwierdzenia odebrania danych reset jednostki centralnej sygnał prawidłowych danych sygnał odczytu/zapisu danych sygnał prawidłowego adresu zegar zewn˛etrzny Ustawienie dekodera adresu CS8 dla układu TROOPER II: · CSPAR1 = 00 00 00 00 00 11 00 00 (16 bitowy port) · CSBAR8 = 1110000000000 000 (adres poczatku ˛ rejestrów = 0xe00000) · CSOR8 = 0 11 11 1 1111 11 100 0 (asynchroniczny,16 bitowy, zapis/odczyt, DS, DSACK zewn˛etrzny, przestrzeń adresowa użytkownika i nadzorcy, wszystkie poziomy przerwań, autowektor wyłaczony) ˛ Ustawienie PF2, PF3, PF4 jako linii przerwań IRQ2 õ IRQ3 õ IRQ4: · PORTF1 |= 7 ÷ø÷ 2; Do generacji autowektorów dla przerwań IRQ2 õ IRQ3 õ IRQ4 zostały wykorzystane odpowiednio dekodery adresu numer 9, 5, 4. Ustawienie dekodera adresu CS9 do generacji autowektora dla IRQ2: 5.1 Oprogramowanie sterownika VFMC 52 · CSBAR9 = 1111111111111 000 (generacja autowektora) · CSOR9 = 0 11 11 0 0000 00 010 1 (asynchroniczny,16 bitowy, zapis/odczyt, AS, o ws, przestrzeń adresowa CPU, 2 poziom przerwania, generacja autowektora) Ustawienie dekodera adresu CS5 do generacji autowektora dla IRQ3: · CSBAR5 = 1111111111111 000 (generacja autowektora) · CSOR5 = 0 11 11 0 0000 00 011 1 (asynchroniczny,16 bitowy, zapis/odczyt, AS, 0 ws, przestrzeń adresowa CPU, 3 poziom przerwania, generacja autowektora) Ustawienie dekodera adresu CS4 do generacji autowektora dla IRQ4: · CSBAR4 = 1111111111111 000 (generacja autowektora) · CSOR4 = 0 11 11 0 0000 00 100 1 (asynchroniczny,16 bitowy, zapis/odczyt, AS, 0 ws, przestrzeń adresowa CPU, 4 poziom przerwania, generacja autowektora) Wykonanie powyższych instrukcji spowoduje, że pod adresem 0xC00000 na magistrali jednostki centralnej znajdzie si˛e pierwszy rejestr układu TROOPER II. Można teraz ustawić rejestry konfiguracyjne interfejsu magistrali VME. Kofiguracja interfejsu TROOPER II dotyczy zezwolenia na przerwania od rejestrów mailbox, rozdzielenia sygnalizacji tych przerwań na liniach lokalnych przerwań, ustawienia dekodera adresu modułu slave. · MODE = 1000 0000 (wybór wyjścia dwufunkcyjnego na AU X ADD · MBIEP0 = 0000 0001 (właczenie ˛ przerwania od rejestru mailbox 0) · MBIEP1 = 0000 0000 (wyłaczenie ˛ przerwań od pozostałych rejestrów mailbox · MBIP0 = 0000 0000 (uaktywnienie linii LIRQ0 poprzez przerwanie od rejestrów mailbox) · SADDMD = 1001 0100 (tryb A24, właczenie ˛ AM, dane, S/U) · SADDC1 = 1100 0000 · SADDC2 = 0000 0000 (adres = 0x87C00000) · VIRPL = 0000 0000 (wyłaczone ˛ przerwania od strony VME) Po wykonaniu tego fragmentu programu interfejs magistrali VME jest skonfigurowany prawidłowo, jest zatem dost˛epny od strony VME jak i VFMC. 5.1 Oprogramowanie sterownika VFMC 5.1.3 53 Programowanie pamieci FLASH ROM Do programowania pami˛eci FLASH ROM służy funkcja FlashProg(int). Aby przepisać zawartość pami˛eci RAM od adresu 030000 do 050000 FLASH ROM należy użyć funkcji FlashProg z parametrem równym 1. Funkcja FlashProg korzysta z nast˛epujacych ˛ funkcji pomocniczych: · FlReset - sprowadzenie FLASH ROM do stanu poczatkowego, ˛ · FlPollData - testowanie zaprogramowania komórki FLASH ROM, · FlUnlock - odblokowanie możliwości zapisu do FLASH ROM, · FlAuto - odczyt parametrów FLASH ROM w trybie autoselect, · FlChipErase - kasowanie FLASH ROM, · FlSectErase - kasowanie sektora FLASH ROM, · FlProgram - programowanie 1 bajtu we FLASH ROM. Znajduja˛ si˛e one w pliku flash.h oraz flash.c. 5.1.4 Ładowanie programu do VFMC. Program bootload (7.7) służy do uruchamiania aplikacji na sterowniku VFMC. Aplikacja, która ma zostać uruchomiona przesyłana jest z jednostki nadrz˛ednej poprzez magistral˛e VME w postaci S-rekordów. Program bootload składa si˛e z dwóch cz˛eści. Pierwsza z nich (segment boot_code) napisana w asemblerze, inicjuje pami˛eci sterownika VFMC, przepisuje kod głównego programu do pami˛eci RAM i tam go uruchamia. Druga cz˛eść programu inicjuje interfejs magistrali VME i oczekuje na odpowiedź programu wysyłajacego ˛ aplikacj˛e pracujacego ˛ w systemie OS-9. Jeżeli odpowiedź programu wysyłajacego ˛ jest prawidłowa, nast˛epuje przesłanie kodu aplikacji do sterownika VFMC i uruchomienie od adresu podanego w S-rekordach.. Podłaczenie ˛ pami˛eci FLASH ROM do dekodera adresu CSBOOT powoduje, że po resecie jednostki centralnej (dzi˛eki wymuszeniu stanu niskiego na linii D00 podczas resetu) pami˛eć FLASH ROM jest widoczna w pierwszym 1M 8bit obszarze pami˛eci (rysunek 5.1). W przestrzeni adresowej 000000. . . 0FFFFF znajduje si˛e 7 kopii 128k 8bit-owej pami˛eci FLASH ROM. Wektor startu PC ustwiony został na adres 040008, czyli na start programu z drugiej kopii. Segment boot_code inicjuje wskaźnik stosu oraz dekodery adresu CS0, CS1 i CS2 (RAM), oraz przeprogramowuje CSBOOT ustawiajac ˛ także sygnały CS6 i CS7 (jak opisano poprzednio). Po wykonaniu tych operacji obszary pami˛eci zajmowane przez RAM i FLASH ROM sa˛ jednoznacznie określone (rysunek 5.2). 5.1 Oprogramowanie sterownika VFMC 54 ù3ú¢ú¢ú¢ú¢ú ' û3üýûìûìûìû & þÿ þwþìþìþ % $ # " ! Rysunek 5.1: Pami˛eć sterownika VFMC po resecie. ()(((( 897:3:3:3: * +**** , 4576363636 -.---01,2323232 ;7<>=@?ABCED FHGJI ////// Rysunek 5.2: Pami˛eć sterownika VFMC po inicjacji dekoderów adresów. 5.1 Oprogramowanie sterownika VFMC 55 Poczawszy ˛ od adresu 050000 powinien znajdować si˛e program użytkownika. Jeżeli program użytkownika został wcześniej zaprogramowany do pami˛eci FLASH ROM, zostanie on przepisany do pami˛eci RAM od adresu 030000. Wektor startu zostanie ustawiony na 0x030000 i program rozpocznie prac˛e w pami˛eci RAM. Przepisywanie programu z pami˛eci FLASH ROM do pami˛eci RAM pozwala na znacznie szybsze działanie aplikacji z dwóch powodów: · RAM ma krótszy czas dost˛epu niż FLASH ROM (20ns a nie 70ns), · RAM jest dost˛epny w trybie 16-bitowym, a FLASH ROM w 8-bitowym. Sposób przepisywania bloków pami˛eci został przedstawiony na rysunku 5.3 KMLNKNKNKMK ONPNOMONONO SQ RTQNQNQNQ UNVNUMUNUNU WYXMWMWNWNW Z,[\ZNZNZMZ ~ ^_a`NbT_acTdfehghihjlkm`SnpoNq kmc rstsuwvyxzs|{t} ]N]M]N]N]N] Rysunek 5.3: Przepisywanie programu z FLASH ROM do RAM. Na rysunku 5.4 pakazana jest zawartość obu pami˛eci po wykonaniu operacji kopiowania programu do pami˛eci RAM. segment boot_code (7.4) jest uniwersalny i może pracować z każdym innym programem użytkownika, który został odpowiednio skompilowany. Protokół transmisji przesyłania kodów programów. Kod programu jest przesyłany z jednostki nadrz˛ednej do sterownika poprzez dwudowst˛epny rejestr MBOX0. Po otrzymaniu S-rekordów program zostaje automatycznie uruchomiony na sterowniku. 5.2 Oprogramowanie jednostki nadrz˛ednej. ·¸¹ 56 ¿pÀÂÁÃÀÂÄÅÆ ÇTÈ ÉwÊMÁËyÌÍ ÊNÄ º» ¼ ½¾ ¨ª©«©¬¯®±°²©´³¶µ z T¡T¢¤£N,¥y¦§ £M ΪϫÏÐ¯Ñ±Ò²Ï´Ó¶Ô M äæåèçå Þàß3áãâ Õ×ÖØSÙÂÚÛÝÜ Rysunek 5.4: Zawartość pami˛eci po wykonaniu operacji przepisywania kodu do pami˛eci RAM. Protokół transmisji (rejestr MBOX0): Sterownik VFMC 0x5555 0x0000 ... 0x0000 start przesłanego programu. 5.2 Jednostka nadrz˛edna VME 0xaaaa start S-rekord ostatni bajt S-rekordu Oprogramowanie jednostki nadrz˛ednej. W skład oprogramowania jednostki nadrz˛ednej wchodzi: é vfmcload - program do przesyłania S-rekordów (pracuje z programem bootload), é troper - sterownik niskiego poziomu (driver) dla OS-9, é treset, buser, troptest - programy pomocnicze. 5.2 Oprogramowanie jednostki nadrz˛ednej. 5.2.1 57 Program do wysyłania S-rekordów (vfmcload) Program vfmcload (7.10) wysyła kod programu w postaci S-rekordów do sterownika VFMC. Parametrami wejściowymi programu sa: ˛ é - powoduje ładowanie kodu z wejścia standardowego stdin, é plik.s19 powoduje przesłanie pliku plik.s19, é brak powoduje przesłanie pliku default.s19. Program po uruchomieniu czeka, aż TROOPER II b˛edzie zainicjowany od strony magistrali VME. Nast˛epnie używajac ˛ protokołu transmisji opisanego wcześniej, wysyła Srekordy do sterownika VFMC. 5.2.2 Sterownik niskiego poziomu (troper). Sterownik niskiego poziomu troper (7.11) posiada standardowy dla systemu OS-9 format modułu pami˛eci [3]. Funkcje dost˛epne w sterowniku to: é Init - funkcja inicjujaca ˛ urzadzenie, ˛ é Read - funkcja odczytu z urzadzenia, ˛ é Write - funkcja zapisu do urzadzenia, ˛ é GetStat - funkcja odczytu parametrów z urzadzenia, ˛ é SetStat - funkcja zapisu parametrów do urzadzenia, ˛ é TrmNat - funkcja zamykajaca ˛ urzadzenie, ˛ é Trap - funkcja nie używana. Do operacji zapisu i odczytu z rejestrów mailbox TROOPER-a II , służy funkcja SetStat sterownika niskiego poziomu. Rodzaj operacji i liczba odczytanych/zapisanych rejestrów sa˛ wybierane poprzez słowo sterujace: ˛ wr----bbbbeeee gdzie pole wr oznacza: é wr=10 - zapis, é wr=01 - odczyt, natomiast na polach bbbbeeee jest kodowany zakres rejestrów poddawanych danej operacji. Na polu bbbb jest wpisywany numer pierszego rejestru, na eeee ostatniego, z zakresu który nas interesuje. Zawartości rejestrów, które zamierzamy przesłać lub odebrać sa˛ wskazywane przez wskaźnik Buf. W programie 7.11 znajduje si˛e przykład użycia sterownika niskiego poziomu. 5.3 Metody przygotowywania i uruchamiania programów. 5.2.3 58 Programy pomocnicze. buser Program buser (7.8) służy do sprawdzania, czy TROOPER II jest dost˛epny na magistrali VME. treset Program treset (7.9) powoduje reset interfejsu magistrali VME poprzez ustawienie bitu w rejestrze TROOPER II dost˛epnym od strony VME. Po uruchomieniu program czeka, aż TROOPER II b˛edzie dost˛epny na magistrali VME. Nast˛epnie wpisuje kod resetu do rejestru TROOPER II. troptest Program troptest (7.11) testuje sterownik niskiego poziomu. Praca programu polega na cyklicznym odczycie i wyświetlaniu na ekran zawartościrejestrów MBOX0 – MBOX5. Program używa funkcji SetStat sterownika niskiego poziomu do odczytu rejestrów TROOPERa II. 5.3 Metody przygotowywania i uruchamiania programów. Program dla jednostki centralnej VFMC jest przesyłany z jednostki nadrz˛ednej (VM662/OS9) poprzez rejestry dwudost˛epne mailbox. Jeżeli program dla jednostki VFMC został przygotowany poza systemem jednostki nadrz˛ednej (Dos/Windows), musi zostać przesłany do VM662 np. przy pomocy protokołu kermit. Przesłany program jest umieszczany w pami˛eci RAM jednostki centralnej VFMC i może zostać zaprogramowany do pami˛eci FLASH ROM. 5.3.1 Transmisja i ładowanie programów do pami˛eci RAM sterownika VFMC. Transmisja i ładowanie programów do pami˛eci RAM pakietu VFMC sa˛ możliwe za pośrednictwem łacza ˛ szeregowego przy pomocy protokołu kermit. W tym celu na komputerze przyłaczonym ˛ do portu szeregowego /term jednostki centralnej sterownika (VM662) należy uruchomić emulator terminala wyposażony w protokół kermit do transmisji plików (np. PROCOMM) skonfigurowany do transmisji w trybie 9600 8N1. Po właczeniu ˛ si˛e do systemu OS–9 (login) należy: 5.3 Metody przygotowywania i uruchamiania programów. 59 1. uruchomić program kermit w trybie odbioru plików: kermit -b 9600 -l /term -r; 2. wysłać plik z emulatora terminala (w PROCOMM-ie: PgUp 2); 3. zrestartować VFMC komenda treset; 4. załadować i uruchomić program komenda˛ vfmcload [nazwa_pliku]. Powyższe operacje można połaczyć ˛ w jednej linii komendy złożonej: treset; kermit -b 9600 -l /term -k|vfmcload -. W tym przypadku kermit wysyła odbierany plik na wyjście standardowe, a vfmcload ładuje i uruchamia program odbierany w postaci S-rekordów z wejścia standardowego. Dla unikni˛ecia wypisywania komunikatów diagnostycznych warto dodatkowo skierować je na urzadzenie ˛ puste treset êëêªê /nil i vfmcload êªêëê /nil. 5.3.2 Użycie programu bootload do programowania pami˛eci FLASH ROM. Oprogramowanie dla sterownika VFMC jest przesyłane poprzez magistral˛e VME z jednostki nadrz˛ednej. Program bootload, który to umożliwia, musi być wcześniej zaprogramowany do pami˛eci FLASH ROM poprzez interfejs BDM. Program bootload powinien być skompilowany od adresu 0x030000, natomiast segment boot_code od adresu 0x0200000. Po przesłaniu programu bootload i segmentu boot_code umieszczone zostana˛ pod tymi właśnie adresami. Jest to istotne, ponieważ funkcja programujaca ˛ pami˛eć przekopiowuje obszar 0x020000. . . 0x03FFFF do obszaru 0x040000. . . 0x05FFFF. Aby uruchomić funkcj˛e programowania należy ustawić pułapk˛e (break point) w linii sprawdzania zmiennej wejściowej flag w kodzie programu bootload. Nast˛epnie należy skasować pułapk˛e, zmienić wartość zmiennej flag na wartość 1 i kontunuować prac˛e. Takie rozwiazanie ˛ nadaje uniwersalność programowi bootload. Jeżeli zostanie on uruchomiony, to przekopiuje si˛e do pami˛eci RAM i tam wykona. Jeżeli natomiast zostanie uruchomiony przy pomocy BDM i zostanie ustawiona z zewnatrz ˛ wartość zmiennej flag na 1, rozpocznie si˛e proces programowania pami˛eci FLASH ROM. Rozdział 6 Podsumowanie Wynikiem pracy jest kompletny sterownik dwuwahadła umożliwiajacy ˛ implementacj˛e przykładowych algorytmów sterowania [11]. Został on zaprojektoawny, zrealizowany w postaci sprz˛etowej i oprogramowany, a praca zawiera jego pełna˛ dokumentacj˛e. Sterownik pracuje w systemie otwartym czasu rzeczywistego OS-9 na magistrali VME. Sterowniki nap˛edu osi robota VFMC, wzmacniacze mocy PWM, rozdzielacz sygnałów, zasilacz oraz okablowanie manipulatora, zostały zaprojektowane wraz z obwodami drukowanymi, wykonane i uruchomione w ramach pracy. Sterownik posiada konstrukcj˛e modułowa, ˛ zamkni˛eta˛ w dwóch kasetach 6U (zasilacza i jednostki nadrz˛ednej). Standard eurokarty, według którego wykonano cz˛eść mechaniczna˛ zapewnia zwartość i stabilność konstrukcji sterownika. Obwód zabezpieczenia obejmujacy ˛ wyprowadzony w łatwo dost˛epnym miejscu na zewnatrz ˛ kasety zasilacza stop awaryjny, sterowniki nap˛edu osi VFMC i manipulator daje możliwość natychmiastowego wyłaczenia ˛ zasilania silników robota. Sprawia to, że sterownik jest bezpieczny w użyciu i nadaje si˛e do prac projektowo-badawczych w laboratorium. Tworzenie oprogramowania dla sterownika manipulatora (zarówno dla VFMC jak i jednostki nadrz˛ednej) jest możliwe zarówno na wysokim jak i na niskim poziomie. Oprogramowanie VFMC może być tworzone na jednostce nadrz˛ednej sterownika (VM662/OS-9) przy użyciu kompilatora C (lub w j˛ezyku niskiego poziomu - asemblerze). Istnieje także możliwość napisania i skompilowania programu w środowisku Dos/Windows. Przesłanie programu do jednostki nadrz˛ednej jest możliwe za pomoca˛ terminala poprzez łacze ˛ RS232 używajac ˛ protokołu transmisji kermit. Przesłanie oprogramowania z jednostki nadrz˛ednej poprzez magistral˛e VME do sterowników nap˛edu osi realizowane jest przez programy vfmcload (na jednostce nadrz˛ednej) i bootload (na sterowniku VFMC). Program bootload umożliwia ponadto zaprogramowanie przesłanego kodu do pami˛eci FLASH ROM sterownika osi VFMC. Do komunikacji ze sterownikami VFMC z poziomu aplikacji systemu OS-9 służy sterownik niskiego poziomu (device driver) - troper. Każdy ze sterowników osi jest dost˛eny jako urzadzenie ˛ wejścia/wyjścia. Umożliwia to zapis i odczyt danych z dwudost˛epnych rejestrów przy pomocy standardowych funkcji systemowych. Konstrukcja i oprogramowanie sterowników umożliwia odczyt danych pomiarowych z obiektu (położenie, pr˛edkość, prad ˛ pobierany przez silnik) oraz zadawanie pr˛edkości i kierunku obrotów w postaci PWM. Użytkownik może wykorzystać te dane do sterowania manipulatorem przy pomocy samodzielnie zaimplementowanego algorytmu. Uniwersalność wykonanych modułów sprawia, że sterownik można przystosować do innych typów manipulatorów o podobnych nap˛edach. W przypadku wi˛ekszej liczby stopni swobody wystarczy dołożyć do kasety VME układu sterowania dodatkowe mo- 61 duły sterowników VFMC i wzmacniacze mocy PWM. Modułowa konstrukcja sterownika umożliwia rozbudow˛e systemu sterowania o dodatkowe podsystemy sensoryczne (system wizyjny, czujniki siły i przyśpieszeń). Sterownik jest wyposażony w interfejs sieciowy TCP/IP. Jednostka nadrz˛edna jest dost˛epna w lokalnej sieci laboratorium. Umożliwia to zaimplementoawnie sieciowego serwera manipulatora i komunikacj˛e z innymi robotami oraz komputerami w labolatorium. Rozdział 7 Dodatki 7.1 Sterownik VFMC. 7.1 Sterownik VFMC. 63 7.1 Sterownik VFMC. 64 ÷ ó ìòî íó ìóî íó íî÷ òìôõ ìí # ñ ìî" ìòï ìí # î í íì # ñ íì # ð # ìí"î ñ (ì îóö ì ìîö ì òöî þ í îö þ í R íì íì ì ì # ð îö íì í òì îî ó î î ò î ï í ì î ï í ì íð% íî $ ö ý ý í÷îì ö &' ö ö ö : ÷ ö ï"î : íì # JI KI G HC ð íñî òíî óíî î î î î íó% î ð ö Jì ì ì ý DE ìí ; BC FL JL KL L ->L H G HC G HC G HC î ï í ì ìî î í ïì ôó ï'ò "î ö ì îì ï ìï ï ó"î ìòï' óõ"î ï'ò î ìí ìî ïò O ò - >HN ìðø *+ ) ò ìðø ö ñ ð ï îìíð ý : íîì î ö ó ò ñ ð ÷/ öö íî ñ ð ìî î : K. F DE ; BC ð # íì # G HC í H ï ñ ó ì íì ïì ñì FI G HC -I > ö ì î ð ò ò îíø îöõ ð ñ ò ó îìíñ îî ñð ý => $ ï ö îî" &' ñ ;< I K. ,-. ) îìíñ ö íî" &' î ðñ PQ ý *+ ý íAî ì í î îö ìîø îñöõ î î í ì î - ö ì î ð ò íîî ìñ ì í ï î ð ñ ò ó îìíñ îð î ï ) ? => ;< í ï ñ ó ì ìî M [ î îîA ì í î ö ð # - îì ð ñ ò ó ì"î ì @ ïîí î þ ð # îî îñ î ð # ôôö ý ìAî ì í î îö ðîí î ì (ñì öî # ì ý ÷î õô òî÷ ìòôõ ì ö ì í î ï ð ñ ò ó ì ö ð # í ñî÷ ìòôõ ð # îî ý ü ìô ûùóöú ü ò óí ö ûùøú ü ùý üþÿ ôî ÷ú þü ùû ü ò ì÷î ìôõ ò ì ì ð # ÷î õô ð÷î òìõô ïî ô ð # ÷ õ M ìò ÷î ôõò ó ì íì ì ó ò ñ ð ï î í ì ì ó ò ñ ð ï î í ì M ø ö ô ô ô ô ô ô ô ô ô ô ô î ï î" ö "÷ ÷ (ö' öM ý ý ý ý ý ý ý ý öý ý ÷/ý íðö'ø ðì ñì òì ý óì ì í ì ý ñ íîö (ì # ì îìö þ íì î íì í î ì BH KL + ST A ù ü ù þ / ó ú ü : ÿ õ ú ü ÷ OVEU ! ñ E ìí î í ìïò ñì # ï WX < ( # îì" í î ï : ÷ ø Mø /: " ø ý ý ñ îï (ìñ ð ö # ì îöî þ í ì ïì ð BZ Y OE íî ì íìî ì îì÷ ôõ ! ì îî÷ òìôõ õ ûù ú \ ñöî ìî ì ìò ò ô ö ó ìï ó÷"î ï'ò ì ,-. ì ö &' ì í ï î ð"î ì í î îìî î ñ öö ïì öîó òï' " ð ì ïì Mó "î òï' ì íMöø îìíñ ñ"î : öö ö&' ö ó ò ñ ð ÷/ îîìö ì ö ó ò ñ ð ÷/ ïìîö ñìî î ÷ ì ÷ý íöîì ý / / ì ý îìð î ý ïîì î 7 89 56 34 îìíñ ò"î ö &' 0 K. î ì í ï î 1 ìø íø ìø íø õ Rysunek 7.1: VFMC - strona obiektowa. Schemat. 2 í ø ì ø ô 7.1 Sterownik VFMC. ] i ^ i 65 i h g ] nh ge i a] hb] e e ^ ] h n` d ` _ h h h h h ec ` _ h h eb ea ^ ] h c h e` e_ h nh b a h e^ ] g e ed b a h h c h d c h] `] _] h h h h h c b a ` _ ^ ] h h h h h h h h ]d ]c ]b ]a ]` ]_ ]^ ]] ]d ]c ]b ]a ]` ]_ ]^ ]] c ] ]^ w g` g x a] ]` ]_ ]^ ]] ] d hi hi hi hi hi hi ~hi hi ]~ ]^ w g` ]~ ]hs fs hc bh ah a i i i ^` b ^ _ ` a b c d ~ ~] ] ex d ^ _ ` ` c` ` e ]e ^e _e `e ae be ce sh e ]e f f gg ^ _ ` ] s s s a b _ ^ ] gg a] g` ^] w ]`` ^ w g ] _] g` ]^ w ^] g` ^] w ]]` ^ w g ] ] g` ]^ w ~` ^ w g ] d `g ]^ w c g` ^] w b g` ]^ w a g` ^] w ` g` ]^ w _ g` ^] w ^ `g ]^ w ] g` h ]^ w n ^ _ ^ ^ ] ] `s ] _h `s ] h s` ] h~ ` g ~ d c b a ` _ ^ ] xi ei ss eg x eg x g i g i f h h e f ^i ] ] gg gg c] ``g f _~` e `h e g c] i e x f s a] hi f f c a i i b ` b] b^ ] ] ^~g ~^f ^ e~ s x hi c xh g e s x i i d ~ _ ] hn a c ~ i ~i i c a i ss i f f ^ a] `] _] ^] ]] ] ~ b a ` _ ^_ ] a b c d ~ ] ]] ^] ] ^ i i i i i i i i i i a c gg ] gx x _x ` b x _ ] hn hx i g ^ ^ a g g n¬« a c g g x _ ] ^x gx ] n` ] ^ s s cc bc ac ] ^s _s hn ] d _ ` s s `c ` s a b s s _c ^c a b c s ]c c c ~ x ~ d c `e ae be ]^ ]] ] ]e ^e _e ] g e ge x x gi s xi i aa ad ac g xh x hi f x] i xg h i gi xi s i e d~ dd d] d db dc g ] g x ]x g g s e ex ex h h i ss ei x f s cs b~i dbi s e x f s ` h h s i _a ^a a` hs hi `s d^ ~ gg xx gg g x x x xg _` `` b` x x gx x g x x x xx ]x g g c` ]x g _^ ]^ ^~ ]] ^] _] e e e q mr n op nh ]b gg `g a` `g ^] w xfg xg ]xg ^] _] `] ] ] ] b ] ] o `_` ^ w g ] ` ``g ` ^d _ ]_e ]`e ]ae ^ b ~^ ^^ _ ^` nh x]g x^g g g d ]^d xx xx xx ` ]a a~ _ g` ^^ d y cb^ _ ] ` b s` ^^ hn ^d` ^ w g ] n f g e e hxh xi i i xx cb _d xx xx xx a ] ~ ] xx b c] ] ] b ] a `^g ] w gg e ^ c^ g` ] w b `^g ] w xx xx ^__ g ] ` c^ ] nh gx _ a `s ] b] ]~ b` b^ b i x ]x ^x _x `x ax i g g g g g g g f s g ]g ^g h gx f f g e g f Rysunek 7.2: VFMC - strona sygnałowa. Schemat. ^^ ^ b ~^ ^^ _ ^` hn ^ gx gx gg ] ^ f hn nh ]be c]e xx xx xx ^~ `_ ` ^~ g a] d] ]~ ^ b d ] ] ] ] b c xx xx ^ d c] gg g` _] ^ x^g d ]^d ] ^ i a b ] ] o b` ^b ^_ a^ ]e ]]e ]^e hn xx b s| ] ^~ _ ] ^b i fx xb xc g g g ]^ `g ^] w _^ _ jx my e h k m{z jl m{ gg ^d] ^d ^^ _^ `] a] b] e e e i x^g _xg d` ~` ^x _x g g gg `] g b a c^ ce de e~ i f ab a` g h h ex xh s ^a _ e ]e ^e _e `e ae be ce de e ]e ]]e ^]e _]e `]e a]e b]e ~ ` xe xh s d^ da c~ gg ^b ^_ a^ ` d^ _ ]_ ^ ] ^ _ ` a b c e] e] e] e] ]e e] ]e ]e hn gg ^ _^ ]b `g ^] w ^ ` b c _ a g ] g xx h h h h h h h h xx xx xx bc cc b` ab c b a c^ eb ec ed e~ ]_h ]`h ]ah ]~ ^ ^] ]^ ]] ] ~ d e] e^ e_ `e ae dh h~ ]h ]]h ]^h ]_ ]` ]a ]c ]d gg s g ^ g i ` e e] e^ e_ e` ea eb ec ed e e] ]e] ]^e e]_ e]` e]a e]b ~ ` ^a ~ nh hh hh hh ` _a d~ ]~ ^ _ ]_ ^ eb ec ed ~e e] ha hb hc g ] g ]~ ^ ^ b] c] d] e_ e` ea h^ h_ h` a c d ] ] ] __ c g e s hi ^ ` b d ] ^] gg `] `~s __ ^ ` b g ] ] _ a hn c `] e] ^e _e `e ae eb c c` c` lm hn ] _ a ~ ]] ]_ c hn j ik c c] c_ b^ a b d_ ` a b c g `g ]^ w s s s s ei c_ h `g ^] w b `_g ]^ w s a_ g` ]^ w xx xx xx xx xx g g si _`` ^ w g ] _ ]` ]a ^c `] i __` ^ w g ] nh g ^_ `g ^] w hn ^^` ^ w g ] _]` ^ w g ] ] ^ _ s s s ] ^ _ ` a b c h h h h h h h h ] d b n¬« g nh ]a n` i i ^g ^g | ]i ^i ªb] ]_ _ ^~ _]] `]] a]] i i i gg _ g©e ¢ ¡ ^_ n n ^ ]i ^i g] g] | e _ ] ] `]` g w ] _] `] a] e e] e^ h h] _ ` ] ] g ]_ gi s ` db d `s a b s s ] ^] ac a~ b b~ n i g e eg g e i x sx x _ s nh a e e] e^ e_ e` ea eb ec ed e~ e] ]e] ^e] _e] `e] ae] be] ` ^c i n g e g e d` dc ] ^ _ ` a b g hn `] e] ^e _e `e ae be ] _ a ~ ]] ]_ c i g e b_ h ]h ^h _h `h ah bh ch ]` ]] ]_ ]] i x sx x dd h he hh hh e `^ ~ ^ d^ s g _] `] a] g h h h b a ` s ex ] ^ hd h~ ]h ]h ]h ^ ] ] ] ] d c i ]^ ] ] ^ _ ` s s s s ^ ` b d ^ s g x s gg ` g s c i x sx x gg ex da h s` a x ] h e hx hx s i s ] ]a ~x hn ]` i c hg ® x d f { v x k mm h zwru j }u p g t e ge s s ~~ d ]~ | ~ k c e o} ljg mw ^d | g { jj vwu s mt gg `^ `g ^] w _ `^g ]^ w h s x x x] si e h h _` d_ _~ c^ `` hx xh s ] ]b gg a ]^ | g fh ] h xi gh s de s ^] a a _g _f _]g _]f _^g _^f ] s ~e i g e gh ^ n¬« g g c ` a g ^ ] ^ _ ` a b c d ~ ] ]] ^] _] `] a] i i i i i i i i i i i i i i i i i d^ b] ] g i ^i e ]^ ] ^a ` n¬« `n ] w ^ ` ~ ] i i s] ^s ¨¨£ §¡ £¦ § ¤£ ¥ n n ]^` s] s^ _] d ]] ] w gg ] w nh h i d nh hh hh ^] e_ e` ae g _c `^ ~ _^ ]^ ^ e` ea dxg s s_ b i ^ d ``g i ]i ^i h s ^bg s ]e s ^cf ^dg ^df ` _ s e] s s ]s e] e^ ^ _ b_ ~ ~ e] e^ e_ f f ]] ] ~ d a ` _ ^ d c ` _ ^ ] ] ] ] ] ] ] ] ] ] ~~ ~ ~ ~ ~ ~ ~ h h] h^ h_ h` ha hb hc hd h~ ]h ]]h ^]h _]h `]h a]h hh hh hh `d b c ~ ] ^`f c _ e c ^n `n ^n g ] ^ g g ] ^ g `n e gh e ` ]^e s ]]e ^bf ^cg a s ]e] s ]_e s ^ag ^af _] bs e ] e a e ^ _ e b ^_ ]_ e_ ] ^ _ ` a e e e e e e ] ^ _ ` a ~ ^ ^] ^^ ^_ ^` ^a ^b ^c _ _] _^ __ _a _b c_ d_ ]` `^ ]^ ^] ^] ^] ^] e e] e^ e_ e` ea eb ec ed e~ ]e ]]e ]^e ]_e ]`e ]ae ]be ]ce ]de xbg xcg xdg x~g ]x ]~ ^ ]^ ^^ g_ e e e e e^ hh hh hh a _b ab ^_g e ] ^ _ ` a h ]h ^h _h `h ah bh ch dh ~h ]h ]h ]h ]h ]h ]h hh hh hh d] d^ _~ h ]ae n ]`e ^_f ^`g hn `e] b e e^~ ` e c e e^ a e ] ed e^ b e e a] ] ^ _ ` a b c d e ]e ^e _e `e ae be ce de ~e ]e ]e ]e ]e ]e ]e ]e ]e ]e bgx cgx dgx ] hh hh ` gg ] c c ` i hes x ^^ f ec e^ e gg ^ _ eb a^ e b] bb hbds nh fs c~ ] b _ ] ^] f h` g ]ce sx b]e ^]f ^^g e h` a` dc _] `] hi hi a ]c _ sh nf sf `n ^ ] `s e g ^ hs ~ d c b a ` _ ^ ] ` a `^ e^ a ` s g ^` hc hb ah `h _h ^h ]h h ` e_ i g e n g e ` ] ^ _ ` a b c d ] ^ _ e~ e] e] ]e e] e] e] e] e] e] e]~ e^ e^ e^ e^ a b c d ~ ~] ] xe `c s ^e _e `e ae be ce h ]d ]c ]b ]a ]` ]_ ]^ ]] ] h hn e a s^ _^ s_ ^^ ]^ ] ^ ^ ~] _ d] hn e f e f e e e e e e e e e `] ]` ]a ]a ]b ]b ]c ]c ]d ]d ]~ ]~ ^ ^ ]^ g f g f g f g f g f g f g f g h a _^ ^^ ]^ ] ^ ^ ]~ _ d] n c] e e e e e e e e e e e e f ]f ^f _f `f af bf cf ]d ]c b] a] `] _] ^] ]] a ` _ ^ ] h] h] h] ]h ]h ]h ~h dh x g e ]^ e e^ e]~ hn eg i ] ]] ]^ _] b] c] d] ~] ] ` b^ ~^ a^ ] ^ hi h]i h^i h_i `hi ahi bhi chi hdi ~hi ]hi h]i ]hi sh nh fs h`i _hi ^hi ]hi hi f f ge e] ^ h h] h^ h_ h` ha hb hc hd h~ h] ]h] ]^h h]_ h]` h]a ` f ]^ g w g sh nh fs f ]f ^f _f `f af bf cf s xe h c` hn nh xe d e hn si nh c] c d ~ ] a b d ^^ `^ a^ _ ]_ ^_ __ _` a_ a` b` c` d` ~` a aa ba ad cb `c ca d ]d ^d _d ~ ~ ~ _ ` a ~ ] ]] ^] _] `] a] b] c] d] ]~ ^ ]^ ^^ _^ `^ a^ b^ c^ d^ ^~ _ ]_ fn ] ^ _ ` a e e e e e e e e e e e e e e e e e e e e e e e e e e f e e e e e e ^ ch bh ah `h _h ^h ]h h i i i i i i i i f i _ f e n s x _ s x f f ` a b ~ ~ ~ ] ^ a` e e ^ _ ` a b c d ~ d ] ]^ w g` hx ] ^ _ ` a e e e e e a ^` s xe ~ h c` ` e ]e ^e _e `e ae be ce ]~ ]hs fs ^ _ ` a b c d ~ ]ah ]`h ]_h ]^h ]]h ]h h~ dh i i i i i i i i ]b` i ^ f f ]f ^f _f `f af bf cf c e ]e ^e _e `e ae be ce ` a a] a ` _ ^ ] d h] h] h] h] h] h] h~ h f ]f ^f _f `f af bf cf b ^] ]] h~ h n e e hx i s `] _] e ] hn xh i x hs sx ] x sf sf f~ ]g ]f ]]g ]]f ]^gi ]^f ]_g ]_f x sh hn xs x i n ] a] ^ hn f h f g] f] g^ f^ g_ f_ g` f` ga fa gb fb cg cf gd fd g~ s e] g x xh ^ e hn h i n d fx ~ g ] g ]] ] ^] _] ] `] h f h f h e h f h f h f h nh ] ]] e] e~ e f i g e ^^ e n hn ] 7.1 Sterownik VFMC. 66 Rysunek 7.3: VFMC. Obwód drukowany M1. 7.1 Sterownik VFMC. 67 Rysunek 7.4: VFMC. Obwód drukowany M2. 7.1 Sterownik VFMC. 68 Rysunek 7.5: VFMC. Obwód drukowany M3. 7.1 Sterownik VFMC. 69 Rysunek 7.6: VFMC. Obwód drukowany M4. 7.1 Sterownik VFMC. Rysunek 7.7: VFMC. Rozmieszczenie elementów na płytce. Góra. 70 7.1 Sterownik VFMC. Rysunek 7.8: VFMC. Rozmieszczenie elementów na płytce. Spód. 71 7.1 Sterownik VFMC. 72 Tablica 7.1: VFMC-strona sygnałowa. Spis elementów Ilość sztuk 1 2 4 3 2 1 1 1 3 7 1 2 1 1 1 2 42 Typ Element Obudowa 29F010R-128FC 7407M 74F245 BAVP17 M628128 MAX232ACWE MC332 TROOPER || 100 Ω 330 Ω 820 Ω 4.7 kΩ 47 kΩ 220 kΩ 10 MΩ 22 pF 100 nF TSOP32 SO-14 SOL-20 DIODE0.4 SOJ32P400 SOP16 (long pad) MPLCC132 QFP14X20-100N 0805 0805 0805 RESPACK 0805 0805 0805 1210 1210 2 1 1 3 1 2 1 100 µF/16V 106 32.768 kHz CON 5x2 CON 7x2 CON 1x2 VME U405 U410, U411 U406, U407, U408, U409 D401, D402, D403 U403, U404 U412 U401 U402 R401, R402, R403 R408, R409 R404 RP401, RP402 R407 R406 R405 C429, C430 C401..C428, C431..C439, C443, C445 C444, C446 L401 X401 CON402, CON403, CON405 CON404 CON406, CON407 CON401 RB.2/.4 AXIAL0.6 XTAL IDC10S IDC14P IDC2b VME96 7.1 Sterownik VFMC. 73 Tablica 7.2: VFMC-strona obiektowa. Spis elementów Ilość sztuk 1 2 1 11 1 1 1 5 1 1 1 1 6 9 3 1 1 2 1 2 3 1 4 5 2 3 1 1 1 3 Typ Zener 30V 741 74LS14 BAVP17 BC337 BC639 HCPL 2531 HCPL2631 Element D312 U311, U312 U308 D301..D311 T302 T301 U304 U301, U302, U303, U306, U307 MCT2E U305 REF02 U310 TLC2543 U309 1Ω R329 300 Ω R311..R313, R326..R328 330 Ω R301, R305..R309, R314..R316 560 Ω R302..R304 1 kΩ R319 1.6 kΩ R323 3.9 kΩ R324, R325 4.7 kΩ R310 8.2 kΩ R317, R318 10 kΩ R320..R322 33 kΩ R330 10 nF C306, C312..C314 100 nF C301, C303, C305, C307 10 µF/16V C304, C311 100 µF/16V C302, C308, C310 CON 5x2 CON301 CON 8x2 CON302 CON 1x10 CON303 CON 1x3 J301, J302, J303 Obudowa DIODE0.4 DIP8 SO14 DIODE0.4 TOk3 TOk3 DIP8 DIP8 DIP6 SO8 SOL-20 0805 0805 0805 0805 0805 0805 0805 0805 0805 0805 0805 1210 1210 RB.2/.4 RB.2/.4 IDC10b L IDC16b L IDC10P IDC3b 7.2 Wzmacniacz mocy PWM. 7.2 Wzmacniacz mocy PWM. 74 7.2 Wzmacniacz mocy PWM. 75 º · ¹ ¸ û Ê ¶ åÕ Ò ¸ ÍÝ È ÑÊ ½ ¿¿ º ÌÜÉÄ Ñ ó ñò µ Å°Þ ¯Þ ²Ð ° ² ²Þ²Ð ²Þ ²· µ à°Þ ²¸ ´ ²Þ²Ð à°Þ ²¹ ± Å°Þ ¯Þ ²Þ à°Þ ¯³ ²Þ²Ð ²Ó ²ä à°Þ µ ³ °¯ ²Ð ¯Þ ²Þ²Ð ²º à°Þ °ã¯ ¶ à°Þ ² ²Þ²Ð ³¸ à°Þ ´ ²Þ²Ð ³¹ à°Þ ¯² °¯ ²Ð ¯Þ ²Þ²Ð ³º à°Þ ± ¯¯ Ð ° ²Þ²Ð ³· ²Þ à°Þ µ ³ à°Þ ´ º°Þ º ¯¯ ² ¹° ¯¯ à°Þ ´ ²Þ ¶ Ð ¸± º° ¶¯ à°Þ ´ ³ ¹± ¯¯ à°Þ ²Þ ¯° ¯± ¶ äÅä ³ º°Þ Ç ¯°ã Î ø ³Þã â ý º°Þ ¯°ã Ð ¹Ö Ë ð´ ¶ Ë ð¯Þ °¯ Ë ð²¯ ´¯ Ë ð¶¯ Þ° Ë ð°° ²° Ë ð´° ¶° Ë ð±Þ °± Ë Ã ¿Ä À Á ³¯ Ù ¯°ã â å° å¯ ³Þã â ÐÐ ¯Ð Î · ÁÏ °¶ Î ÇÛ ÔÙ Ú ÔÙ· ·¹Å ÔØ Å× Ô¶ÕÖ Ð½ µ ¾¼¹ ¿É Ô¹ Í ± ¼Ê ¿Ë · º ½ ¿ÍÌ ¼¾ Ó ¿Í ¾¼ »½ ¿ ² ± ²Þ À°Þ Å° ߯ À ý ¶¯ à°Þ ²Þ Ç ³° Åä þÿù ü ùý úû øô ù ¯Þ ² ² ´ã æ¯Ó Þ¯° Þ Á ¹ ¯Þ ¯² ¯Þ ¯°ã â ò â à°Þ ¯¯ Ð ¯¯ Ó °¹ Þ°¯ É ¯³ ²Þ²Ð ³Ó ³ä ù â × ¼¼ ÈÉÇ Å ¿Æ ¶ º°Þ ¯°ã ´ °±° Õ¯Þ± Å ± °²° Õ¯Þ± Å ± ¯°ã â °° ´± Å° ±´Þ °¯° ß Å ¯ Å° ° ³ ¹¸ °Þº 㱯 ³ ² ± ·± ¶¯ à°Þ ²Þ ° ¯ ¯Þ ¸° ¯ä ¯¯ à°Þ ¯°° ¶²³ °Þà ²Þ ´ ³ ² ´ ²³ Øå» ¯¹ ³ ² ² ² °ã¯ ² ± ± ·° à°Þ ·¯ â ß Å ² ¯ â ±µ° ° ¯ ¶ Å°Þ ß´ Å°Þ ñò ¯ Å ° Þ¯Þ ² ¶ ¯¯° » ¯ ´ ±Þ °Þ» ¹Ö ± ³ µ Ð ³ ¯ ±Ð´¹ °Þ» ¸ Øå» ´ã ¶ æ¯Ó °Þ¹ µ² Á ´ °Þ» ØÞ±Þ é ¯Þ ² ±°° ß Å ±¯° ß Å ¯ ¯Þ ÞÚ ¯²° ¯ Å ² Ó ¹°Þ ±± É ÞÚ ´ Ç ¯°ã Î ± °¯Å ¯ ¯Þ ç ° ± °±Å ߯ ¹°Þ ± ´ã æ¯Ó °° Á ± °Þ» â °¶° Þ´ Å ³ ± ²Þ´¹ °Þ» ¸ ¯¯° Þ° Å ° è ê ÞÚ ´¯ Øå» µ Øå» ²¯µ à°Þ ²± ß °Å ±Þ ¯Þ À¬î ¯ ´ Øå» °Þ» ¯Þ° ß Å ¯ °ÞЊ߯ ´ã ´ æ¯Ó °Þ¹ µ² Á ³ ¯µ° ¯ Å ¯Þ ÀÞ ±Þ ´ ¯°ã â ¯ ³ ³ï ¯±° ß Å ÀÞ ÞØ ´ã æ¯Ó ¯°° Þ Á ¹ ¯Þ â » ³ ° ±Ð °Þ» ¹´¸ °Þº ¯±ã ° Øå» ±Þ Å° ¯Þ Ú ´ ¯ ° á á ÷ ½ ¿Â ÷ ½ ¿ ¯Þ ´ ´ ° °Þà µ° Å° ±± ë °Ð° Þ Å ±Ð è ì ±Þ° Þ´ Å ± ± °´° ß Å ¯ í å ¯¯± ê ° ç µ ¯°° Þ´ Å ± ¹Ö ¯°ã â º ±° Øå» ÀÞ ° æÓ ¹°Þ µ² Á â â ÷ °ÞÀ ó ß ¯Þ ¶ ´ ¯¶° ß Å ² â Å°Þ Þ¯Þ ôõö ¶²³ °Þà ¯Þ° Øå» » ±¯ Ó °¹ Þ°¯ É ´ ³ ¶ Å°Þ ß´ ° ° °ã¯ ²Þ ° ¯ Å°Þ ß¯ ⠰㯠¯¯ ± °ã¯ â ³¶² °Þà â °ã¯ Ç â ´ ±Þ ØÞ±Þ Þã¯Þ ã³Þ ¸¯ Ð°Þ °Þ» ßµ Å°Þ ²Þ °ã Ç Ó ¯ Ð°Þ Þ° É Î ¹ ¯ µ Ó ¹°Þ °Þ¯ É ³ã ³ æ±Ó ¹°Þ ¯Þ Á ¹´¸ » ´ ¶ ²¶ ³² ¯ Ó ¹°Þ µ°Þ á à°Þ â » ÀÞ ±Þ ´ ¯²° Ç ¶ ÞØ Ð ² ± ¯±° °Þ° Þ° Å ° ¯°ã â ³± ´ Å° ß³ ¯Ð° ß Å ¯ ²¶ à°Þ ±Ð ¹´¸ » ¯¯ ¶ ¯º ßµ² ±Ð´ À± ¯ ° ± ¹Ö Ö¹ ° °ÞÀ ¹ ± °ÞÀ ¯ À± ¯ ° ± ¹Ö ¹Ö ¸ Rysunek 7.9: Wzmacniacz mocy PWM. Schemat. · 7.2 Wzmacniacz mocy PWM. Rysunek 7.10: Wzmacniacz mocy PWM. Obwód drukowany M1. 76 7.2 Wzmacniacz mocy PWM. Rysunek 7.11: Wzmacniacz mocy PWM. Obwód drukowany M2. 77 7.2 Wzmacniacz mocy PWM. Rysunek 7.12: Wzmacniacz mocy PWM. Rozmieszczenie elementów na płytce. 78 7.2 Wzmacniacz mocy PWM. 79 Tablica 7.3: Wzmacniacz mocy PWM. Spis elementów Ilość sztuk 2 2 1 2 1 1 1 4 2 1 1 4 4 1 4 2 1 2 4 3 1 1 9 Typ Element Obudowa Zener 12V/1W Zener 13V/1W 4011 4049 4081 4584 741 BC639 BC640 GREEN LM311 MTP30N06 MTP30P06 RED 0.1 Ω/5W 10 Ω 33 Ω 100 Ω 220 Ω 360 Ω 390 Ω 560 Ω 1 kΩ DIODE0.7 DIODE0.4 DIP14 DIP16 DIP14 DIP14 DIP8 TOk1 TOk1 LED DIP8 TOk2 TOk2 LED AXIAL1.2 AXIAL0.5 AXIAL0.5 AXIAL0.5 AXIAL0.5 AXIAL0.5 AXIAL0.5 AXIAL0.5 AXIAL0.5 2 1 2 6 4.7 kΩ 5.6 kΩ 6.8 kΩ 10 kΩ 1 1 4 1 1 2 1 2 1 2 1 850 pF 33 nF 120 nF 10 µF/35V 22 µF/16V 47 µF/16V 47 µF/100V 100 µF/16V CON 5x2 CON 1x3 H15 D203, D204 D201, D202 U202 U204, U205 U203 U201 U208 T201, T202, T212, T214 T203, T213 D205 U206 T206, T208, T210, T211 T204, T205, T208, T209 D206 R214..R217 R207, R208 R227 R202, R206 R211, R220, R223, R224 R212, R222, R230 R229 R228 R203, R209, R210, R219, R221, RR225, R226, R231, R233 R204, R236 R235 R201, R205 R213, R218, R232, R234, R237, R238 C201 C204 C207, C209, C211, C213 RB.2/.4 C203 C206, C208 C202 C210, C212 CON201 CON202, CON203 CON204 AXIAL0.5 AXIAL0.5 AXIAL0.5 AXIAL0.5 RAD0.2 RAD0.2 RAD0.2 RAD.2/.4 RB.2/.4 CAP long RB.2/.4 IDC10b IDC3b H15 7.3 Rozdzielacz sygnałów. 7.3 Rozdzielacz sygnałów. 80 7.3 Rozdzielacz sygnałów. 81 P *+ ) ' !( : f8 5 /C * ! +B ,4 ! &. 4 >@)A ? + 7< ": 7<= ' 7; ': 9 bdc `a Z ^_ 9 "FE \] F 9 "FE M L A+ ; 1 LA H ;+ M 1 LA LA H ;+ H ;+ M LA H ;+ * * K 1 MK 4 A 4 A . . N= + H N= + H N H N H 4 * 4 * M K K OF O 1 .A .A + + M M ; H ; H =; H =; H 1 LA H ;+ H W XU V 3 E F D G F 0 1 M 1 M 1 M LA LA LA LA LA LA N+ H N+ H N+ H N+ H N+ H N+ H YZ F D G F 0 D 3 G E 0 3 E F O O M M O M , ST U e 33 3 2 #1 0 1 O % !&$ "# 1 ! ! , - 78 30 7 !+ / !/ . 6 /! RC ' !. *& *+ ,Q LP %! L .+ "1 L 9; 9 PFE RC ' !. %! ). & *+ < ; 9 %! L .+ "1 L 9; * : 1 9 O FO M , U [ F Q, " RC ' !. %! ). 9 *+ , < 9 PFE %! L .+ "1 L 9; *& : 1 NQ " PFE %! ). 9 : 1 < 9 " M 'M ' 1 ; H; H 'M ' 1 N HN H 'M MK + ;= H ; H M L A+ ; H M L A+ D ; H M L A+ ; H , 4* A. ; H FO M E 0 O N H M D J "FE 9 ' 1 ; H F K1 =; + H 1 L A+ ; H G 3 1 L A+ ; H 1 L A+ ; H 4* .A ; H MK N= + H 9 'M F , O M L A+ N H M L A+ N H D M L A+ N H 4* .A , FO N H M E 0 O M D J 0"IH 9 "FE 9 1 ' 1 N H F G 3 N= + H 1 L A+ N H 1 L A+ N H 1 L A+ N H K1 4* .A N H F , O 0"IH 1 Rysunek 7.13: Rozdzielacz sygnałów. Schemat. 7.3 Rozdzielacz sygnałów. Rysunek 7.14: Rozdzielacz sygnałów. Obwód drukowany M1. 82 7.3 Rozdzielacz sygnałów. Rysunek 7.15: Rozdzielacz sygnałów. Obwód drukowany M2. 83 7.3 Rozdzielacz sygnałów. Rysunek 7.16: Rozdzielacz sygnałów. Rozmieszczenie elementów na płytce. 84 7.3 Rozdzielacz sygnałów. 85 Tablica 7.4: Rozdzielacz sygnałów. Spis elementów Ilość sztuk 2 3 1 1 Typ Element Obudowa CON 8x2 CON 1x2 DB15 DB25 CON501, CON502 J501, J502, J503 CON504 CON503 IDC16b IDC2b DB15RA/M DB25RA/F 7.4 boot code. 7.4 rmain 86 boot code. ttl idnt opt boot vfmcboot1.00 nop ********************************************************************* * * Plik: boot.68k * * Autor: Marek Wnuk * * Historia: *-----------------------------------------------------------------* WERSJA UZYTKOWA * M.WNUK (C) 1999 * ********************************************************************* * * System docelowy: VFMC/68332 * FPROM = $040000, 8-bit port * RAM = $000000, 16-bit port * * Funkcja: Inicjacja sprzetu i uruchomienie aplikacji. * * Opis: Inicjacja sprzetu, * inicjacja wektorow, * przepisanie kodu do RAM @ $30000, * uruchomienie aplikacji od $30000. * * Psuedo-kod: * * section boot_code * * poczatkowa wartosc wskaznika stosu (SP) * adres startu (start:) * start: * tryb systemowy (SR.S = 1), blokada przerwan (SR.I = 7) * * inicjacja sprzetu * * ustawienie VBR na 0 * skopiowanie SP na wektor 0 * skopiowanie adresu startu na wektor 1 * * ustawienie innych wektorow na UNUSED * * ustawienie wskaznika ramki stosu (A6) na 0 * wyzerowanie wszystkich rejestrow * * przepisanie ROM do RAM @ $30000 * tryb systemowy (SR.S = 1), odblokowanie przerwan (SR.I = 0) * start aplikacji od $30000 * ********************* LOWEND equ $18000 section boot_code,,"code" koniec dolnej (zerowanej) pamieci RAM + 1 * * ta sekcja jest zdefiniowana w pliku opisu dla linkera (llrom.cmd) i umieszczona na poczatku pamieci ROM ********************* * * Wektory restartu * * EXCEPT: dc.l $007800 dc.l $40008 * Poczatkowa zawartosc wskaznika stosu Adres startowy (ladowany do PC przy restarcie) 7.4 boot code. 87 ********************* * * Inicjacja CPU * * start: * * Od tego miejsca rozpocznie sie praca procesora po restarcie move.w #$2700,sr SR.S = 1, SR.I = 7 ********************* * * Inicjacja sprzetu * move.w move.w move.w #$6,($fffffa20) #$7f00,($fffffa04) #$424a,($fffffa00) * * SYPCR bus monitor wlaczony na 16 taktow SYNCR mnoznik zegara: 2 MCR pokazywanie cykli, arbitraz zewnetrzny, wlaczony arbitraz wewnetrzny ********************* * * Inicjacja sygnalow CS * * RAM move.l #$00055430,($fffffa4c) move.l #$00053430,($fffffa50) move.l #$00057830,($fffffa54) ; CSOR0 0 waits, upper byte, ds, wo ; CSOR1 0 waits, lower byte, ds, wo ; CSOR2 0 waits, both bytes, as, r/w ********************* * * Ustawienie portu C * move.b #%01110111,($fffffa41) move.l #$00fe0000,($fffffa44) CSPAR * * EPROM move.l #$040458b0,($fffffa48) move.l #$040448b0,($fffffa64) move.l #$040450b0,($fffffa68) ; PORTC LDAC HI ; CSORBT upper, r/w, s/u 2 wait EPROM ; CSOR6 upper, read, s/u 2 wait EPROM ; CSOR7 upper, write, s/u 2 wait EPROM ********************* * pin assignment move.l #$02fe02aa,($fffffa44) CSPAR * * nu wdg lda lcd csr wrl wru csb nu nu nu rtw rtr rtc few fer * -- -- -- 8b 16b 16b 16b 8b -- -- -8b 8b 8b 8b 8b * * xx cs5 cs4 cs3 cs2 cs1 cs0 csb xx xx xx cs10 cs9 cs8 cs7 cs6 * 00 00 00 10 11 11 11 10 00 00 00 10 10 10 10 10 * \--v--/ \--v--/ \--v--/ \--v--/ \--v--/ \--v--/ \--v--/ \--v--/ * 0 2 f e 0 2 a a ********************* * * Ustawienie portu F * move.b #%11111111,($fffffa1b) move.b #%11111111,($fffffa1d) move.b #%00000000,($fffffa1f) * ; PORTF ; PFDDR ; PFPAF all outputs all I/O 7.4 boot code. 88 ********************* * * Ustawienie portu Q * move.b #%01110000,($fffffc15) move.w #$7ffe,($fffffc16) * ; PORTQ ; PQPAR ********************* * * Zerowanie dolnej pamieci RAM * move.l #$400,a1 move.l #LOWEND,a2 clr.l d2 deselect all all QSPI, PQDDR all but MISO - out RAM_ptr = start roboczej pamieci RAM end_ptr = koniec roboczej pamieci RAM clr1: move.l cmpa.l bhi d2,(a1)+ a1,a2 clr1 zerowanie RAM_ptr -> lword dopoki RAM_ptr < end_ptr * ********************* * * Ustawienie USP * move.l a7,a1 suba.l #$3000,a1 move a1,usp * ... o $3000 ponizej SSP ********************* * * Inicjacja wektorow * movea.l #0,a0 adres VBR (=0) do A0 movec a0,vbr A0 do VBR lea.l EXCEPT(pc),a1 adres tablicy wektorow do A1 move.l (a1),(a0)+ wskaznik stosu do RAM lea.l start(pc),a1 adres startu do A1 move.l a1,(a0)+ adres startu do RAM * lea FATAL(pc),a1 zerowanie calej pamieci RAM move.l a1,(a0)+ wektor BusError move.l a1,(a0)+ wektor AddressError move #252,d0 licznik wektorow lea.l UNUSED(pc),a1 adres pustej procedury do A1 fill move.l a1,(a0)+ inicjacja wektorow... dbra d0,fill ...do wyczerpania licznika ********************* * * Zerowanie rejestrow * movea.l #0,a6 A6 jest uzywany jako wskaznik ramki stosu * musi byc zerowany dla XDB movea.l a6,a5 movea.l a6,a4 movea.l a6,a3 movea.l a6,a2 movea.l a6,a1 movea.l a6,a0 clr.l d7 clr.l d6 clr.l d5 clr.l d4 clr.l d3 clr.l d2 clr.l d1 clr.l d0 * 7.4 boot code. 89 ********************* * * Warunkowe przepisanie kodu do RAM * cmp.w #$ffff,$50000 ROM pusty? beq loop jesli tak, to do martwej petli lea.l lea.l move.w $50000,a0 $30000,a1 #$3fff,d0 adres poczatku zrodla adres poczatku przeznaczenia licznik dlugich slow move.l dbra (a0)+,(a1)+ d0,reloc przepisanie dlugich slow... ...do wyczerpania licznika clr.l move.l move.l d0 d0,a0 d0,a1 zerowanie d0, ... a0 ... i a1 move.w #$2000,sr Odblokowanie przerwan... jmp $30000 ...i start aplikacji od $30000 reloc * * ********************* * FATAL move.w #$2700,sr blokada przerwan (czekanie na reset) ********************* * * Martwa petla * loop * bra.s loop ... w ktorej nigdy nie zamierzamy sie znalezc ********************* * * Pusta obsluga zdarzen specjalnych * UNUSED rte ********************* end * koniec pliku boot.68k 7.5 flash.h. 7.5 90 flash.h. /*********************************************************************** * * Plik: flash.h * * Opis: Deklaracje stalych i funkcji dla FlashROM AMD29f010 * * Autor: Marek Wnuk * * Historia: *-----------------------------------------------------------------* WERSJA UZYTKOWA * M. WNUK (C) 1999 * ***********************************************************************/ #ifndef _FLASH_P10_ #define _FLASH_P10_ #ifdef EXTERN #undef EXTERN #endif #ifdef _DEFINE_ #define EXTERN #else #define EXTERN extern #endif #define FLBASE 0x040000 /* adres bazowy pamieci FLASHROM */ EXTERN int EXTERN int ProgMode; FlashProgFlag; EXTERN EXTERN EXTERN EXTERN EXTERN EXTERN EXTERN EXTERN FlReset(); FlPollData(long offset, char data); FlUnlock(); FlAuto(long offset); FlChipErase(); FlSectErase(int sector); FlProgram(long offset, char data); FlashProg(int flag); void int void int int int int int #endif /* _FLASH_P10_ */ /* koniec pliku "flash.h" */ /* wynik programowania */ /* znacznik trybu programowania */ 7.6 flash.c. 7.6 flash.c. /*********************************************************************** * * Plik: flash.c * * Opis: Obsluga pamieci FlashROM AMD29F010 * * Autor: Marek Wnuk * * Historia: *-----------------------------------------------------------------* WERSJA UZYTKOWA * M.WNUK (C) 1999 * ***********************************************************************/ #define _DEFINE_ #include "flash.h" // /*********************************************************************** * * Nazwa: FlReset * * Prototyp: #include <plik.h> * * void FlReset ( ) * * Argumenty: * * Wynik: * * Funkcja: Sprowadzenie FlashROM do stanu poczatkowego * ***********************************************************************/ void FlReset() { *((char *)(FLBASE)) = 0xf0; } /*********************************************************************** * * Nazwa: FlPollData * * Prototyp: #include <plik.h> * * int FlPollData(long offset, char data) * * Argumenty: long offset -adres wzgledem poczatku FlashROMu * char data * * Wynik: 0 - poprawne zaprogramowanie * -1 - blad * * Funkcja: Testowanie zaprogramowania komorki FlashROM * ***********************************************************************/ int FlPollData(long offset, char data) { while (*((char *)(FLBASE+offset)) != data) { if((*((char *)(FLBASE+offset)) & (1<<5))) if(*((char *)(FLBASE+offset)) != data) { FlReset(); return -1; } } return 0; } 91 7.6 flash.c. // /*********************************************************************** * * Nazwa: FlUnlock * * Prototyp: #include <plik.h> * * void FlUnlock ( ) * * Argumenty: * * Wynik: * * Funkcja: Odblokowanie mozliwosci zapisu do FlashROM * ***********************************************************************/ void FlUnlock() { *((char *)(FLBASE+0x5555)) = 0xaa; *((char *)(FLBASE+0x2aaa)) = 0x55; } // /*********************************************************************** * * Nazwa: FlAuto * * Prototyp: #include <plik.h> * * int FlAuto (long offset) * * Argumenty: long offset -adres wzgledem poczatku FlashROM * * Wynik: w zaleznosci od offset: * xx00 - kod producenta * xx01 - kod urzadzenia * SA02 - 0 - sektor odbezpieczony * 1 - sektor zabezpieczony * * Funkcja: Odczyt parametrow FlashROM w trybie Autoselect * ***********************************************************************/ int FlAuto(long offset) { int out; FlUnlock(); *((char *)(FLBASE+0x5555)) = 0x90; out = *((char *)(FLBASE+offset)); FlReset(); return(out); } // /*********************************************************************** * * Nazwa: FlChipErase * * Prototyp: #include <plik.h> * * int FlChipErase() * * Argumenty: * * Wynik: 0 - poprawne skasowanie * -1 - blad * * Funkcja: Kasowanie FlashROM * ***********************************************************************/ 92 7.6 flash.c. int FlChipErase() { FlUnlock(); *((char *)(FLBASE+0x5555)) = *((char *)(FLBASE+0x5555)) = *((char *)(FLBASE+0x2aaa)) = *((char *)(FLBASE+0x5555)) = return FlPollData(0, 0xff); } 93 0x80; 0xaa; 0x55; 0x10; // /*********************************************************************** * * Nazwa: FlSectErase * * Prototyp: #include <plik.h> * * int FlSectErase (int sector) * * Argumenty: int sector -numer sektora FlashROM * * Wynik: 0 - poprawne skasowanie * -1 - blad * * Funkcja: Kasowanie sektora FlashROM * ***********************************************************************/ int FlSectErase(int sector) { FlUnlock(); *((char *)(FLBASE+0x5555)) = 0x80; *((char *)(FLBASE+0x5555)) = 0xaa; *((char *)(FLBASE+0x2aaa)) = 0x55; *((char *)(FLBASE+(sector<<14))) = 0x30; return FlPollData((sector<<14), 0xff); } /*********************************************************************** * * Nazwa: FlProgram * * Prototyp: #include <plik.h> * * int FlProgram (long offset, char data) * * Argumenty: long offset -adres wzgledem poczatku FlashROM * char data -dane do zapisania * * Wynik: 0 - poprawne zaprogramowanie * -1 - blad * * Funkcja: Programowanie 1 bajtu we FlashROM * ***********************************************************************/ int FlProgram(long offset, char data) { FlUnlock(); *((char *)(FLBASE+0x5555)) = 0xa0; *((char *)(FLBASE+offset)) = data; return FlPollData(offset, data); } // /*********************************************************************** * * Nazwa: FlashProg * * Prototyp: #include <plik.h> * * int FlashProg (int flag) * * Argumenty: int flag -zezwolenie na programowanie * 7.6 flash.c. 94 * Wynik: 1 - poprawne zaprogramowanie * 0 - brak zezwolenia na programowanie * -1 - blad przy kasowaniu * -2 - blad przy programowaniu * * Funkcja: Programator FlashROM * * ***********************************************************************/ int FlashProg(int flag) { char * dptr = (char *)0x20000; long offset; long i; if(!flag) return (0); /* tu nalezy ustawic pulapke */ if(FlChipErase()) return(-1); for(i=0;i<16;i++) { for(offset=0; offset<0x2000; offset++) { if(FlProgram(offset+i*0x2000, *dptr++)) return(-2); } } return(1); } /* koniec pliku "flash.c" */ 7.7 bootload.c. 7.7 95 bootload.c. /*********************************************************************** * * Plik: vfmc.c * * Opis: Loader programow dla VFMC przez MBOX0 * * Autor: Krzysztof Jarzabek * * Historia: *-----------------------------------------------------------------* PIERWSZA WERSJA TESTOWA * K.JARZABEK (C) 1999 * ***********************************************************************/ #include <stdio.h> #include <math.h> #include "flash.h" #include #include #include #include <ctype.h> "trooper.h" "vfmc.h" "sim.h" #define INIT_TRANSMISION (unsigned int) 0x5555 #define VME_INIT_TRANSMISION (unsigned int) 0xaaaa #define HEX_VAL(c) ((unsigned long)(((’0’ <= (c)) && ((c)<= ’9’)) ? (c) -’0’: (c) - ’7’)) static VMEbus_interface_T *VMEarg_pointer; /* pointer to VMEBus interface */ SIMREGS *_simptr_; TROOPERREGS *_trooperptr_; static void Init_PORTF(void) { SIMCR = 0x62cf; /* init SIM Master Configuration Register */ PFPAR=0x0000; /* all pins I/O */ DDRF=0x0060; /* PF5 - green diode, PF6 - yellow diode */ PORTF0 = 0; /* Low state */ SetPortFBit(5); /* turn off green diode */ SetPortFBit(6); /* turn off yellow diode */ } void Init_Trooper(VMEbus_interface_T *VMEarg) { SetPAR(8,0x3); /* set Chip Select Pin Assignment Reg. */ SetBAR(8,TROOPERBASE,0); /* set Base Address Register */ /* setings for Chip Select CS8 */ SetMODE(8,0); SetBYTE(8,3); SetRW(8,3); SetSTRB(8,1); SetDSACK(8,0xf); SetSPACE(8,3); SetIPL(8,0); SetAVEC(8,0); PORTF1 |= 7 << 2; /* asynchronous /* both /* both /* DS /* external /* S/U /* all /* off */ */ */ */ */ */ */ */ /* set port F lines (2,3,4) as irq */ 7.7 bootload.c. 96 /* set CS9 - Generatig Autovector for IRQ2 */ SetBAR(9,0xffffff,0); /* set Base Address Register to 0xffff*/ /* setings */ SetMODE(9,0); SetBYTE(9,3); SetRW(9,3); SetSTRB(9,0); SetDSACK(9,0); SetSPACE(9,0); SetIPL(9,2); SetAVEC(9,1); /* asynchronous /* both /* both /* AS /* O ws /* CPU /* 2 /* on */ */ */ */ */ */ */ */ /* Set CS5 - Generatig Autovector for IRQ3 */ SetBAR(5,0xffffff,0); /* set Base Address Register to 0xffff*/ /* setings */ SetMODE(5,0); SetBYTE(5,3); SetRW(5,3); SetSTRB(5,0); SetDSACK(5,0); SetSPACE(5,0); SetIPL(5,3); SetAVEC(5,1); /* asynchronous /* both /* both /* AS /* 0 ws /* CPU /* 3 /* on */ */ */ */ */ */ */ */ /* Set CS4 - Generatig Autovector for IRQ4 */ SetBAR(4,0xffffff,0); /* set Base Address Register to 0xffff*/ /* setings */ SetMODE(4,0); SetBYTE(4,3); SetRW(4,3); SetSTRB(4,0); SetDSACK(4,0); SetSPACE(4,0); SetIPL(4,4); SetAVEC(4,1); /* asynchronous /* both /* both /* AS /* 0 ws /* CPU /* 4 /* on */ */ */ */ */ */ */ */ /* Trooper initialization */ /* set pointers to user’s interrupt functions */ VMEarg_pointer = VMEarg; *((byte *)0xe0003fl)=0x80; *((byte *)0xe00021l)=0x01; *((byte *)0xe00023l)=0x00; *((byte *)0xe00025l)=0x00; SADDMD = | | | (2 (0 (1 (3 << << << << 6) 4) 2) 0); SADDC[1] = 0xc0; SADDC[2] = 0x00; VIRPL = 0; *((byte *)0xe0003dl)=0x60; ClrPortFBit(5); /* A24 mode /* AM enable /* data /* Supervisor/User */ */ */ */ /* slave address compare A23-16 /* A15-09 /* !! from VME address 0x87c00000 !! /* no interrupt asserted */ */ */ */ /* turn on green diode */ } int SRecordToMem(char *s_rec, int size, unsigned long *start_address) { int NBytes, /* number of bytes in S-record */ sum, /* count checksum */ numbers, /* number of data fields */ i, address_len; unsigned long address; 7.7 bootload.c. 97 if((s_rec[1]<’0’)&&(s_rec[1]>’9’)) return(-3); for(i=1;i<strlen(s_rec);i++) if(!isxdigit(s_rec[i])) return(-1); /* include unlawful character */ NBytes=16*HEX_VAL(s_rec[2])+HEX_VAL(s_rec[3]); /* number of bytes in */ if((s_rec[1]==’0’)||(s_rec[1]==’1’)||(s_rec[1]==’9’)) address_len=2; else if((s_rec[1]==’2’)||(s_rec[1]==’8’)) address_len=3; else if((s_rec[1]==’3’)||(s_rec[1]==’7’)) address_len=4; numbers=(int)(NBytes-1-address_len); /* number of data fields without: adress checksum (1B)*/ sum=0; for(i=1;i<=NBytes+1;i++) * count checksum */ sum+=16*HEX_VAL(s_rec[2*i])+HEX_VAL(s_rec[2*i+1]); if((sum&0xFF)!=0xFF) return(-2); /* checksum error */ if(address_len==2) address=(HEX_VAL(s_rec[4])<<12)+(HEX_VAL(s_rec[5])<<8)+ (HEX_VAL(s_rec[6])<<4)+HEX_VAL(s_rec[7]); else if(address_len==3) address=(HEX_VAL(s_rec[4])<<20)+(HEX_VAL(s_rec[5])<<16)+ (HEX_VAL(s_rec[6])<<12)+(HEX_VAL(s_rec[7])<<8)+ (HEX_VAL(s_rec[8])<<4)+HEX_VAL(s_rec[9]); else if(address_len==3) address=(HEX_VAL(s_rec[4])<<28)+(HEX_VAL(s_rec[5])<<24)+ (HEX_VAL(s_rec[6])<<20)+(HEX_VAL(s_rec[7])<<16)+ (HEX_VAL(s_rec[8])<<12)+(HEX_VAL(s_rec[9])<<8)+ (HEX_VAL(s_rec[10])<<4)+HEX_VAL(s_rec[11]); if((s_rec[1]>’0’)&&(s_rec[1]<’4’)) { for(i=0;i<numbers*size;i++) *((char *)address+i)=16*HEX_VAL(s_rec[4+2*(i+address_len)]) /* write to memory */ +HEX_VAL(s_rec[5+2*(i+address_len)]); start_address=0; } else *start_address=address; return(1); } // /*********************************************************************** * * Nazwa: main * * Prototyp: * * int main ( ) * * Argumenty: * * Wynik: * * Funkcja: Program glowny dla proby vfmc 7.7 bootload.c. * * ***********************************************************************/ void main() { VMEbus_interface_T VMEarg; char run, s_record[100]; unsigned int mailbox, n_data; unsigned long start_address; int er; unsigned int *mb0=(unsigned int*)0xe00000; /* Programowanie pamieci FlashROM */ FlashProgFlag = 0; ProgMode = FlashProg(FlashProgFlag); _simptr_ = (SIMREGS *) SIMBASE; /* init pointer to SIM registers */ /* init pointer to trooper registers */ _trooperptr_ = (TROOPERREGS *)TROOPERBASE; Init_PORTF(); Init_Trooper(&VMEarg); /* Glowna petla programu */ while(1) { *((unsigned int*)0xe00000)=INIT_TRANSMISION; while((er=*mb0)!=VME_INIT_TRANSMISION); *((unsigned int*)0xe00000)=0x0000; run=1; n_data=0; while(run) { mailbox=*((unsigned int*)0xe00000); if(mailbox!=0x0000) { if(((mailbox==’S’)&&(!n_data))||(n_data>0)) s_record[n_data++]=(char)mailbox; else n_data=0; if((n_data>0)&&(mailbox==0x0d)) { s_record[--n_data]=0x00; er=SRecordToMem(s_record, 1, &start_address); if((er<0)||(start_address!=0x0000)) run=0; n_data=0; } *((unsigned int*)0xe00000)=0x0000; } } if(er>0) ((void (*) ())start_address)(); else ClrPortFBit(5); } /* while (1) */ } /* koniec pliku bootload.c */ 98 7.8 buser.c. 7.8 99 buser.c. /* * buser.c - test an address for bus error * mw’99 from OS-9 GURU by Paul S. Dayan (p.218) */ #include #include #include #include <stdio.h> <errno.h> <types.h> <MACHINE/reg.h> #define ERROR (-1) REGISTERS stack_frame; /* struct for stack freme */ int f_strap(), probe_byte(); /* asm func declarations */ main(argc,argv) int argc; char **argv; { char *check_addr; if(argc!=2 || sscanf(argv[1], "%x", &check_addr)!=1) exit(_errmsg(1,"Invalid address\n")); if(f_strap(&stack_frame)==ERROR) exit(_errmsg(errno,"Can’t install handler\n")); if(probe_byte(check_addr)==-1) _errmsg(1,"Address %08x not accessible\n",check_addr); else _errmsg(1,"Address %08x accessible\n",check_addr); } /* bus error handler installation */ #asm f_strap: movem.l d1/a0-a1,-(a7) lea ExcpTbl(pc),a1 tst.l d0 beq.s f_strap10 addi.l #R$Size-2,d0 f_strap10 movea.l d0,a0 os9 F$STrap bcs.s f_strap20 moveq #0,d0 bra f_strap30 f_strap20 move.l d1,errno(a6) moveq #-1,d0 f_strap30 movem.l (a7)+,d1/a0-a1 rts ExcpTbl dc.w T_BusErr,bus_hand-*-4 dc.w -1 * Read a byte from address probe_byte: move.l a0,-(a7) move.l d0,a0 move.b (a0),d0 * here bus error may occure... moveq #0,d0 probe_byte10 movea.l (a7)+,a0 rts * Bus error handler bus_hand: movea.l a1,a7 movem.l (a5),d0-d7/a0-a4 movea.l R$a5(a5),a5 moveq #-1,d0 bra.s probe_byte10 #endasm /* end of buser.c */ any stack given? top of stack end marker restore stack pointer restore registers restore a5 7.9 treset.c. 7.9 treset.c. /* * trooper - a simple test for TrooperII (VME side) * mw’99 */ #include <stdio.h> #include <modes.h> #include <errno.h> #include <setsys.h> #include "trooper.h" #define BLKSIZE 0x1000 /* block size */ main(argc,argv) int argc; char *argv[]; { setuid(0); if(f_permit(BLKSIZE,S_IREAD | S_IWRITE,TROOPERBASE)==-1) exit (errno); _errmsg(2,"Permission to %d bytes at 0x%x granted\n",BLKSIZE,TROOPERBASE); *(((byte*)TROOPERBASE)+0x3d) = 0xaa; _errmsg(2,"Reset sent\n"); return 0; } #asm * f_permit(size,perms,address) * d0.l - size of mem area * d1.w - access permissions * a2.l - start of mem area * f_permit: move.l a2,-(a7) movea.l 8(a7),a2 os9 F$Permit bcc f_permit10 moveq #0,d0 move.w d1,d0 move.l d0,errno(a6) moveq #-1,d0 bra.s f_permit20 f_permit10 moveq #0,d0 f_permit20 movea.l (a7)+,a2 rts #endasm /* end of treset.c */ 100 7.10 vfmcload.c. 7.10 101 vfmcload.c. /* * vfmcload - S-records loader for VMFC * mw’99 * vfmcload [file.name] ("-" to load from stdin) */ #include #include #include #include #include #include <stdio.h> <modes.h> <errno.h> <setsys.h> <types.h> <MACHINE/reg.h> #include "trooper.h" #define ERROR (-1) #define MBOX(x) *(((word*)TROOPERBASE)+(x)) REGISTERS stack_frame; /* struct for stack freme */ int f_strap(), probe_byte(); /* asm func declarations */ #define BLKSIZE /* block size */ 0x1000 int mbrd(){ if(probe_byte(TROOPERBASE)==-1) return -1; return MBOX(0); } int mbwr(x) word x; { if(probe_byte(TROOPERBASE)==-1) return -1; MBOX(0)=x; return 0; } main(argc,argv) int argc; char *argv[]; { char *fname = "default.s19"; FILE *fd; int ch,a; if(argc>1) fname = argv[1]; /* open S-records file */ if(*fname == ’-’) { fd = stdin; fname = "stdin"; } else{ if((fd=fopen(fname, "r"))==NULL) exit(_errmsg(2,"Can’t open S-records file: %s\n",fname)); } setuid(0); if(f_permit(BLKSIZE,S_IREAD | S_IWRITE,TROOPERBASE)==-1) exit (errno); _errmsg(2,"Permission to %d bytes at 0x%x granted\n",BLKSIZE,TROOPERBASE); if(f_strap(&stack_frame)==ERROR) exit(_errmsg(errno,"Can’t install bus error handler\n")); /* wait for Trooper initialization */ while(probe_byte(TROOPERBASE)==-1){ _errmsg(2,"VFMC not ready\n"); sleep(1); 7.10 vfmcload.c. 102 } _errmsg(2,"VFMC ready\n"); /* initial handshake */ while(mbrd() != 0x5555){ _errmsg(2,"Waiting for 5555\n"); sleep(1); } if(-1==mbwr(0xaaaa)) _errmsg(2,"Bus error\n"); else _errmsg(2,"Marker (aaaa) sent\n"); while((ch=fgetc(fd))!=EOF && ch!=0x1a){ fprintf(stderr,"%c",ch); fflush(stderr); while((a=mbrd())!=0){ fprintf(stderr,"%s",a==-1?"*":"."); fflush(stderr); tsleep(0x80000000|2); } if(-1==mbwr(ch)) _errmsg(2,"Bus error\n"); } _errmsg(2,"End of %s\n",fname); return 0; } #asm * f_permit(size,perms,address) * d0.l - size of mem area * d1.w - access permissions * a2.l - start of mem area * f_permit: move.l a2,-(a7) movea.l 8(a7),a2 os9 F$Permit bcc f_permit10 moveq #0,d0 move.w d1,d0 move.l d0,errno(a6) moveq #-1,d0 bra.s f_permit20 f_permit10 moveq #0,d0 f_permit20 movea.l (a7)+,a2 rts * Bus error handler installation f_strap: f_strap10 f_strap20 f_strap30 ExcpTbl movem.l lea tst.l beq.s addi.l movea.l os9 bcs.s moveq bra move.l moveq movem.l rts d1/a0-a1,-(a7) ExcpTbl(pc),a1 d0 f_strap10 #R$Size-2,d0 d0,a0 F$STrap f_strap20 #0,d0 f_strap30 d1,errno(a6) #-1,d0 (a7)+,d1/a0-a1 dc.w dc.w T_BusErr,bus_hand-*-4 -1 * Read a byte from address probe_byte: move.l a0,-(a7) move.l d0,a0 move.b (a0),d0 * here bus error may occure... any stack given? top of stack end marker 7.10 vfmcload.c. moveq 103 #0,d0 probe_byte10 movea.l (a7)+,a0 rts * Bus error handler bus_hand: movea.l a1,a7 movem.l (a5),d0-d7/a0-a4 movea.l R$a5(a5),a5 moveq #-1,d0 bra.s probe_byte10 #endasm /* end of vfmcload.c */ restore stack pointer restore registers restore a5 7.11 troper.a. 7.11 104 troper.a. nam troper ttl OS-9/68 TrooperII (VME slave interface) device driver opt l ******************************** * Edition History * # date comments by * -- -------- ------------------------------------------------- --* 01 99/05/24 initial version MW * *********************************************************************** Edition Revision Type_Lang Attr_Rev equ equ opt use opt set set psect 7 0 -l /dd/DEFS/oskdefs.d l (Drivr<<8)+Objct ((SupStat+ReEnt)<<8)+Revision TROOPER,Type_Lang,Attr_Rev,Edition,0,TroopEntry **************** TrooperII Register Layout *********************** * MBOX0 IRQ_REG equ equ $00 $3C * MAGIC_SIG equ $5555 arbitrary signal number 1 default number of drives tables * vbf variables N_Drives * mailbox 0 interrupt pending equ driver routines entry offsets table TroopEntry dc.w dc.w dc.w dc.w dc.w dc.w dc.w Init Read Write GetStat SetStat TermNat 0 **************** variable section *************************** vsect Vector_A Bas_Ad Sig_ID Signal ds.b ds.l ds.w ds.w 1 1 1 1 IRQ-Vector for TrooperII Interrupts Board address buffer buffer process ID (interrupt mode) buffer signal code (interrupt mode) ends ************************************************************** Init: * (a1) addr of device descriptor module (M$) * (a2) addr of device static storage (V_) * (a4) addr of process descriptor * (a6) system global data pointer * * Description: * Initialization of Motion controllers , * Installation of IRQ service routines * move.b #N_Drives,V_Channels(a2) init vbf var: ’number of drives’ 7.11 troper.a. move.l move.l move.w move.w move.b move.b move.b lea.l OS9 bcs.s moveq 105 M$Port(a1),a3 a3,Bas_Ad(a2) #MAGIC_SIG,Signal(a2) P$ID(a4),Sig_ID(a2) M$Vector(a1),d0 d0,Vector_A(a2) M$Prior(a1),d1 Trooper_IRQ(pc),a0 F$IRQ Init_Err #0,d0 get trooper base addr and init a3 reg. get irq-vector store it in driver get irq-priority load irq-routine put irq to os9 ... error * init the mailboxes(a3) * enable trooper IRQ (?) Init_Err rts *************************************************************** Read: * * (a1) addr of path descriptor (PD_) * (a2) addr of device static storage (V_) * (a4) addr of process descriptor * (a6) system global data pointer * * Description: * no readable device * move.w ori.b rts #E$BMode,d1 #Carry,ccr wrong access *************************************************************** Write: * d0.b char to write * (a1) addr of path descriptor (PD_) * (a2) addr of device static storage (V_) * (a4) addr of process descriptor * (a6) system global data pointer * * Description: * no writable device * move.w ori.b rts #E$BMode,d1 #Carry,ccr wrong access ***************************************************************** GetStat: * d0.w status code: * * (a1) addr of path descriptor (PD_) * (a2) addr of device static storage (V_) * (a4) addr of process descriptor * (a6) system global data pointer * * No service move.w ori.b rts #E$BMode,d1 #Carry,ccr wrong access ***************************************************************** SetStat: * d0.w status code: * wr------bbbbeeee * 7.11 troper.a. * * * * * * * * * 106 (bbbb)*16+(eeee) - beginning and end of mboxes queue bit15 set - write bit15 clr - read (a1) (a2) (a4) (a6) cmp.w bhs.s move.w ori.b rts SetStat0 move.l move.l move.l addr of path descriptor (PD_) addr of device static storage (V_) addr of process descriptor system global data pointer #$4000,d0 SetStat0 #E$UnkSvc,d1 #Carry,ccr unknown service error exit PD_RGS(a1),a0 R$a0(a0),a0 V_PORT(a2),a3 get callers register stack pointer get command buffer addr init board address register * copy marked in d0.w words from command buffer (pointed to by a0) * to appropriate mailboxes moveq move.b lsr.l and.w cmp.b bhi.s tst.w bpl.s and.w Write_Mbox move.w addq.l cmp bhs.s Com_exe_Ok: moveq.l rts #0,d1 d0,d1 #4,d1 #$c00f,d0 d0,d1 Com_exe_Err d0 Read_Mbox0 #$f,d0 (a0,d1.w*2),MBOX0(a3,d1.w*2) #1,d1 d1,d0 Write_Mbox #0,d1 Com_exe_Err: move.w #E$BMode,d1 ori.b #Carry,ccr rts Read_Mbox0 and.w Read_Mbox move.w addq.l cmp bhs.s bra.s exit without error bad mode error exit #$f,d0 MBOX0(a3,d1.w*2),(a0,d1.w*2) #1,d1 d1,d0 Read_Mbox Com_exe_Ok pag ************************************************************** TermNat: * (a1) addr of device descriptor module (M$) * (a2) addr of device static storage (V_) * (a4) addr of proces descriptor * (a6) system globla data pointer * move.l M$Port(a1),a3 get trooper base address and init a3 reg. * disable trooper IRQ (?) move.b suba.l OS9 rts Vector_A(a2),d0 a0,a0 F$IRQ get IRQ vector remove TROOPER vector from OS9 7.11 troper.a. 107 pag *************************************************************************** * Interrupt Service Routine * * Handles Interrupts from TrooperII * * Input: * (a2) addr of device static storage * (a3) port address * (a6) system global data pointer * (a7) system stack * * OS9 preserves only d0, d1, a0, a2, a3, a6. All others registers must be * preserved by the driver if used. * * Description: * * A signal: Signal(a2) is sent to the corresponding task * and irq status bits in the TrooperII are reset (?). * *************************************************************************** Trooper_IRQ: *---> disable/flush CPU data cache move.l os9 #fldata+disdata,d0 F$CCtl disable, flush data cache *---> test if really Trooper IRQ move.w bne.s IRQ_REG(a3),d0 IRQ_ok trooper IRQ pending set? (?) yes *---> enable CPU data cache NoIRQ: move.l os9 ori.b rts IRQ_ok: move.w move.w OS9 #endata,d0 F$CCtl #Carry,ccr enable data cache Signal(a2),d1 Sig_ID(a2),d0 F$Send put signal code receivers process ID otherwise error IRQ_clr: * clear pending flags (?) IRQ_End move.l os9 move.w rts ends #endata,d0 F$CCtl d0,d0 * end of "troper.a" enable data cache clear carry flag 7.12 troptest.c. 7.12 troptest.c. /* * Program testujacy TROOPER * mw’99 */ #include <stdio.h> #include <modes.h> #include <errno.h> extern int errno; unsigned short Buf[16]; int PathNo; /****************************************************************/ /* Test z uzyciem drivera */ /****************************************************************/ int SendMb (from,to) int from; int to; { return(ss_com(PathNo,16*(from%16)+(to%16)+0x8000,Buf)); } int ReadMb (from,to) int from; int to; { return(ss_com(PathNo,16*(from%16)+(to%16)+0x4000,Buf)); } /*******************************************************************/ /* Program testujacy TROOPER_TEST */ /*******************************************************************/ main () { char * DevNam = "/troq"; int i, res=2; int f=0, t=5; if ((PathNo = open (DevNam,S_IREAD | S_IWRITE)) == -1) { res = errno; _errmsg(2,"Nie moge otworzyc %s - %d\n",DevNam,errno); exit (errno); } _errmsg(2,"%s otwarte prawidlowo\n",DevNam); fprintf(stderr,"\033[H\033[J"); while(1){ tsleep(0x80000000l+25); fprintf(stderr,"\033[H"); if(-1==ReadMb(f,t)){ _errmsg(2,"Error: %d\n",errno); exit(errno); } else for(i=f;i<=t;i++){ fprintf(stderr,"MBOX%02d = %04x\n", i, Buf[i]); } } return 0; } #asm 108 7.12 troptest.c. 109 ss_com: ok #endas movea.l OS9 bcc.s moveq rts 4(a7),a0 I$SetStt ok #-1,d1 moveq rts #0,d1 Literatura [1] LM34/LM35 Precision Monolitic Temperature Sensors. Aplication Note 460. National Semiconductor, LM34/LM35, 1986. [2] Optoelectronics and Image Sensors. Data Book. Texas Instruments, Linear Products, 1990. [3] OS-9 TECHNICAL I/O MANUAL. Microware Systems Corporation, Des Molnes Iowa, 1990. [4] MC68332 User’s Manual. Motorola Inc., MC68332UM/AD, 1991. [5] 12-Bit Analog To Digital Conveters with Serial Control and 11 analog inputs Data sheet. Texas Instruments, TLC2543, 1993. [6] M628128 1 Megabit (128k x8) very fast SRAM with output enable Data sheet. SGS Thomson Microelectronics., M628128, 1996. [7] Master Selection Guide. Motorola Semiconductor, SG73/D, 1997. [8] MAXIM +5V Powered, Multichannel RS232 Drivers/Receivers Data sheet. MAXIM, MAX232, 1997. [9] Mm 29F010 1 Megabit (128k x8bit) CMOS 5V only Uniform sector Flash Memory Data sheet. AMD, 29F010, 1998. [10] ELFA. Elfa Polska, Warszawa, 1999. [11] Sławomir Gora. Implementacja algorytmów starowania osi robota. Politechnika Wrocławska, Wrocław, 1998. [12] Jan Zabrodzki Marian Łakomy. Liniowe układy scalone w technice cyfrowej. Państwowe Wydawnictwo Naukowe, Warszawa, 1987. [13] Bogdan Marzec. Wprowadzenie do standardu magistrali VME. Wydawnictwo Naukowo Techniczne, Warszawa, 1994. [14] Marek Wnuk Robert Muszyński. Stanowisko naukowo-badawcze do badania algorytmów sterowania manipulatorów. Politechnika Wrocławska, Instytut Cybernetyki Technicznej, Wrocław, 1997. [15] Marek Wnuk Sławomir Gora. VFMC - swobodnie programowalny sterownik nap˛edu robota. Politechnika Wrocławska,Instytut Cybernetyki Technicznej, Wrocław, 1997. [16] ZAP. DTR Układ ramion manipulatora o nap˛edzie elektrycznym. Zakłady Automatyki Przemysłowej, Ostrów Wlkp.Wrocław, 1996.