UNIWERSYTET JAGIELLOŃSKI Instytut Fizyki im. Mariana Smoluchowskiego Sterowanie regulatorem napięcia z poziomu systemu PVSSII poprzez magistralę przemysłową CAN-bus Dawid Szymański Praca magisterska wykonana w Instytucie Fizyki Jądrowej im. Henryka Niewodniczańskiego pod kierunkiem Dr Zbigniewa Hajduka KRAKÓW 2006 SPIS TREŚCI 1 Wstęp......................................................................................................................................2 2 Podstawy fizyczne, główne cele i zastosowanie wielkich eksperymentów fizyki cząstek ....................................................................................................................................3 2.1 Podstawy fizyczne ......................................................................................................3 2.2 Główne cele i zastosowanie wielkich eksperymentów ...............................................5 3 Podstawowe informacje na temat eksperymentu ATLAS ................................................8 4 Detektor TRT w eksperymencie ATLAS..........................................................................11 5 Budowa, zasada działania, system kontroli i monitorowania TRT ................................13 5.1 Budowa detektora TRT .............................................................................................13 5.2 Zasada działania detektora TRT ...............................................................................17 5.3 System kontroli i monitorowania detektora TRT .....................................................19 5.4 Narzędzie PVSS II ....................................................................................................22 6 ELMB i jej funkcjonalności ...............................................................................................24 6.1 CAN-bus ...................................................................................................................26 7 Schematyczny opis systemu zasilania LV .........................................................................28 8 Protokół komunikacji z DTMROC ...................................................................................31 9 Opis układu testowego ........................................................................................................32 10 Opis programu ................................................................................................................35 10.1 Funkcjonalności ........................................................................................................35 10.2 Pomiary prędkości ....................................................................................................47 11 Podsumowanie .................................................................................................................52 Bibliografia ..............................................................................................................................53 DODATEK ...........................................................................................................................56 1 1 Wstęp Do przeprowadzenia eksperymentów w fizyce cząstek budowane są detektory mające na celu pomiar wielkości fizycznych pozwalających na opis i identyfikacje produktów oddziaływania. Obecnie przeprowadzane jak i planowane eksperymenty stawiają wysokie wymagania niezwykle zawansowanym detektorom oraz akceleratorom. Chęć zbadania niezwykle rzadkich procesów występujących przy bardzo wysokich energiach zmusiła do budowy akceleratorów przyśpieszających cząstki do coraz większych energii. Przełomowym momentem było stworzenie akceleratorów zderzających wiązki przeciwbieżne. Pozwoliło to na osiągnięcie dwukrotnie większych energii zderzenia. W Europejskie Laboratorium Fizyki Cząstek (CERN) budowany jest akcelerator cząstek LHC (Large Hadron Collider - Wielki Zderzacz Hadronów) przyspieszający wiązki do energii 7 TeV, będący obecnie największym akceleratorem na świecie. Do badania zjawisk zachodzących przy zderzeniach, których energie sięgają 14 TeV budowane są cztery detektory. Jednym z tych detektorów jest ATLAS, którego celem jest potwierdzenie teorii przewidującej zachowania się cząstek nazywanej Modelem Standardowym jak również poszukiwanie zjawisk wykraczających poza ten model. Praca opisuje bibliotekę dll napisaną jako uzupełnienie systemu PVSS II oraz wyniki uzyskane dzięki jej użyciu w systemie kontroli zasilaczy niskiego napięcia. Poniższa praca zawiera również opis układu służącego do sterowania regulatorami oraz sposób jego działania. 2 2 Podstawy fizyczne, główne cele i zastosowanie wielkich eksperymentów fizyki cząstek 2.1 Podstawy fizyczne Przeprowadzone w ostatnich latach eksperymenty potwierdzają słuszność teorii cząstek elementarnych opracowanej w latach siedemdziesiątych XX wieku przez Glashowa, Weinberga i Salama zwanej Modelem Standardowym. To potężne narzędzie opisuje oddziaływania silne (opisane przez chromodynamikę kwantową, która określa oddziaływanie teoriopolowym kwarków i modelem gluonów) i oddziaływania Salama–Weinberga, elektrosłabe unifikujący (opisane oddziaływania elektromagnetyczne i słabe). Teoria opisująca materie oraz wszystkie siły we wszechświecie (z wyjątkiem grawitacji) [1]. W Modelu Standardowym zakłada się, że istnieją dwa rodzaje cząstek elementarnych: cząstki, które są materią oraz cząstki, które przenoszą oddziaływania. Zgodnie z tym modelem cała materia zbudowana jest z 12 fundamentalnych cząstek [2]. Model Standardowy opisuje również trzy oddziaływania z odpowiednimi bozonami pośredniczącymi: oddziaływania elektromagnetyczne (foton ), oddziaływania słabe (bozony W , W i Z ), oddziaływania silne (gluon g ) [3]. Przewiduje on również istnienie tzw. cząstek Higgsa. Cząstki te nie zostały jeszcze zaobserwowane, ale według Modelu Standardowego - muszą istnieć, gdyż w innym przypadku w gruzach ległaby cała teoria. Cząstki Higgsa są odpowiedzialne za to, że bozony pośredniczące W+, W- i Z posiadają masę, a jednocześnie pozwala teorii opisującej te pola zachować wewnętrzną spójność (gdyby cząstki Higgsa nie istniały, model nie posiadałby fundamentalnej własności zwanej renormalizowalnością). Cząstka ta jest ostatnim elementem składowym Modelu Standardowego, który nie został jeszcze zaobserwowany. Z przeprowadzonych dotychczas eksperymentów wiadomo, że jej masa spoczynkowa musi być większa niż 77 GeV / c 2 , w wyniku przeprowadzonych, w ostatnim czasie doświadczeń granica ta została przesunięta do około 95 GeV / c 2 . Okazuje się ponadto, że jeśli cząstka Higgsa jest elementarna, czyli nie składa się z mniejszych składników, jej masa nie może przekraczać 800 GeV / c 2 [4]. Model Standardowy jest teorią niekompletną, nie można opisać za jej pomocą wszystkich zjawisk i zachowań cząstek. Nie opisuje ona również oddziaływania 3 grawitacyjnego, co jest główną praktyczną przyczyna poszukiwania uogólnienia Modelu Standardowego. Oprócz poszukiwań całkowicie nowej teorii do oddziaływań w dalszym ciągu rozszerza się Model Standardowy dołączając teorie opisujące przypadki nieuwzględnione w Modelu Standardowym np: model Kaluzy – Kleina, wprowadzenie Supersymetrii, wprowadzenie elementarnych strun i superstruny, i innych. Istnieje wiele modeli, które dążą do opisania wszystkich oddziaływań za pomocą jednej wielkiej teorii np: model SU(5), model 11-wymiarowej kwantowej supergrawitacja, model 10-wymiarowej superstruny itd. Potrafią one z większą lub mniejszą dokładnością opisać oddziaływania, ale żaden z nich nie został potwierdzony doświadczalnie [1]. 4 2.2 Główne cele i zastosowanie wielkich eksperymentów Model Standardowy jest wciąż podstawowym modelem mikroświata, mimo ze bozon Higgsa nie został dotychczas zaobserwowany oraz mimo braku wyjaśnienia widma mas fermionów i parametrów ich mieszania. Wydaje się, że pozwala on opisać „wszystkie” zjawiska w fizyce cząstek elementarnych (uwzględnienia wymaga oczywiście odkrycie oscylacji i mas neutrin). O tym, czy w przyrodzie istnieją jakieś nowe cząstki lub nowe oddziaływania poza Modelem Standardowym, przekonamy się dzięki dalszym doświadczeniom przy konstruowanych obecnie akceleratorach cząstek naładowanych o wielkiej energii. Zaproponowano liczne modele teoretyczne, które takie nowe cząstki i oddziaływania przewidują. Jeśli zostaną one odkryte, będzie to początek Nowej Fizyki [3]. Obecnie w CERN (Europejskie Laboratorium Fizyki Cząstek) budowany jest największy na świecie akcelerator cząstek LHC (Large Hadron Collider - Wielki Zderzacz Hadronów). W kołowym tunelu o obwodzie 27 km (w którym mieścił się akcelerator LEP) będą przyspieszane protony i ciężkie jony do energii 7 TeV (takiej, jaką uzyskałby elektron przyspieszony napięciem 7 bilionów woltów) [5]. LHC jest zderzaczem wiązek przeciwbieżnych, więc energia zderzeń będzie wynosiła 14 TeV. Przy energiach tego rzędu możliwe jest obserwowanie niezwykle rzadkich procesów zachodzących z częstością na poziomie 10-4 – 10-13. Dla tak rzadkich zjawisk wymagana jest duża świetlność akceleratora – dla LHC wynosić będzie ok. 1034 cm-2s-1. Przekroje czynne dla niektórych procesów zachodzących w zderzeniach proton – proton dla energii osiąganych na akceleratorze LHC zostały przedstawione na rysunku (rys. 2.1). 5 Rysunek 2.1: Przekroje czynne dla różnych procesów w zderzeniach proton – proton (czerwona linia przerywana – energia osiągana na LHC) [6]. W każdej sekundzie dojdzie średnio do pół miliarda zderzeń biegnących naprzeciw siebie protonów. Cząstki powstałe w wyniku wyzwolonej w ten sposób energii będą rejestrowane przez cztery detektory: Alice, Atlas, CMS i LHCb. Każdy detektor to urządzenie wielkości kilkupiętrowego bloku (rys. 2.2), naszpikowane nowoczesną elektroniką [5]. Rysunek 2.2 Porównanie wymiarów detektora ATLAS z kilkupiętrowym budynkiem laboratorium w CERN – Europejskim Centrum Fizyki Cząstek w Genewie [7]. 6 Budowane detektory mają różne przeznaczenia. Dwa mniejsze: ALICE i LHCb konstruowane są do ściśle określonych celów, pozostałe ATLAS i CMS – jako detektory ogólnego przeznaczenia. Detektor ATLAS budowany jest dla kilku celów, potwierdzeniu eksperymentalnemu prawdziwości Modelu Standardowego, czyli: • poszukiwanie cząstki Higgs’a - ostatniej brakującej cegiełki Modelu Standardowego, • precyzyjny pomiar masy bozonu W, • precyzyjny pomiar masy oraz właściwości najcięższego kwarku – top, • bogaty program fizyki b (łamanie parzystości CP, etc.), jak również zjawiska wykraczające poza Model Standardowy: • poszukiwanie cząstek supersymetrycznych (SUSY…), • poszukiwanie supersymetrycznych cząstek Higgs’a (h, H, A, H), • anomalne sprzężenia W, Z, , • ciężkie bozony gauge (W’, Z’), • i innych [8]. Dzięki zaawansowanej technice, w jaką zostanie wyposażony detektor ATLAS, będziemy w stanie odpowiedzieć na wiele pytań stawianych obecnie przez naukę. Potwierdzić lub zanegować prawdziwość Modelu Standardowego, a tym samym podać dane doświadczalne dla modyfikacji opisu teoretycznego zjawisk obserwowanych w eksperymentach. 7 3 Podstawowe informacje na temat eksperymentu ATLAS ATLAS jest to układ detektorowy o długości około 46 m, średnicy około 25 m i wadze prawie 7000 ton (rys. 3.1), który musi sprostać niezwykłym wymaganiom. Rysunek 3.1 Przekrój detektora ATLAS (kolor niebieski – detektory mionowe, kolor szary – zewnętrzny magnes toroidalny w kształcie walca z end cap-ami, kolor czerwony – kalorymetry hadronowe, kolor zielony – kalorymetry elektromagnetyczne, kolor żółty solenoid z detektorem wewnętrznym) [9]. W centralnym punkcie detektora będą zachodziły zderzenia przeciwbieżnych paczek protonów co 25 ns o energii zderzeń 14 TeV. Cząstki powstałe w zderzeniach, rozbiegające się na wszystkie strony, muszą zostać zmierzone jak najdokładniej w czasie wystarczająco krótkim, aby nie pomylić ich z produktami następnego zderzenia, które zachodzi, gdy jeszcze najszybsze nawet produkty poprzedniego nie zdołały opuścić detektora [9]. W każdej sekundzie, w detektorze zachodzić będzie około 40 milionów zderzeń paczek protonów, co da około miliard oddziaływań (109), z których każde produkować będzie średnio 1400 cząstek naładowanych. Informacje o cząstkach oddziałujących w detektorze zbierane są i przesyłane do wielostopniowych układów filtrujących zderzenia na podstawie zadanych kryteriów (układ wyzwalania, trigger) i decydujących o zapisie interesujących przypadków (Data Acquisition - DAQ). Odczytać trzeba około 200 milionów kanałów elektronicznej rejestracji danych i jeśli zawierają one informacje różne od zera, przesłać do komputerów na zewnątrz detektora [9]. W komputerach 8 zapisywane zostanie już tylko około 100 przyp./s, a jeden przypadek będzie miał objętość około 1 Mega byte. Czas naświetlania w ciągu roku wyniesie około 107 s, co przez rok pracy pozwoli na zebranie 2 Peta byte surowych danych i około 1 Peta byte danych Monte Carlo. Oczekuje się, że detektor ATLAS będzie pracował od 10 do 15 lat [6]. ATLAS zbudowany jest z kilku detektorów o określonych funkcjach połączonych ze sobą. Cechą charakterystyczną układu detekcyjnego ATLAS jest ogromny toroidalny magnes zapewniający bardzo wysoką precyzję pomiaru pędu cząstek naładowanych (przede wszystkim mionów) o energiach rzędu 1 TeV (rys. 3.1). Centralna część detektora (tzw. Detektor Wewnętrzny - Inner Detector) znajduje się także w polu magnetycznym wytworzonym przez nadprzewodzący magnes solenoidalny o indukcji 2 T. Mierzące energię cząstek kalorymetry znajdują się poza polem magnetycznym. Najbliżej punktu oddziaływania znajdują się krzemowe detektory półprzewodnikowe: najpierw "mozaikowe" a później „paskowe”. Pierwsza z trzech warstw detektora mozaikowego znajduje się już 5 cm od miejsca zderzeń protonów, a dwie następne są w odległości odpowiednio 9 i 12 cm. Detektor mozaikowy posiada około 140 milionów kanałów odczytu i zapewnia bardzo dobrą rozdzielczość w pomiarze wierzchołka oddziaływania i parametru zderzenia. Trudne warunki radiacyjne tak blisko punktu oddziaływania sprawiają, że detektor mozaikowy jest zaprojektowany jako moduł wymienialny. Kolejny detektor, krzemowy detektor paskowy (SCT - SemiConductor Tracker) jest zaprojektowany tak, aby zapewnić 4 pomiary toru cząstki przez niego przechodzącej, przyczyniając się do pomiaru pędu, położenia wierzchołka i parametru zderzenia. Całkowita powierzchnia SCT to przeszło 55 m2, prawie 2 rzędy wielkości więcej niż detektory krzemowe eksperymentów LEP-u. Liczba kanałów odczytu to około 6.2 miliona. Dalej od punktu oddziaływania, ciągle w obszarze Detektora Wewnętrznego, umieszczony jest Detektor Promieniowania Przejścia (Transition Radiation Tracker TRT). Detektor ten, zbudowany z gazowych komór proporcjonalnych w kształcie słomek o średnicy 4 mm, wypełnia przestrzeń między SCT a kriostatem. TRT mierzy ślady cząstek, oraz dodatkowo, dzięki efektowi tzw. promieniowania przejścia, pozwala na odróżnianie lekkich cząstek naładowanych (elektrony) od hadronów. Na zewnątrz detektorów śladów znajduje się kriostat z ciekłym argonem zawierający kalorymetr elektromagnetyczny. Absorberem w kalorymetrze jest ołów a 9 elektrody są wykonane z warstw miedzianych naniesionych na kapton. Aby osiągnąć symetrię w kącie i hermetyczność kalorymetru, czyli zlikwidować możliwe szczeliny w pokryciu przestrzeni, zastosowano ciekawą geometrię elektrod nazywaną "accordionshaped", nazywanych tak z racji swego podobieństwa do akordeonu. W tym samym kriostacie, wewnątrz kalorymetru, znajduje się nadprzewodzący centralny solenoid zapewniający silne pole magnetyczne (2 T) w detektorze wewnętrznym. Za kalorymetrem elektromagnetycznym znajduje się kalorymetr hadronowy z żelaznym absorberem poprzedzielanym płytkami scyntylatora. Ciekawe są konstrukcje kalorymetrów hadronowych w „denkach” (ang. end-caps), czyli fragmentach detektora zamykających go od strony wiązek, gdzie poziom radiacji wymaga zastosowania specjalnych technologii. Kalorymetr hadronowy w denku wykorzystuje miedź jako absorber i umieszczony jest w ciekłym argonie podobnie jak kalorymetr elektromagnetyczny, natomiast w tzw. Kalorymetrze do przodu (ang. Forward Calorimeter), umieszczonym blisko rury próżniowej i szczególnie narażonym na wysokie dawki promieniowania, stosuje się wolfram jako absorbent, uformowany w matryce z wydrążonymi okrągłymi otworami, w których umieszczone są elektrody. Komory mionowe tworzą zewnętrzną warstwę ATLAS-a. Są to detektory gazowe zapewniające precyzyjne pomiary pędu mionów szczególnie ważne w kanałach takich jak "złoty kanał" w poszukiwaniu bozonu Higgsa: HZZ(*)4 . Z czterech rodzajów komór dwa służą systemowi wyzwalania detektora, a dwa pozostałe precyzyjnym pomiarom torów. Osiem nadprzewodzących magnesów toroidalnych wytwarza silne (4 T) pole magnetyczne w tej części detektora. Cały system mionowy zapewnia precyzyjne pomiary mionów niezależnie od detektora wewnętrznego, co pozwala na zbieranie interesujących danych nawet przy najwyższych świetlnościach, kiedy dane z Detektora Wewnętrznego mogą być trudne do analizy [9]. 10 4 Detektor TRT w eksperymencie ATLAS TRT - detektor promieniowania przejścia to jeden z subdetektorów ATLAS-a, jest detektorem gazowym. Jego geometria została zaprojektowana tak, aby w pełni otaczał punkt zderzeń przeciwbieżnych wiązek. TRT mierzy ślady cząstek za pomocą efektu jonizacji ośrodka, oraz pozwala odróżnić lekkie cząstki naładowane (elektrony) od hadronów, dzięki efektowi promieniowania przejścia [10]. Cząstki naładowane przechodząc przez ośrodek przekazują mu energię kinetyczną (w sposób pośredni i bezpośredni) w procesach jonizacji lub wzbudzania atomów. Proces jonizacji przebiega w dwóch etapach. Pierwszy to jonizacja pierwotna, która jest wywoływana przez naładowaną cząstkę, przechodzącą przez dany ośrodek. Drugi etap to jonizacja wtórna wywoływana przez elektrony o najwyższych energiach wybite z atomów ośrodka podczas tego procesu, które mogą same jonizować dalej ośrodek. Przez jonizacje wtórną całkowita liczba jonów jest 3 - 4 razy większa od liczby jonów powstałych podczas jonizacji pierwotnej [2]. Większość oderwanych elektronów znajduje się w odległości mniejszej niż 1 μm od toru cząstki, co oznacza, że teoretycznie możliwe jest osiągnięcie takiej dokładności pomiaru położenia. W rzeczywistości udało się otrzymać taką dokładność tylko dla małego detektora krzemowego oraz dla pomiarów w emulsjach jądrowych. W śladowych detektorach gazowych typowa dokładność pojedynczego pomiaru cząstki wynosi około 100 μm. Zjawisko jonizacji wykorzystywane jest przede wszystkim w gazowych i półprzewodnikowych detektorach śladowych (służących do pomiaru położenia cząstek). Średnia energia potrzebna do jonizacji pojedynczego atomu gazu wynosi około 30 eV [11]. Drugim zjawiskiem występującym w detektorze TRT jest efekt promieniowania przejścia. Efekt ten polega na emisji promieniowania elektromagnetycznego przy przejściu cząstki między ośrodkami o różnej wartości stałej dielektrycznej (ε). Wartość wypromieniowanej energii dla pojedynczego przejścia naładowanej cząstki przez granicę ośrodków o różnej wartości ε jest proporcjonalna do czynnika Lorentza: 1 S z 2 p 3 gdzie: ħω – energia plazmy (ang. plasma energy) dla powszechnie stosowanych plastikowych radiatorów wynosi około 20 [eV]. 11 Promieniowanie proporcjonalny do elektromagnetyczne 1 jest emitowane pod kątem, który jest (kierunek emisji jest bliski kierunkowi cząstki). Wykorzystanie tego zjawiska umożliwia identyfikacje naładowanych cząstek poprzez pomiar zdeponowanej energii w detektorze TRT. 12 5 Budowa, zasada działania, system kontroli i monitorowania TRT 5.1 Budowa detektora TRT Detektor TRT o długości 6,8 m i średnicy 2,06 m oraz wadze ok.1500 kg wchodzi w skład detektora wewnętrznego, który umieszczony jest wewnątrz nadprzewodzącego magnesu solenoidalnego wytwarzającego pole 2 T. Geometria detektora została zaprojektowana tak, aby w pełni otaczał on punkt zderzeń wiązek. Detektor TRT zbudowany jest z części centralnej – cylindra (ang. barrel) oraz korków (ang. end-caps) (rys. 5.1, 5.2) [12]. Rysunek 5.1 Detektor wewnętrzny detektora ATLAS [13]. Rysunek 5.2 Detektor TRT z uwidocznionym podziałem na części (kolor niebieski ciemny - barrel (cylinder), kolor czerwony – end caps – wheel A (koła typy A), kolor jasno-niebieski – end caps – wheel B (koła typy B), kolor różowy – end caps – wheel C (koła typy C), kolor zielony – rama konstrukcyjna [13]. 13 Cylinder (Barrel) zbudowany jest z trzech warstw o grubościach: pierwsza warstwa 137 mm, druga warstwa 167 mm, trzecia warstwa 206 mm, z których każda jest podzielona na 32 moduły (rys. 5.3) [14]. Rysunek 5.3 Podział na warstwy detektora TRT z uwidocznionym podziałem na moduły a) całego cylindra z podziałem na moduły [13], b) przekrój poprzeczny cylindra [14]. Każdy moduł, w zależności do której warstwy należy, zawiera określoną liczbę liczników SPT (ang. Straw Proportional Tubes) o długości 144 cm. Składają się z rurek o średnicy 4 mm i bardzo cienkich ścianach (70 μm) stanowiących katody. Ściany zbudowane są z kilku warstw (carbon-polyimide - zewnętrznej warstwy ochronnej, warstwy aluminiowej, warstwy kapton’owej i warstwy poliuretane’owej) (rys. 5.4) [15]. Każda słomka na zewnątrz ma cztery włókna usztywniające (rys. 5.5). Rysunek 5.4 Przekrój ściany licznika SPT [16]. 14 Rysunek 5.5 Licznika SPT (słomka) z wyróżnionymi włóknami usztywniającymi [16] a) układ włókien usztywniających, b) przekrój poprzeczny słomki z zaznaczonym układem włókien. Wewnątrz słomki biegnie drut wolframowy pokryty złotem o grubości 30 μm jako anoda. Słomki są wypełnione gazem Xe/CO2/O2 w proporcjach 70%Xe + 27%CO2 + 3%O2. Gaz Xe prawdopodobieństwa (ksenon) absorpcji jest stosowany miękkiego dla uzyskania promieniowania X wysokiego jakim jest promieniowanie przejścia, CO2 (dwutlenek węgla) służy do stabilizacji pracy liczników. Dzięki tak dobranym proporcjom uzyskuje się robocze wzmocnienie gazowe ok. 2.5104. Przestrzeń pomiędzy słomkami została wypełniona radiatorem, aby umożliwić zjawisko promieniowania przejścia. Do końców słomek jest przymocowana elektronika odczytu i zasilania – FE (ang. Front End). Łącznie w całym cylindrze znajduje się 52 544 liczników SPT i 105 088 kanałów elektroniki (rys. 5.6) [16]. Rysunek 5.6 Schemat układu modułów i słomek wewnątrz cylindra [16]. 15 End-caps – korki złożone z kół tak jak cylinder są zbudowane z liczników SPT, ale inaczej ułożonych. Każde koło zostało podzielone na 32 moduły. Liczniki ułożone są radialnie (rys. 5.8). Ze względu na różnice w budowie kół zostały one podzielone na trzy typy: A, B i C. Kół typy A jest 12 i znajdują się najbliżej cylindra, po 6 z każdej strony (rys. 5.2). W kole typu A mamy 16 warstw liczników. Kół typu B jest 16, po osiem z każdej strony cylindra. Składają się z 8 warstw liczników o długości 39 cm. Kół typu C jest 8, po cztery z każdej strony cylindra, zbudowane są z 8 warstw liczników o długości 52 cm. Elektronika odczytu i zasilania jest przymocowana do końców słomek na zewnątrz kół. We wszystkich kołach zgromadzone zostało 319 488 liczników SPT [16]. Rysunek 5.7 Złożone koło i układ liczników w kołach a) koło typu A na stanowisku testowym b) schemat układu słomek w kołach W całym detektorze TRT znajduje się 372 032 liczniki SPT oraz około 424 576 kanałów elektroniki, co stawia bardzo trudne wyzwanie przed systemem sterowania i kontroli tego detektora. [12]. 16 5.2 Zasada działania detektora TRT Gazowy detektor TRT został zaprojektowany i zbudowany do pomiaru toru cząstek oraz ich identyfikacji wykorzystując do tego efekt jonizacji ośrodka i promieniowanie przejścia (efekty te zostały opisane w rozdziale 4). Geometria detektora została zaprojektowana tak, aby cząsteczki wylatujące z punktu zderzenia pod różnymi kątami miały na swojej drodze do pokonania taką samą (w przybliżeniu) liczbę liczników SPT. Jak wynika z symulacji każda cząsteczka posiadająca ładunek różny od zera przelatująca przez TRT pokonuje średnio około 36 słomek. Każda cząsteczka naładowana przelatująca przez detektor TRT wywołuje w licznikach SPT, przez które przelatuje, jonizację gazu. Przez przyłożenie napięcia do drutu i ściany słomki można zebrać ładunek, jaki powstanie podczas jonizacji.. Dzięki zjawisku wzmocnienia gazowego (rys. 5.9) ładunek docierający do elektroniki może być stosunkowo łatwo zarejestrowany. Rysunek 5.8 Propagacja efektu jonizacji w liczniku SPT a) wybicie elektronu z atomu gazu b) efekt lawinowy - wzmocnienie gazowe c) rozdzielanie się jonów i elektronów w gazie d) powstanie zjonizowanej otoczki wokół anody (drutu) e) zebranie ładunku ujemnego Po zebraniu ładunku z gazu jest on przekazywany do elektroniki odczytu umieszczonej na końcach słomek. Tam zostaje on przetworzony i wysłany do pamięci wraz z dokładnym czasem rejestracji. Ponieważ TRT jest umieszczony wewnątrz magnesu cząsteczki naładowane poruszają się po łukach, co pozwala na pomiar pędu cząstki. Mierząc energię zdeponowaną w licznikach z promieniowania przejścia oraz zakrzywienie toru ruchu cząsteczki posiadających niezerowy ładunek można 17 zidentyfikować te cząsteczki. Identyfikacja odbywa się przy opracowywaniu danych uzyskanych z detektora, czyli poza detektorem. Rysunek 5.9 Rekonstrukcja przypadków w cylindrze z symulacji [17]. (Na powiększeniu po prawej widać tor pionu i pozytonu, czerwone punkty o miejsca wystąpienia efektu promieniowania przejścia) Z TRT uzyskujemy tylko informacje, że cząsteczka przeleciała przez licznik, wiemy który to licznik (znamy jego dokładne położenie w detektorze), czas w którym nastąpił przelot cząsteczki jak też w jakim czasie jonizacja dotarła do anody oraz energię jaka została zdeponowana w liczniku. Posiadając dane z całego detektora można wyznaczyć tor lotu cząsteczki, zidentyfikować ją jak również podać jej pęd (dzięki polu magnetycznemu) (rys. 5.10). 18 5.3 System kontroli i monitorowania detektora TRT ATLAS jest nowoczesnym i skomplikowanym detektorem cząsteczek przyśpieszanych do wysokich energii. Ze względu na duże promieniowanie wewnątrz hali, w której znajduje się detektor oraz ogromną liczbę kanałów elektroniki nie będzie możliwe kontrolowanie i monitorowanie bezpośrednie. Ten fakt postawił ogromne wyzwanie stworzenia zdalnego systemu kontroli i monitorowania detektora (DCS – ang. Detector Control System). Taki system powinien wypełniać wszystkie zadania monitorujące, korekcyjne i korelacyjne bez interwencji operatora a w przypadku stwierdzenia wadliwego działania detektora wyłączyć go. Nowoczesny system DCS musi być zaprojektowany tak, aby był łatwy i intuicyjny w obsłudze, nie stwarzał kłopotów przy serwisowaniu sprzętu i oprogramowania (rys. 5.11) [12, 19]. Rysunek 5.10 Schemat systemu DCS dla detektora ATLAS-a [18]. Aby ułatwić stworzenie takiego systemu dla tak złożonego detektora, system ten został podzielony na autonomiczne podsystemy DCS współpracujące ze sobą. Każdy podsystem kontroluj jeden subdetektor ATLAS-a monitorując zmiany ważnych dla detektora parametrów, podejmując akcje korekcyjne i awaryjne w przypadku wadliwego działania detektora. DCS zarządza wieloma parametrami w zależności od 19 subdetektora, który kontroluje (np.: natężenie prądu, napięcie, temperaturę w krytycznych punktach, ciśnienie gazu, skład mieszanki gazowej, ciśnienie itp.) [12]. Systemu DCS dla TRT został stworzony tak, aby zapewnić poprawne działanie jak i niezawodność pracy detektora (rys. 5.12). Analizując system sterowania TRT można wyróżnić podsystemy, które mogą pracować niezależnie od innych, należą do nich: System zasilania – można podzielić na: system sterowania wysokim napięciem (HV) – zapewnia zasilanie liczników proporcjonalnych (~ 6000 kanałów sterowania i kontroli, każdy kanał opisany przez kilkanaście parametrów), system sterowania niskim napięciem (LV) – zapewnia zasilanie elektroniki (~ 1800 kanałów, każdy kanał opisany przez około 10 parametrów). System chłodzenia – wymagane jest usunięcie ciepła wydzielanego przez elektronikę detektora (wydzielająca w małej objętości ok. 40 KW mocy), system można podzielić na dwa podsystemy: chłodzenie cieczą (chłodzenie elektroniki, wymienniki ciepła), chłodzenie gazem (chłodzenie elementów detekcyjnych). System pomiaru temperatury detektora i serwisów – pomiar ~ 1500 punktów na detektorze i systemach wspomagających. System kontroli kaset i stojaków z aparaturą. System gazowy – jest systemem zamkniętym podzielonym na kilka podsystemów odpowiedzialnych za: mieszanie gazu, utrzymywanie stałego składu gazu, przepływ gazu, oczyszczanie z zanieczyszczeń, stabilizację wzmocnienia [18]. 20 Rysunek 5.11 Architektura systemu DCS dla detektora TRT [18]. Dla eksperymentów LHC została przyjęta strategia zastosowania przemysłowych produktów i narzędzi w tworzeniu systemu oraz użyciu przemysłowych rozwiązań sprzętowych [20]. Uzyskano w ten sposób gwarancję utrzymania i serwis w czasie ‘życia’ eksperymentu. Przemysłowe systemy typu SCADA (ang. Supervisory Control And Data Acquisition) charakteryzują się elastyczną, rozproszoną i otwartą architekturą spełniając wymagania stawiane wobec systemu DCS eksperymentu ATLAS. Takim wybranym systemem okazał się PVSS II. Różnorodność stosowanych urządzeń w detektorze stwarza problemy z dostępem do sprzętu. Dlatego zastosowano standard OPC (ang. OLE for Process Control), co pozwoliło zintegrować sprzęt, ponieważ większość z urządzeń jest wyposażone tzw. „OPC serwer” [12]. 21 5.4 Narzędzie PVSS II Ostatnich kilka lat przyniosło szybki rozwój systemów nadzorowania i monitorowania procesów przemysłowych - SCADA. Są to systemy projektowania i realizacji systemów nadzoru komputerowego dla procesów przemysłowych, linii technologicznych, maszyn i urządzeń, monitorowanych i sterowanych w oparciu o programowalne sterowniki logicznych (PLC) i inne systemy pomiarowo-kontrolne różnych producentów. Takim systemem jest PVSS II (skrót z niemieckiego od „Wizualizacja procesu i system kontroli II”). Jest to zestaw oprogramowania przeznaczony do automatyzacji w przemyśle. Główne zastosowania znajduje w obsłudze i nadzorze skomplikowanych instalacji przemysłowych używając stacji roboczych VDU (ang. Video Display Unit) z pełnymi graficznymi możliwościami. Oprogramowanie stawia jednak pewne wymagania co do budowy systemu. W dodatku do wizualizacji stanu procesu musi mieć możliwość transmisji danych i rozkazów do procesu i swoich urządzeń kontrolnych. Operator może komunikować się z systemem używając myszy, klawiatury lub innych standardowych urządzeń wejściowych komputera a odpowiedzi są wyświetlane na ekranie. System zawiera wewnętrzne funkcje alarmujące operatora o wystąpieniu krytycznego stanu urządzania lub przekroczeniu przez parametr wartości granicznej dodatkowo zapisując dane do późniejszej analizy. PVSS II można określić jako zaawansowane oprogramowanie nadzorujące do centrum kontroli albo oprogramowanie sterujące maszyną. Jako platformę do systemu można użyć zwykłego komputera osobistego, serwera lub stacji roboczej. Połączenie kontroli i regulacji urządzenia w automatyczną platformę (np.: PLC 1, DDC2, RTU3, …) oraz sensorów i modułów I/O pozwala stworzyć w pełni automatyczny system sterowania. Architektura systemu pozwala na podział na mniejsze części, programy (ang. manager - menadżer) odpowiedzialne za konkretne zadania (rys. 5.13) [21]. PLC… ang. Programmable Logic Controller (przemysłowy system komputerowy do cyfrowej kontroli i obsługi 2 DDC… ang. Direct Digital Control (rodzina urządzeń kontrolnych w budowie usługi zarządzającej) 3 RTU… ang. Remote Terminal Unit, Remote Telemetry Unit (telekomunikacja systemu) 1 22 Rysunek 5.12 Architektura systemu PVSS II [21]. Można wyróżnić między innymi dla skrajnych połączeń menadżera interfejsu użytkownika UI (ang. User interface menager) odpowiedzialnego za komunikację użytkownika z systemem i menadżera sterowników D (ang. Drivers menager) odpowiedzialnego za proces połączenia z urządzeniami. Centralną część systemu, jego jądro stanowi menadżer zdarzeń EV (ang. Event menager), który jest połączony ze wszystkimi pozostałymi częściami systemu. Wyróżnić można również: menadżer kontroli CTRL (ang. CONTROL menager) odpowiedzialny za kontrole innych procesów sytemu, menadżer danych DB (ang. DataBase menager) odpowiedzialny za zapisywanie danych i zmian w procesach, menadżer API (ang Application programming interface) pozwala użytkownikowi na wprowadzanie własnych funkcji i algorytmów do systemu PVSS II i tworzenie własnych menadżerów, menadżer CON (ang. Connection to other system) pozwala na komunikacje z innym systemem. Menadżer API pozwala na tworzenie własnych programów, które można włączyć do systemu. Dzięki temu system PVSS II jest bardzo elastyczny i otwarty w dostosowywaniu do potrzeb różnych maszyn, urządzeń, linii produkcyjnych czy eksperymentów fizyki wysokich energii [22]. 23 6 ELMB i jej funkcjonalności ELMB (ang. Embedded Local Monitor Board) to układ zaprojektowany dla eksperymentu ATLAS do monitorowania i kontroli parametrów (rys. 6.1, 6.2). ELMB zostało wyposażone w mikroprocesor ATmega128 posiadający programowalną 8 kilobajtową pamięć EEPROM, w której zapisane są parametry pracy oraz 128 kilobajtowa pamięć operacyjną. Rysunek 6.1 ELMB [24] a) widok z góry, b) widok z dołu Rysunek 6.2 Diagram blokowy ELMB [24]. Ustawienia zapisane w pamięci EEPROM mogą być zmieniane na dwa sposoby: wykorzystując funkcję Bootloader (ELMBbl) – przeprogramowując ELMB - poprzez CANbus4 używając protokołu CANopen5 lub aplikacje CANopen i funkcję ELMBio. Aby dokonać zmian ustawień w pamięci układu należy pierwsze wprowadzić ELMB w odpowiedni stan pracy (ten stan to Pre-Operational).. Wszystkie zmiany EEPROM-u 4 5 CANbus – sieć wykorzystująca standard asynchronicznej komunikacji szeregowej, stworzony przez firmę Bosch z branży elektroniki motoryzacyjnej w 1983r. więcej informacji w rozdziale 5.1 CANopen - protokół rozwinięty na bazie protokołu CAN, specyfikujący wyższe warstwy modelu ISA/OSI i zapewniający elastyczność konfiguracji 24 dokonywane w ustawieniach parametrów pracy układu muszą być zapisane poprzez wysłanie rozkazu zapisującego. Jeżeli po zmianie parametrów nie zostaną one zapisane to po restarcie układu wróci on do starych parametrów pracy. Każdy układ ELMB jest wyposażony w przetwornik ADC (ang. Analog to Digital Converter) połączony z multiplekserem umożliwiających czytanie napięcia na 64 kanałach analogowych. W zależności od ustawień EEPROMU możliwe jest przeczytanie konkretnego kanału lub też wszystkich po wysłaniu do układu sygnału „SYNC” albo otrzymania sygnału od układu w momencie zmiany napięcia na dowolnym kanale analogowym. Dodatkowo układ ELMB został wyposażony w trzy ośmiobitowe porty cyfrowe A, F i C. Port F zdefiniowany jest jako port wejściowy i transmituje informacje do mikrokontrolera czytając wartości na poszczególnych bitach. Port C jest portem wyjściowym. Na porcie A każdy bit może być ustawiony na wejściowy lub wyjściowy poprzez ustawienie pamięci EEPROM. Sposób odczytania portów wejściowych można ustawić w EEPROM-ie podobnie jak w przypadku kanałów analogowych. Przed uruchomieniem ELMB trzeba dokonać ustawień adresu układu (Node-ID) oraz prędkości transmisji danych na CANbus-ie (CAN baudrate) (rys. 6.3). Prędkości, jakie można uzyskać na CANbus-ie to: 50, 125, 250 lub 500 kilobitów/sekundę i zależą od długości kabla, do którego podłączony jest układ. Do ustawienia transmisji służą dwa pierwsze przełączniki. Należy wybrać odpowiednie ustawienie przełączników tak, aby ustawić pożądaną wartość. Ponieważ do CANbus-u może być podpięte ponad 100 dowolnych urządzeń jednocześnie każde z nich musi posiadać swój własny, niepowtarzalny adres, poprzez który urządzenie jest rozpoznawane. Do ustawiania adresu układu ELMB służy 6 ostatnich przełączników [23]. Rysunek 6.3 Lokalizacja przełączników ustawiających adres ELMB i transmisji na CANbus-ie [23]. 25 6.1 CAN-bus Do transmisji danych między układem ELMB a systemem została zastosowana magistrala przemysłowa CAN (ang. Controller Area Network). Jest to standard asynchronicznej komunikacji szeregowej, stworzony przez firmę Bosch z branży elektroniki motoryzacyjnej w 1983 r. przeznaczony do komunikacji między czujnikami i elementami wykonawczymi elektronicznych stacji sterujących w samochodach. Zastosowanie jej to kolejny przykład standaryzacji przemysłowej eksperymentu (wykorzystania technologii przemysłowej) [25]. Wysokie wymagania w systemach komunikacji i fakt wykorzystania CAN-bus’u w seryjnych pojazdach (duża dostępność komponentów, masowa produkcja, niskie ceny podzespołów) spowodowały rozszerzenie zastosowania poza obszarem samochodu, jako otwartego systemu komunikacyjnego automatyki. Podstawową właściwością magistrali CAN jest to, że liczba uczestników jest teoretycznie nieograniczona. Wysłane informacje mogą zostać odebrana przez wszystkich urządzenia podłączone do sieci CAN i każde z nich samo rozstrzyga czy ją przyjmie. Kryterium wyboru jest zawarte w identyfikatorze ramki (Arbitration ID), który przekazywany jest w komunikacie. Identyfikator ma 11 bitów w standardowej ramce (Standard Frame). Możliwa jest również opcja z identyfikatorem 29 bitowym (Extended Frame) (rys. 6.4) [25]. Rysunek 6.4 Format standardowy i rozszerzony ramki CAN [12]. Ponieważ magistrala CAN nie stosuje systemu adresowania poszczególnych węzłów, nie ma potrzeby informowania systemu o zmianie konfiguracji. Takie rozwiązanie ma pewne zalety: dodanie węzła do sieci CAN nie wymaga zmian w oprogramowaniu, sprzęcie, a także w warstwie aplikacyjnej, 26 każdy węzeł może odebrać i jednocześnie wykorzystać informacje z tego samej ramki, sieć CAN gwarantuje, że każda ramka jest jednocześnie akceptowany przez wszystkie węzły lub zostaje odrzucony; w ten sposób zapewniona jest zgodność danych w całym systemie [26]. W określonym rozwiązaniu sieci CAN szybkość transmisji jest stała. Transmisji informacji jest możliwy z szybkością w granicach od 5 kbit/s do 1 Mbit/s. Magistrala CAN stosuje do przesyłania danych przez przewody dwa różne poziomy logiczne, ale nie definiuje stanów fizycznych reprezentujących te poziomy. Określa natomiast ich funkcje logiczne jako poziom dominujący i poziom ustępujący. Służy to uniknięciu konfliktu przy nadawaniu. Po przygotowaniu komunikatu do nadawania, urządzenie obserwuje stan magistrali i powstrzymuje transmisję aż do chwili stwierdzenia, że jest ona wolna. Pierwszym elementem komunikatu wysyłanego na magistrale CAN jest identyfikator. Jeżeli w tym samym czasie rozpoczną nadawanie dwa urządzenia, to identyfikatory nałożą się na siebie. W razie niezgodności nakładających się bitów (0 i 1) na magistrali ustali się wartość 0. Dzięki temu urządzenie, które nadało 1 (a więc o niższym priorytecie) może wykryć kolizję i przerwać nadawanie. Urządzenie o wyższym priorytecie może nadać resztę ramki bez przeszkód. Takie rozwiązanie powoduje, że ani informacja, ani czas nie są tracone. Gdy dwie różne wiadomości są inicjowane w tym samym czasie, to zawsze ramka danych o wyższym priorytecie zostaje wysłana na szynę [25, 26]. 27 7 Schematyczny opis systemu zasilania LV System sterowania niskim napięciem – LV (ang. Low Voltage) – został stworzony, aby zapewnić zasilanie elektroniki FE napięciami -3V, +3V i +2,5V. Jest on połączony z DCS, tak jak inne podsystemy detektora TRT za pomocą stacji kontroli „S” (SCS) znajdujące się pod ziemią (rys. 5.12) [27]. Cały system LV zasilany jest za pomocą zasilaczy W.Ie.Ne.R Maraton przystosowanych do pracy w środowisku promieniowania i pola magnetycznego [28]. Ze względu na dużą emisję ciepła oraz brak miejsca wewnątrz detektora zasilacze zostały umieszczone poza detektorem, w odległości od 70 do 100 metrów od urządzeń, które zasilają. [27, 8]. Każdy zasilacz wytwarza napięcie 8 V i może dostarczyć 50 A posiadając 12 kanałów o mocy 300 W. Zasilacze W.Ie.Ne.R są zdalnie sterowane poprzez magistralę przemysłowej CAN oraz kontrolowane za pomocą komputera (rys. 7.1) [27]. Rysunek 7.1 Schemat zasilania elektroniki FE niskim napięciem detektora TRT [29]. Zasilacze połączone są z dystrybutorami, które rozdzielają prąd do poszczególnych obciążeń – poprzez Patch Panel-e (PP) uporządkowane w specjalnych kasetach (rys. 7.2). Do zasilenia całego detektora TRT potrzebne są 64 kasety z Patch Panel-ami, każda z nich wymaga doprowadzenia 4 kanałów zasilających, co powoduje konieczność uzyskania 256 linii zasilających. Aby uzyskać taką liczbę kanałów trzeba użyć aż 22 zasilaczy W.Ie.Ne.R Maraton. Patch Panel-e połączone są za pomocą magistrali przemysłowej CAN z komputerami, co umożliwia sterowanie regulatorami napięcia stanowiącymi elementy wykonawcze dystrybutora oraz odczytywanie innych 28 parametrów pracy układu zasilania. Komputery te połączone są za pomocą sieci z SCS pozwalając na stałą komunikacje systemu DCS z najmniejszymi częściami TRT [27]. Rysunek 7.2 Architektura systemu zasilania niskim napięciem (Low Voltage) dla TRT [27]. Każda płyta typu. Patch Panel posiada jeden kontroler ELMB (opisany w rozdziale 6) podłączony do magistrali CAN. Kontroler ELMB umieszczony na Patch Panel-u pełni dwie funkcje: odczytuje wartości napięcia i natężania prądu oraz temperatury płyty za pomocą kanałów analogowych - zamieniając wartości analogowe na cyfrowe, umożliwia komunikacje dwustronną z DTMROC-iem pozwalając na kontrolowanie pracy regulatorów napięcia [27]. Na karcie znajduje się również 12 chipów DTMROC6 połączonych z ośmiobitowym portem cyfrowym A kontrolera. Uzyskane w ten sposób połączenie umożliwia komunikację dwustronną, wysyłanie danych do DTMROC-a i jego odczytywanie. Chipy umieszczone na Patch Panel-u posiadają własne rejestry umożliwiające rozkodowywanie poleceń wysyłanych z ELMB. Poprzez wysłanie odpowiednich instrukcji można ustawiać napięcie wyjściowe na 4 DAC-ach (ang. Digital to Analog Converter), którymi można sterować napięcie wyjściowe na regulatorach napięcia. DTMROC posiada jeszcze 2 wyjściowe porty cyfrowe, za pomocą których można włączać lub wyłączać regulatory napięcia [30]. Aby zapewnić pełną kontrole nad regulatorami napięcia i stworzono automatyczny system wyłączający 6 DTMROC – chip opisany w rozdziale 8 29 OCM (ang. Over Current Monitor), uruchamiający się w przypadku zbyt dużego obciążenia regulatora. Rysunek 7.3 Płyta Patch Panel-u [27]. W kontrolerze ELMB oprócz portu A został wykorzystany również port C, który jest cyfrowym portem wyjściowym. Ustawienie na pierwszych 4 bitach tego portu adresu DTMROC-a ustawia na wyjściu multipleksera informacje czy OCM dla podłączonego do tego DTMROC-a regulatora włączył się wstrzymując pracę regulatora. Informacje można odczytać korzystając z portu F kontrolera ELMB, który jest portem wejściowym. Aby wyłączyć OCM należy użyć 6 lub 8 bitu portu C w zależności od tego czy mamy do czynienia z OCM dotyczącym części cyfrowej czy analogowej. Wykorzystując porty cyfrowe ELMB mamy pełną kontrole nad regulatorami napięcia.. Analogową częścią ELMB (64 kanały) odczytywane są napięcia i natężenia prądu na wyjściach z regulatorów [24] stwarzając tym samym w pełni monitorowany system zasilania. 30 8 Protokół komunikacji z DTMROC DTMROC (ang. Drift Time Measurment ReadOut Chip) jest to chip zaprojektowanym w 0.25 μm technologii IBM CMOS odpornej na promieniowanie jako część elektroniki Front End. Został zaprojektowany do odbierania 16 różnych sygnałów analogowych z 2 chipów ASDBLR (ang. Amplifier/Shaper/Discriminator with Baseline Restoration) i przetwarzania ich na wysokie lub niskie poziomy sygnałów cyfrowych. Zapis danych do chipu odbywa się za pomocą linii wejściowej rozkazów (Command IN) oraz linii zegara (BC). Aby zapisu jeden bit danych należy ustawić odpowiedni poziom na linii Command IN oraz wysoki poziom na linii BC a następnie nie zmieniając poziomu na linii wejściowej rozkazów zmienić na linii zegara poziom na niski. Zapisanie całego rozkazu odbywa się poprzez ustawianie odpowiednich poziomów na linii Command IN i zmianach poziomów na linii BC. Dla szybkiego wychwycenia błędu w rozkazie został on podzielony na części (Field), które są badane i rozkodowywane osobno. Pierwsza część (Field 1) zawiera tylko 3 bity danych. W przypadku nie rozpoznania pierwszej części rozkazu dekoder nie czeka na kolejne człony, tylko w danych przychodzących szuka bitów odpowiadających części pierwszej rozkazu. Gdy pierwsza część rozkazu jest zgodna ze wzorcem umieszczonym w rejestrze dekoder odczytuje drugą część (Field 2) składającą się z 4 bitów. Po sprawdzeniu, jeżeli zawiera błędy odrzuca dotychczasowe dane rozkazu i odczytuje następnie 3 bity sprawdzając zgodność z częścią pierwszą (Field 1). W przypadku zgodności danych z drugiej części (Field 2) odczytuje 8 kolejnych bitów – część trzecią (Field 3). Sprawdza poprawność odczytanych danych, w przypadku braku zgodności odczytuje 3 bity w poszukiwaniu części pierwszej rozkazu. Jeżeli dane odczytane zgadzają się ze wzorcem odczytuje kolejne 6 bity –część czwartą (Field 4) w których ukryty jest adres DTMROC-a. Po sprawdzeniu zgodności adresu odczytuje część piątą (Field 5) zawierającą 6 bitów danych. W przeciwnym wypadku zaczyna poszukiwanie części pierwszej rozkazu (Field1). Po odczytaniu części piątej (Field5) sprawdza jej poprawność i w zależności od wyniku sprawdzenia poprawności przechodzi do części szóstej (Field 6) lub do części pierwszej. Część szósta zawiera od 6 do 144 bitów danych w zależności od rozkazu [30]. 31 9 Opis układu testowego Układ testowy zawiera chip DTMROC zamocowany na płycie uniwersalnej. Ponadto posiada również gniazdo do podłączenia zasilania, wyprowadzone wyjścia DAC-ów umożliwiając pomiar napięcia oraz port do komunikacji z DTMROC-iem. Komputer z kartą sprzęgu PCI-CAN firmy KVASER (rys. 9.1a), połączono z płytą Motherboard (rys. 9.1b) za pomocą magistrali przemysłowej CAN. Do płyty Motherboard wpięty został mikrokontroler. Port cyfrowy A ELMB połączony został z prototypowym układem zawierającym chip DTMROC (rys. 8.2). Rysunek 9.1 a) Karta PCI -CAN Kvaser, b) Płyta Motherboard z ELMB Ponieważ Motherboard jak i prototypowy układ wymagają zasilania zewnętrznego zostały podłączone do zasilacza. Przed uruchomieniem układu dokonano ustawienia adresu ELMB7 tak, aby można było nawiązać komunikacje z jednym określonym mikrokontrolerem podłączonym do magistrali (adres, który został ustawiony do badania komunikacji to 63 = 0x3f) (rys 6.3). Należy również określić prędkość przesyłania danych po magistrali CAN i ustawić ją za pomocą przełączników umieszczonych na mikrokontrolerze (rys. 6.3). Pierwsze próby komunikacji prowadzone były przy prędkości 125 kbit/s na magistrali. Jak okazało się przy wysyłaniu pojedynczych rozkazów do DTMROC-a prędkość ta jest odpowiednia. Jednak w przypadku, kiedy wysłane zostaje kilka rozkazów po sobie lub oprócz rozkazów do chipu DTMROC wysyłane są rozkazy do części analogowej mikrokontrolera ELMB występują problemy z wykonywaniem wszystkich wysłanych poleceń - niektóre są tracone lub zawierają błędy. 7 Ustawianie adresu mikrokontrolera omówione zostało w rozdziale 6. 32 Rysunek 9.2 Schemat układu do komunikacji z chipem DTMROC Jak sprawdzono problemy występujące przy prędkości transmisji 125 kbit/s spowodowane były przez kontroler ELMB. Ponieważ prędkość przekazu danych na magistrali była zbyt duża i nie pozwalała na ich obsłużenie przez kontroler, powodowało to przepełnienie buforów części odczytującej dane z magistrali. W efekcie niektóre rozkazy nie mieściły się w buforze ELMB i były tracone. Jeszcze większe problemy występowały, kiedy oprócz rozkazów do chipu DTMROC wysyłane były polecenia do części analogowej kontrolera. Poza tym po dokładniejszym zbadaniu stwierdzono, iż mikroprocesor umieszczony w ELMB w przypadku pracy z częścią analogową każde polecenie wykonuje dłużej. Brak możliwości poprawienia błędów komunikacji występujących przy prędkości 125 kbit/s spowodował konieczności zmniejszenia prędkości transmisji danych do 50 kbit/s. Po ustawieniu adresu ELMB oraz prędkości na magistrali CAN można włączyć układ i przejść do ustawienia parametrów pracy kontrolera stosując odpowiednią aplikację pomocniczą.. Najważniejszymi parametrami, akie trzeba ustawić do poprawnej pracy ELMB w układzie służącym do komunikacji z chipem DTMROC są: ustawienie typu transmisji danych z ELMB - trzy możliwości: a) dane odsyłane po każdej wiadomości SYNC, b) dane odsyłane po każdym rozkazie odczytania danych, c) dane odsyłane co każdy cykl zegara (1 s) i po rozkazie odczytania danych, (dla usprawnienia komunikacji i nie przeciążania magistrali CAN należy ustawić transmisje danych po wysłaniu rozkazu odczytania danych) 33 dla części analogowej układu jest zakres pracy oraz polaryzacja konwerterów ADC (należy ustawić zakres pracy na 1 V oraz tryb pracy bipolarny) dla części cyfrowej układu: a) za pomocą Filter Mask Outputs należy ustawić cyfrowy port A tak, aby czwarty bit portu był bitem wejściowym danych a pozostałe wyjściowymi (należy wpisać wartość 247) b) za pomocą Digital Interrupt Enable Mask ustawić przerwania na portach cyfrowych (należy wpisać wartości 255) [31] Po wprowadzeniu wyżej wymienionych ustawień i zapisaniu zmian w pamięci EPROM możliwa jest komunikacja dwukierunkowa z chipem DTMROC poprzez mikrokontroler ELMB. Taka konfiguracja układu pozwala na komunikację praktycznie bez żadnych błędów i przeciążenia magistrali CAN. Należy jednak pamiętać, o tym wspomniano już wcześniej, że pamięć EPROM ma określoną ilość możliwość zapisów, to znaczy, że po przekroczeniu pewnej skończonej liczby zapisów nie będzie możliwe wprowadzenie na stałe zmian do pamięci. 34 10 Opis programu 10.1 Funkcjonalności Po złożeniu układu oraz wprowadzeniu ustawień do kontrolera ELMB możliwa jest komunikacja z chipem DTMROC za pomocą przygotowanych do tego celu programów. W krakowskim zespole ATLAS-a została napisana w języku C++ biblioteka dll do systemu PVSS II. Celem stworzenia jej było uzyskanie szybkiego i w miarę możliwości prostego sterowania regulatorami napięcia. Do wymagań stawianych tworzonej bibliotece należą przede wszystkim możliwie jak najszybsze ustawianie regulatorów napięcia, samodzielne działania na jednym z portów karty KVASER oraz umożliwienie uzyskania pełnej kontroli nad układami Patch Panel wykorzystując sterowniki sprzęgu CAN-bus. Najważniejszą funkcją, którą zawiera biblioteka jest funkcja umożliwiająca zapisywanie danych do chipu DTMROC „Write” pozwalająca na zmianę napięcia na wyjściu z DAC-ów a tym samym ustawienie regulatora napięcia. Kod tej funkcji został przedstawiony poniżej, jest to już wersja rozwinięta i wzbogacona o kilka zabezpieczeń przed wystąpieniem błędów lub utratą danych. //******************************************Write***************************************// // Syntax: int KlasaI::Write(int handle, int elmbAddress, int dtmrocAddress, int object, // int Field6, int portC) // // Syntax: int KlasaI::Write(int handle, int elmbAddress, int dtmrocAddress, int object, // int Field6, int portC) // // Function: // // write data to dedicated dtmroc, in 'object' parameter is set, what to write: // // "object" = 1 -> Configuration Register // "object" = 2 -> DAC 0 & DAC 1 // "object" = 3 -> DAC 2 & DAC 3 // // // Input parameters: // // int handle - a handle for KVASER channel; // int elmbAddress - address of elmb (from 0 to 63); // int dtmrocAddress - address of dtmroc (1-6, 9-14); // int object - what to write (see above); // int Field6 - data to be written; // int portC - a value to be written to port C // (port A and C are written with the same command) // // Return value: // // 0 (canOK) - success // <0 - a canlib error code // error message is placed in internal class member and can be retrieved // with: GetErrorText() // int KlasaI::Write(int handle, int elmbAddress, int dtmrocAddress, int object, int Field6, int portC, int elmbTimeOut) 35 { int dataClocks; int commandClocks = 27; unsigned long Field; unsigned long dataField; bool overrun = false; int status; int check; start: switch (object) { case ConfigRegister: Field = (FIELD_12345_WRITE_CFG | (dtmrocAddress << 6) | CONF_REG) << 1; dataClocks = 24; dataField = (Field6 << 4); break; case DAC_01: Field = (FIELD_12345_WRITE_DAC | (dtmrocAddress << 6) | DAC01_REG) << 1; dataClocks = 16; dataField = (Field6 << 12); break; case DAC_23: Field = (FIELD_12345_WRITE_DAC | (dtmrocAddress << 6) | DAC23_REG) << 1; dataClocks = 16; dataField = (Field6 << 12); break; } #ifdef PRINT_DEBUG printf ("w"); #endif do { #ifdef PRINT_DEBUG printf ("b"); #endif if ((status = Send (handle, commandClocks, elmbAddress, Field, portC)) < 0 ) { AddToErrorText (" from Read"); return (status); } if (elmbTimeOut) Sleep (elmbTimeOut); if ((overrun = Get_ELMB_CANBufferOverrun (handle, elmbAddress)) == true) { if ((status = recoverOverrun(handle, elmbAddress, portC)) < 0 ) { AddToErrorText (" from Write"); return (status); } continue; } if ((status = Send (handle, dataClocks, elmbAddress, dataField, portC)) < 0 ) { AddToErrorText (" from Write"); return (status); } if (elmbTimeOut) Sleep (11+elmbTimeOut); if ((overrun = Get_ELMB_CANBufferOverrun (handle, elmbAddress)) == true) { if ((status = recoverOverrun(handle,elmbAddress, portC)) < 0 ) { AddToErrorText (" from Write"); return (status); } continue; } if ((status = BC(handle, 2, elmbAddress, portC)) < 0 ) { AddToErrorText (" from Read"); return (status); } if (dtmrocAddress == 0x3F) return status; 36 status = Read (handle, elmbAddress, dtmrocAddress, object, portC, 11, &check); if (status < 0) { AddToErrorText (" from Write"); return status; } if (check != Field6) { if ((status = recoverOverrun(handle,elmbAddress, portC)) < 0 ) { AddToErrorText (" from Write"); return (status); } BC (handle, 500, elmbAddress, portC); Sleep (1000); goto start; } } while (overrun); return status; } Jak można zauważyć funkcja ta podczas swojego działania wywołuje inne funkcje takie jak: „Send”, „BC”, „Read” itd. Nie wysyła więc samodzielnie rozkazy na magistralę CAN. Jest to funkcja, która otrzymując odpowiednie parametry z zewnątrz (np.: adres ELMB = elmbAddress (od 0 do 63), adres DTMROC-a = dtmrocAddress (od 1 do 6 – część analogowa, od 9 do 14 – część cyfrowa), dane do zapisania = Field6, itd.) i wykorzystując je przesyła do wywołanej funkcji „Send”, która korzystając z poleceń zawartych w bibliotece CanLibrary oraz dane otrzymane od funkcji „Write” wysyła dane do bufora sprzęgu a stamtąd przesyłane są na magistrale CAN. To funkcja „Send” jest odpowiedzialna za wysyłanie jakichkolwiek danych do karty sprzęgu, jej kod przedstawiono poniżej. //******************************************Send***************************************// // // Syntax: KlasaI::Send(int handle, int clocks, int elmbAddress, unsigned long Field, int portC); // // Function: // // send a message to CANBUS - simulate a serial protocol for dtmroc // // Input parameters: // // int handle - a handle for KVASER channel; // int clocks - number of clocks needed for requested command // int elmbAddress - address of elmb (from 0 to 63); // unsigned long Field - 28 bit message to be sent to CanBus // int portC - a value to be written to port C // (port A and C are written with the same command) // // Return value: // // 0 (canOK) - success // <0 - a canlib error code // error message is placed in internal class member and can be retrieved // with: GetErrorText() int KlasaI::Send(int handle, int clocks, int elmbAddress, unsigned long Field, int portC) { int licz = 1; int licznik = 0; unsigned long bitout; int ONE = (0x0200 + portC); 37 int ZERO = (0x0000 + portC); int ONECLK = (0x0300 + portC); int ZEROCLK = (0x0100 + portC); canStatus stat; unsigned long AND= 0x8000000; do { bitout = AND & Field ; Field = Field << 1; licz ++; if (bitout > 0) { if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &ONECLK, 2, 0)) < 0) { SetErrorText ("canWrite in Send", stat); return (int) stat; } if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &ONE, 2, 0)) < 0) { SetErrorText ("canWrite in Send", stat); return (int) stat; } if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &ONECLK, 2, 0)) < 0) { SetErrorText ("canWrite in Send", stat); return (int) stat; } } else { if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &ZEROCLK, 2, 0)) < 0) { SetErrorText ("canWrite in Send", stat); return (int) stat; } if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &ZERO, 2, 0)) < 0) { SetErrorText ("canWrite in Send", stat); return (int) stat; } if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &ZEROCLK, 2, 0)) < 0) { SetErrorText ("canWrite in Send", stat); return (int) stat; } } } while (licz <= clocks); return (int)stat; } Z kodu funkcji „Write” można wywnioskować, iż poza zapisem rozkazów do chipu DTMROC dokonuje ona sprawdzenia czy wysłany rozkaz został odczytany i czy wysłane dane zostały zapisane. Sprawdzenie odbywa się poprzez odczytanie wartości zapisanej w rejestrze chipu poprzez funkcje „Read” a następnie porównanie jej z wartością, która została wysłana do DTMROC-a. Wystąpienie różnicy pomiędzy wartością wysłaną a odczytaną powoduje zwrócenie błędu przez funkcje oraz ponowne wywołanie funkcji „Write” z takimi samymi parametrami. W przypadku zgodności danych zapisanych i odczytanych funkcja zapisująca zwraca status zero równoznaczny z 38 prawidłowym działaniem funkcji i poprawnym zapisem. Status informujący o prawidłowym zadziałaniu funkcji lub błędzie jest zwracany także przez każdą funkcję pozwalając na pełną kontrole działania napisanej biblioteki. Jak już wspomniano do odczytywania danych z rejestrów chipu DTMROC służy funkcja „Read”. Można dzięki niej odczytać między innymi adres chipu zakodowany w głównym rejestrze Command Status Register. Funkcja ta oprócz statusu zwraca wartość odczytaną, co daje możliwość przekazania danych odczytanych do innych funkcji, poniżej przedstawiono jej kod. //******************************************Read***************************************// // // Syntax: int KlasaI::Read(int handle, int elmbAddress, int dtmrocAddress, int objecto, // int portC, int *value) // // Function: // // read data from one dtmroc, in 'object' parameter is set, what do we read: // // "object" = 1 (ConfigRegister) -> Configuration Register // "object" = 2 (DAC_01) -> DAC 0 & DAC 1 // "object" = 3 (DAC_23) -> DAC 2 & DAC 3 // "object" = 4 (StatusRegister) -> Common Status Register // // Input parameters: // // int handle - a handle for KVASER channel; // int elmbAddress - address of elmb (from 0 to 63); // int dtmrocAddress - address of dtmroc (1-6, 9-14); // int objecto - what to write (see above); // int portC - a value to be written to port C // (port A and C are written with the same command) // // Output value: // // int *value - read back data // // Return value: // // 0 (canOK) - success // <0 - a canlib error code // error message is placed in internal class member and can be retrieved // with: GetErrorText() int KlasaI::Read(int handle, int elmbAddress, int dtmrocAddress, int object, int portC, int elmbTimeOut, int *value) { int CLKZERO = (0x0000 + portC); int CLKONE = (0x0100 + portC); canStatus stat; int status; int Field; int Field6 = 0; int dataClocks; int commandClocks = 27; int bit; int BufferRead; unsigned long Time; unsigned int Length; unsigned int Flag; bool overrun; int repeat; char text[30]; repeat = 5; switch (object) { case ConfigRegister: Field = FIELD_12345_READ | (dtmrocAddress << 6) | CONF_REG; 39 dataClocks = 24; break; case DAC_01: Field = FIELD_12345_READ | (dtmrocAddress << 6) | DAC01_REG; dataClocks = 16; break; case DAC_23: Field = FIELD_12345_READ | (dtmrocAddress << 6) | DAC23_REG; dataClocks = 16; break; case StatusRegister: Field = FIELD_12345_READ | (dtmrocAddress << 6) | COMM_STAT_REG; dataClocks = 32; break; } Field = (Field << 1); #ifdef PRINT_DEBUG printf ("r"); #endif do { if (!(repeat--)) { if ((status = recoverOverrunHard(handle, elmbAddress, portC)) < 0 ) { AddToErrorText (" from Read"); return (status); } sprintf (text, "in dtmroc #%d", dtmrocAddress); SetInternalErrorText (text, kl_DTMROC_INH_Read_Failed); return kl_DTMROC_INH_Read_Failed; } #ifdef PRINT_DEBUG printf ("p "); #endif if ((status = Send (handle, commandClocks, elmbAddress, Field, portC)) < 0 ) { AddToErrorText (" from Read"); return (status); } if ((overrun = Get_ELMB_CANBufferOverrun (handle, elmbAddress)) == true) { if ((status = recoverOverrun(handle, elmbAddress, portC)) < 0 ) { AddToErrorText (" from Read"); return (status); } continue; } if ((status = BC(handle, 4, elmbAddress, portC)) < 0 ) { AddToErrorText (" from Read"); return (status); } if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &CLKONE, 2, 0)) < 0) { SetErrorText ("canWrite CLKZERO in Read", stat); return (int) stat; } for (bit=1; bit <= dataClocks; bit++) { if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &CLKZERO, 2, 0)) < 0) { SetErrorText ("canWrite CLKZERO in Read", stat); return (int) stat; } if ((stat = privCanWrite (handle, cobID_TPDO1|elmbAddress, 0, 2, canMSG_RTR)) < 0) { SetErrorText ("canWrite COMMAND in Read", stat); return (int) stat; } if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &CLKONE, 2, 0)) < 0) { SetErrorText ("canWrite CLKONE in Read", stat); 40 return (int) stat; } stat = canReadSyncSpecific(handle,cobID_TPDO1|elmbAddress,3000); if (stat == canERR_TIMEOUT) { if (overrun = Get_ELMB_CANBufferOverrun (handle, elmbAddress)) { break; } else { SetErrorText ("canReadSyncSpecific in Read", stat); return (int) stat; } } else if (stat < 0) { SetErrorText ("canReadSyncSpecific in Read", stat); return (int) stat; } if (overrun = Get_ELMB_CANBufferOverrun (handle, elmbAddress)) { break; } stat = canReadSpecificSkip(handle,cobID_TPDO1|elmbAddress, &BufferRead ,&Length, &Flag, &Time); if (stat < 0) { SetErrorText ("canReadSpecificSkip in Read", stat); if (stat == -2) { if (overrun = Get_ELMB_CANBufferOverrun (handle, elmbAddress)) { break; } } else return (int) stat; } if (overrun = Get_ELMB_CANBufferOverrun (handle, elmbAddress)) { break; } Field6 = (Field6 <<1) | ((BufferRead & 0x0800) >> 11); } if (overrun) { Get_ELMB_CANBufferOverrun (handle, elmbAddress) ; if ((status = recoverOverrun(handle, elmbAddress, portC)) < 0) { AddToErrorText (" from Read"); return status; } continue; } if ((status = BC(handle, 2, elmbAddress, portC)) < 0) { AddToErrorText (" from Read"); return status; } } while (overrun); *value = Field6; return status; } Kolejną ważną funkcja jest „Set_INHIBIT” umożliwiająca włączenie lub wyłączenie regulatora napięcia. Jej powstanie służy głównie zapobiegnięciu sytuacjom niebezpiecznym dla detektora. W przypadku stwierdzenia przegrzewania się lub zbyt 41 dużego poboru mocy przez regulator można go w każdej chwili wyłączyć bez potrzeby wyłączania całego detektora lub pozostawienia włączonej części stwarzającej zagrożenie. Ta funkcja w znacznym stopniu pozwala na zwiększenie kontroli nad pracą detektora ułatwiając i rozwiązując problemy związane z serwisem elektroniki. Kod funkcji „Set_INHIBIT” przedstawiono poniżej. //***************************************Set_INHIBIT*********************************// // // Syntax: int KlasaI::Set_INHIBIT(int handle, int elmbAddress, int dtmrocAddress, // int portC, int inhibitNb, int inhibitValue) // // Function: // // set requested inhibit (0, 1 or both) in one dtmroc: // inhibitNb == 1 -> inhibit0 is set/reset // inhibitNb == 2 -> inhibit 1 is set/reset // inhibitNb == 3 -> both inhibits are set/reset // // Input parameters: // // int handle - a handle for KVASER channel; // int elmbAddress - address of elmb (from 0 to 63); // int dtmrocAddress - address of dtmroc (1-6, 9-14); // int portC - a value to be written to port C // (port A and C are written with the same command) // int inhibitNb - which inhibit set/reset // int inhibitValue - 0 or 1 // // Return value: // // 0 (canOK) - success // <0 - a canlib error code // error message is placed in internal class member and can be retrieved // with: GetErrorText() int KlasaI::Set_INHIBIT(int handle, int elmbAddress, int address, int portC, int inhibitNb, int inhibitValue, int elmbTimeOut) { int Field6; int inh1, inh0; int status; if ((inhibitNb != 1) && (inhibitNb != 2) && (inhibitNb != 3)) { SetInternalErrorText ("Set_INHIBIT", kl_DTMROC_INH_BadInhNumber); return kl_DTMROC_INH_BadInhNumber; } if ((inhibitValue != 0) && (inhibitValue != 1)) { SetInternalErrorText ("Set_INHIBIT", kl_DTMROC_INH_BadInhValue); return kl_DTMROC_INH_BadInhValue; } if ((status = Read(handle, elmbAddress, address, 1, portC, elmbTimeOut, &Field6)) < 0) { AddToErrorText (" from Set_INHIBIT"); return (status); } inh0 = Field6 & 0x20; inh0 = inh0 >> 5; inh1 = Field6 & 0x10; inh1 = inh1 >> 4; switch (inhibitNb) { case 1: if (inhibitValue == 0) Field6 = Field6 & 0xFFDF; else Field6 = Field6 | 0x20; break; 42 case 2: if (inhibitValue == 0) Field6 = Field6 & 0xFFEF; else Field6 = Field6 | 0x10; break; case 3: if (inhibitValue == 0) Field6 = Field6 & 0xFFCF; else Field6 = Field6 | 0x30; break; } if ((status = Write (handle, elmbAddress, address, 1, Field6, portC, elmbTimeOut)) < 0 ) { AddToErrorText (" from Set_INHIBIT"); return (status); } return status; } Jak już wspomniano funkcja „Set_INHIBIT” pozwala włączyć i wyłączyć regulatory podłączone do chipu DTMROC. Odbywa się to poprzez ustawienie stanu wysokiego lub niskiego na czwartym lub piątym bicie Configuration Register, które są cyfrowymi bitami wyjściowymi z chipu. Ponieważ każdy DTMORC posiada cztery konwertery DAC a tylko dwa bity wyjściowe z Configuration Register, więc regulatory napięcia muszą być podłączone parami do wyjść cyfrowych chipu. Analizując dokładnie budowę systemu zasilania niskim napięciem można zauważyć, że niektóre regulatory łączone są ze sobą równolegle dla dostarczenia większego prądu obciążenia. W tym przypadku konieczne jest wyłączenie obu regulatorów w przypadku dużego obciążenia lub przegrzewania się jednego z nich. Jeżeli dokona się analizy działania funkcji „Set_INHIBIT” okaże się, że wywołuje ona funkcję czytającą „Read” i odczytuje nią Configuration Register a następnie sprawdza, jakie wartości mają bity czwarty i piąty. Następnie wstawiane są nowe wartości tych bitów i zapisany cały rejestr chipu wykorzystując funkcję „Write”. Zatem włączenie i wyłączenie regulatorów jest możliwe również przy wykorzystaniu tylko funkcji „Read” i „Write” oraz wykonaniu drobnych obliczeń pozwalających odczytać wartości czwartego i piątego bitu rejestru. Kolejną funkcja istotną w działaniu biblioteki jest funkcja „Read_OCM” umożliwiająca odczytanie wystąpienia sygnału OCM (ang. Over Current Monitor). Sygnał ten występuje w przypadku przekroczenia zakresu regulacji napięcia oraz zbyt dużego poboru prądu. W przypadku pojawienia się sygnału OCM następuje automatyczne wyłączenie regulatora w celu zabezpieczenia przed uszkodzeniem go. Pojawienie się sygnału można odczytać za pomocą portu F i C mikrokontrolera ELMB. Na pierwszych czterech bitach portu C należy ustawić adres chipu DTMROC a na 43 jednym z pierwszych trzech (w zależności czy DTMROC reguluje napięcie na regulatorze dla części cyfrowej, czy analogowej zasilanej napięciem dodatnim czy ujemnym) portu F odczytać. Kod funkcji odpowiedzialnej za odczytanie OCM przedstawiono poniżej. //***************************************Read_OCM**********************************// // // Syntax: int KlasaI::Read_OCM(int handle, int elmbAddress, int section, // int portC, int *digOCM, int *negativeOCM, int *positiveOCM); // // Function: // /// read OCM values for one section, e.g. 1 from 12: // analog positive, analog negative and digital // // Input parameters: // // int handle - a handle for KVASER channel; / int elmbAddress - address of elmb (from 0 to 63); // int section - 0 - 11 ; // int portC - a value to be written to port C // (port A and C are written with the same command) // // Output value: // // int *digOCM - OCM for digital part: bit set to 1 - Overcurrent occured // int *negativeOCM - OCM for analog negative part: bit set to 1 - Overcurrent occured // int *positiveOCM - OCM for analog positive part: bit set to 1 - Overcurrent occured // // Return value: // // 0 (canOK) - success // <0 - a canlib error code // error message is placed in internal class member and can be retrieved // with: GetErrorText() int KlasaI::Read_OCM(int handle, int elmbAddress, int section, int portC, int *digOCM, int *negativeOCM, int *positiveOCM) { int licznik = 0; int BufferRead; int Field6 = 0x0000; int DIG_OCM; int NEGATIVE_OCM; int POSITIVE_OCM; unsigned long Time; unsigned int Length = 0x0000; unsigned int Flag = 0x0000; int L; canStatus stat; int address; if ((section < 0) || (section > 11)) { SetInternalErrorText ("Read_OCM", kl_DTMROC_OCM_BadSection); return kl_DTMROC_OCM_BadSection; } address = (section + portC); if ((stat = privCanWrite (handle, cobID_RPDO1|elmbAddress, &address, 2, 0)) < 0) { SetErrorText ("canWrite Address in Read_OCM", stat); return (int) stat; } if ((stat = privCanWrite (handle, cobID_TPDO1|elmbAddress, 0, 2, canMSG_RTR)) < 0) { SetErrorText ("canWrite Read Request in Read_OCM", stat); return (int) stat; } stat = canReadSyncSpecific(handle,cobID_TPDO1|elmbAddress,2000); if (stat < 0) { 44 SetErrorText ("canReadSyncSpecific in Read_OCM", stat); return 0; } stat = canReadSpecificSkip(handle,cobID_TPDO1|elmbAddress, &BufferRead ,&Length, &Flag, &Time); if (stat < 0) { SetErrorText ("canReadSpecificSkip in Read_OCM", stat); return 0; } L = (BufferRead >> 8); DIG_OCM = L & 0x1; NEGATIVE_OCM = L & 0x2; POSITIVE_OCM = L & 0x4; #ifdef _CONSOLE printf ("\n\n\t\tDIG_OCM = %d",DIG_OCM); printf ("\n\n\t\tAnalog NEGATIVE_OCM = %d",NEGATIVE_OCM); printf ("\n\n\t\tAnalog POSITIVE_OCM = %d\n",POSITIVE_OCM); #endif *digOCM = DIG_OCM; *negativeOCM = NEGATIVE_OCM; *positiveOCM = POSITIVE_OCM; return (int)stat; } Bibliotekę dll do systemu PVSS II stworzono w celu szybkiego ustawiania regulatorów napięcia. Ponieważ musi działać samodzielnie na porcie karty sprzęgu zawiera oprócz wyżej wymienionych funkcje inicjalizujące magistralę CAN oraz ustawiające mikrokontrolery ELMB oraz chipy DTMROC w odpowiedni stan. Obecnie biblioteka zawiera około 43 funkcje, których spis przedstawiono poniżej. int Init_CANBus(int channel, int *handle); int Init_ELMB (int handle, int elmbAddress); int Init_DTMROC(int handle, int elmbAddress, int portC, int elmbTimeout, char *dtmrocRetAddr); int InitCanLibrary(); int HardSoftResetDtmrocs(int handle, int elmbAddress, int portC, int elmbTimeOut); int GetDtmrocState (int handle, int elmbAddress, int dtmrocAddress, int portC, int elmbTimeOut, int *state); int Set_ELMB_State (int handle, int elmbAddress, int nmtCS); int Read_ELMB_State (int handle, int elmbAddress, int *state); bool Get_ELMB_CANBufferOverrun (int handle, int elmbAddress); unsigned short KlasaI::Get_ELMB_EmergencyError (int handle, int elmbAddress); int Software_Reset_DTMROC(int handle, int elmbAddress, int portC, int elmbTimeOut); int Send(int handle, int clocks, int elmbAddress, unsigned long Field, int portC); int BC(int handle, int clocks, int elmbAddress, int portC); int Init(int handle, int channel, int elmbAddress, int portC, int elmbTimeOut); int CloseCan(int handle); int Write(int handle, int elmbAddress, int dtmrocAddress, int object, int Field6, int portC, int elmbTimeOut); int WriteDac(int handle, int elmbAddress, int dtmrocAddress, int dacNb, int Field6, int portC, int elmbTimeOut); int WriteAllDacsWheelA(int handle, int elmbAddress, int portC, int elmbTimeOut, int *values); int WriteAllDacsWheelB(int handle, int elmbAddress, int portC, int elmbTimeOut, int *values); int WriteDacBrdc (int handle, int elmbAddress, int dacs, int data, int portC, int elmbTimeOut); int WriteDacBrdcCheck (int handle, int elmbAddress, int dacs, int Field6, int portC, int elmbTimeOut); int DacBrdcCheck (int handle, int elmbAddress, int dacs, int Field6, int portC, int elmbTimeOut); int Hardware_Reset_DTMROC(int handle, int elmbAddress, int portC); int Read(int handle, int elmbAddress, int dtmrocAddress, int objecto, int portC, int elmbTimeOut, int *value); int ReadAllDacsWheelA(int handle, int elmbAddress, int portC, int elmbTimeOut, int *values); int ReadAllDacsWheelB(int handle, int elmbAddress, int portC, int elmbTimeOut, int *values); void can_Get_Error_Text(char* id, canStatus stat); char *GetErrorText(void); int Data_BC(int handle, int clocks, int elmbAddress, int portC); int Get_INHIBIT(int handle, int elmbAddress, int address, int portC, int elmbTimeOut, int *inhibits); int GetAllInhibitsWheelA(int handle, int elmbAddress, int portC, int elmbTimeOut, int *values); int GetAllInhibitsWheelB(int handle, int elmbAddress, int portC, int elmbTimeOut, int *values); int Set_INHIBIT(int handle, int elmbAddress, int address, int portC, int inhibitNb, int inhibitValue, int elmbTimeOut); 45 int SetInhBrdc (int handle, int elmbAddress, int portC, int inhibitValue, int elmbTimeOut); int SetInhBrdcCheck (int handle, int elmbAddress, int portC, int inhibitValue, int elmbTimeOut); int InhBrdcCheck (int handle, int elmbAddress, int portC, int inhibitValue, int elmbTimeOut); int Read_OCM(int handle, int elmbAddress, int address, int portC, int *digOCM, int *negativeOCM, int *PositiveOCM); int Read_OCM_All (int handle, int elmbAddress, int portC, int *digOCM, int *negativeOCM, int *positiveOCM); int Clear(int handle, int elmbAddress, int i); int Write_C(int handle, int elmbAddress, int Port_C); int D_Level(int handle, int elmbAddress, int portC); int Write_CMD(int handle, unsigned long Field12345, unsigned long Data, int elmbAddress, int portC); int Read_CMD(int handle, unsigned long Field12345, int portC, int elmbAddress, int *value); 46 10.2 Pomiary prędkości Od samego początku powstania pomysłu sterowania regulatorami napięcia za pomocą napięcia na wyjściach konwerterów DAC z chipu DTMROC zastanawiano się nad sposobem uzyskaniem jak najkrótszego czasu potrzebnego do ustawienia wszystkich regulatorów. Pierwsze plany zakładały zmianę oprogramowania mikrokontrolera ELMB, co pozwoliłoby na uzyskanie częstości pracy 45 kHz i ustawienie jednego układu Patch Panel w ciągu około 0,04 s. Okazało się jednak, że ten plan jest bardzo trudny do zrealizowania, ponieważ jakakolwiek zmiana w oprogramowaniu ELMB spowoduje utratę gwarancji. Producent układu zastrzegł sobie prawo zerwania gwarancji w przypadku dokonywania zmian w oprogramowaniu i budowie mikrokontrolera. Wycofanie się producenta spowodowałoby, iż wszystkie naprawy serwisowe musiałaby przejąć na siebie grupa dokonująca zmiany w układzie. Ze względu na przewidywany okres pracy detektora ATLAS – od 10 do 15 lat - oraz ilość mikrokontrolerów rozwiązanie to było trudne do przyjęcia. Dokonanie przybliżonych pomiarów prędkości pozwoliło na zorientowanie się, w którym miejscu należy szukać optymalnego rozwiązania, w którym miejscu uzyskane prędkości są do przyjęcia, a w którym zbyt wolne. Wyniki pomiarów pokazały, że ustawianie regulatorów z poziomu systemu PVSS II poprzez OPC Server odbywa się z częstością poniżej 20 Hz, co sprawia, że na ustawienie jednego Patch Panel-a potrzeba ponad 90 s. Jest to czas nie do przyjęcia, ponieważ ustawienie całego detektora TRT, czyli 192 Patch Panel-i trwałoby około 1080 s = 18 minut. Inną możliwością było stworzenie aplikacji w OPC Serwerze, ale różnica w częstości pracy jest niewielka i ustawienie całego detektora trwałoby 432 s (około 7minut i 12 sekund, ustawienie jednego Patch Panel-u trwałoby 36 s). Najlepszym rozwiązaniem możliwym do zaakceptowania okazało się stworzenie biblioteki dll do systemu PVSS II wykorzystującej sterowniki karty KVASER. Maksymalna częstość wysyłania danych przez taką bibliotekę to około 2 kHz, co pozwala ustawić regulatory napięcia na Patch Panel-u w ciągu 0,9 s a cały detektor w 10,8 sekundy (rys. 10.1) [32]. 47 Rysunek 10.1 Schemat systemu sterowania LV z uwzględnionymi pomiarami częstości nadawania [32]. Po napisaniu najbardziej potrzebnych funkcji pozwalających na sprawdzenie komunikacji z chipem DTMROC oraz działania układu, stworzony został DOS-owy, który posłużył do przetestowania pierwszych prototypów Patch Panel-i i znajdującego się tam jednego z kilku układów testowych. Okazało się, że Patch Panel-e zawierają błędy uniemożliwiające działanie układu. Jednak po poprawieniu tych błędów udało się nawiązać komunikację i przeprowadzić sprawdzenie sygnałów w różnych miejscach układu. Stwierdzono również, iż w układach Patch Panel opadające zbocze zegara zapisuje dane do chipu DTMROC, ponieważ jest odwrócona polaryzacja linii, a nie jak wcześniej uważano, że jest to narastające zbocze (rys. 10.2, 10.3) 48 Rysunek 10.2 Ekran oscyloskopu z pomiarem trzech linii podczas wysyłania rozkazu odczytania rejestru do DTMROC-a z ustawieniem zapisywania danych przez narastające zbocze zegara Rysunek 10.3 Ekran oscyloskopu z pomiarem trzech linii podczas wysyłania rozkazu odczytania rejestru do DTMROC-a z ustawieniem zapisywania danych przez opadające zbocze zegara Sprawdzono również, że sygnał po przejściu przez optocoupler nie ulega opóźnieniu na linii ELMB DTMROC zarówno na kanale, na którym nadawany jest zegar jak i kanale danych (rys. 10.4, 10.5) 49 Rysunek 10.4 Porównanie przebiegu sygnału w trzech punktach: na wyjściu optocouplera, na wyjściu z ELMB oraz przy wejściu linii rozkazów do DTMROC-a Rysunek 10.5 Porównanie przebiegu sygnału w trzech punktach: na wyjściu optocouplera, na wyjściu z ELMB oraz przy wejściu linii zegara do DTMROC-a Pomiary po stworzeniu biblioteki dll do systemu PVSS II różnią się od wcześniej uzyskanych. Przesłanie jednego bitu z ELMB do DTMROC-a trwa 0,65 ms, a zapisanie go 1,3 ms (rys. 10.6). Uzyskano w ten sposób częstość wysyłania danych równa 1,5 kHz pozwalającą na ustawienie Patch Panel-u zawierającego 36 konwertery ADC w 50 ciągu około 1 sekund. Aby dokonać ustawienia całego detektora bez sprawdzania poprawności zapisanych danych potrzebne jest około 12 sekund. Czas ten wydłuża się w przypadku sprawdzania wartości, jakie zostały zapisane do około 27 sekund. Uzyskane przez bibliotekę czasy są zadowalające i umożliwiają szybkie ustawianie regulatorów. DTMROC DAC0 ELMB Clock Command In Command Out LVDS CANBUS Digital I/O Hard Reset DAC1 DAC2 DAC3 V R V R V R V R a) Operacja na CANBUS steruje wyjściem portu ELMB T=1.3 ms b) Rysunek 10.6 Pomiar czasu zapisu bitu, a) schemat podłączenie oscyloskopu, b) pomiar prędkości zapisu jednego bitu do DTMROC-a [33] 51 11 Podsumowanie Celem pracy było napisanie w języku C++ biblioteki dll do systemu PVSS II umożliwiającej sterowani regulatorami napięcia wykorzystując sterowniki karty sprzęgu PCI-CAN. Wykorzystując bibliotekę CANlib napisano funkcję pozwalające w pełni kontrolować pracę regulatorów poprzez magistralę przemysłową CAN. Wszystkie napięcia na regulatorach dokonywane są za pomocą napięć sterujących wychodzących z konwerterów DAC chipów DTMROC. Pierwsze próby i testy komunikacji z chipem DTMROC odbywały się na prototypowym układzie. Po napisaniu kilku funkcji umożliwiających ustawianie napięcia na wyjściu konwerterów DAC chipów DTMROC przystąpiono do pomiaru prędkości przesyłania danych. Po analizie działania podjęto decyzję o zmniejszeniu prędkości transmisji na magistrali CAN z 125 kbit/s na 50 kbit /s. Krok ten umożliwił poprawne działanie układu i wyeliminował błędy w przesyłanych danych. Po dokonaniu pomiarów okazało się, iż ustawienie 36 konwerterów DAC, czyli jednego układu Patch Panel trwa około 1 s, co oznacza, że ustawienie całego detektora, 192 Patch Panel-i zajmie 161 s. Uzyskane czasy pozwalają stwierdzić, że dane w tym układzie przesyłane są z częstością 1,5 kHz i zapisanie jednego bitu danych zajmuje 1,3 ms. Porównując uzyskane wyniki pomiarów z przewidywaniami można stwierdzić, że różnią się w nieznacznym stopniu. Dokonując porównań możliwych rozwiązań sterowania regulatorami napięcia można powiedzieć, że wybrana metoda jest optymalna i jej rezultaty zadowalające. Możliwa jest również poprawa wyników osiąganych przez bibliotekę dll, ponieważ jest ona w dalszym ciągu rozwijana i udoskonalana. Przedstawiona praca może pomóc zrozumieć działanie systemu sterowania niskim napięciem jak i działania biblioteki dll stworzonej do systemu PVSS II. 52 Bibliografia [1] Jerzy Lukierski „Od Modelu Standardowego do teorii M: Teorie Wszystkiego”, Instytut Fizyki Teoretycznej, Uniwersytet Wrocławski, Postępy Fizyki, tom 55 zeszyt 4 rok 2004 [2] Donald H. Perkins „Wstęp do fizyki wysokich energii”, Wydawnictwo Naukowe PWN, Warszawa (2004) [3] Janusz A. Zakrzewski „Cząstki Modelu Standardowego: co nowego?”, Instytut Fizyki Doświadczalnej, Uniwersytet Warszawski, Postępy Fizyki tom 54 zeszyt 4 rok 2003 [4] Jerzy Kowalski-Glikman „Nadzieja na sukces”, Wiedza i życie, nr 2/1999 http://archiwum.wiz.pl/1999/99022400.asp [5] Grzegorz Wrochna „Co się kryje za symetryczną strukturą”, Polski Serwis Naukowy, 19.03.2002 http://fizyka.servis.pl/model_stand.php [6] Michał Turała „Potrzeby komputerowe eksperymentów LHC i światowy grid LCG dla fizyki” Poznań, 19 maja 2004 [7] Piotr Malecki „Wielkie akceleratory i eksperymenty fizyki”, Wykład monograficzny dla specjalności automatyka WIEiK PK, 4 kwiecień 2005 [8] Eksperyment ATLAS w CERN-ie http://atlas.ch/ [9] Jan Królikowski, Marek Kowalski, Mariusz Sapiński, Mariusz Witek „Zespoły polskie w eksperymentach przygotowywanych dla zderzacza LHC” [10] C. Gripen „Physics of Particle Detection”, ICFA Instrumentation School, Turkey, Istanbul, June 28 – July 10 1999 [11] A. Zalewska „Detektory”, Wykłady z fizyki cząstek elementarnych, Kraków, 2003 [12] Z. Hajduk D. Antończyk „System kontroli dla eksperymentu ATLAS w oparciu o technologie OPC”, Kraków, wrzesień 2002 53 [13] Anatoli Romaniouk „Development of the Transition Radiation Tracker (TRT) for the ATLAS LHC Experiment” , Presentation at the TRD workshop in Bari, 20-23 September 2001 [14] Chiho Wang „Design and Construction of the ATLAS Barrel TRT” TRD Conference Bari, September 2003 [15] Mar Capeans „ATLAS Transition Radiation Tracker” 8th Topical Seminar on Innovative Particle and Radiation Detectors, Siena (Italy), 21 - 24 October 2002 [16] Vasiliki A. Mitsou „The ATLAS Transition Radiation Tracker” 8th ICATPP Conference on Astroparticle, Particle, Space Physics, Detectors and Medical Physics Applications, Como (Italy), 6-10 October 2003 [17] Sergei Mouraviev „Design and Construction of the ATLAS End Cap TRT” Second Workshop on advanced Transition Radiation Detectors for accelerator and space applications Bari(Italy), September 4-7, 2003 [18] Z. Hajduk „Detektor TRT i jego system sterowania” Polska Akademia Nauk, Kraków – Warszawa, 15 – 16 luty 2002 [19] Z. Hajduk, J. Olszowska „System kontroli i monitorowania detektora TRT w eksperymencie ATLAS” Kwartalnik Elektroniki i Telekomunikacji, 2002, 48 z. 2, ss. 285 – 297 [20] LHC Experiments – Joint Controls Project CERN – JCOP-2000-008 [21] Beate Briss, Matthias Schagginger, Leo Knipp (all from ETM) „PVSS II Getting Started – Basics Installation - First steps for beginners” Version 2.0 – English – Microsoft Windows platforms, July 2004 [22] Firma ETM professional control – producent programu PVSS II http://www.pvss.com/index_e.asp [23] Henk Boterenbrood „CANopen Application Software for the ELMB128 (Embedded Local Monitor Board)” Version 2.2 NIKHEF, Amsterdam 13 January 2005 [24] ELMB – strona poświęcona budowie i testom układu http://elmb.web.cern.ch/ELMB/ [25] CiA (ang. CAN in Automation) – oficjalna strona http://www.can-cia.org/ [26] Tadeusz Goszczyński „Magistrala CAN” Elektro instalator, październik 2004 54 http://www.elektroinstalator.com.pl/artyk/2004-10/04_magistrala.htm [27] E. Banaś, Z. Hajduk, B. Kisielewski, J. Olszowska „TRT Power Supplies”, CERN, 12 December 2005 [28] L. Periale, B. Allongue „Magnetic field behavior of HV and LV systems for the LHC experiments”, Proceedings of the 9th workshop on Electronics for LHC Experiments, Amsterdam, 29. Sept. –3. Oct. 2003, page 346-352 [29] Jolanta Olszowska, Zbigniew Hajduk, Elżbieta Banaś „TRT DCS status version ‘ALONE’”, CERN - ID week, February 2005 [30] DSM-DTMROC – ATLAS TRT Technical Note, CERN, 14 November 2003 [31] Henk Boterenbroog „CANopen application software for the ELMB128 (Embedded Local Monitor Board)”, NIKHEF, Amsterdam, 19 May 2004 [32] Vladimir Ryjov „ELMB – DTMROC communication studies”, ATLAS TRT Meeating, CERN, September 2004 [33] Bartłomiej Kisielewski „Regulatory napięcia LHC4913 i LHC 7913 odporne na promieniowanie w zasilaniu elektroniki FE detektora TRT – ATLAS”, Prezentacja Zakładowa, Kraków, 13kwiecień 2005 55 DODATEK Pomiary innych parametrów (zakres zmian napięć) W układach Patch Panel zostały umieszczone dla części analogowej dwa rodzaje regulatorów napięcia: LHC4913 do regulacji napięcia dodatniego oraz LHC7913 do regulacji napięcia ujemnego. Pomiary pokazały, że regulatory firmy ST wyprodukowane w technologii RHBip1 wytrzymują promieniowanie 50 krad. Zaletą tych układów jest niski pobór mocy oraz maksymalne obciążenie prądowe równe około 3 A, które można zwiększyć łącząc regulatory równolegle. Poniżej przedstawiono schematy połączenia regulatorów z chipami DTMROC oraz wykresy przedstawiające zależność napięcia na wyjściu konwerterów DAC do napięcia ustawianego na regulatorach (rys. 10.7). lv4913 Vout R1 Vadj dtmroc R3 R2 Vdac Idac R5 ` R4 a) lv7913 Vout (-3.5v to -4.0v) R1i -1.2v R1e +2.5v Vadj R3 R2e V1 ` R2i R4 dtmroc Vdac Idac R5 b) Rysunek 0.1 Schematy połączeń regulatorów i wyniki pomiarów zmian napięć a) dla regulatora LHC 4913 (regulator napięcia dodatniego) b) dla regulatora LHC 7913 (regulator napięcia ujemnego) [33]. 56 Z uzyskanych wyników pomiarów wynika, iż napięcie na regulatorze LHC 4913, który jest regulatorem napięcia dodatniego, można dokonywać zmian w zakresie od 3,5 do 4,0 V. Natomiast na regulatorze LHC 7913, który jest regulatorem napięcia ujemnego, od -3,5 do -4,0 V. Zakres zmian napięcia, jaki jest możliwy do uzyskania na wyjściu konwerterów DAC to 0 - 1,24 V, co umożliwia pełną kontrolę nad regulatorami [33]. 57