Quansheng UV-K5 Modding Fan Forum

Modyfikacje oprogramowania => Firmware => Wątek zaczęty przez: admin w Maj 08, 2025, 19:50

Tytuł: UVK5-STM32 (zintegrowany koprocesor z modułem GPS dla łączności satelitarnej)
Wiadomość wysłana przez: admin w Maj 08, 2025, 19:50
Opis
Nowy mod hardware dla miłośników komunikacji satelitarnej, z dodatkowym procesorem i wbudowanym odpowiednikiem GPS.

źródło: https://oshwhub.com/455360a/uvk5-cp?fbclid=IwY2xjawKJsypleHRuA2FlbQIxMQABHonnL9pTJUuDWOh3aLgmrliujwovHl8-Uc0lcwQqJCjxd8I6iWpMTHXk9Fq8_aem_KvsH8XLYAgOXZvyNsrQqPA

Słowo wstępne

Wydajność układu DP32G030 wbudowanego w UVK5 jest, można powiedzieć, "w sam raz". Zarówno częstotliwość taktowania, jak i przestrzeń pamięci programu są wystarczające jedynie do realizacji podstawowych funkcji urządzenia, co ogranicza możliwości rozbudowy i modyfikacji. Chociaż istnieją już techniki wykorzystujące zewnętrzną pamięć ROM jako rozszerzenie przestrzeni programu, umożliwiające realizację różnych funkcji, niektóre zaawansowane funkcje wciąż są ograniczone przez wydajność samego MCU.

W kręgach modyfikujących UVK5 pojawił się już moduł rozszerzeń krótkofalowych oparty na SI4732, który zastępuje oryginalny układ odbiornika radiowego BK1080 i komunikuje się za pomocą magistrali I2C.

Hmm, I2C, tak? Magistrala, tak? W oryginalnym MCU K5 do magistrali I2C podłączony jest ekran, BK1080 i EEPROM. Więc dodanie czegoś mocniejszego nie wydaje się niemożliwe. Pomyślałem, że STM32 jako I2C Slave też da radę.

Skoro już dodaję, a miejsce tam wygląda na całkiem spore, to czemu by nie dodać modułu GNSS? W ten sposób urządzenie zamieni się w maszynkę do radosnego "łapania gwiazd" (pracy satelitarnej).

Film demonstracyjny: https://www.bilibili.com/video/BV1zvRNYdEdj (https://www.bilibili.com/video/BV1zvRNYdEdj)

Zrealizowane funkcje

Modyfikacja sprzętowa

Płytka z projektu poniżej jest gotowa do użycia od razu po wykonaniu. Moduł GNSS na niej można zastąpić innym modelem ATGM336.

Kroki instalacji
(OBRAZ: Krok 1 - demontaż BK1080,
(https://image.lceda.cn/oshwhub/pullImage/c67651524c04445d9cc7854a2537ca03.png)
(OBRAZ: Krok 2 - lutowanie BK1080 na moduł, )
(https://image.lceda.cn/oshwhub/pullImage/d1390c6b26844709a694d8d9f404bce0.png)
(OBRAZ: Krok 3 - montaż modułu na płycie K5, )
(https://image.lceda.cn/oshwhub/pullImage/b9f956c795614837b5385f5639f6be5c.png)
(https://image.lceda.cn/oshwhub/pullImage/bbb5600b412349e598b4926ba41ecbfd.png)
(OBRAZ: Krok 4 - antena GNSS, )
(https://image.lceda.cn/oshwhub/pullImage/7ddb2a91d78c450491b24ae47d60a002.png)
(OBRAZ: Krok 5 - montaż anteny GNSS za pomocą kleju na gorąco, ze strzałką wskazującą prowadzenie kabla)
(https://image.lceda.cn/oshwhub/pullImage/f85ad787734a4087a87c3a8b0ac10385.png)
(https://image.lceda.cn/oshwhub/pullImage/7cc368a1f9884f0fb9296ad81f1abd1c.png)
(OBRAZ: Górna krawędź anteny wyrównana z przednią krawędzią taśmy ekranu)
(OBRAZ: Krok 6 - modyfikacja obudowy, "jak pokazano na rysunku" )
(https://image.lceda.cn/oshwhub/pullImage/0cddc9d4d75442d5b94742c9e0c34dc3.png)

(OBRAZ: Krok 7 - lutowanie kabla antenowego)
(https://image.lceda.cn/oshwhub/pullImage/8d8a4c05e636469bab9dc3c1291331c6.png)
(https://image.lceda.cn/oshwhub/pullImage/9d5c010364f64b48acb525dcc94f33e8.png)
(https://image.lceda.cn/oshwhub/pullImage/389ce5ef66c54054851bcdca68a0b6f1.png)
(OBRAZ: Krok 8 - montaż superkondensatora, "patrz rysunek" - )
(https://image.lceda.cn/oshwhub/pullImage/6db460701a1f480fba0b3cde05545cb1.png)
(https://image.lceda.cn/oshwhub/pullImage/322fdc157be7499abe9fc5d7c1442937.png)
[/list]

Oprogramowanie

Oprogramowanie dla K5

Wprowadzenie
Kod źródłowy projektu znajduje się w pliku
uvk5-firmware-cpeval-main.zip.
Adres projektu na GitHub: https://github.com/wabulutian/uv-k5-firmware-cpeval (https://github.com/wabulutian/uv-k5-firmware-cpeval)

Oparty na firmware z analizatorem widma od Fagci. Po wycięciu całego kodu związanego z funkcjami biznesowymi, poza podstawowymi funkcjami, udało się zwolnić około 20kB przestrzeni pamięci programu, w której zaimplementowano funkcje związane z koprocesorem (dalej nazywane "aplikacją koprocesora").

Ani odczyt i dekodowanie wiadomości GNSS, ani obliczanie statusu satelitów za pomocą biblioteki SGP nie mogą być wykonane w procesorze K5. Dlatego aplikacja koprocesora zapewnia jedynie podstawowe funkcje wyświetlania, sterowania oraz kontroli części radiowej, okresowo komunikując się przez magistralę I2C z STM32 w celu uzyskania końcowych wyników złożonych funkcji.

Aby jeszcze bardziej zmniejszyć rozmiar aplikacji koprocesora, jak najwięcej obliczeń przeniesiono na stronę STM32. Na przykład operacje mnożenia, dzielenia, reszty z dzielenia są wykonywane na STM32, a aplikacja koprocesora odbiera tylko dane do wyświetlenia (np. STM32 dzieli liczbę zmiennoprzecinkową 123.456 na dwie liczby całkowite 123 i 456 (gdyby zamienić na 123456, końcowe wyświetlenie nadal wymagałoby dzielenia i reszty z dzielenia) i wysyła je przez I2C).

Trochę przeprojektowałem interfejs użytkownika.

Biorąc pod uwagę, że głównym zastosowaniem jest praca satelitarna, gdzie głównie dostosowuje się częstotliwości nadawania i odbioru, oryginalny tryb wyświetlania VFOA+VFOB został zmieniony na format TX+RX. Dodatkowo zrezygnowano z blokady szumów (kto przy pracy satelitarnej używa blokady szumów?).

Dodano funkcję obliczania przesunięcia częstotliwości dla transponderów liniowych. Zgodnie z powszechnymi praktykami łączności przez satelity liniowe, dostępne są dwa tryby Dopplera: "stałe TX, RX się zmienia" oraz "stałe RX, TX się zmienia", a także dwa tryby powiązania częstotliwości: "normalny transponder" i "odwrócony transponder". Pierwotnie miało to służyć do łączności CW przez satelity liniowe w połączeniu z funkcją A1A CW, ale zabrakło miejsca w pamięci na kod A1A CW, więc teraz służy tylko do nasłuchu.

Nadal z powodu braku miejsca w pamięci, aplikacja koprocesora może jednocześnie wyświetlać informacje w czasie rzeczywistym tylko dla 10 satelitów lub prognozę na najbliższe 2 godziny dla 1 satelity.

Poza aplikacją koprocesora mamy czysty system podstawowy. Ponieważ zachowano BK1080 i nie dokonano żadnych modyfikacji w EEPROM, jest to bardzo bezpieczne – nie ma obaw o utratę kanałów, kalibracji czy niemożność korzystania z radia.

Istniejące problemy

Oprogramowanie dla STM32

Wprowadzenie
Kod źródłowy projektu znajduje się w pliku
UVK5-CP-PLUS-GNSS.zip, jest to aplikacja typu "bare-metal" (bez systemu operacyjnego) dla STM32CubeMX + MDKARM.

Główne dwie funkcje to: pozycjonowanie i synchronizacja czasu oraz obliczanie efektu Dopplera.

Pozycjonowanie i synchronizacja czasu polega na odczytywaniu komunikatów z portu szeregowego modułu GNSS, co bezpośrednio dostarcza czas UTC oraz długość i szerokość geograficzną. Do obliczania stanu satelitów używana jest otwarta biblioteka SGP/SDP, która posiada funkcję odczytu parametrów z TLE.

Dane TLE są wysyłane do K5 przez port szeregowy za pomocą kabla do programowania, a następnie przesyłane bez zmian przez I2C do STM32. Aplikacja koprocesora pełni tu głównie rolę przezroczystego przekaźnika.

Istniejące dane (parametry satelitów, lokalizacja stacji, strefa czasowa itp.) są przechowywane w wewnętrznej pamięci flash, co zapewnia ich zachowanie po wyłączeniu zasilania. Przy każdym uruchomieniu wykorzystywane są zapisane dane.

Strefa czasowa służy tylko do wygody wyświetlania, w całym programie używany jest czas UTC lub sekundy UNIX.

Przy każdym uruchomieniu, po pierwszym udanym pozycjonowaniu GNSS, najnowsze informacje o lokalizacji są zapisywane w pamięci flash. Później już się tym nie przejmuje, ponieważ praca satelitarna nie wymaga wysokiej dokładności pozycjonowania.

Program ma dwa tryby: tryb normalny i tryb prognozy.

W trybie normalnym, z cyklem 2-sekundowym, przeglądane są informacje o 10 satelitach, a ich parametry w czasie rzeczywistym są obliczane (planowane przez przerwanie timera co 200ms). Parametry te obejmują kąt elewacji w czasie rzeczywistym, azymut, prędkość, częstotliwości nadawania i odbioru itp.

W trybie prognozy, główna częstotliwość taktowania procesora pozwala na aktualizację parametrów w czasie rzeczywistym tylko dla jednego satelity z częstotliwością odświeżania 1Hz, prognozowanie orbity na najbliższe 2 godziny oraz podawanie odliczania do następnego wschodu/zachodu satelity.

Teoretycznie, pisanie tej aplikacji w oparciu o system operacyjny typu FreeRTOS lub RTT byłoby bardziej efektywne, ale byłem leniwy.

Istniejące problemy
Tytuł: Odp: UVK5-STM32 (zintegrowany koprocesor z modułem GPS dla łączności satelitarnej)
Wiadomość wysłana przez: admin w Maj 08, 2025, 23:16
Sposób użycia

Przełączanie aplikacji
Po uruchomieniu naciśnij klawisze F+5, aby wejść do aplikacji koprocesora. W głównym interfejsie aplikacji naciśnij klawisz EXIT, aby wrócić do systemu podstawowego.

Interfejs i obsługa
Główny interfejs
(OBRAZ: Główny interfejs aplikacji koprocesora)
(https://image.lceda.cn/oshwhub/pullImage/a4993eceafde4067900fff121dcc8d8b.png)
Funkcje klawiszy:
Menu główne
(OBRAZ: Menu główne aplikacji koprocesora)
(https://image.lceda.cn/oshwhub/pullImage/803072193e5b4ad5bf49ec4c32d90c1f.png)
Funkcje klawiszy:
Podmenu informacji GNSS
(OBRAZ: Podmenu informacji GNSS)
(https://image.lceda.cn/oshwhub/pullImage/112f831d9c1a4390a42d6c00dd6465f0.png)
Funkcje klawiszy:
Podmenu informacji o satelitach
(OBRAZ: Podmenu informacji o satelitach)
(https://image.lceda.cn/oshwhub/pullImage/3d3e02ff21b34c3aba1df07b101e2f54.png)
Funkcje klawiszy:
Podmenu importu TLE
(OBRAZ: Podmenu importu TLE)
(https://image.lceda.cn/oshwhub/pullImage/ef36c702ae644d3fb88c9533e673b238.png)
Funkcje klawiszy:
Chcę tylko popracować przez satelitę
TLE+
Nazwa satelity
Pierwsza linia TLE
Druga linia TLE
Częstotliwość uplink transpondera (w Hz)
Częstotliwość downlink transpondera (w Hz)
$
Na przykład:
TLE+
ASRTU-1
1 61781U 24199AY  24350.96869213  .00004303  00000-0  17741-3 0 00002
2 61781 097.3789 215.1172 0019342 097.4012 322.3356 15.23939602000014
145850000
436210000
$



[/list]

Schematy projektowe

Board2
(OBRAZ: Główny obraz płytki "Board2" -
(https://image.lceda.cn/oshwhub/pullImage/9952b5fa2c474f6b8008e25a2700a395.png)

Schemat ideowy
(https://image-pro.lceda.cn/pullimages/24abbcd35f9d482498d0089cb3be9edf.webp)


PCB
(https://image-pro.lceda.cn/pullimages/143a9c2ac8a946939a9a857819d087d6.webp)

BOM (Lista materiałów)
(Poniżej uproszczona tabela BOM. Pełna tabela dostępna na oryginalnej stronie.)