Generacja sygnału

Tematy związane z LabVIEW FPGA oraz programowaniem układów.
Goska
Posty: 8
Rejestracja: 22 lis 2012 23:57
Wersja środowiska: LabVIEW 2009

Generacja sygnału

Post autor: Goska »

Witam!

Na początku chciałabym zaznaczyć, że jestem początkującym użytkownikiem LabView, dlatego też proszę o dość "ulogowe" potraktowanie ;)

Używam LabView 2009. Korzystam z NI CRIO-9073 z przetwornikami NI 9205 i NI 9263.

Korzystając z FPGA chciałam wygenerować np. sinusoidę. Na podstawie tutoriali i jakiegoś przykładu stworzyłam projekt (poniżej przedstawiam screeny). Po podłączeniu oscyloskopu na ekranie pojawiła się "sinusoida". Problemem jest to, że pojawia się ona na ekranie oscyloskopu przez ułamek sekundy.

Czy ktoś mógłby mi wyjaśnić dlaczego tak się dzieje oraz powiedzieć, w jaki sposób mogę rozwiązać ten problem? Szczerze się przyznaje, że sama nie rozumiem wszystkiego, co tam jest...

Z góry dziękuję za pomoc! :)
Załączniki
1.jpg
1.jpg (81 KiB) Przejrzano 19864 razy
3.jpg
4.jpg
5.jpg
6.jpg
Awatar użytkownika
patka
Posty: 20
Rejestracja: 08 maja 2012 16:33
Wersja środowiska: LabVIEW 2012

Generacja sygnału

Post autor: patka »

Witam,

A ten program na FPGA nie powinien być w pętli while zamiast for?
Awatar użytkownika
trooper
Posty: 22
Rejestracja: 22 paź 2012 17:44
Wersja środowiska: LabVIEW 2012
Kontakt:

Re: Generacja sygnału

Post autor: trooper »

Witam,

Patka ma racje - program w FPGA powinien być w pętli WHILE, wówczas należy odpowiednio przerobić program na RT.

Skoro jestes początkująca to jakości kodu się nie czepiam, wierze, że nad tym popracujesz ;)

Napiszę co bym zmienił:
1. program w FPGA
- wejścia / wyjścia - w oknie projektu masz moduły wymienione dwókrotnie - jedne możesz przeciągać do diagramu w drugich możesz ustawiać właściwości - tam też możesz ustalić czy wyjście jest skalibrowane (format FXP) lub nieskalibrowane - liczba całkowita - polecam skalibrowane FXP i w oknie pomocy kontekstowej (Ctrl + H) sprawdzisz jaki jest typ danych,
- nazwy kolejek to np. Transmit i Receive lub Generate i Acquire czy jakoś tak ... dodatkowo w kolejkach możesz odpowiednio dobrać typ danych tak, żeby pasowały do wyjść / wejść czyli FXP i odpowiednia ilość bitów liczby i ilość bitów przed przecinkiem - jak zrobisz to dobrze to nie musisz nic konwertować,
- osobiście użyłbym WHILE zamiast FOR i dołozyłbym niezbędne liczniki - ale to zależy od tego, co chcesz osiągnąć ... a tego nie napisałaś,
- generacja i akwizycja nie są skorelowane - być może nie muszą być, ale podejrzewam, że kolejność ma znaczenie.

2. program RTOS (cRIO)
- Nie robiłbym na początek podprogramu do obsługi FPGA, tyko uruchomiłbym program i w odpowiednim momencie karmił kolejkę danymi i drugą odczytywałbym z odpowiednią szybkością,

Na koniec odpowiedź na pytanie dlaczego widzisz sygnał tylko przez ułamek sekundy : nie wiem - i szczerze powiem trochę mnie to dziwi, bo powinno działać, (kiepsko) ale działać.
Mój strzał jest taki, że:
1. W programie w RT funkcja która otwiera referencję do programu FPGA (w środku ma ikonę domyślną i podpis pod spodem cRIO-9073) uruchamia program - sprawdź to w menu kontekstowym w opcji wywołania programu odznacz check box RUN. Jeżeli jest zaznaczony, to włączasz program od razu, a nie powinnaś - nie powinno to mieć wpływu na dalsze działanie, gdyż w FPGA czekasz na dane do skutku, ALE - jeżeli ponowne uruchomienie programu metodą RUN rzeczywiście ponownie uruchomi program, kolejka nie doczeka się na dane ... znowu ALE - widziałabyś to w programie na RTOS, stąd pomysł nr 2
2. źle ustawiłas akcję przycisku Start w Host.vi (ustaw bistabilne zachowanie tak, żeby mógł być stale wciśnięty). Jeżeli to jest dobrze ustawione to chętnie się dowiem co było nie tak jak już rozwiążesz problem.

Napisz co chcesz osiągnąć - czy generację ciągłą, czy generację skończonej ilości próbek i jak ma się do tego akwizycja? I jak ma to wyglądać w sterowniku. Pamiętaj, że im lepiej przygotujesz pytanie tym lepszą dostaniesz odpowiedź, więc poświęć pół dnia, narysuj jakiś diagram to podrzucę jakieś przykładowe rozwiązanie - tym lepsze im lepiej zapytasz

Powodzenia w kodowaniu, pozdrawiam
Goska
Posty: 8
Rejestracja: 22 lis 2012 23:57
Wersja środowiska: LabVIEW 2009

Re: Generacja sygnału

Post autor: Goska »

Dziękuję za wskazówki :) Zajmę się tym w poniedziałek, niestety wszystko znajduje się na uczelni. Wtedy też napiszę coś więcej na temat tego, co chce zrobić. W skrócie: chcę sygnał wygenerowany w LabView (w sumie to będą 4 różne sygnały: sygnał modulujący, sygnał zmodulowany, nośna i zegar) przesłać na układ demodulatora, a następnie odebrać sygnał zdemodulowany w celu policzenia stopy błędów. Z racji tego, że jestem początkująca chciałam zacząć od zwykłego przesłania np. przebiegu sinusoidalnego...
Goska
Posty: 8
Rejestracja: 22 lis 2012 23:57
Wersja środowiska: LabVIEW 2009

Re: Generacja sygnału

Post autor: Goska »

Generacja sygnału działa poprawnie. Dziękuję jeszcze raz za wskazówki :)
Niestety pojawił się kolejny problem :( Chciałam przesłać na układ rzeczywisty 4 sygnały i odebrać jeden, wyskakuje jednak pewien błąd. Czy ktoś mógłby mi wytłumaczyć, co źle robię/co jest nie tak? Proszę o pomoc...
Screeny poniżej:
Załączniki
bez tytułu.JPG
1.JPG
1.JPG (38.63 KiB) Przejrzano 19690 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Generacja sygnału

Post autor: PiDi »

Dokładnie tak jak jest napisane - na sprzęcie, którego używasz, są tylko 3 kanały DMA, a Ty masz zrobione 5 kolejek. Trzeba ich zrobić mniej, nie ma innego sposobu (no, albo kupić sprzęt z większą liczbą kanałów).
ObrazekObrazekObrazekObrazek
Goska
Posty: 8
Rejestracja: 22 lis 2012 23:57
Wersja środowiska: LabVIEW 2009

Re: Generacja sygnału

Post autor: Goska »

Oczywiście kupno nowego sprzętu nie wchodzi w gre... A muszę przesłać wszystkie te sygnały. Nie ma innego wyjścia z tej sytuacji? :(
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Generacja sygnału

Post autor: PiDi »

Możesz na przykład użyć jednej kolejki i po kolei wpisywać do niej próbki swoich sygnałów. Czyli w kolejce będą (dla trzech sygnałów):
1 element - 1 próbka 1 sygnału
2 element - 1 próbka 2 sygnału
3 element - 1 próbka 3 sygnału
4 element - 2 próbka 1 sygnału
5 element - 2 próbka 2 sygnału
6 element - 2 próbka 3 sygnału
7 element - 3 próbka 1 sygnału
...itd.

Wtedy na FPGA robisz odczyt kolejki tak samo, jak pokazałaś, ale zamiast 4 różnych kolejek czytasz 4 razy z jednej.
ObrazekObrazekObrazekObrazek
Goska
Posty: 8
Rejestracja: 22 lis 2012 23:57
Wersja środowiska: LabVIEW 2009

Re: Generacja sygnału

Post autor: Goska »

Próbowałam coś takiego zrobić na podstawie http://zone.ni.com/reference/en-XX/help ... nterleave/
Niestety nie dało rady połączyć każdej już z trzech oddzielnych tablic do odpowiednich kanałów...
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Generacja sygnału

Post autor: PiDi »

Nie bardzo rozumiem, czego do czego nie dało się podłączyć. Możesz pokazać jakiś kod?
Na FPGA wygląda to dokładnie tak samo, jak pokazałaś na obrazku wcześniej - tylko zamiast czterech różnych kolejek czytasz z jeden cztery razy.
Załączniki
fpga.png
fpga.png (13.24 KiB) Przejrzano 19636 razy
ObrazekObrazekObrazekObrazek
Goska
Posty: 8
Rejestracja: 22 lis 2012 23:57
Wersja środowiska: LabVIEW 2009

Re: Generacja sygnału

Post autor: Goska »

W FPGA zrobiłam tak, jak pokazałeś. Natomiast w hoście wygląda to u mnie tak, jak to jest widoczne na screenie w załączniku. Po podłączeniu do oscyloskopu widoczny jest jednak tylko sygnał tylko z AO0, z AO1 niestety nic nie wychodzi...
Załączniki
Gosia.JPG
Gosia.JPG (9.42 KiB) Przejrzano 19608 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Generacja sygnału

Post autor: PiDi »

A możesz pokazać trochę więcej tego kodu? W tym skrawku wszystko wygląda w porządku. Sprawdź też, czy twoje FIFO ma odpowiednio duży bufor na wszystkie próbki (w ustawieniach FIFO w projekcie).
ObrazekObrazekObrazekObrazek
Goska
Posty: 8
Rejestracja: 22 lis 2012 23:57
Wersja środowiska: LabVIEW 2009

Re: Generacja sygnału

Post autor: Goska »

Nie mam w tym momencie przy sobie kodu. Tam po prostu podpięte są dwa sygnały. I skłamałam, nie wyświetla się tylko pierwszy sygnał z AO0 - wyświetlają się oba sygnały, z tym, że obydwa idą z AO0...
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Generacja sygnału

Post autor: PiDi »

Sprawdź, czy na 100% po Interleave Arrays masz tak poskładane dane, jak powinny być. Zwróć uwagę na to, że obie tablice przed złożeniem powinny mieć ten sam rozmiar. Skonwertuj tą tablicę do FXP ręcznie (zlikwiduj czerwoną kropę na FIFO.Write) i sprawdź, czy dane nadal są ok. Spróbuj zrobić kolejkę "zwrotną" z FPGA - po odczytaniu FIFO na FPGA wyślij sobie dane z powrotem przez inną kolejkę na RT i zobacz, czy są prawidłowe.

...Ufff, to tyle co można z tych skrawków kodu wymyślić.
ObrazekObrazekObrazekObrazek
ODPOWIEDZ