Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Wspólny projekt generatora DDS na elektroda.pl

gdL 08 Feb 2019 20:34 15657 175
Texa Poland
  • Wspólny projekt generatora DDS na elektroda.pl
    Ostatnio na forum Elektrody pojawił się bardzo ambitny wspólny projekt DSO, ale będzie to prawdopodobnie długoterminowa praca grupy osób. Chciałbym ze swojej strony zaproponować szybkie zrealizowanie czegoś innego, mianowicie urzeczywistnienie w formie profesjonalnej mojego gotowego i działającego projektu przenośnego generatora DDS.

    ANKIETA: https://goo.gl/forms/qFlNwbO7Se47mYVO2
    WYNIKI ANKIETY: Link

    Czy warto?
    Przede wszystkim chciałbym poprosić Was o wypowiedzenie się w kwestii zasadności realizacji takiego projektu. Czy takie urządzenie przyda się w Waszym warsztacie. Może będzie szansa na pojawienie się wspólnie zaprojektowanego generatora DDS w sklepiku elektrody? To byłoby urządzenie zrobione przez nas dla nas. Przede wszystkim chodzi tutaj o projekty relatywnie proste, tanie, skierowane do początkujących i elektroników hobbystów, pozwalające na doposażenie warsztatu. Tutaj pytanie do @gulson czy jest możliwość ewoluowania projektu w kierunku produktu który pojawi się w sklepiku elektroda.pl?

    Moja motywacja.
    Realizacja tego projektu nie wiąże się dla mnie z żadnymi zyskami finansowymi – ma charakter ‘non profit’. Chciałem udostępnić swoją pracę w nadziei, że przyda się jeszcze komuś a przy okazji będziemy się przy tym uczyć nowych rzeczy. Mam też nadzieję, że jest to dopiero początek i zaczniemy się dzielić swoimi gotowymi projektami mając w zamyśle wzbogacenie oferty sklepiku o projekty Nasze, a nie tylko sprowadzone z krajów dalekiego wschodu.

    Mój projekt jest prosty i tani w realizacji, a także typowo amatorski, ale przy niewielkiej ilości elementów pozwala osiągnąć ciekawe rezultaty. Jeśli wykażecie zainteresowanie i uznacie to za warte realizacji, to może zwiększy to szansę na pojawienie się efektu naszej pracy w postaci gadżetu w sklepiku elektrody.

    Mam nadzieję, że wiele osób zaczynających swoją przygodę z elektroniką mogłoby dzięki temu dostać do ręki pierwszy generator z cyfrową regulacją amplitudy, który będzie zarazem ‘tańszy’ jak i lepszy od chińskich odpowiedników.

    Olbrzymia prośba do bardziej zaawansowanych użytkowników.
    Czy chcielibyście pomóc w zaprojektowaniu PCB i wprowadzeniu poprawek czy to w oprogramowaniu czy sprzętowych do projektu, aby nie zwiększając nadmiernie kosztów poprawić funkcjonalność projektu?

    Obecne cechy urządzenia:
    Dwa kanały:
    -jeden 1# DDS,
    -drugi 2# HS.
    Trzecie wyjście to kanał #1 przez kondensator (AC i DC). Kanały pracują równolegle. Zmiana parametrów odbywa się podczas generowania - urządzenie pozostaje responsywne.

    1#:
    - sygnał - sinus, piła, odwrotna piła, prostokąt, ekg, szum, trójkąt
    - częstotliwość - 20Hz do 100kHz (krok 20Hz), - opcja software-owego wyłączenia i włączenia generowania.
    - amplituda od 100mV do 5V
    - dla sygnału prostokątnego jest możliwość regulacji wypełnienia

    2#:
    - sygnał prostokątny
    - częstotliwość - 200Hz - 10MHz (wyższe częstotliwości mają duże kroki 1,2,5,10MHz).





    Zastosowane komponenty:
    ATMEGA 16A 20MHz (przetaktowana, użycie 16MHz wymaga zmian w kodzie), opamp MCP 6022.
    Opcjonalne zasilanie bateryjne, pojedyncze ogniwo 18650 Li-Ion z typową aplikacją ładowarki Li-Pol TP4056 pojedyncza cela 1S 3,7V microUSB z zabezpieczeniami oraz wyjście 5V na taniej przetwornicy "własny power bank" do 500mA.

    Schematy:
    Wspólny projekt generatora DDS na elektroda.pl

    Wspólny projekt generatora DDS na elektroda.pl

    Co wyróżnia mój generator spośród wielu gotowych rozwiązań?
    A. Logiczny interfejs z pojedynczym klikalnym enkoderem.
    B. Przestrajanie w locie podczas generowania sygnału (krok 20Hz).
    C. Cyfrowa regulacja amplitudy.
    D. Zasilanie bateryjne.
    E. Czytelny kod napisany przeze mnie (można sobie łatwo dodać inne moduły).
    F. Minimalna ilość elementów.

    Oprogramowanie jest pisane w C++ pod Arduino IDE. Wiem, że wiele osób cechuje być może słuszna niechęć do tego środowiska, ale mnie się podoba przyspieszenie tworzenia projektów poprzez mądre stosowanie przygotowanych modułów i funkcji oraz potencjalna łatwiejsza przenośność projektu na inną platformę sprzętową. Zmiany wymagają bowiem jedynie funkcje niskopoziomowe.

    Co można poprawić?
    a). Wyjście DDS jest terminowane 50 ohm ale nie jest w stanie dostarczyć odpowiedniego prądu do obciążenia. Można nad tym popracować (może tranzystor w układzie sprzężenia zwrotnego wzmacniacza operacyjnego?).

    b). Ewentualne dodanie modułu FTDI / podobnego i napisanie oprogramowania PC bazującego na porcie szeregowym celem zaopatrzenia generatora w zewnętrzną obsługę z poziomu PC przez USB, w najprostszej formie rysowanie przebiegu i jego wysyłanie do generowania – może wymagać użycia ATMEGA 32A zamiast 16A.

    c). Ewentualne zabezpieczenie wyjścia przed wysokim napięciem (zwarcie nawet w obecnej formie nie robi mu krzywdy, bo opamp jest przed nim zabezpieczony).

    d). Do rozważenia realizacja generatora na innym procesorze poprawiającym parametry układu, choć jestem niechętny temu przynajmniej w pierwszej wersji, ze względu na niekończące się dyskusje co jest lepsze. Moim zdaniem odwodzi to od realizacji konstrukcji.

    Strona projektu na którym byłby bazowany wspólny projekthttps://www.elektroda.pl/rtvforum/topic3388293.html

    Proszę o wszelkie komentarze za i przeciw oraz ewentualną chęć pomocy, będzie potrzebna:
    1. Dyskusja nad zasadnością realizacji tego projektu w opisanej formie.
    2. Dyskusja nad poprawkami konstrukcji.
    3. Dyskusja nad UI.
    4. Rewizja kodu programu z uwzględnieniem punktu 2 i 3.
    5. Zaprojektowanie PCB z wyprowadzeniem złącza ISP do programowania.
    6. Pomoc przy tworzeniu projektu obudowy (CAD).
    7. Pomysły i sugestie a propos dalszego rozwoju projektu po zrealizowaniu wersji pierwszej.

    W miarę możliwości proszę o oznaczanie tymi cyferkami swoich przemyśleń lub chęci współpracy, żebyśmy się nie pogubili kto do czego się odnosi.

    AKTUALIZACJE:

    2019.02.09: Pliki zostały przesłane na github. Zapraszam do wprowadzania modyfikacji i testowania: https://github.com/antistorm/dds

    2019.02.09: Wersja w pełni obiektowa - łatwiejsza do obejrzenia, podzielona na osobne pliki:
    https://github.com/antistorm/dds/tree/master/fully-objected-dds

    2019.02.10-11: Pojawiły się pomysły obejrzenia jak zbudowane są zewnętrzne projekty: Arduino based DDS Signal generator using AD9851 oraz https://sp8qep.wordpress.com/2017/09/28/nanodds/

    2019.02.12: Temat rozważań technicznych wydaje się już w dużej mierze 'przegadany'. Dodałem więc ankietę z Waszymi finalnymi oczekiwaniami co do urządzenia: https://goo.gl/forms/qFlNwbO7Se47mYVO2
    WYNIKI ANKIETY: Link

    DYSKUTOWANE PROPOZYCJE:
    - STM32 i wewnętrzny DAC, Tanie STM32 mają DAC o prędkości do około 1MSPS, ATMEGA 20MHz dostarcza około 1.3MSPS. Brak widocznej przewagi. Wspólny projekt generatora DDS na elektroda.pl
    - ATXMEGA32A4U
    - STM32 i zewnętrzmy DAC - ? Proszę o propozycje modeli i rozwiązań.
    - ESP32 i edytor przebiegów pod PC - ESP32 może zapewnić funkcje smart.
    - FPGA - wysoka cena, niewielka grupa osób umie coś z tym zrobić :)
    - AD9850 - tylko sinus/prostokąt. Wysoka cena w PL (70zł/szt). Na Aliexpress cena (jak się okazuje) jest sporo niższa.
    - inny zewnętrzny moduł DDS z procesorem pracującym we front-end.

    OBECNE USTALENIA:
    - Kod programu jest dostępny na github do Waszego wglądu i modyfikacji.
    - Przechodzimy na smd w całości.
    - Klikalny enkoder obrotowy w UI jest dobrym pomysłem.

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    gdL
    Level 27  
    Offline 
    Has specialization in: medycyna, programowanie, meteorologia
    gdL wrote 956 posts with rating 235, helped 117 times. Live in city Zgierz. Been with us since 2004 year.
  • Texa Poland
  • Texa Poland
  • #3
    _lazor_
    Moderator of Designing
    Jeśli byś chciał prowadzić projekt gdzie będzie projektowana open source PCB to polecam skorzystać z circuit maker. Jest to darmowe oprogramowanie bazujące na altium/protel umożliwiające projektowanie jednego układu przez więcej niż jedną osobę (projekty grupowe).
    Znacząco może to ułatwić realizowanie projektu :)
  • #4
    And!
    Admin of Design group
    Ad 7 - w tej wersji projekt jest bardzo atrakcyjny kosztowo i wystarczający dla wielu osób, jeżeli miałyby kiedyś powstawać wersje "pro" można pomyśleć o innym mikrokontrolerze, a nawet FPGA to ułatwi osiągnięcie wyższych częstotliwości wyjściowych. Natomiast to raczej pomysł na kolejne edycje, tutaj mamy dobrą bazę która już została zrealizowana i można ją ew. rozwinąć po zebraniu zapotrzebowania od odwiedzających elektroda.pl.

    Z funkcjonalności nie zauważyłem przemiatania w określonym zakresie, krokiem i szybkością.
  • #5
    piotrva
    VIP Meritorious for electroda.pl
    Dlaczego R10 ma inną wartość?
    Po co w ogóle te układy RC? Eliminacja drgań styków programowa i masz 6 komponentów mniej - ja na Hackathonie na jednym Arduino Mega opędzałem sprzętową eliminację drgań styków od... 6 enkoderów ;)
    Ja bym dodał do tego normalnego DAC-a - nie są drogie
    Płytkę bym zmienił na SMD

    Uwaga poza konkursem: dałbym jakiegoś STM32 z DACem na pokładzie.
    W sumie motywacja do publikacji kolejnego projektu z czasu studiów, gdzie zrobiłem DDS'a na STM32F429ZI-Discovery

    EDIT:
    STM32F051K4T6 z 1 kanałem przetwornika DAC 12-bit; 1 MSPS, ok. 12 zł w detalu, w hurcie cena schodzi do 8 zł
  • #6
    gdL
    Level 27  
    @And! Ad 5(PCB). Podoba mi się pomysł przeprojektowania płytki pod SMD. Myślisz, żeby zarówno opamp jak i procesor były pod SMD?
    Ad 4 (kod). Jeśli chodzi o przemiatanie, to rzeczywiście go nie ma. Obawiam się, że dodanie trzeciego ekranu z przemiataniem mogłoby zagmatwać kod programu, który i tak jest już dosyć skomplikowany. Jeśli jest to must have, to myślę, że pewnie da się to zrobić.

    @piotrva Ad 2 (konstrukcja). Czytałem, że styki enkodera mają lepszą wytrzymałość przy małych prądach, przycisk ponoć lubi większe. Debouncing hardware'owy troszkę poprawia jasność programu i przyspiesza moment rozpoczęcia generowania sygnału. Pamiętajmy, że jeśli procesor robi cokolwiek innego, wtedy nie generuje sygnału. Dlatego na filmiku na ekranie oscyloskopu widać glitche - update ekranu LCD to moment, kiedy procesor zamraża generowanie.
  • #7
    TechEkspert
    Editor
    @piotrva STM32F051K4T6 z DAC 12-bit 1 MSPS to bardzo kusząca propozycja, odejście od drabinki rezystorowej, zwiększenie zakresu częstotliwości i to wszystko w jednym układzie (nie licząc wzmacniaczy wyjściowych). Jest to także odejście od "standardowego" podejścia, dostępności i Arduino. Ciężka decyzja, jak dla mnie na + mimo że wymaga przeprojektowania praktycznie od 0.
    Jaki wzmacniacz wyjściowy należałoby zastosować dla DAC 1MSPS.

    Kiedyś miałem okazję testować generator DDS o podobnej konstrukcji. Układ posiadał analogową regulację amplitudy napięcia wyjściowego, a także ofsetu (zasilanie symetryczne), sporą wadą był brak impulsatora i wykorzystanie przycisków do wprowadzania nastaw, oraz słabe parametry wzmacniacza wyjściowego. Trochę sytuacja została poprawiona gdy wymieniłem wzmacniacz wyjściowy LM358 na TL082: https://www.elektroda.pl/rtvforum/topic3445820.html

    Dlatego dla mnie sterowanie przy pomocy impulsatora to dobry pomysł.

    Co do funkcjonalności to przydałoby się przestrajanie wsp. wypełnienia przebiegu prostokątnego bez zakłóceń tego sygnału.
    Serwa i różne sterowniki przemysłowe sterowane są czasami takim przebiegiem, więc jego symulowanie pozwala na sterowanie układem poza urządzeniem.
  • #8
    piotrva
    VIP Meritorious for electroda.pl
    Ad. Enkoder.
    W tej konfiguracji styki enkodera obrywają niezłym prądem - kondensator ładujesz przez rezystor pociągający procesora, zaś rozładowanie jest bezpośrednio przez styki... 5V na zwarciu...

    Ad. STM. Tam jest DMA więc problemów z przerwaniem generowania sygnału nie ma.

    Zaś w wypadku Tego projektu - sygnał powinien być generowany na przerwaniach - może wrzucisz kod na jakiegoś gita żebyśmy mogli szybko zobaczyć i się odnieść?
  • #9
    gulson
    System Administrator
    gdL wrote:
    Tutaj pytanie do @gulson czy jest możliwość ewoluowania projektu w kierunku produktu który pojawi się w sklepiku elektroda.pl?

    Oczywiście, byłoby wspaniale. Wszystkie koszta pokrywam, jak w przypadku DSO.
  • #11
    And!
    Admin of Design group
    @gdL ciężko tu mówić o must have w stosunku do wymagania co do przemiatania częstotliwości, podobnie jak w przypadku każdego innego parametru, bardziej jest to optymalizacja projektu i wyciśnięcie maksimum aby zbliżyć się do zgłaszanych potrzeb.

    Trzeba podjąć decyzję czy idziemy w kierunku rezystorowego DAC, czy wbudowanego DAC o większej ilości sampli i rozdzielczości (a być może większej liniowości).

    Zapowiada się możliwość poprowadzenia projektu od tematu do fizycznego produktu w sklepiku, to byłaby bardzo fajna sprawa.
  • #12
    piotrva
    VIP Meritorious for electroda.pl
    Moim zdaniem budowa dyskretnej drabinki r2r nie ma sensu przy porównaniu ceny atmegi do stma z wbudowanym DAC.

    Zaś co do ceny, myślę, że używając gotowej obudowy dałoby się z takim projektem zejść w okolice 80-100 zł. Pytanie czy warto pozostawiam ze swojej strony otwarte.
  • #13
    gdL
    Level 27  
    piotrva wrote:

    Zaś w wypadku Tego projektu - sygnał powinien być generowany na przerwaniach - może wrzucisz kod na jakiegoś gita żebyśmy mogli szybko zobaczyć i się odnieść?


    Generowanie odbywa się w wątku głównym, zmienna umożliwiająca przestrajanie jest typu volatile i jest zmieniana w przerwaniu. Gdyby nie była typu volatile optymalizacje kompilatora prawdopodobnie uniemożliwiłyby przestrajanie generatora w locie, ale byłby on trochę szybszy (robiłem próby).

    Wszystkie pliki zostały przesłane na github zgodnie z życzeniem (link dostępny też w pierwszym poście), ale moje korzystanie z githuba ogranicza się do wysyłania tam plików. Nie bardzo rozumiem tych wszytkich "branch" i "commit".

    https://github.com/antistorm/dds

    @Janusz_kk To prawda, że od chińczyka można kupić bardzo fajne rzeczy tanio. Generalnie są chyba nie do dogonienia.
    @gulson Bardzo dziękuję za wsparcie :)
    @piotrva Nie znam zbyt dobrze C++, wiem, że ten kod nie jest najlepszy. Starałem się iść trochę na skróty, żeby to szybko skończyć. Powinienem był podzielić kod na osobne pliki, zrobić typowe konstruktory itp. Jeśli chciałoby się to upiększyć, trzeba trochę pracy. No nie wiem, co myślisz?
    @And! Ja chyba jestem za tym, żeby to zrealizować w formie zbliżonej do obecnej. Może trochę poprawić czytelność kodu, poprawić wydajność prądową wyjścia, zrobić ładną płytkę pod SMD i spróbować to zrealizować jak najtaniej. Myślę, że tylko wtedy dałoby się to wystawić 'za punkty'.
  • #14
    piotrva
    VIP Meritorious for electroda.pl
    @gdL
    W ramach konstruktywnych uwag:
    1. Generowanie przebiegu w pętli mi się nie do końca podoba - wiem, że dzięki temu wyciskasz z tego AVR-a ile się da, ale to nie do końca poprawne i eleganckie - np. na pewno na "obrót" pętli while schodzi pare taktów procka i trochę sygnał sekunda po sekundzie płynie (choć to b. niewielki efekt, ale jest, jak już mam być dokładny). Plus pytanie za 100 pkt - jak kalibrowałeś częstotliwości?
    2. Obsługa enkodera na przerwaniach - to tłumaczy te kondensatory na wejściach. Rozwiązanie tez nie eleganckie ale w połączeniu z taką metodą generowania sygnału inne być nie mogło (wszak każdy timer realizujący porządnie eliminację drgań styków by zakłócił przebieg)

    W skrócie - z jednej strony fajnie, że docisnąłeś AVR'a prawie na maxa, z drugiej moim zdaniem fajnie by było ten projekt zanim pójdzie jako gadżet mocno odświeżyć.

    I też w sumie wyszło by Ci i innym pracującym nad tematem na korzyść chyba nauczyć się programowania obecnie topowych ARM w np. polecanej przeze mnie linii STM32.

    Co do gita - moim zdaniem to obowiązek przy projektach grupowych, a ja sam stosuję to nawet jak sam robię jakieś małe projekty dla siebie - raz od razu mam backup kodu, mogę śledzić zmiany (i szybko znaleźć kiedy coś mi przestało działać) plus lubię móc zobaczyć czyiś kod i pokazać swój w formie nie wymagającej pobierania jakiejś paczki na dysk.

    Plus można zrobić coś takiego i odnieść się do konkretnej linijki kodu:
    https://github.com/antistorm/dds/blob/master/dds-singleboard.ino#L176
  • #15
    lukaszd82
    Level 30  
    Projekt na stm wyjdzie w podobnej cenie a możliwości sprzęt będzie miał o wiele lepsze. Jak już przeprojektowywać to szedłbym w takim kierunku. Całość na smd, jak prototyp będzie już dopracowany to jakąś małą serię można w całości zamówić w Chinach. Wyjdzie taniej niż kupowanie u nas i składanie samemu...
    Obudowa albo na drukarce 3d albo wycinana z plexy. Chyba, że wykonawca coś poleci :)
    Wszystko zależy od wymiarów i wykonania całości.
    Podobają mi się pomysły z DSO a teras DDS.
    Trzymam kciuki, co prawda DSO bardziej mnie interesuje, ale i tu będę zaglądał regularnie.
  • #16
    piotrva
    VIP Meritorious for electroda.pl
    W tym kontekście porządny DDS mógłby stać się modułem dla kombajnu DSO z generatorami ;)
  • #17
    User removed account
    Level 1  
  • #18
    piotrva
    VIP Meritorious for electroda.pl
    Ja się FPGA bawiłem, jak się pokombinuje to można zrobić to bez pamięci zewnętrznej i na 2 warstwach. Przy montażu automatycznym BGA nie montuje się jakoś specjalnie inaczej od TQFP czy rezystora w 0805 ;)

    Znasz jakiś fajny scalak DDS z możliwością dowolnego przebiegu?

    Co masz na myśli poprzez generator z PLL i taktowanie z niego sumatora?

    Poza tym lepsze i całkiem tanie uC mają w sobie 1 a czasem i 2 kanały DAC o nie najgorszych parametrach.
  • #19
    mkpl
    Level 37  
    Trochę podpowiem jak to powinno wyglądać.
    Procesor jako obsługa i komunikacja. Sam układ to DDS zrobiony na piechotę czyli FPGA Cyclone IV + tani przetwornik 14bit (jaki jest w HiQ SDR). Pozwala to na generowanie dowolnego przebiegu do częstotliwości ~60MHz. Można dać i dwa takie przetworniki zawsze to taniej niż 2 dds'y. Dalej mnożarki + prosty DAC regulujący wyłącznie napięcie stałe. Mnożarki zapewniają regulację poziomu sygnału. Za nimi wzmacniacz i tłumiki 3,6,10,20 dB.

    Coś ala FY6600 który kosztuje koło 350zł tylko trzeba go nieco poprawić :).
    Przetworniki R2R to trochę utopia. Policzcie sobie błąd kwantyzacji przy typowych rezystorach...
  • #20
    gdL
    Level 27  
    piotrva wrote:
    @gdL
    W ramach konstruktywnych uwag:
    1. Generowanie przebiegu w pętli mi się nie do końca podoba - wiem, że dzięki temu wyciskasz z tego AVR-a ile się da, ale to nie do końca poprawne i eleganckie - np. na pewno na "obrót" pętli while schodzi pare taktów procka i trochę sygnał sekunda po sekundzie płynie (choć to b. niewielki efekt, ale jest, jak już mam być dokładny). Plus pytanie za 100 pkt - jak kalibrowałeś częstotliwości?
    2. Obsługa enkodera na przerwaniach - to tłumaczy te kondensatory na wejściach. Rozwiązanie tez nie eleganckie ale w połączeniu z taką metodą generowania sygnału inne być nie mogło (wszak każdy timer realizujący porządnie eliminację drgań styków by zakłócił przebieg)


    @piotrva Przekonałeś mnie co do gita :) Kalibracja była metodą szacowania i później już prób i błędów z oscyloskopem. I... nie jest idealna. Odpowiada za nią dzielnik nazwany FREQUENCY_TO_STEP
    Kalibracja HS jest tutaj, też podobna... SGEN_Waveforms::hardwareFrequencyToCounts

    Ale muszę powiedzieć, że enkoder działa i póki co nic się z nim nie dzieje. Można oczywiście kondensator dać zawieszony pomiędzy dwoma rezystorami, aby zredukować prąd, bo faktycznie nie pomyślałem o tym, że może 'dostawać'. Co o tym myślisz?

    Zapytam jeszcze @piotrva:
    1. Jak byś widział kontynuację realizacji projektu na STM32? Blue Pill ma wsparcie Arduino IDE i jest niedrogie.
    2. Jaki tani procesor STM32 spełniłby swoje zadanie?
    3. STM32 ma sterować drabinką czy DAC? A może użyć wewnętrznego DAC? Jakiej maksymalnej częstotliwości można się spodziewać w obu przypadkach?
    4. Jeśli to spodoba się większości i aprobują to @gulson i @And! oraz masz czas na realizację tj. przeportowanie projektu pod STM32 to byłbym bardzo szczęśliwy zobaczyć ten generatorek w ciekawszej formie.

    @mkpl Jeśli chodzi o FPGA, to chyba nie ta półka cenowa projektu. Ma być jak najtańszy. Ale w wersji kolejnej chętnie zobaczę coś lepszego. Masz też pełen dostęp do obecnie napisanych i działających źródeł projektu.
  • #21
    mkpl
    Level 37  
    Na sieci masz dostępny HiQ SDR z płytką i kompletną dokumentacją. Co prawda jest to moduł bazowy radia SDR w zakresie do 50MHz ale posiada również oprogramowanie alternatywne robiące z niego precyzyjne VNA.

    FA6600 jest doskonale opisane na EEVBlog oraz z schematami i innymi bajerami na GitHub. Trzeba poszukać. Przyznam, że ten generator znalazłem dopiero kilka dni temu i jak na swoją cenę i możliwości typowego hobbisty jest super. Tym bardziej, że wszystkie przeróbki i udoskonalenia są opisywane w sieci.

    Wpisując w sieci FPGA DDS znajdziesz wiele przykładów i gotowych rozwiązań. Procesor tutaj ma tylko przygotować dane i wysłać je do matrycy. Same matryce FPGA to też nie jest jakiś kosmos cenowy (choć sam tak myślałem przed zrobieniem swojego urządzenia. Jak zwykle Aliexress i pochodne. W europie wszystkie elementy nabierają jakieś magicznej wartości zwiększając cenę z 250%.
  • #22
    khoam
    Level 41  
    gdL wrote:
    Jak byś widział kontynuację realizacji projektu na STM32? Blue Pill ma wsparcie Arduino IDE i jest niedrogie.


    Skoro zdecydowałeś się, że projekt budowany będzie w oparciu o (amatorski i hobbistyczny) framework Arduino, to może ten kod powinien być pisany tak, aby można było go w dużym stopniu uniezależnić od rodzaju zastosowanego procesora, czy to będzie AVR, ESP32 lub STM32.

    Ponadto uzależnianie samego kodu (np. pliki z rozszerzeniem ino) od Arduino IDE (najgorszego narzędzia do pisania i rozwijania kodu bazującego na frameworku Arduino) jest trochę przyznam zniechęcające, przynajmniej dla mnie.
  • #23
    And!
    Admin of Design group
    gdL wrote:
    ...Wszystkie pliki zostały przesłane na github zgodnie z życzeniem (link dostępny też w pierwszym poście), ale moje korzystanie z githuba ogranicza się do wysyłania tam plików. Nie bardzo rozumiem tych wszytkich "branch" i "commit"....


    Ja chyba też nie do końca rozumiem wszystkie zawiłości z github, jeżeli ktoś jest bardziej doświadczony to warto opisać jak powinno się we właściwy sposób korzystać z github, np. w Artykułach.

    gdL wrote:
    @And! Ja chyba jestem za tym, żeby to zrealizować w formie zbliżonej do obecnej. Może trochę poprawić czytelność kodu, poprawić wydajność prądową wyjścia, zrobić ładną płytkę pod SMD i spróbować to zrealizować jak na,jtaniej. Myślę, że tylko wtedy dałoby się to wystawić 'za punkty'.


    Co do płytki warto spróbować przejść całkowicie na SMD, mikrokontroler, wzmacniacz, elementy pasywne, ew. złącza i elementy sterujące można pozostawić przewlekane ze względu na większą dostępność i być może wytrzymałość mechaniczną.

    Co do konstrukcji bazowej, znam pokusę wykorzystania tego co już się zrobiło, jednak warto podejmować próby z czymś nowym. W samej drabince rezystorowej nie ma nic złego, ale jest to dość oklepane. Jeżeli są możliwości wykorzystania mikrokontrolera z wbudowanym DAC to warto rozważyć taką funkcję.

    Oczywiście nic nie jest czarnobiałe. Obecny projekt oparty jest o Arduino i wiele osób może być zainteresowane możliwościami rozwoju kodu.
    Jako ciekawostka drabinka rezystorowa + mikrokontroler z szybkimi I/O albo FPGA mogą zapewnić wyższe częstotliwości niż wbudowany DAC 1MSPS.
    Zewnętrzne scalaki DDS są równie kuszące gdyż łatwo wchodzimy w generowanie częstotliwości rzędu kilkunastu-kilkudziesięciu MHz, ograniczenie to kształt przebiegu czyli zwykle tylko sinus.

    Jeżeli chcemy umieścić produkt wytworzony w tym wątku w sklepiku elektroda.pl to warto wziąć pod uwagę pewne kryteria optymalizacyjne:
    -koszt
    -parametry
    -różnice w stosunku do dostępnego sprzętu
    -walory edukacyjne konstrukcji, możliwość modyfikacji

    Ważne aby zbadać jakie są oczekiwania co do takiego generatora DDS i spróbować je wspólnie spełnić.
    Spróbujmy dostarczyć do sklepiku elektroda.pl coś "eleganckiego".

    Może warto uruchomić ankietę i zbadać jakie są oczekiwania co do DDS?
    W DSO się to sprawdza: https://www.elektroda.pl/rtvforum/topic3548578.html

    gdL wrote:
    Nie znam zbyt dobrze C++, wiem, że ten kod nie jest najlepszy.

    Tym się nie przejmuj, zobacz że już teraz otrzymujesz wsparcie w temacie, a jak temat się rozwinie będzie jeszcze lepiej.

    Co do Blue Pill: https://www.elektroda.pl/rtvforum/topic3484148.html jest wsparcie dla Arduino, ale w tej wersji chyba brakuje wbudowanego DAC.

    Podsumowując przy niskich kosztach i niskich częstotliwościach sposób generowania to głównie:
    -mikrokontroler z wbudowanym szybkim DAC
    -drabinka rezystorowa

    Co do sposobu "wystawiania" kolejnych próbek: najlepiej wyzwalane timerem, a jak się da to można wykorzystać nawet wbudowane DMA lub inne mechanizmy jak najbardziej uniezależniające generowanie sygnału od realizacji pozostałego kodu.
  • #24
    gdL
    Level 27  
    khoam wrote:

    Skoro zdecydowałeś się, że projekt budowany będzie w oparciu o (amatorski i hobbistyczny) framework Arduino, to może ten kod powinien być pisany tak, aby można było go w dużym stopniu uniezależnić od rodzaju zastosowanego procesora, czy to będzie AVR, ESP32 lub STM32.


    Przeglądałeś źródła? Wydaje się, że jedynie kanał HS wymaga dostosowania. Ogólnie kod zakładając wsparcie Arduino powinien zadziałać pod STM32 i ESP32 (jeśli starczy pinów).
  • #25
    khoam
    Level 41  
    gdL wrote:
    Przeglądałeś źródła? Wydaje się, że jedynie kanał HS wymaga dostosowania.

    Tak, przeglądnąłem stąd też moje uwagi na temat "przenoszalności" tego kodu na inne procesory niż AVR oraz użytego narzędzia Arduino IDE.
    Używanie frameworka Arduino z jego HAL dla różnych platform sprzętowych w żaden sposób nie determinuje konieczności używania Arduino IDE. To są dwie różne rzeczy.
  • #26
    piotrva
    VIP Meritorious for electroda.pl
    @gdL
    1. Zrezygnować z Arduino zupełnie. Mnie osobiście to odstrasza (podobnie jak przedmówcę). BluePill (którą to płytkę bardzo lubię) nie ma DAC'a. Najlepiej wejść w STM32 product selector i poszukać wśród dostępnych modeli w tabeli parametrycznej te z DAC a potem sprawdzić ich dostępność i ceny w sklepach. Przykładowy uC spełniający minimalne wymagania podałem pare postów wyżej.

    2. STM32F051K4T6, ewentualnie z tej samej serii (STM32F051K4..) w innych obudowach, np. w QFN są jeszcze tańsze
    3. Drabinka - do kosza. Najtaniej - wewnętrzny DAC, jak podałem 1 MSPS, napięcia 0-3.3V, ewentualnie jakieś DAC zewnętrzne.
    4. U mnie z czasem tradycyjnie słabo. Tu raczej jest mowa o napisaniu tego od nowa ;)

    Dodano po 2 [minuty]:

    @khoam Zauważ, że biblioteki Arduino dają spory narzut czasowy - digitalWrite jest sporo wolniejsze od operacji na rejestrach...
  • #27
    And!
    Admin of Design group
    A gdybyśmy chcieli wykorzystać DAC 4, 5 lub 10MSPS to czy pozostajemy w podobnej cenowo rodzinie mikrokontrolerów, czy uderzamy już w inną półkę i obudowy 100QFN?

    A może zewnętrzny DAC i tańszy mikrokontroler?

    Ile obecnie sampli 8bit DAC rezystorowego przypada na jeden okres sygnału np. sin o częstotliwości 100KHz?
  • #28
    khoam
    Level 41  
    piotrva wrote:
    Zrezygnować z Arduino zupełnie. Mnie osobiście to odstrasza (podobnie jak przedmówcę).

    Odstrasza mnie Arduino IDE, a nie Arduino HAL. Wybór samego Arduino HAL uważam za słuszny tak, jak zastosowanie zewnętrznego DAC, bez uzależniania się od konkretnego procesora z wbudowanym DAC.

    piotrva wrote:
    digitalWrite jest sporo wolniejsze od operacji na rejestrach...

    Tylko w wypadku platformy AVR, dlatego używam do tego celu biblioteki FastGPIO i mogę ją polecić Autorowi do rozważenia.
  • #29
    piotrva
    VIP Meritorious for electroda.pl
    And! wrote:
    A gdybyśmy chcieli wykorzystać DAC 4, 5 lub 10MSPS

    To już wtedy lepiej zewnętrzny DAC, z tego co na szybko patrzę to w STM szybszych DAC niż 1MSPS nie ma
    khoam wrote:
    Wybór samego Arduino HAL uważam za słuszny

    Mnie osobiście odstrasza w takich projektach całe Arduino. Owszem, sam czasem korzystam, żeby na szybko coś zrobić (typu projekt w 2 wieczory), ale już na dłuższą metę: "no, no, no"
    Poza tym, żeby to zrobić dobrze potrzeba DMA. Jakoś nie kojarzę w Arduino jednolitego wsparcia dla DMA...
  • #30
    gdL
    Level 27  
    1MSPS to 10^6 próbek na sekundę. Jak policzę ile daje mi ATMEGA w projekcie to 13 próbek na 100kHz, jakieś 1.3MSPS, czy to możliwe? Jeśli tak, to nie jest najgorzej, tylko jak wspominacie dokładność drabinki nie jest za wielka. A gdyby zastosować tam bardziej precyzyjne rezystory, np 1%?
    Zewnętrzny DAC pewnie by wymagał szybkiej szyny, zgaduję, że bez STM32 lub ESP32 nie da rady. Ale na ESP32 dałoby się zrobić rysowanie próbek w przeglądarce oraz inne funkcje 'smart' i to mi się nawet podoba.

    @khoam FastGPIO, dzięki :) Nie wiem jak z kompatybilnością pod innymi platformami sprzętowymi - działa np. dla ESP32? Bo w sumie to dla Atmega da się to też zrobić bezpośrednio. W obecnie rozważanej aplikacji nie ma to wielkiego sensu. 99% czasu na nie-generowanie sygnału zjada niestety obsługa wyświetlacza.