tp7 - Podstawy programowania w środowisku LabVIEW, projekt

Transkrypt

tp7 - Podstawy programowania w środowisku LabVIEW, projekt
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-4020 firmy Measurement Computing Corp. Jest to 4 kanałowa karta pomiarowa wyposaŜona w 12 bitowy przetwornik A/C o
maksymalnej częstotliwości próbkowania 20MHz, oraz zewnętrzne wejście wyzwalające. 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-4020 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ą) „Numeric 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
20MHz i dlatego rejestracja 200 próbek musi trwać co najmniej 0,01 ms. Jeśli próbek będzie
2000 to minimalny czas obserwacji wyniesie 0,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 2n-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 AInScFg. 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 „x0” 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ść:
fpr = liczba próbek / czas obserwacji
czas obserwacji
[ms]
liczba próbek
(1)
Uzyskana fpr
Obliczona wg (1) fpr
[Hz]
[Hz]
8. Do sprawozdania dołączyć wydruki panelu uŜytkownika i panelu programu.
Wnioski:
6