VP-Digi is a functional, cheap, easy to assemble and configure STM32-based APRS digipeater controller with built-in KISS modem.
 
 
Go to file
sq8vps 80093c96ea working on modems 2023-08-25 11:56:06 +02:00
Drivers initial commit 2021-09-10 11:30:51 +02:00
EWARM initial commit 2021-09-10 11:30:51 +02:00
Inc working on modems 2023-08-25 11:56:06 +02:00
Middlewares/ST/STM32_USB_Device_Library initial commit 2021-09-10 11:30:51 +02:00
Src working on modems 2023-08-25 11:56:06 +02:00
startup initial commit 2021-09-10 11:30:51 +02:00
.cproject working on modems 2023-08-25 11:56:06 +02:00
.gitignore change kissmon to monkiss 2022-08-30 14:00:04 +02:00
.gitmodules working on modems 2023-08-25 11:56:06 +02:00
.mxproject change kissmon to monkiss 2022-08-30 14:00:04 +02:00
.project poprawki dla HC-05 2022-11-06 22:11:19 +01:00
CHANGELOG.md non-aprs switch 2023-07-29 19:09:47 +02:00
F103C8T6_DIGI_USB Debug.cfg initial commit 2021-09-10 11:30:51 +02:00
F103C8T6_DIGI_USB Release.cfg initial commit 2021-09-10 11:30:51 +02:00
F103C8T6_DIGI_USB.ioc fix kiss rx bug 2022-08-12 15:27:44 +02:00
F103C8T6_DIGI_USB.xml fix kiss rx bug 2022-08-12 15:27:44 +02:00
LICENSE Create LICENSE 2021-09-10 13:53:21 +02:00
README.md Update README.md 2021-12-28 22:13:25 +01:00
README_pl.md Dodany jezyk polski w osobnym readme, poprawki dla HC-05 2022-11-06 21:58:08 +01:00
STM32F103C8Tx_FLASH.ld ax25 send, removed all mallocs 2023-08-18 12:50:33 +02:00
TODO initial commit 2021-09-10 13:55:39 +02:00
bpf1200.c working on modems 2023-08-25 11:56:06 +02:00
bpf1200inv.c working on modems 2023-08-25 11:56:06 +02:00
vp-digi Debug.cfg ax25 send, removed all mallocs 2023-08-18 12:50:33 +02:00
vp-digi Release.cfg ax25 send, removed all mallocs 2023-08-18 12:50:33 +02:00

README_pl.md

VP-Digi (PL)

VP-Digi to funkcjonalny, tani, łatwy w montażu i konfiguracji sterownik APRS digipeater oparty na STM32 z wbudowanym modemem KISS.

  • modem 1200 Bd Bell 202 (standard VHF APRS)
  • Generowanie sygnału R2R lub PWM
  • Analogowo-cyfrowe wykrywanie zajętego kanału (wykrywanie nośnika danych)
  • koder/dekoder AX.25 zaprojektowany dla ramek APRS
  • digipeater: 4 ustawialne aliasy n-N, 4 proste aliasy, opóźnienie lepkie (znane z aprx) lub tylko bezpośrednie, lista czarno-biała.
  • 8 niezależnych beaconów
  • tryb KISS (może być używany jako zwykły modem z UI-View, APRSIS32, XASTIR itp.)
  • USB i 2 UART-y: niezależne, działające w trybie KISS, monitora lub konfiguracji

Opis, schemat, instrukcja

Jeśli nie interesuje Cię kod źródłowy, to repozytorium nie jest dla Ciebie. Możesz znaleźć pełny opis projektu, schematy, skompilowany firmware i instrukcje na mojej stronie.

Wykorzystanie kodu źródłowego

Firmware został napisany przy użyciu System Workbench for STM32 (SW4STM32) i powinieneś być w stanie zaimportować to repozytorium bezpośrednio do IDE. Kod źródłowy jest publicznie dostępny od wersji 1.3.0.

Opis techniczny

Projekt został zaprojektowany do uruchomienia na płytce Blue Pill (STM32F103C8T6) z kryształem 8MHz. Firmware został napisany z wykorzystaniem jedynie operacji na rejestrach (z nagłówkami ST) oraz bibliotek CMSIS. HAL jest tam tylko dla USB. Kod jest (dość) obszernie komentowany tam gdzie trzeba, więc nie powinien być bardzo trudny do zrozumienia.

Demodulator

Są dwa demodulatory (i dekodery) pracujące równolegle, aby zapewnić lepszą wydajność. Sygnał jest próbkowany z częstotliwością 38400Hz (32 próbki na symbol) przez DMA. Przerwanie jest generowane po otrzymaniu 4 próbek, a próbki są decymowane. Następnie przechodzą one przez filtr preemfazy/deemfazy (jeśli jest włączony), który wyrównuje amplitudy tonów. Przefiltrowane próbki są mnożone przez lokalnie generowane tony znakowe i przestrzenne (ich części I i Q - cosinus i sinus). Daje to współczynnik korelacji pomiędzy sygnałem wejściowym a każdym tonem. W międzyczasie wytwarzany jest niefiltrowany symbol, który służy do wysterowania PLL detekcji nośnej danych. Różnica współczynników korelacji stanowi nową próbkę i jest przepuszczana przez filtr dolnoprzepustowy w celu wyeliminowania szumu. Filtrowane próbki są porównywane z zerem i demodulowany symbol jest wysyłany do mechanizmu odzyskiwania bitów.

Odzyskiwanie bitu (i dekoder NRZI)

Mechanizm odzyskiwania bitów jest oparty na cyfrowym PLL. PLL pracuje nominalnie z częstotliwością 1200Hz (=1200 Baud). Zmiana symbolu powinna nastąpić w pobliżu zera licznika PLL, tak aby licznik przepełnił się w połowie symbolu i wartość symbolu została spróbkowana. Przy każdej zmianie symbolu licznik jest mnożony przez współczynnik <1, aby zbliżyć go do zera, utrzymując PLL i sygnał przychodzący w fazie. Sygnał DCD jest multipleksowany z obu modemów. Wyjaśnione więcej w modem.c. Próbkowany symbol jest dekodowany przez dekoder NRZI i wysyłany do warstwy AX.25.

Dekodowanie AX.25

Dekoder AX.25 jest dość standardowy. CRC, PID i Control Byte są sprawdzane i obie ścieżki modemu są multipleksowane, aby wyprodukować tylko jedną ramkę wyjściową.

Wykrywanie nośnika danych

DCD wykorzystuje podejście analogowo-cyfrowe: oparte na PLL, ale pracujące na cyfrowym, niefiltrowanym strumieniu symboli. PLL działa w taki sam sposób jak PLL odzyskiwania bitów, z wyjątkiem tego, że jest zaimplementowany specjalny mechanizm liczenia impulsów DCD, wyjaśniony w modem.c. Takie podejście wydaje się być znacznie bardziej efektywne niż typowa, cyfrowa, oparta na AX.25 detekcja.

Kodowanie AX.25

Koder AX.25 jest również dość prosty. Może obsługiwać wiele ramek w rzędzie (ograniczone długością bufora). Każda transmisja rozpoczyna się od flag preambuły, następnie flag nagłówka, danych rzeczywistych, CRC, flag stopki/rozdzielających, danych rzeczywistych, CRC, flag stopki/rozdzielających... i flag ogona. Bity surowe są żądane przez modulator.

Modulator (i koder NRZI)

Koder NRZI pracuje dokładnie z częstotliwością 1200Hz (=1200 Baud) i żąda bitów od kodera AX.25. Bity są kodowane do symboli, a interwał timera próbkowania DAC jest ustawiony w zależności od wartości symbolu. Z tego powodu używana jest tylko jedna tabela sinusów. Dla tonu 1200 Hz interwał timera jest większy niż dla tonu 2200 Hz - częstotliwość próbkowania jest zmieniana, aby zmienić częstotliwość sygnału wyjściowego. Indeks tablicy jest zawsze zachowany, aby faza sygnału wyjściowego była ciągła.

Używanie kodu VP-Digi w twoim projekcie

Chciałbym usłyszeć o projektach, które implementują kod źródłowy VP-Digi. Jeśli tworzysz taki, daj mi znać na sq8vps(at)gmail.com.

Referencje

Ukończenie projektu zajęło sporo czasu, ale obecnie jest to prawdopodobnie najbardziej efektywny, publicznie dostępny modem oparty na STM32 i najbardziej konfigurowalny, oparty na mikrokontrolerze digipeater APRS. Chciałbym wspomnieć o kilku źródłach, które uznałem za naprawdę przydatne lub inspirujące:

Przyczynianie się

Wszystkie wkłady są doceniane, ale proszę o utrzymanie kodu w miarę czystego. Proszę również upewnić się, że firmware działa dobrze przed stworzeniem pull request.

Licencja

Projekt jest objęty licencją GNU GPL v3 (zobacz LICENSE).