Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)

mongoł2000 06 Paź 2017 13:14 5778 37
  • Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)
    Witam!
    Opisany tutaj projekt jest był pracą inżynierską na Politechnice Wrocławskiej dlatego w niektórych kwestiach jest trochę niedojrzały (Teraz kilka rzeczy bym poprawił - człowiek całe życie się uczy - o tym poniżej) :)

    Schemat blokowy:

    Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)

    ZASILANIE
    Całe urządzenie zasilane jest z akumulatora Li-ion, który to jest doładowywany przez układ MCP73837, po podłączeniu pod gniazdo USB lub zewnętrzny zasilacz. Proces ładowania jest prezentowany za pośrednictwem dwóch diod (ładuje/naładowany). Stan baterii sprawdzany jest przez ADC w mikrokontrolerze i wyświetlany na ekranie.
    Ważnym wyzwaniem przy tego typu urządzeniach jest wybór odpowiednich przetwornic. Zastosowałem układy z firmy Linear Technology o wysokiej sprawności, niskim poziomie zakłóceń oraz niskiej pulsacji. Wszystkie 5 przetwornic (w tym dwie podwójne) zapewniają odpowiednio napięcia:[Dla części analogowej:]-5.0V, 3.3V, 5.0V,[Dla części cyfrowej:] 1.2V, 2.5V, 3.3V, 5.0V. To co przy tylu różnych wartościach napięć, to sekwencja startowa - zła kolejność włączenia może spowodować uszkodzenia elementów. Czasem wystarczy układ RC a czasem wymagane jest sterowanie z portu, toteż zależy od wykorzystanych układów, bo może się zdarzyć, że wszystko się zgra bez specjalnej sekwencji. Na schemacie chyba nie ma elementu RC, który dodałem do jednej z przetwornic, bo czasem nie załączała wyjścia, gdy wcześniej pojawiło się -5V w obwodzie analogowym.

    Pracujący oscyloskop pobiera średnio 698mA z 3.7V aku, więc całkiem sporo, dlatego akumulator nie wystarczał na zbyt długa pracę :)

    TOR ANALOGOWY
    Tor rozpoczyna się serią micro-przekaźników bistabilnych, które regulują tłumienie oraz ustawiają sprzężenie. Następnie sygnał trafia na wzmacniacz ADA4817 z wejściem o dużej wartości rezystancji wejściowej (50GOhm). Wzmacniacz ten pełni rolę bufora, toteż już za nim, tor jest już niskoimpedancyjny i różnicowy. Po drodze zastosowano filtr antyaliasingowy, regulację offsetu na podwójnych potencjometrach cyfrowych (sterowane po I2C). Następnym układem jest wzmacniacz ADA4927, który połączony jest z przetwornikiem A/C.





    Dużo zachodu potrzeba na kompensacje układu dzielnika, zważając na to aby przy każdej zmianie czułości wejściowej mieć te samą rezystancję wejściową (1MOhm) oraz pojemność (13pF).

    Czułość wejściowa może być wybierana od 10mV/div do 5V/div w systemie 1-2-5.

    A oto charakterystyka toru:
    Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)

    AKWIZYCJA DANYCH
    8-bitowy przetwornik cyfrowy AD9481 (250MSPS) od Analog Devices pozwolił na pracę w trybie przeplotu, toteż układ FPGA mógł wolniej zbierać informację do pamięci blokowej RAM. Przeplot zmniejsza dwukrotnie wymagane samplowanie.
    Wybranym układem programowalnym był układ z rodziny SPARTAN 3 (XC3S200). W ten części, oprócz samej akwizycji danych, umieszczono obsługę wyczekiwania triggera. Komunikację z jednostką sterującą zapewnia magistrala SPI pracująca z prędkością ok 40Mb/s. "Wsad" pisany od podstaw w VHDL(choć wielkim ułatwieniem są gotowe bloki B-RAM oraz DCM w SPARTANACH).

    Jako, że ten układ FPGA nie posiada stałej pamięci konfiguracji (programu) musiałem zastosować zewnętrzną pamięć XCF02, programowana przez interfejs JTAG.

    Pamięć bufora wynosi 4096 próbek(8-bitowych) na kanał.

    JEDNOSTKA STERUJĄCA
    Ta część konstrukcji bazuje na mikrokontrolerze STM32F407VET6. Układ ten odpowiedzialny jest głównie za interfejs graficzny. Prócz tego nadzoruje stan baterii oraz kontroluje działanie przetwornic. Do jego zadań należy też obsługa zdarzeń z ekranu dotykowego oraz enkoderów mechanicznych. Cały program pisany od zera w C :)

    Mając do dyspozycji jednostkę FPU, wykorzystuję ten układ w procesie analizy Fourierowskiej oraz przy interpolacji sygnału dyskretnego przy najmniejszych podstawach czasu.

    Zastosowany ekran dotykowy LCD o wielkości 3.2 cala można znaleźć pod nazwą HY-32.

    OPROGRAMOWANIE
    * Kursory - zarówno dla czasu, jak i napięcia. Można odczytać wartość względną jak i bezwzględna położenia kursorów.
    Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)

    * Analiza w dziedzinie częstotliwości (FFT) - do wyboru 64,256 lub 1024 próbek. Użytkownik ma do wyboru pięć rodzajów okien tj. Hanninga, Hamminga, Blackmana, Barletty lub prostokątne. Wykorzystano bibliotekę DSPlib od ST.
    Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)

    * Pomiary automatyczne:
    ? pomiar napięcia międzyszczytowego ? Vpp ,
    ? pomiar napięcia maksymalnego ? Vmax ,
    ? pomiar napięcia maksymalnego ? Vmin ,
    ? pomiar wartości skutecznej napięcia ? VRMS ,
    ? pomiar wartości średniej napięcia ? VAVG ,
    ? pomiar częstotliwości ? f ,
    ? pomiar okresu sygnały ? tp .

    Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)

    * Różne:
    ? Autoset
    ? Możliwość obejrzenia przebiegu przed wyzwoleniem, jak i daleko po nim (dowolne przeglądanie bufora)
    ? Start/Stop
    ? Wyzwalanie kanałem 1/2/External
    ? Wyzwalanie jedynie zboczami rosnącymi lub malejącym (z braku czasu więcej ni ma :) )
    ? Wyzwalanie w trybach AUTO/NORMAL/FORCE/SINGLE

    Nastawy podstawy czasu reguluje się w zakresie od 1ns/div do 5s/div w systemie 1-2-5, używając enkodera mechanicznego (ten na dole - widoczne na pierwszym zdjęciu). Enkodery posiadają również przycisk, a więc używam uch do wyłączenia/włączenia urządzenia oraz przy wyborze kanału dla zmian czułości wejścia (która też jest ustawiana enkoderem, tyle że tym górnym).

    W urządzeniu zastosowałem detekcję kilku usterek, tak aby od razu można było stwierdzić co do podmiany/sprawdzenia :)
    Oto ekran przykładowego błędu (wystąpił po odłączeniu płytki z częścią analogową - jednostka sterująca nie wykryła potencjometrów cyfrowych w magistrali I2C)
    Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)


    UWAGI
    Efektywna prędkość próbkowania to 125MSPS, choć przy 250 też działa, lecz z powodu jittera, trochę bitów z ADC się traci :/
    Przy pracy nad takimi projektami przydają się narzędzia do symulacji dokładnie tych elementów, które mamy zamiar wykorzystać. Linear jak i Analog Devices zapewniają je bezpłatnie, a bardzo pomogły przy skonstruowaniu urządzenia.

    ULEPSZENIA
    1. Zasilanie - zamiast kilku przetwornic, lepiej użyć zewnętrznego specjalizowanego układu do zapewniania odpowiednich napięć (Układy od ISLxxxx są ok). Znika wtedy problem sekwencji startowej i mamy mniej elementów. Rozważałbym zastosowanie akumulatora o wyższym napięciu i pojemności.

    2. Układ wejściowy - za dużo przekaźników, ale to chyba dlatego, że miałem ich nadmiar :) Zamiast tego można wykonać dosyć łatwo obwód dla 350MHz wykorzystując przy tym 4 przekaźniki i np:
    -OPA4872 http://www.ti.com/lit/ds/sbos346c/sbos346c.pdf
    -THS4511 http://www.ti.com/lit/ds/symlink/ths4511.pdf
    - LMH6702 http://www.ti.com/lit/ds/symlink/lmh6702.pdf
    - i kilka mniej istotnych podzespołów.
    Może kiedyś złoże taki super tor wejściowy, choć analogówka trochę mnie ostatnio znudziła :)

    Dodać można również wejście 50Ohm.

    3. Akwizycja danych. Dla układu FPGA lepiej zastosować dobry specjalizowany zegar z małym jitterem. W celu lepszego dopasowania impedancyjnego oraz wyrównania długości ścieżek, można pokusić się o PCB z 4 warstwami. Wtedy też warto zaktualizować układ programowalny o coś z serii Virtex + zewnętrzna pamięć RAM. Wtedy dodałbym pewnie DAC AD9742 (http://www.analog.com/media/en/technical-documentation/data-sheets/AD9742.pdf) i zrealizowałbym generator arbitralny. Z wykorzystaniem Virtex, można pokusić się o ADC 5 GSPS i wtedy mamy prawdziwy oscyloskop z wysokiej półki. Ale wiadomo $...

    4. Interfejs użytkownika - tu można pomyśleć o wymianie wyświetlacz na jakiś z bardziej odpornym na zarysowania panelem, choć ten który jest w obecnych i tak mnie zadziwił (choć taśma od dotyku zerwała mi się już chyba 3 raz). Brakuje mi trochę "śliskości", aby wygodnie ustawiać kursory itp.
    Większy ekran też byłby plusem. MCU zapewnia bardzo szybkie działanie i sprawdził się, natomiast obecnie mamy układy z tej samej rodziny z lepszymi parametrami i dużo sprzętowych jednostek graficznych.

    5. Inne - USB od ST jest wg. mnie za wolne, aczkolwiek i tak bibliotekę od USB udało mi się podkręcić. Najlepszym rozwiązaniem byłoby jednak użycie specjalizowanych układów np. od Cypress. Optoizolacja też może się czasem przydać, a koszt nie duży.
    Zamiast kanapki jak na zdjęciu wolałbym zmniejszyć konstrukcję o połowę, choć z drugiej strony, taki rozdział pozwala na łatwe rozdzielenia masy cyfrowej od analogowej.
    W oprogramowaniu można dopisać wiele nowych funkcji, jak np. zaawansowane tryby wyzwalania. Pomysłów mam sporo ale czasu mało ;(

    PODSUMOWANIE

    Czas wykonania projektu: ok 6 miesięcy z uwzględnieniem wakacyjnej pracy po 8 h, dziewczyny, napraw auta itp...więc realnie może 2 miesiące ciężkiej pracy po 12h dziennie. Dużo czasu musiałem spędzić na np. wdrożeniu się w FPGA i stworzeniu narzędzi do programowania ich (studencki budżet).

    Co do kosztów urządzenia to wyszło mi ok 600 PLN, ale biorąc pod uwagę, że przetworniki, przetwornice, potencjometry cyfrowe, przekaźniki, wzmacniacze dostałem jako sample, to cena pewnie by się podwoiła :)

    W załącznikach całość pracy inż. ze schematami na stronach 11-13.
    Załączam kody źródłowe, choć pewnie nie są najlepszej jakości ze względu na pośpiech przy projekcie. Załączam, aby służyły ludziom w potrzebie :)

    Pozdrawiam!
    ----
    PS: Jak ktoś lubi zdjęcia PCB to do obejrzenia poniżej (tak jak ja, to załączam dodatkowo wraz ze zdjęciem składników na "ciasto"). I przepraszam za nadmiar tekstu.

    Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)


    Fajne!
  • #2 06 Paź 2017 13:39
    R-MIK
    Poziom 37  

    Ciekawa konstrukcja. Pomogłeś w wyborze, za które urządzenia mam się zabrać, gen DDS na CPLD czy oscyloskop :-)
    Do pamięci próbek użyłeś FPGA. Ma on sporo pamięci SRAM. Nie kusiło Cie aby zrobić cztery kanały? Fakt, że mało pinów w tym FPGA. Zrobiłeś wyświetlanie próbek przed wyzwoleniem, jak w profesjonalnych oscyloskopach. Co do przekaźników, to faktycznie "trochę" ich jest. Ale w oscyloskopach nie ma wyjścia. Wszystkie cyfrowe jakie spotkałem maja przekaźniki.
    Naprawdę kawał dobrej roboty

    Ja będę robił (po generatorze) oscyloskop ale w wersji niskobudżetowej. Użyję taniego CPLD, a pamięć próbek będzie w FIFO 8kB na kanał. Opcji pre-triger na razie nie przewiduję. Tak więc moja konstrukcja, będzie skromniejsza, tyle, ze będę miał 4 kanały.

  • #3 06 Paź 2017 13:58
    mongoł2000
    Poziom 18  

    Mozna zrobić jedno i drugie, ale tak aby jedno i drugie było na poziomie :)

    Pamięć BRAM pozwala na nie korzystanie z zewnętrznego SRAM. Lepsze układy mają kontroler RAM i to jest już coś, aby zwiększyć ilość próbek do kilku MB. Cztery kanały to bez sensu - inny był cel projektu i specjalnie nie zwiększa to zaawansowania projektu, po prostu duplikujemy.

    W ogóle to myślałem o modułowym zestawie dla elektroników - tak aby sobie dokupować bloki i łączyc z istniejącym, więc moze kiedyś będzie 4,6,czy 8 kanałów wraz z innymi przydatnymi instrumentami.

    Co do przekaźników, to jest wyjście - przekaźniki półprzewodnikowe, ale psują charakterystykę. Technologicznie patrząc to przekaźniki powinno się stosować w minimalnej ilości - przełączenie AC/DC + załączenie 50 OHm. Resztę można zrobić w inny sposób (ewentualnie jeden dla wyższych zakresów) tj. używanie multiswitcha półprzewodnikowego z szerokim pasmem (np ten który opisałem w "Ulepszeniach"). To też wymaga więcej wiedzy konstruktora, niż przekaźnik. Fajnie udało mi się przekaźniki wysterować oszczędzając piny jeśli zerkniesz na schemat :)

    A i jako, że to konstrukcja low-power, to przekaźniki są bistabilne - pobiera prąd tylko przy przełączeniu gdy następuje zmiana polaryzacji pinów :)

  • #4 06 Paź 2017 14:12
    eurotips
    Poziom 33  

    mongoł2000 napisał:
    Co do kosztów urządzenia to wyszło mi ok 600 PLN, ale biorąc pod uwagę, że przetworniki, przetwornice, potencjometry cyfrowe, przekaźniki, wzmacniacze dostałem jako sample, to cena pewnie by się podwoiła


    W cenie nawet do 1000zł jest z czego wybierać i masz pewność że zadziała,
    o tak pierwszy z brzegu, za 130$:
    Przenośny dwukanałowy oscyloskop cyfrowy na FPGA & ARM (max 250MSPS/kanał)

    DSO203/ Quad is a pocket size 4 channel digital oscilloscope for common electronic engineering tasks.
    It's based on ARM cortex M3 (STM32VCT6), providing 72MHz analog bandwidth with integrated FPGA and high speed ADC.
    Internal 2MB USB disk Could be used to store waveform, user application and upgrade firmware.
    Color:black
    Analog channel * 2: [CH_A] [CH_B]
    Digital channel * 2: [CH_C] [CH_D]
    Vertical Scale: 20mV-10V / div (x1 probe)
    Vertical solution: 8 bit
    Input Coupling: AC/ DC
    Max Input Voltage: 80 V pp (1 x sample)
    Storage: 4K per channel
    Software trigger type: edge, pulse, level (to be added)
    Hardware trigger type: Edge
    Trigger source: CH1/ CH2/ EXT
    Test signal generate: 10Hz to 1Mhz
    Storage: Internal 2MB USB disk
    Auto measure: Vmax, Vmin, Vpp, Vavr, Vrms Freq, Period, Pulse, Duty
    Cursor measurement: Level, Voltage
    Display mode: CH1, CH2, EXT, CH1 + CH2, CH1-CH2, CH1 * CH2
    Sampling mode: Realtime
    Sampling rate: 1kSa/ s - 72MSa/ S
    Power: Lipo battery
    Dimension: 98 * 60 * 14.5
    Package Content:1 x DSO203/ quad with battery
    2 x MCX osilloscope Probes
    1 x High Quality Mini USB Cable

    No ale to na Konkurs, więc jak najbardziej projekt godny uwagi,
    trzymam kciuki.

  • #5 06 Paź 2017 14:21
    mongoł2000
    Poziom 18  

    Projekt nie miał charakteru komercyjnego, a edukacyjny(drogie PCB prototypowe, dobrej klasy podzespoły itp). Do tego w tamtym czasie nie było tego rodzaju rzeczy dużo na rynku.

    Gdyby ustanowić jako cel sukces komercyjny to wszystko wyglądałoby inaczej, w zalezności od wybranego rodzaju klientów.

    Inna sprawa, że w tańszych produktach tego typu, próbuje się nadrabiać słaby hardware oprogramowaniem, słabym samplowaniem, albo samplowaniem ekwiwalentnym. Dla amatora to wystarczy, ale w laboratorium już nie. Oczywiście lepszy hardware to droższy produkt. Na codzień używam profesjonalnego oscyloskopu stojącego i PicoScope'a. Tu żadna próbka i żaden istotny moment wyzwolenia nie zostanie pominięty :)

  • #6 06 Paź 2017 17:03
    Kpc21
    Poziom 22  

    Przykładowy komunikat błędu ze zdjęcia sugeruje, że sytuacja, która wystąpiła, może skończyć się uszkodzeniem potencjometru. Czy aby na pewno o to chodziło?

    Bo wydaje mi się, że raczej o to, że sytuacja, która wystąpiła, może być po prostu objawem usterki potencjometru. Czyli nie "Possible to damage the potentiometer", tylko raczej "Potentiometer damage possible" (choć to może być dwuznaczne), czy jeszcze lepiej coś w stylu "Check potentiometer".

  • #7 06 Paź 2017 17:17
    mongoł2000
    Poziom 18  

    Błąd pokazał się kiedy odłączyłem podczas działania urzadzenia dolna płytkę na której znajduje się cyfrowy potencjometr. Więcej powiedziałby komunikat w stylu "The digital potentiometer has been disconnected ". Generalnie chodziło o idee, aby konstruując urządzenia, myśleć o ich self-teście.

  • #8 06 Paź 2017 22:10
    simw
    Poziom 13  

    No cóż, jeśli chodzi konkurs, to wg mnie ten projekt to kiler :)
    Dzięki szczególnie za umieszczenie pełnej dokumentacji łącznie z kodem.
    I nie przepraszaj za nadmiar tekstu, bo nie masz za co :)
    Przy okazji, jako "młody" adept programowania w języku C, spojrzałem do pliku main.c. Merytorycznie to pewnie nie za bardzo się znam, ale "tylko" 180 linii kodu, przy takim rozbudowanym projekcie, robi wrażenie.
    Jeszcze raz dzięki.

  • #9 06 Paź 2017 22:33
    mongoł2000
    Poziom 18  

    Dzięki. Czasem brakuje dobrego źródła, podparcia się czyimś projektem, szczególnie jak człowiek się chce czegoś nauczyć, dlatego projekt ze źródłami. Tak jak napisałem - projekt edukacyjny, nie tylko dla mnie ale i czytelników forum. Aby był to dojrzały komercyjny projekt to trzeba by uwzględnić punkty w "Ulepszenia".

    Plik main generalnie powinien być krótszy, a funkcje porozdzielane tematycznie w innych plikach. Plik oscilloscope.c ma ponad 2tyś linii. Starałem się, aby kod był w miarę czytelny. Sama idea oscyloskopu nie jest trudna, a problem może być jedynie z dobrą częścią analogową i akwizycji.

    Warto robić projekty, które jednoczesnie są wyzwaniem, wtedy najwięcej się uczymy. Nadal robie takie projekty komercyjnie i takie podejście się opłaca :)

  • #10 07 Paź 2017 00:10
    Pong.Chu
    Poziom 7  

    R-MIK napisał:
    Opcji pre-triger na razie nie przewiduję. Tak więc moja konstrukcja, będzie skromniejsza, tyle, ze będę miał 4 kanały.


    To jest akurat bardzo łatwe do zrobienia, przetwornik ADC musi działać cały czas i zpamiętywać próbki w rejestrze przesuwnym. Jeśli przyjdzie trigger to do pełnić bufor i wyświetlić.

  • #11 07 Paź 2017 00:21
    R-MIK
    Poziom 37  

    Pong.Chu napisał:
    R-MIK napisał:
    Opcji pre-triger na razie nie przewiduję. Tak więc moja konstrukcja, będzie skromniejsza, tyle, ze będę miał 4 kanały.


    To jest akurat bardzo łatwe do zrobienia, przetwornik ADC musi działać cały czas i zpamiętywać próbki w rejestrze przesuwnym. Jeśli przyjdzie trigger to do pełnić bufor i wyświetlić.

    Tyle, ze ja przyjąłem rozwiązanie, w którym po wyzwoleniu zapisywana jest cała FIFO, gdy sie zapełni wystawia mi sygnał przepełnienia. Wtedy CPLD zatrzymuje dalsze zapisy do czasu opróżnienia FIFO. Trzeba pamiętać, że mam zewnętrzny FIFO i nie wiem na jakim adresie aktualnie on operuje. FIFO ma tylko sygnały informujące, ze jest puste, pełne lub zapełnione w 50%. Na razie nie zastanawiałem sie nad tym jak rozwiązać problem. Jedyna furtka, to FIFO 50% i to, ze ma 9 bit. Ewentualnie w dziewiątym bicie mogę przechowywać informację o wyzwoleniu. Jest jeszcze tryb "przeźroczystego" FIFO, nawe z wejścia są transmitowane na wyjście. Nie pamiętam czy w tym czasie może odbywac się również zapis FIFO.

  • #12 07 Paź 2017 12:59
    Pong.Chu
    Poziom 7  

    Zajrzałem do mojego starego kodu prostego oscyloskopu. Mam tam tablicę std_logic_vector o wielkości 640 słów. Co każdy cykl danych z ADC wszystkie próbki są przesuwane w tablicy o jedną pozycję a najświeższa próbka jest dopisywana na początku:

    for i in 0 to 638 loop
    samples(i+1) <= samples(i);
    end loop;
    samples(0) <= i_data

    Gdzie i_data to jest właśnie nowa próbka. Gdy pojawi się trigger to następne 320 próbek jest w ten sam sposób dopisywanych i kończy się akwizycja. Potem zaczyna się rysowanie. Nie pamiętam jak to dokładnie jest syntezowane ale chyba jako gigantyczny rejestr przesuwny z 640 przerzutników słów 16-bitowych. Wszystko było w Cyclone V więc nie martwiłem się o zasoby.

  • #13 07 Paź 2017 13:31
    R-MIK
    Poziom 37  

    Pong.Chu napisał:
    Zajrzałem do mojego starego kodu prostego oscyloskopu. Mam tam tablicę std_logic_vector o wielkości 640 słów. Co każdy cykl danych z ADC wszystkie próbki są przesuwane w tablicy o jedną pozycję a najświeższa próbka jest dopisywana na początku:

    for i in 0 to 638 loop
    samples(i+1) <= samples(i);
    end loop;
    samples(0) <= i_data

    Gdzie i_data to jest właśnie nowa próbka. Gdy pojawi się trigger to następne 320 próbek jest w ten sam sposób dopisywanych i kończy się akwizycja. Potem zaczyna się rysowanie. Nie pamiętam jak to dokładnie jest syntezowane ale chyba jako gigantyczny rejestr przesuwny z 640 przerzutników słów 16-bitowych. Wszystko było w Cyclone V więc nie martwiłem się o zasoby.

    Zrobiłes bufor kołowy programowo. Warunkiem poprawnego działania takiego rozwiazania jest to, ze każda, próbka musi byc zapisana w pamięci. Jak to zrobić prockiem taktowanym nawet 160MHz, gdy próbki napływają 60MB/s a PIO pracuja max 50MHz? A mam cztery kanały. U mnie, sygnał wyzwalania powoduje zapełnianie FIFO. Już wtedy moge zacząć jer odbierać, ale przy wysokim taktowaniu ADC i FIFO w pewnym momencie FIFO przepełni się. Wtedy CPLD zatrzyma dalszy zapis. Procek odczyta FIFO i pozwoli aby CPLD czekało na nastepne wyzwolenie. Wszystko to opierałem o ideę projektu ze schematu w załączniku. Tyle, ze dałem 4 kanały, ADC 60MHz, FIFO 8kB i CPLD zamiast "wiadra" TTL. ADC mógłby byc szybszy, ale cena rośnie niewspółmiernie do szybkości przetwarzania. Z FIFO sa problemy, udało mi się kupić tylko 8kB.
    No i przyznam, że nie bardzo mam tu pomysł na rejestrowanie próbek przed wyzwoleniem przy dużych częstotliwościach.

  • #14 07 Paź 2017 14:09
    Pong.Chu
    Poziom 7  

    R-MIK napisał:

    No i przyznam, że nie bardzo mam tu pomysł na rejestrowanie próbek przed wyzwoleniem przy dużych częstotliwościach.


    Trzeba przenieść wszystko do FPGA łącznie z buforem na próbki. Bez problemu można zrobić 4 kanały 150 MHz łącznie ze sprzętowym liczeniem FFT/DFT. A w mikrokontrolerze (może być softcore) zrobić rysowanie ramek na ekranie, komunikację, wyświetlanie pomiarów etc.

  • #15 07 Paź 2017 14:23
    mongoł2000
    Poziom 18  

    Cytat:
    Jak to zrobić prockiem taktowanym nawet 160MHz, gdy próbki napływają 60MB/s a PIO pracuja max 50MHz?


    Proste. Tak samo jak i profesjonalne oscyloskopy - posiadają kilka ADC. Też tego użyłem przecież. Zbieram dane z f= 125MHz, ale dzięki przeplotowi realnie sampluje z 250MSPS. Oczywiście można dodać jeszcze dwa ADC i nawet na takim słabym Spartanie, można mieć 500MSPS lub więcej. Trzeba tylko mięć dobre źródła zegara przesunięte odpowiednio w fazie.

    Tak więc możesz zastosować dwa ADC na kanał. Aczkolwiek tak jak kolega Pong.Chu uważam, że takie rzeczy robi się na najbardziej zorientowanym do tego celu podzespole - układzie FPGA.

    Jeśli się upierasz przy swojej konstrukcji, to brak zapisu sampli przed triggerem trochę dyskwalifikuje takie rozwiązanie. Ale jeśli mają to być jedynie wyzwolenia zboczem i poziomem, to możesz zastosować szybki komparator na wejściu i ustalać mu poziome z DAC MCU.

  • #16 07 Paź 2017 14:49
    R-MIK
    Poziom 37  

    [quote="mongoł2000" Ale jeśli mają to być jedynie wyzwolenia zboczem i poziomem, to możesz zastosować szybki komparator na wejściu i ustalać mu poziome z DAC MCU.[/quote]
    Jak zbocza badanego sygnału będą łagodne to można poziomem regulować moment wyzwolenia.

    Jeszcze jest ta opcja 9-tego bitu. Mogę w kółko samplować, gdy mam FIFO zapełnione w 50% to je zerować (FIFO ma sygnał resetu) jeśli nie wystąpiło wyzwolenie, jeśli nastąpiło zapisać do końca. Dziewiąty bit przechowywałby informacje o wyzwoleniu. W ten sposób mogę znaleźć moment wyzwolenia.

    A czy się upieram, PCB juz mam. Zrobię, nabiorę doświadczenia i pewnie kolejny dam w FPGA, a nie CPLD. Na razie zrobię DDS na CPLD o tyle nietypowy, że będzie miał multiplikator na szybkiej pamięci SRAM.

  • #17 07 Paź 2017 14:55
    mongoł2000
    Poziom 18  

    Cytat:
    gdy mam FIFO zapełnione w 50% to je zerować (FIFO ma sygnał resetu) jeśli nie wystąpiło wyzwolenie, jeśli nastąpiło zapisać do końca

    Robiłem tak na innym oscyloskopie (na STM32F3) i działało to fajnie. Tam miałem jeszcze wyzwolenia w samym ADC, komparatory itp. Niezła maszyna się z tego zrobiła , ale projekt zapauzowany.

  • #18 07 Paź 2017 15:09
    R-MIK
    Poziom 37  

    mongoł2000 napisał:
    Cytat:
    gdy mam FIFO zapełnione w 50% to je zerować (FIFO ma sygnał resetu) jeśli nie wystąpiło wyzwolenie, jeśli nastąpiło zapisać do końca

    Robiłem tak na innym oscyloskopie (na STM32F3) i działało to fajnie.

    Tyle, ze może tak być, że resetuję FIFO i zaraz nastąpi wyzwolenie. Jak przebieg jest powtarzalny (wyzwalanie ciągłe) nie ma problemu, bo co było przed wyświetlę z poprzedniej akwizycji, jeśli natomiast jest to wyzwalanie jednokrotne to juz może byc problem.
    Ale nie wymagajmy cudów, od projektu o budżecie kilku tysiecy, co innego gdy do dyspozycja ma się kilkaset tysięcy.

  • #19 07 Paź 2017 15:53
    Pong.Chu
    Poziom 7  

    R-MIK napisał:

    Ale nie wymagajmy cudów, od projektu o budżecie kilku tysiecy, co innego gdy do dyspozycja ma się kilkaset tysięcy.


    Tyle że FPGA do tej aplikacji kosztują grosze (w sensie znacznie mniej niż kilka tysięcy za sztukę) a dają nieporównywalnie większe możliwości niż 'dyskretne' komponenty jak zewnętrzna pamięć i procesor. Pakowanie się w starą technologię pozwa zaoszczędzić na koszcie scalaków ale przelewa się koszt na pracochłonność opracowania projektu. W Polsce robocizna jest bardzo tania za to oszczędza się na krzemie - zupełnie przeciwnie niż na Zachodzie gdzie praca człowieka jest najdroższą częścią projektu. Dlatego stosuje się nowoczesne narzędzia wysokopozimowe oraz rozwiązania - żadnen dobry manager projektu nie pozwoli na używanie np. assemblera celem optymalizacji kosztów pamięci w mikrokontrolerze bo zlalezienie kogoś kto zna assembler uC jest znacznie droższe niż znalezienie człowieka który ogarnia embedded C/C++.

  • #20 07 Paź 2017 16:02
    R-MIK
    Poziom 37  

    Pong.Chu napisał:
    R-MIK napisał:

    Ale nie wymagajmy cudów, od projektu o budżecie kilku tysiecy, co innego gdy do dyspozycja ma się kilkaset tysięcy.


    Tyle że FPGA do tej aplikacji kosztują grosze (w sensie znacznie mniej niż kilka tysięcy za sztukę) a dają nieporównywalnie większe możliwości niż 'dyskretne' komponenty

    Tyle, że nie zawsze mam pełna dowolność. Czasem mam pełna dowolność, czasem muszę użyć konkretnego scalaka w jakim projekcie, czasem konkretnego modułu, innym razem raster wyprowadzeń nie może być gęstszy niż 1,27mm.
    "Oczywista, oczywistość", że nie buduję oscyloskopu dla siebie, bo mam dwa.

  • #21 08 Paź 2017 20:49
    Darom
    Specjalista elektryk

    Witam
    Jak dla mnie projekt kolegi mongoł2000 należy do ścisłej czołówki najlepszych projektów prezentowanych w konkursie.

    Muszę się przyznać, że kilka lat temu popełniłem dość zbliżone urządzenie - "rejestratora przepięć". Wykonałem go nie na FPGA tylko na ARMie (
    STM32F429). Urządzenie funkcjonalne jest dość zbliżone budową do oscyloskopu, ale bez nacisku na akwizycję danych. Wybrane sample przechowywane są w pamięci. Kilka takich urządzeń zainstalowałem w rozdzielniach elektrycznych, które są pod moją opieką i jestem zadowolony z ich działania. Niestety pewne rzeczy są na ARMie nie do przeskoczenia, bo brakuje mocy. I tak od dwóch lat przymierzam się, aby coś zrobić na Spartanie lub Artiksie, ale brakuje mi śmiałości. Boje się, że nie dam rady. Nigdy nic nie pakowałem do CPLD czy FPGA. Jakieś podstawy VHDL-a mam. Kiedyś (10 lat temu) coś modelowałem łącznie z wykonaniem workbencha. Może kolega by coś polecił na początek?

    pzdr
    -DAREK-

  • #22 08 Paź 2017 20:54
    mongoł2000
    Poziom 18  

    RMIK:

    Cytat:
    Tyle, że nie zawsze mam pełna dowolność. Czasem mam pełna dowolność, czasem muszę użyć konkretnego scalaka w jakim projekcie, czasem konkretnego modułu, innym razem raster wyprowadzeń nie może być gęstszy niż 1,27mm.
    "Oczywista, oczywistość", że nie buduję oscyloskopu dla siebie, bo mam dwa.


    Dziwne podejście do projektowania, u mnie przeważnie to jako projektant zawsze mam wpływ na wszystko :)
    Inna sprawa, że używanie dyskretnych elementów zamiast jednego układu programowalnego to wiele problemów po drodze - przy szybkich urządzeniach trzeba myśleć o impedancji wejść, linii, długości linii, pojemności względem masy itp. W takim FPGA nawet można sobie programowo impedancję wejść ustawić.
    Wg mnie zamiast spędzać czas nad projektem, który będzie głęboko nie na czasie, lepiej spędzić ten czas nad nauką nowych technologii, czy to FPGA,czy ARM, czy embedded linux.

    Kolega ma podejście trochę niektórych moich profesorów, którzy uczyli z szarych notatek z lat 70-tych. Oczywiście byli też tacy, którzy uczyli ARM, czy układów programowalnych. A najlepsze co było to przedmiot uczący metodologii budowy - od wyboru elementów, dlaczego tych, technologii, opłacalności produkcji etc. U nas tego trochę brakuje, dlatego Zachód jest do przodu.

  • #23 08 Paź 2017 21:03
    R-MIK
    Poziom 37  

    mongoł2000 napisał:
    RMIK:
    Cytat:
    Tyle, że nie zawsze mam pełna dowolność. Czasem mam pełna dowolność, czasem muszę użyć konkretnego scalaka w jakim projekcie, czasem konkretnego modułu, innym razem raster wyprowadzeń nie może być gęstszy niż 1,27mm.
    "Oczywista, oczywistość", że nie buduję oscyloskopu dla siebie, bo mam dwa.


    Dziwne podejście do projektowania, u mnie przeważnie to jako projektant zawsze mam wpływ na wszystko :)

    Bywa, tak: "mamy tego dużo, zaprojektuj soś na tym, trzeba to sprzedać".
    Albo: "Trzeba to zareklamować, zrób coś na tym".

  • #24 08 Paź 2017 21:18
    mongoł2000
    Poziom 18  

    Darom: dzięki , plusem można oceniać :)

    Tesli chodzi o oscyloskop, to zamiast STM32F4, polecam STM32F3 - jest bardziej zorientowany na przetwarzanie sygnałów i udało mi się wykonać całkiem przyzwoity oscyloskop na tym układzie z zaawansowanymi wyzwoleniami i szybkością około 10 MSPS. Fajna sprawa to wewnętrzne PGA(wzmacniacz o regulowanym wzmocnieniu). Do tego udało się tam pomieścić generator funkcyjny i zasilacz, więc generalnie był to taki kombajn. Softu na razie nie udało się ukończyć. USB jest dość ograniczającą sprawą i warto użyć coś od Cypress i wysyłać do USB po SPI.

    Co do FPGA:
    - liczy się praktyka :)
    - ja uczyłem się na https://kamami.pl/wycofane-z-oferty/59728-spartan-3-200k.html
    - śmiało możesz brać jakieś dev boardy z Spartan 6(im lepszy układ tym więcej IP-Core masz dostępnie - to takie gotowe bloki, jak kontrolery pamięci, odbiornik HDMI itp.)
    - ja, aby się czegoś nauczyć, to robię jakiś zaawansowany projekt, więc też sobie taki wymyśl - np. kiedyś robiłem modem OFDMA
    - polecam rzeczy od Xilinx, soft jest za free w podstawowej wersji
    - FPGA się nie programuje, ale konfiguruje, a w Spartanie 3 nie ma wewnętrznego EEPROM, więc wgrywałem konfigurację do zewnętrznego konfiguratora (mały scalak)
    - warto mieć jakiś porządny JTAG
    - w Xilinx masz Chipscope - takie debugowanie dla FPGA
    - ja używałem starszej wersji oprogramowania, bo mieli wtedy jeszcze analizator stanów logicznych i mogłem wizualnie podejrzeć co się dzieje - teraz chyba jedynie za pomocą napisanych testów można sprawdzić działanie układu
    - przy VHDL trzeba zmienić filozofie z sekwencyjnej na współbieżną
    - nie pamiętam książek z których się uczyłem, ale nawet te po polsku nie są złe

    Potem można pobawić się w Zync7000 - ARM+FPGA w jednym, tyle że ARM raczej pod embedded linux niż taki jak ten STM'owy.

  • #25 08 Paź 2017 21:21
    tronics
    Poziom 35  

    @mongoł2000 cyclone V altery też ma wersje z ARM a jest chyba tańszy. Quartus jak ISE też ma chyba darmową wersję.

  • #26 08 Paź 2017 21:27
    mongoł2000
    Poziom 18  

    Racje Altera jest tańsza i ma za free, Lattice ma jeszcze tańsze. Zdecydowałem się używać Xilinxa, pewnie ze względu na większą popularność, więc i więcej pomocy online. Do tego Xilinxa miałem na zajęciach, więc po ściągnięciu Quartus nie byłem zadowolony, a czasu na projekt nie było za dużo :)

    Na zajęciach projektowaliśmy mikroprocesor, potem peryferia itp, więc w sumie to na każdym FPGA można mieć swój MCU+FPGA na własne peryferia :)

  • #27 08 Paź 2017 23:36
    simw
    Poziom 13  

    Darom napisał:
    Witam
    Jak dla mnie projekt kolegi mongoł2000 należy do ścisłej czołówki najlepszych projektów prezentowanych w konkursie.

    I tak od dwóch lat przymierzam się, aby coś zrobić na Spartanie lub Artiksie, ale brakuje mi śmiałości. Boje się, że nie dam rady. Nigdy nic nie pakowałem do CPLD czy FPGA. Jakieś podstawy VHDL-a mam.

    Witaj w klubie :), podobnie jak Tobie brakowało mi śmiałości. Nazwa projektu, który chcę zacząć, nawet przez gardło mi nie przechodzi, taki się wydaje skomplikowany przez to FPGA, ale jak pisał Kolega mongoł2000, trzeba robić duże projekty, dokładając kolejne cegiełki nabierając zarazem doświadczenia.

    Ja zacząłem od książek Pana Piotra Zbysińskiego, tzn na razie je kupiłem :)
    "Układy programowalne pierwsze kroki" oraz "Układy FPGA w przykładach".
    Dodatkowo tegoż autora jest dostępna seria artykułów w Elektronice Praktycznej o takiej samej nazwie.
    Być może to już "antyki", ale jakoś nabrałem zaufania. Na te książki ostatnio widziałem również promocje...

    Na forbocie mamy też od pewnego czasu serię artykułów, dla początkujących, w tej tematyce.

  • #28 09 Paź 2017 00:07
    R-MIK
    Poziom 37  

    simw napisał:

    Ja zacząłem od książek Pana Piotra Zbysińskiego, tzn na razie je kupiłem :)

    CPLD też od tego zaczynałem (CUPL to z jakiś artykułów EP też Zbysińskiego, na Amidze GAL-e robiłem), tyle, ze nie musiałem kupować bo dał mi je.

  • #29 11 Paź 2017 19:33
    mongoł2000
    Poziom 18  

    Dokładnie te same książki chciałem polecić. Aczkolwiek obecnie w Internecie też znajduje się sporo porządnej literatury. Na poziomie zaawansowanym cieżko znaleźć już informacji w języku polskim, ale raczej każdy inżynier zna biegle angielski techniczny, bo bez tego nie można nic porządnie zrobić. Same dokumentacje od Xilinx są mega dobrym źródłem wiedzy, ale zbyt treściwe. FPGA jest całkiem przyjemnie i obecnie przymierzam się do budowy przemysłowego LIDAR,ale z całkowicie nowym podejściem do pomiaru (statystyka i analiza charaktery sygnały powrotnego, a nie zwykły pomiar czasu powrotu). Tak aby zrobić dokładny w miarę LIDAR na odległości do 400m za mniej niż 200 USD :) Oczywiście projekt komercyjny dlatego nie wystąpi w konkursie :(

  • #30 13 Paź 2017 09:54
    Darom
    Specjalista elektryk

    mongoł2000 napisał:
    Tak aby zrobić dokładny w miarę LIDAR na odległości do 400m za mniej niż 200 USD :) Oczywiście projekt komercyjny dlatego nie wystąpi w konkursie :(

    A ja z kolei myślałem o podobnej rzeczy - tylko o reflektometrze :-). Niedawno mi w firmie popsuł się reflektometr i nie ma gdzie go naprawić.
    Pomyślałem, że przydałby się własnej roboty.

    pzdr
    -DAREK-

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME