Komunikacja USB między PC<->uC

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
Pavkan
Posty: 2
Rejestracja: 10 gru 2012 20:51
Wersja środowiska: LabVIEW 2010

Komunikacja USB między PC<->uC

Post autor: Pavkan »

Witam,
to mój pierwszy post na forum, chociaż już od dłuższego czasu szukam tu różnych informacji.
LabView znam już od ponad roku i wykonałem już kilka projektów. Traktuję to jednak jako proste narzędzie do rozwiązywania problemów, a nie specjalizuję się w profesjonalnym programowaniu.

Obecnie jestem w trakcie tworzenia pracy magisterskiej i ponownie chciałbym skorzystać z LabView. Potrzebuję stworzyć aplikację do zbierania i analizy danych z mikroprocesora.
Mikroprocesor to STM32, który realizuje proces regulacji obiektem. Na komputerze muszę pobrać wartości sygnałów z uC (prędkość obrotowa, prąd silnika itp). Dostępny mam interfejs USB. A więc w skrócie: PC otrzymuje dane z uC poprzez USB.

I tu właśnie mam problem: jak dostać się do sygnałów USB? Mam już praktykę w takich aplikacjach, ponieważ w pracy inżynierskiej robiłem coś podobnego - PC sterował mikroprocesorem i pobierał z niego dane, ale przy użyciu RS232. A to USB nie wiem jak ugryźć.

W Necie i na forum znajduje się dużo informacji o komunikacji USB z jakimiś gotowymi urządzeniami do których mamy biblioteki itd., ale ja nic takiego nie mam - wszystko robię od początku.

Znalazłem przykład "USB RAW - Bulk.vi", ale nie widać tam portów USB, tylko COM. Brakuje mi jakiegoś toolkita, czy coś w tym stylu?

Pozdrawiam,
Michał
may
Posty: 96
Rejestracja: 20 lut 2012 12:30
Wersja środowiska: LabVIEW 2014
Lokalizacja: Katowice / Ruda Śląska

Komunikacja USB między PC<->uC

Post autor: may »

Prawie wszystkie płytki z mikrokontrolerami które posiadają łącze USB posiadają zaszyty gdzieśtam w sobie chip który jest mostem między USB z jednej strony a UARTem z drugiej (np. FT232 lub coś podobnego). Od strony mikroprocesora jest to widoczne jako zwykły UART od strony komputera natomiast jako wirtualny port COM. W związku z tym komunikujesz się z taką płytką dokładnie tak samo jakby była podpięta po COM (czyli RS232). Po wpięciu kabla z płytki do kompa powinien rozpoznać to urządzenie jako właśnie wirtualny port COM. Jeżeli tego nie robi możesz potrzebować sterowników ze strony producenta tego chipu do komunikacji (obstawiam, że będzie to FT232, cała reszta jest bardziej egzotyczna). Z poziomu LabVIEW obsługujesz to znowu dokładnie tak samo jak urządzenia szeregowe, czyli bloczkami VISA. Jest małe prawdopodobieństwo, że twoja płytka z mikrokontrolerem jest zbudowana jakoś bardziej wymyślnie (choć wątpie), ale wtedy polecam odwołanie się do dokumentacji tej płytki. Każdy choć trochę szanujący się producent napisze jak dogadać się ze swoją płytką :p
Obrazek
Awatar użytkownika
patka
Posty: 20
Rejestracja: 08 maja 2012 16:33
Wersja środowiska: LabVIEW 2012

Komunikacja USB między PC<->uC

Post autor: patka »

Witam,

Tak jak w przykładzie - powinieneś użyć do tej komunikacji bloczków z palety VISA. Numer portu do którego przypisany został uC możesz sobie sprawdzić w Computer -> Device manager -> Ports (ewentualnie zmienić, albo w ogóle spróbować zrobić programowe wykrywanie portu po jakimś ID urządzenia).

Musisz pamiętać, żeby nie wyłączać programu Break'iem przed zamknięciem portu, bo Open Session drugi raz nie zadziała i najpierw będziesz musiał zamknąć port (chyba, że ustawisz wejście duplicate session na T).

Nie będę się zagłębiać w przykład, ale spróbuj coś takiego - powinno wystarczyć:
visa.png
Musisz tylko sobie odpowiednio poustawiać parametry transmisji, tak jak zaprogramowałeś w uC.

Pozdrawiam!
Awatar użytkownika
czab
Posty: 54
Rejestracja: 26 cze 2011 14:59
Wersja środowiska: LabVIEW 2011

Komunikacja USB między PC<->uC

Post autor: czab »

Z tego co wiem to płytki z STM32 (discovery) nie mają czipu FTDI - niemniej jednak, sam procesor umożliwia skonfigurowanie swojego portu USB jako wirtualny COM. Jeśli potrzebujesz przesyłać proste rzeczy, taka komunikacja w zupełności powinna wystarczyć. Link do tego jak to uczynić - https://sites.google.com/site/programow ... 4discovery .

Jeśli chcesz pracować na "surowym" usb, masz do wyboru dwie opcje. Skonfigurować urządzenie do pracy z protokołem USB-488 (USBTMC), co będzie działać pi razy oko jak wirtualne GPIB, lub operować na surowym USB-RAW. W przypadku pierwszego podejścia korzyścią jest to, że urządzenie odpowiednio skonfigurowane będzie widoczne w systemie od razu (jako test&measurement device), wadą jest to że znów nie wykorzystuje to pełni możliwości protokołu no i nie jest najłatwiejsze do postawienia od strony mikrokontrolera. Co do USB-RAW, możesz posłużyć się specjalnymi narzędziami VISA do stworzenia pliku *.inf umożliwiającego komunikację LV <-> uC - stawiam, że to dość daleka droga. Link na start: http://digital.ni.com/public.nsf/allkb/ ... B7005C65C9 To oczywiście tylko zarys sprawy, może wypowie się ktoś znający temat praktycznie - ja póki co nie miałem przyjemności implementacji tych rozwiązań.
Obrazek
Pavkan
Posty: 2
Rejestracja: 10 gru 2012 20:51
Wersja środowiska: LabVIEW 2010

Komunikacja USB między PC<->uC

Post autor: Pavkan »

may,
Brzmi to bardzo prosto. Muszę sprawdzić, czy w moim uC jest rzeczywiście tak jak piszesz. Jeśli tak, to bez problemu sobie poradzę.

patka,
Używam WinXP. Rozumiem, że mówiłaś o Menedżerze urządzeń? Tam po prostu zobaczę nowy COM?
A z tym zamykaniem portu, to niestety przekonałem się już na własnej skórze.

czab,
Dzięki za linka. Coś pokombinuję.

Obecnie jestem na takim etapie, że zaczynam od tworzenia funkcji akwizycji i obróbki danych. Testy z uC zacznę pewnie dopiero w styczniu-lutym, gdyż czekam, aż kolega poskłada cały hardware w całość.

Gdyby ktoś miał jeszcze jakieś rady, to chętnie skorzystam. Kiedy już zacznie mi to wszystko działać (w sposób kontrolowany) to podzielę się sposobem rozwiązania problemu.
ODPOWIEDZ