Elektroda.pl
Elektroda.pl
X
Mitronik
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator)

piotrva 05 Lut 2019 01:44 3603 10
  • Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator)

    1. Dlaczego powstał ten projekt? Założenia.
    Od paru lat fascynowało mnie zbudowanie własnego oscyloskopu i poznanie pewnych problemów tej tematyki "od podszewki". Pierwsze praktyczne próby realizacji tego tematu podjąłem w czasie studiów, gdy w moje ręce pierwszy raz trafił zestaw maXimator - wyposażony w układ Intel FPGA (dawniej Altera) MAX10 10M08DAF256C8G, który na pokładzie posiada wbudowany przetwornik ADC.

    Założeniami pierwszej, jak i kolejnych wersji projektu była maksymalna prostota, bazowanie na zasobach dostępnych na płytce maXimator http://maximator-fpga.org/ oraz przede wszystkim walory dydaktyczno-edukacyjne - tak abym sam coś wyniósł z projektu, oraz abym mógł zaprezentować pewien prosty model oscyloskopu cyfrowego innym.

    2. Jak zbudowany jest oscyloskop?
    Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator)
    Podstawowy oscyloskop cyfrowy zaraz za wejściem sygnału posiada odpowiedni układ wejściowy oraz kondycjonujący. Pierwszy z nich ma za zadanie zapewnić odpowiednie parametry wejścia, zaś drugi ma za zadanie tak dopasować sygnał, aby w optymalny sposób wykorzystać zakres pracy przetwornika (w tym zapobiegać aliasingowi). Od razu zdradzę, że tego bloku w swoim oscyloskopie... nie zrealizowałem.

    Następnie sygnał podawany jest na wejście przetwornika, z którego dane cyfrowe kierowane są do pamięci akwizycji. Jak się domyślamy w tych okolicach będzie realizowane także wyzwalanie.

    Później dane są zwykle przetwarzane (np. uśredniane, wyliczanie funkcji matematycznych) i kierowane dalej do pamięci wyświetlania, na podstawie zawartości której generowany jest obraz na ekranie.

    3. Pierwsza wersja oscylo(skopu)grafu
    Pierwsza wersja projektu była bardzo uboga - dane z przetwornika (1 kanał) kierowane były bezpośrednio do pamięci wyświetlacza, zaś wyzwalanie realizowane było za pomocą przycisku. Użytkownik nie miał do wyboru żadnych ustawień. Wyświetlaczem zaś stał się monitor z interfejsem VGA. Przy okazji realizacji tego zalążka obecnej wersji projektu poradziłem sobie z kilkoma wyzwaniami. Po pierwsze z samą obsługą przetwornika ADC w układach MAX10, po drugie z generowaniem obrazu przy braku pamięci RAM (wbudowanej w FPGA) mieszczącej całą ramkę obrazu - zaprojektowałem wtedy system generowania obrazu (wyświetlania linii) "w locie" na podstawie zapisanych w pamięci wyświetlania wartości próbek sygnału oraz także w locie udało mi się nałożyć na taki wykres siatkę. Rozwiązanie takie jednak pozostawiało niedosyt...





    4. Jak zbudowany jest mój projekt?
    Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator)
    Mój docelowy system postanowiłem oprzeć na systemie mikroprocesorowym z rdzeniem Nios II e. Jest to darmowy soft-procesor, czyli procesor syntezowany w układzie FPGA i udostępniający magistralę Avalon Memory Mapped (Avalon-MM), która umożliwia podpięcie do systemu dowolnych (dostarczonych przez producenta i samodzielnie stworzonych) komponentów.

    Oprócz rdzenia w systemie znalazły się:
    A. Pamięć RAM procesora - stanowiąca pamięć operacyjną oraz pamięć programów. Pamięć ta jest inicjalizowana zawartością stanowiącą kod programu.
    B. Timer - używany do odmierzania czasu w różnych okolicznościach
    C. Porty GPIO - do prostej sygnalizacji pracy systemu za pomocą diod oraz do obsługi 3 przycisków umożliwiających poruszanie się po menu
    D. Moduł UART - mogący służyć do komunikacji z komputerem
    E. Moduł wyświetlacza VGA - przygotowany przeze mnie moduł wysyłający obraz za pomocą interfejsu VGA, wyposażony we własną pamięć RAM
    F. Moduł akwizycji danych, umożliwiający pobieranie danych z 1 lub 2 kanałów, realizujący wyzwalanie i także wyposażony we własną pamięć RAM

    Poniżej omówię budowę 2 ostatnich komponentów

    5. Moduł akwizycji danych
    Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator)

    Do modułu tego podłączony jest przetwornik ADC układu MAX10, z wykorzystaniem magistrali Avalon Streaming (Avalon-ST). Przetwornik pracuje z maksymalną możliwą prędkością 1MSPS, zaś w przypadku wyboru przez użytkownika innych podstaw czasowych zachodzi decymacja próbek (zatem przy jednym kanale próbujemy 1MSPS, zaś przy 2 dzielimy tę prędkość na 2). Moduł kontroluje przetwornik, w szczególności w trybie 2 kanałów odpowiednio przełącza multiplekser przetwornika, aby pobierać dane naprzemiennie z obu kanałów (tryb CHOP znany ze starszych oscyloskopów). Tu także realizowane jest po stronie cyfrowej wyzwalanie.

    Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator)
    Wyzwanie z którym spotkałem się na tym etapie to zaszumiony przebieg - proste wykrywanie przejścia przez próg wyzwalania nie dawało zadowalających efektów. Dlatego też wprowadziłem histerezę, dzięki której wyzwalanie jest stabilne. Próbki są zbierane od momentu wyzwolenia aż do zapełnienia pamięci. Nie stosowałem bufora kołowego, dlatego też moment wyzwolenia zawsze znajduje się na początku zebranych danych.

    Konfiguracja pracy tego modułu jak i zebrane dane są dostępne za pośrednictwem magistrali Avalon-MM

    6. Moduł wyświetlania
    Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator)
    Jak już wspomniałem moduł wyświetlania stanowił wyzwanie z powodu mocno ograniczonej ilości pamięci RAM, i obraz o rozdzielczości 1024x768 generowany jest przez to w locie. Generator sygnałów synchronizacyjnych VGA w trakcie skanowania ramki udostępnia adres aktualnie wyświetlanego piksela. Adres ten jest porównywany z odpowiednimi wartościami przez generatory wykresów, tekstu, poziomu wyzwalania oraz siatki. Jeśli dany moduł stwierdzi (na podstawie danych zawartych w jego pamięci bądź zakodowanych na stałe (siatka), że dany piksel należy do obsługiwanego przez niego obrazu, przesyła informację do multipleksera priorytetowego. On z kolei decyduje o tym, który obraz ma pierwszeństwo (będzie na wierzchu) i podaje dane piksela modułowi VGA.

    Dane wykresów przechowywane są jako wartości próbek do wyświetlenia (3 wykresy: 2 kanały + kanał matematyczny), mapa pikseli (tekst) lub pojedyncza wartość (poziom wyzwalania). Także tu konfiguracja modułu i zapis danych odbywa się za pośrednictwem magistrali Avalon-MM

    7. Jakie funkcje ma oscyloskop, czyli o oprogramowaniu kilka słów
    Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator) Oscyloskop z wyświetlaczem VGA oparty na układzie FPGA Intel MAX10 (maXimator)
    Sam sprzęt, zaprojektowany w języku VHDL nie robiłby nic ciekawego, gdyby nie oprogramowanie.
    A. System udostępnia możliwość wyboru dowolnego jednego lub 2 kanałów
    B. Wyzwalanie na zboczu narastającym/opadającym z programowanym poziomem i histerezą, z wyborem kanału
    C. Tryby wyzwalania: auto, normal, single
    D. Możliwość zmiany podstawy czasu
    E. Dla każdego kanału zmieniane wzmocnienie i offset (cyfrowy - wszak nie ma układu kondycjonującego) i możliwość wyłączenia
    F. Kanał matematyczny (konfigurowany również jako powyżej) z funkcjami +, -, *, /

    Menu użytkownika wyświetlane jest w górnej linii ekranu w formie tekstowej. Za pomocą jednego przycisku przechodzi się pomiędzy opcjami, a za pomocą 2 kolejnych można zwiększać i zmniejszać dany parametr (wskazywany znakiem >)

    8. Podsumowanie i refleksja.
    Ostatecznie udało mi się zrealizować założenia, które miałem. Wiele nauczyłem się przy tym projekcie, o czym najlepiej chyba świadczy fakt, że gdybym teraz miał taki zrobić to wiele rzeczy zrobiłbym lepiej, co jednak nie umniejsza satysfakcji i zadowolenia z obecnego stanu rzeczy. Co najciekawsze chyba, to fakt, że cały oscyloskop jest realizowany... jednoukładowo, od przetwornika aż po wyświetlacz.

    9. Materiały
    Rzecz jasna udostępniam cały projekt wszystkim zainteresowanym:
    https://gitlab.com/piotrva/maximator-scope
    Informacje o płytce:
    http://maximator-fpga.org/
    Artykuł z opisem w j. angielskim:
    http://pak.info.pl/index.php?menu=artykulSzczegol&idArtykul=4718

    10. Parametry
    Oszałamiające nie są:
    A. Próbkowanie: 1MSPS (1 kanał), 0.5MSPS (2 kanały)
    B. Zakres napięć wejściowych: 0-2.5V
    C. Pasmo: a kto to wie - na wejściach goldpin są przed układem FPGA rezystory i diody zabezpieczające przed zbyt wysokim napięciem - uznałem określanie pasma za nieistotne
    D. Ilość próbek: 1024
    E. Rozdzielczość: 9-bit

    PS. Jakość obrazu jest w rzeczywistości dużo lepsza niż na załączonych "zrzutach" - ich rozmazanie i słaba rozdzielczość są spowodowane kiepskim systemem przechwytywania złożonym z konwertera VGA->S-VIDEO oraz urządzenia do przechwytywania sygnału wideo na USB.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Mitronik
  • #2 05 Lut 2019 10:49
    Steryd3
    Poziom 32  

    Witam.
    Gratuluję pomysłu i realizacji! Bardzo fajny edukacyjny projekt.

    Mam gdzieś w szufladzie płytkę maXimator więc może kiedyś w wolnej chwili korzystając z udostępnionych źródeł, spróbuje u siebie odtworzyć projekt i trochę się poduczyć.
    Jest to projekt typowo edukacyjny i mimo braku większych walorów praktycznych oceniam go dość wysoko. Właśnie tego typu projekty powinny być doceniane na elektrodzie! Publikowanie setnego minutnika do jajek na AVR lub zasilacza zbudowanego na 4 modułach, które ktoś połączył i ładnie w obudowie pilnikiem wypiłował otwory pod pokrętła i wyświetlacz raczej niewiele wnoszą czytającym. Tu zaś jest jakiś pomysł, jakaś realizacja i co najważniejsze udostępniony cały projekt gdzie ktoś zainteresowany może czegoś się dowiedzieć o układach logiki programowalnej i ich "programowaniu".

  • #3 05 Lut 2019 20:07
    piotrva
    Moderator na urlopie...

    @Steryd3 Dzięki za miłe słowa i docenienie projektu. I dokładnie jest jak piszesz - wartości praktycznej w tej formie projekt nie ma żadnej, za to pozwala na "zajrzenie do środka" tej klasy urządzeń.

  • Mitronik
  • #4 05 Lut 2019 22:49
    leonow32

    Poziom 30  

    Jak tylko zobaczyłem tytuł tematu, to od razu wiedziałem, że to robił Piotr Rzeszut, bo nikt inny w tym kraju nie potrafi robić takich rzeczy :)

    Zapomniałeś napisać, jakie są podstawowe parametry, czyli częstotliwość samplowania, pasmo i ilość próbek. Poza tym projekt wymiata za poziom zaawansowania i walory dydaktyczne!

  • #6 06 Lut 2019 16:39
    tplewa
    Poziom 38  

    piotrva napisał:
    @leonow32 E tam nie przesadzaj, jest na naszym forum wiele osób, które ode mnie bardziej wymiatają w tematyce.
    Parametry dodane


    Hmmm powiem tak owszem można było zrobić lepiej - ale właśnie po co utrudniać, a tak dzięki udostępnieniu materiałów powstał z tego fajny projekt edukacyjny :)

  • #7 15 Lut 2019 23:22
    zbychmg
    Poziom 28  

    Czytałem artykuł, szkoda, że nie ma fotki z tego urządzenia i chociaż przybliżonego kosztu elementów projektu.
    Może chociaż jakiś schemat, czy typ użytego modułu, algorytm programu.

    Chciałem zrobić coś podobnego i taniego dla początkujących elektroników.
    Coś lepszego od proponowanych oscyloskopów na karcie audio.

    Eksperymentowałem z modułem STM32F103 (koszt ok. 2$).
    Przetwornik 12bit, wykorzystując DMA można również zapisać serię 1000 pomiarów w 1ms
    (czas pomiaru poniżej 1us.) Czyli 1MSa/s
    A tu kolega pokazał mi kompletny działający kit DSO138 z kolorowym LCD 320x240 (można kupić za ok. 60zł) i to dokładnie to co planowałem zrobić.

    Soft do DSO138 jest dostępny jako open source... za dodatkową opłatą można kupić wersję rozbudowaną dla obsługi 2-ch kanałów.

    Można próbować robić płytkę i lutować elementy, ale myślę,że wyjdzie drożęj niż gotowy kit

  • #8 15 Lut 2019 23:29
    piotrva
    Moderator na urlopie...

    zbychmg napisał:
    szkoda, że nie ma fotki z tego urządzenia

    Nie ma, bo urządzenie nie jest niczym innym poza płytką developerską maXimator.
    zbychmg napisał:
    chociaż przybliżonego kosztu elementów projektu.

    Koszt projektu to monitor (0-N zł), kabel (0-N zł) oraz płytka maXimator (której cenę można sprawdzić u dystrybutorów - obecnie 250 zł)
    zbychmg napisał:
    Może chociaż jakiś schemat, czy typ użytego modułu, algorytm programu.

    Schemat zestawu maXimator jest w internecie - podałem link do strony tego zestawu. Typ użytego modułu - jest nawet w tytule projektu. Oprogramowanie - całe (projekt sprzętowy i software) udostępniam za pomocą serwisu gitlab.

  • #9 17 Lut 2019 20:46
    zbychmg
    Poziom 28  

    Bardzo dziękuję za odpowiedź.
    Linki przeglądałem, ale zwykle autor przedstawia produkt finalny...
    Oscyloskop, to jednak jakiś układ wejściowy, płytka przetworników, wyświetlacz, zasilacz...
    Tak jak pisałem mam kilku młodych elektroników i chciałem ich czymś takim zainteresować.
    Myślałem, że to jest tańsze. Cena kitu DSO138 to 25% tej ceny, a to przy tych samych parametrach i dodatkowo z układem dzielnika wejściowego i kolorowym wyświetlaczem LCD....
    Jeszcze raz bardzo dziękuję za wyjaśnienia.
    Może kiedyś uda się zrobić wersję budżetową...

  • #10 17 Lut 2019 22:31
    piotrva
    Moderator na urlopie...

    @zbychmg
    To jest produkt finalny - założenia tego projektu były zupełnie inne i chodziło o przedstawienie zupełnie innej części problematyki budowy oscyloskopu.

    piotrva napisał:
    Podstawowy oscyloskop cyfrowy zaraz za wejściem sygnału posiada odpowiedni układ wejściowy oraz kondycjonujący. (...) Od razu zdradzę, że tego bloku w swoim oscyloskopie... nie zrealizowałem.



    zbychmg napisał:
    Oscyloskop, to jednak jakiś układ wejściowy, płytka przetworników, wyświetlacz, zasilacz...

    Oraz układ zbierający i przetwarzający dane, który własnie zaprezentowałem ;) Budowa każdej wspomnianej przez Ciebie części stanowi pewne wyzwanie, ja zaprezentowałem jedną z nich, która z mojego punktu widzenia była najbardziej ciekawa i de facto stanowi funkcjonalnie oscyloskop dla sygnałów z zakresu 0-2.5V ;)

    zbychmg napisał:
    Tak jak pisałem mam kilku młodych elektroników i chciałem ich czymś takim zainteresować.
    Myślałem, że to jest tańsze. Cena kitu DSO138 to 25% tej ceny, a to przy tych samych parametrach i dodatkowo z układem dzielnika wejściowego i kolorowym wyświetlaczem LCD....

    Z tym, że płytka DSO138 to tylko oscyloskop i... koniec. Można polutować, można popatrzyć na schemat i używać - to jest fajny projekt praktyczny. Tu dostajesz w owszem nie najniższej cenie, ale płytkę do nauki szerokiego tematu jakim jest programowanie FPGA, na której możesz m. in. zrobić dydaktyczny oscyloskop, pokazujący co się dzieje (modelowo) z danymi wewnątrz poważnych oscyloskopów. Po prostu mój projekt nie spełnia Twoich oczekiwań, bo to jest projekt czysto dydaktyczny i służący do dydaktyki dosyć specyficznej działki elektroniki.

  • #11 17 Lut 2019 22:39
    LChucki
    Poziom 24  

    @piotrva, temat FPGA/CPLD to dla większości programistów czarna magia. Widząc "program" na FPGA nie mogą sobie uświadomić, że wykonuje się on równocześnie a nie sekwencyjnie. Dla rasowego programisty taki DSO138 zawiera uC i jest zrozumiały, FPGA będzie be bo nie rozumie o co tam chodzi.
    Wychowałem się na GAL więc dla mnie CPLD czy FPGA nie jest tajemnicą. Był okres, gdy nie używałem układów programowalnych bo uC stały się na tyle szybkie i wyposażone, że nie trzeba było sięgać po CPLD/FPGA. Teraz znów sięgam po te układy, bo zbudowanie sensownego oscyloskopu, generatora DDS czy częstościomierza, bez układu programowalnego jest trudne, wręcz niemożliwe choćby ze względu na czas propagacji sygnałów.