HomeMade

Pełna wersja: Generator na Si5351A
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4 5 6
Przeglądając bloga Jasona NT7S natrafiłem na posty o układzie Si5351, który mnie od razu zainteresował. Jest to programowany generator o częstotliwości wyjściowej od 8kHz do 160MHz. Zależnie od wersji ma 3 lub 8 niezależnych wyjść. W odróżnieniu od Si570 wymaga zewnętrznego kwarcu 25MHz - 27MHz, ale za to jest dużo tańszy Smile

Nota katalogowa: http://www.silabs.com/Support%20Document...Si5351.pdf
Nota aplikacyjna dot. programowania układu: http://www.silabs.com/Support%20Document.../AN619.pdf

Zrobiłem moduł z najmniejszym z tych układów - Si5351A w obudowie MSOP10 z trzema wyjściami. Na płytce poza układem generatora znajduje się stabilizator 3.3V i translator poziomów tak by można było podłączyć mikrokontroler zasilany napięciem 5V. Złącze I2C ma rozkład wyprowadzeń zgodny z modułem Si570 przedstawionym przez Adama SP5FCS. Płytka zaprojektowana jest w EAGLEu.

[attachment=8640] [attachment=8642]

W ramach pierwszych testów napisałem bibliotekę dla Arduino do obsługi tego układu. Obliczanie zawartości rejestrów dla zadanej częstotliwości jest dosyć uciążliwe, ponieważ układ zawiera dwie pętle PLL, których współczynnik powielania / podziału zadaje się za pomocą liczby wymiernej w postaci ułamka zwykłego a+b/c. Bez noty AN619 ani rusz, pomocna była też strona YU3MA. Mój kod jest w dosyć wczesnym stadium i na pewno nie jest optymalny - dość powiedzieć, że używam liczb zmiennoprzecinkowych. Nie są też jeszcze zaimplementowane wszystkie funkcje układu i nie jest obsługiwany pełen zakres częstotliwości. Pomimo tego kod jest już "używalny". Do biblioteki dołączyłem przykładowy program, który pozwala ustawić częstotliwość za pomocą interfejsu szeregowego.

Bibliotekę można pobrać z GitHub.

Mam nadzieję, że w najbliższym czasie uda mi się poskładać jakiś prosty odbiornik SDR i będę prowadził dalsze testy. Wydaje mi się, że układ wart jest zainteresowania, szczególnie w kontekście Husara czy Husarka z dwoma odbiornikami.
Ja zrobiłem pewne uproszczenie myślowe i mam zamiar wypróbować swój algorytm oparty o arytmetykę stałopozycyjną. Ty masz już prototyp to może spróbujesz?
Zdjęcie chyba wyjaśnia na czym polega uproszczenie (na zafixowaniu zmiennej c )
İmage
W pierwszym podejściu też zrobiłem tak, że mianownik zawsze był stały i był równy największej liczbie jaka mieści się w rejestrze. Takie podejście nie zawsze daje najlepsze przybliżenie i zależnie od żadanej częstotliwości czasem odchyłka była zauważalna. Przy czym częściowo przyczyniały się do tego błędy zaokrągleń.

Czy mógłbyś wrzucić swój arkusz? Nie za bardzo rozumiem co dzieje się w jego środkowej części. Moja percepcja jest dzisiaj jakaś ograniczona...

Jutro będę chcial jeszcze trochę popracować nad tym kodem i zrobić testy szybkości. Mam kilka pomysłów na optymalizację, można np. zastąpić dzielenie mnożeniem w procedurze znajdowania aproksymacji. To powinno trochę przyspieszyć obliczenia. Pozbycie się floatów będzie pewnie następnym krokiem i jeśli nawet nie będzie miało wpływu na szybkość, to na pewno znacznie zmniejszy rozmiar wynikowego programu.

Dzisiaj lutuję odbiornik ZetaSDR (bo wszystko było w szufladzie, hi) i jak dobrze pójdzie jutro będę mógł też trochę posłuchać. Ciekaw jestem czy przy przestrajaniu będzie słychać "stukanie" znane z Si570?
Cóż, skoro to jest uproszczenie, to i musi być cena za to, czyli rozdzielczość w ustawieniu częstotliwości. Zafiksowana zaś została największa wielokrotność 10, bo w dziesiętnym systemie liczę.
A artmetyka to operowanie na 20 bitowych słowach, co dla ARMa czy 32 bitowego AVRa nie jest problemem. Jedyną upierdliwą jest procedura dzielenia, co na 32 bitowych słowach może trochę potrwać.
W środku arkusza nic nie ma, chciałem tylko zobaczyć jaka jest rozdzielczość ustawienia częstotliwości na krańcach zakresów.
Jak się dorwe do PCta to arkusz załącze, z tableta mam nijaki problem z tym.

Robert
SP6VWX
Heh, wszystko jasne! Mówiłem, że dzisiaj błyskotliwością nie grzeszę Smile

AVR, na którym to testuję jest 8 bitowy, ale to właściwie nie problem. Dzielenie zawsze jest wredne, o ile dobrze kojarzę avr-gcc robi dzielenie dwóch 8 bitowych liczb w jakieś 170 cykli, podczas gdy mnożenie jest sprzętowe i zajmuje 2 cykle.

Zapomniałem jeszcze dodać, że dostępny jest program na PCta, który pozwala wyklikać konfigurację i przygotowuje cała mapę rejestrów. Przy tym bardzo fajnie optymalizuje tą konfigurację, bo o ile to możliwe dobiera współczynniki tak, żeby PLL i dzielnik działały w trybie całkowitym, a nie ułamkowym. Do płynnego przestrajania trzeba jednak przeliczać wartości rejestrów na bieżąco.

ClockBuilder Desktop

I jeszcze gwoli uzupełnienia dokumentacji nota katalogowa użytego przeze mnie kwarcu.
Gdzie można kupić takiego scalaczka do testów- eksperymentów.
Coś nie mogę znaleźć.
Pozdrawiam
Heh, podobnie jak z Si570 nie jest łatwo. Digikey albo Mouser. Za tydzień lub dwa powinienem mieć jeszcze kilka.
Widze ze w farnell sa SI5356 od reki i w dobrej cenie.
Wydaja sie byc to podobne scalaki.
Chyba sie skusze na sztuke do experymentow.
W digikey jest http://www.digikey.com/product-detail/en...ND/3679848
Maja ich 554 sztuk po $3.35 za sztuke
Zreszta Si570 tez maja http://www.digikey.com/product-detail/en...ND/3991067

Pozdrawiam
Arek AC2FC
+50$ wysyłka.
Stron: 1 2 3 4 5 6
Przekierowanie