Podstawy programowania w środowisku LabVIEW, projekt oscyloskopu cyfrowego Celem ćwiczenia jest doskonalenie umiejętności tworzenia typowych aplikacji w środowisku LabVIEW na przykładzie projektu witrualnego oscyloskopu cyfrowego. Podstawą sprzętową wspomnianego przyrządu jest karta akwizycji sygnałów PCI DAS-1200 firmy Measurement Computing Corp. Jest to 16 kanałowa karta pomiarowa wyposaŝona w 12 bitowy przetwornik A/C o maksymalnej częstotliwości próbkowania 330kHz, dwa 12 bitowe przetwornik C/A, 3 liczniki oraz 24 cyfrowe we/wy. Programowa obsługa funkcji sprzętowych karty odbywa się poprzez wywołania odpowiednich funkcji zapisanych w bibliotece dynamicznej DLL. Dostępna jest równieŝ biblioteka takich funkcji dla środowiska LabVIEW. Funkcje te są znajdują się w palecie Functions Pallete jako grupa o nazwie Universal Library. Oscyloskop cyfrowy działa na zasadzie cyklicznej rejestracji w zadanym czasie stałej liczby próbek sygnału i wyświetlaniu ich na ekranie. Dlatego podstawą projektowanego oscyloskopu powinna być funkcja pozwalająca na rejestrację z zadaną częstotliwością zadanej liczby próbek. Jedną z takich funkcji dla karty DAS-1200 jest AInScFg (rys.1) z grupy Analog Input. Rys.1. Parametry funkcji AInScFg Jest to funkcja dokonująca rejestracji Count próbek z częstotliwością Rate na wejściach analogowych o numerach od LowChan do HighChan z karty pomiarowej o numerze podanej w BoardNum. Zakres pomiarowy napięć podawany jest jako Range. Przy pomocy parametru Options moŝna sterować trybem realizacji funkcji AInScFg (m.in. sposobem wyzwalania rejestracji i przesyłania danych do pamięci). Wyjściowy parametr ADData jest tablicą z zarejestrowanymi próbkami. Natomiast wyjście ErrCode słuŝy do sygnalizowania poprawności przetwarzania i ewentualnych przyczyn błędnego działania. Wyjściowa wartość Rate jest rzeczywistą częstotliwością próbkowania. Część praktyczna Po uruchomieniu programu LabVIEW rozpoczynamy tworzenie programu od wyboru nowego instrumentu New VI (moŝemy równieŝ rozpocząć pracę nad nowym projektem wybierając z menu File opcję New VI ). Pojawi się wówczas na ekranie pusty panel uŝytkownika. 1
1. Na panelu uŝytkownika w pierwszej kolejności umieszczamy elementy pozwalające na wybór numeru karty pomiarowej oraz numeru kanału wejściowego. W tym celu poleceniem Show Controls Pallete wybranym z menu Windows, otwieramy okno Controlls Pallete, w którym wybieramy grupę Numeric a w niej z kolei wybieramy (klikając myszką) Digital Control. Następnie przesuwamy kursor do panelu uŝytkownika i ponownie klikając myszką wstawiamy wybrany element. Następnie moŝemy od razu wprowadzić z klawiatury właściwą jego nazwę: Nr karty. Identycznie postępujemy aby umieścić na panelu uŝytkownika następną kontrolkę: Nr kanału (poniewaŝ projektowany oscyloskop ma umoŝliwić obserwację tylko jednego sygnału dlatego do wyboru kanału wejściowego wystarczy nam ta jedna kontrolka). Trzecim niezbędnym parametrem wejściowym funkcji AInScFg jest liczba rejestrowanych próbek Count dlatego umieszczamy na panelu uŝytkownika jeszcze jedną kontrolkę Liczba próbek, co pozwoli nam na sterowanie ilością próbek rejestrowanych w kolejnych cyklach pracy oscyloskopu. Aby oscyloskop mógł prawidłowo pracować Liczba próbek oczywiście powinna być większa od zera, dlatego dobrze jest nadać jej dodatnią wartość początkową. Powinna to być wartość na tyle duŝa, aby zapewnić wystarczającą rozdzielczość poziomą obrazu (co najmniej 100 punktów) a zarazem niezbyt duŝa, Ŝeby oscyloskop w rozsądnym czasie odświeŝał ekran (co najwyŝej 1000). W naszym przykładzie moŝe to być 200 próbek. 2. Kolejny parametrem wejściowym funkcji AInScFg jest częstotliwość próbkowania Rate. W przypadku oscyloskopu zamiast podawania częstotliwości próbkowania, przy pomocy pokrętła podstawy czasu ustawia się czas trwania pomiaru (tzn. ustalamy ile czasu przypada na jednostkę długości osi poziomej ekranu np.: 5 ms/cm). W naszym przypadku wygodniejsze będzie określanie całkowitego czasu trwania fragmentu sygnału wyświetlanego na ekranie w pojedynczym cyklu pracy oscyloskopu. Dlatego umieszczamy na panelu uŝytkownika kolejną kontrolkę typu Horizontal Pointer Slide wybraną z grupy Numeric i nazywamy ją Czas obserwacji [ms]. Konieczny parametr wejściowy funkcji AInScFg jakim jest częstotliwość próbkowania Rate uzyskamy dzieląc Liczbę próbek przez Czas obserwacji. 3. Kolejny krok to umieszczenie w programie funkcji AInScFg. Znajduje się ona podgrupie funkcji Analog Input grupy Uniwersal Library. Funkcję AInScFg umieszczamy na prawo od pozostałych elementów na panelu programu. Następnie szpulką łączymy Nr karty z wejściem BoardNum funkcji AInScFg, a Nr kanału z oboma wejściami LowChan i HighChan funkcji AInScFg. Wejście Count łączymy z Liczbą próbek. Do obliczenia częstotliwości próbkowania konieczne jest zastosowanie operatora dzielenia, do którego wejścia x dołączamy Liczbę próbek a do wejścia y Czas obserwacji [ms]. PoniewaŜ Czas obserwacji [ms] będziemy zadawać w milisekundach, dlatego otrzymany iloraz naleŝy pomnoŝyć przez 1000 aby otrzymać częstotliwość w hercach a nie w kilohercach. MnoŜenie to realizujemy wykorzystując operator mnoŝenia i element Numeric Constant o wartości 1000. Wyjście operatora mnoŝenia moŝemy teraz połączyć z wejściem Rate funkcji AInScFg. Nie obsadzone parametry wejściowe funkcji AInScFg Range i Options przyjmą wartości domyślne, które w naszym przypadku zapewnią poprawną pracę programu. W tym miejscu naleŝy wrócić do pane- 2
lu uŝytkownika i wpisać odpowiedni zakres nastawiania Czasu obserwacji [ms]. Jego wartość minimalna jest ograniczona maksymalną częstotliwością próbkowania przetwornika A/C, poniewaŝ Czas obserwacji musi byś większy od iloczynu Liczby próbek i minimalnego okresu próbkowania. W naszym przypadku maksymalną częstotliwością próbkowania wynosi 330 khz i dlatego rejestracja 200 próbek musi trwać co najmniej 0,606 ms. Jeśli próbek będzie 330 to minimalny czas obserwacji wyniesie 1 ms i taką wartość moŝemy ustawić jako dolny zakres nastaw Czasu obserwacji [ms]. Maksymalny czas obserwacji moŝe być dowolny, ale rozsądnie jest go ograniczyć do co najwyŝej kilku sekund (proponujemy 100 ms). 4. Aby moŝna było w trakcie uŝywania naszego przyrządu rozpoznać ewentualne przyczyny nieprawidłowego jego działania, naleŝy obsłuŝyć wyjście ErrCode funkcji AInScFg. W tym celu do panelu programu wstawiamy funkcję ErrMsg, którą moŝna znaleźć w podgrupie Calibration and Configuration biblioteki Universal Library. Funkcja ErrMsg zamienia kod błędu na jego krótki opis. Aby moŝna było przeczytać ten komunikat o błędzie potrzebny nam będzie wskaźnik tekstowy String Indicator, który z podgrupy String & Path wstawiamy do panelu uŝytkownika. Wskaźnik ten moŝemy nazwać jako Błąd. Następnie wracamy do panelu programu i łączymy wyjście ErrCode funkcji AInScFg z wejściem ErrCode funkcji ErrMsg oraz wyjście ErrMsg tej funkcji z wskaźnikiem Błąd. 5. W celu umoŝliwienia obserwacji na ekranie rzeczywistej częstotliwości próbkowania sygnału, konieczne jest jeszcze wstawienia do panelu uŝytkownika odpowiedniego wskaźnika. MoŜe to być wskaźnik cyfrowy, który nazywamy f pr. [Hz] i łączymy z wyjściem Rate (po prawej stronie) funkcji AInScFg. 6. W następnym kroku musimy zająć się obsługą wyjścia ADData funkcji AInScFg. PoniewaŜ wartości wyjściowe tej funkcji są liczbami całkowitymi z zakresu od 0 do 2 n -1 (n rozdzielczość przetwornika A/C) naleŝy dokonać ich konwersji na wartość napięcia. MoŜna do tego wykorzystać funkcję ScaleArr, która dokonuje konwersji wejściowych wartości całkowitoliczbowych zapisanych w tablicy ADData na wartości rzeczywiste z zakresu Rys.2. Parametry funkcji ScaleArr podanego na wejścia Min i Max. Funkcja ScaleArr dodatkowo wymaga podania czy wartości ADData zapisane są na 12 czy na 16 bitach. Funkcję ScaleArr pobieramy z podgrupy funkcji Signal Conditioning grupy Uniwersal Library i umieszczamy na prawo od funkcji AIn- ScFg. Następnie szpulką łączymy wyjście ADData AInScFg z analogicznym wejściem funkcji ScaleArr. Do wejścia Min i Max funkcji ScaleArr podłączymy natomiast wartości stałe -5 i 5, poniewaŝ taki jest domyślny zakres napięć wejściowych naszej karty pomiarowej. Do wejścia 16 or 12 bit podłączamy wyjście z dowolnej kontrolki typu boolean umieszczonej na panelu uŝytkownika i opisanej 12/16 bit. 3
7. W oscyloskopie do obserwacji badanego sygnału niezbędny jest oczywiście ekran, do którego budowy wykorzystamy instrument o nazwie Waveform Graph. SłuŜy on do wykreślania przebiegów czasowych i znajduje się w z grupie Graph palety Controls. Po umieszczeniu Waveform Graph na panelu uŝytkownika wracamy do panelu programu, gdzie konieczne będzie odpowiednie przygotowanie danych dla Waveform Graph. Dane te muszą mieć postać wiązki (bundle) złoŝonej z: wartości początkowej x 0 współrzędnej x wykresu, przyrostu x współrzędnej x wykresu, właściwych danych kreślonego przebiegu zapisanych w tablicy y. Taką wiązkę tworzymy wykorzystując element Bundle z grupy Cluster. Po umieszczeniu go w panelu programu ma on tylko dwa wejścia, dlatego konieczne jest dodanie mu jeszcze jednego (ustawiamy kursor na lewej części Bundle, klikamy prawym klawiszem myszki i wybieramy Add Input ). Następnie łączymy wyjście Val funkcji ScaleArr z dolnym wejściem Bundle. Do górnego wejścia dołączamy stałą o wartości 0, poniewaŝ chcemy, Ŝeby oś czasu na ekranie miała początek w zerze. Natomiast na wejście środkowe naleŝy podać długość okresu próbkowania tzn. odwrotność okresu próbkowania. PoniewaŜ chcemy, Ŝeby skala czasowa ekranu była w milisekundach dlatego okres próbkowania równieŝ musi być w milisekundach. Taką wartość otrzymamy dzieląc Czas obserwacji [ms] przez Liczbę próbek. PoniewaŜ odwrotne dzielenie nasz program juŝ wykonuje (patrz pkt.4), dlatego wystarczy obliczyć jego odwrotność (wykorzystując operator Reciprocal z grupy Numeric ), i podłączyć do środkowego wejścia Bundle. Teraz wystarczy tylko połączyć wyjście output cluster elementu Bundle z wejściem Waveform Graph i tor przetwarzania naszego oscyloskopu jest gotowy. 8. Następnie musimy zapewnić ciągłą pracę naszego oscyloskopu przez umieszczenie napisanego przez nas programu wewnątrz pętli warunkowej While Loop, którą znajdziemy w grupie Structures palety Function. Pętlę wstawiamy do panelu program i do warunku jej zatrzymania podłączamy przycisk STOP, który wcześniej musimy umieścić na panelu uŝytkownika. Pamiętamy równieŝ o zaznaczeniu opcji Stop If True na warunku zakończenia pętli. 9. Zanim uruchomimy nasz oscyloskop naleŝy jeszcze tak skonfigurować instrument Waveform Graph, Ŝeby obraz sygnału na ekranie był zawsze czytelnie wyświetlany bez konieczności ręcznego skalowania obrazu. Taki efekt uzyskamy ustawiając dla obu osi opcje Auto Scale, Loose Fit i Visible Scale Label oraz wpisując dla osi x nazwę t [ms] a dla osi y nazwę U [V]. Aby obsługa oscyloskopu była prosta i wygodna naleŝy jeszcze uporządkować rozmieszczenie elementów na panelu i zmienić ich rozmiary. Tak zbudowany program został przedstawiony na rysunkach poniŝej. 4
Literatura: 1. National Instruments Corporation: LabView User Manual, November 2001 Edition. 2. W. Tłaczała : Środowisko LabVIEW w eksperymencie wspomaganym komputerowo. WNT, Warszawa 2002 5
Imię i Nazwisko. Rok... Grupa.. Data: Podstawy programowania w środowisku LabVIEW, projekt oscyloskopu cyfrowego Sprawozdanie Zadania do wykonania: 1. Zbudować wg powyŝszych wskazówek działający oscyloskop. 2. Ustawić nr karty pomiarowej na 0, a przełącznik 12/16 bit na 16 bit. 3. Wpisać liczbę próbek 200 i dokonać obserwacji sygnałów okresowych z kanałów od 0 do 4. Zmieniając liczbę próbek na 199 i 201 sprawdzić kierunek przesuwania sygnału na ekranie. 4. Ustawić nr karty pomiarowej na 1, nr kanału na 0, a przełącznik 12/16 bit na 12 bit. 5. Podłączyć do zacisków analogowego wejścia karty generator i dokonać obserwacji sygnałów wytwarzanych przez generator. 6. Sprawdzić działanie suwaka czasu obserwacji i wpływ jego ustawienia na częstotliwość próbkowania. 7. Dla trzech ustawień czasu obserwacji zanotować w tabeli uzyskaną częstotliwość próbkowania i sprawdzić czy spełniona jest zaleŝność: f pr = liczba próbek / czas obserwacji (1) czas obserwacji [ms] liczba próbek Uzyskana f pr [Hz] Obliczona wg (1) f pr [Hz] 8. Do sprawozdania dołączyć wydruki panelu uŝytkownika i panelu programu. Wnioski: 6