Warum nicht wie DMR?

Im DMR-Hotspot von OpenGD77 erledigt der HR-C6000 Demodulation und Protokoll in Hardware. Für D-Star gibt es dafür nichts Vergleichbares. Ein ADF7021-Hotspot liefert fertige Bits, der AT1846S im DM-1701 dagegen nur sein analoges Diskriminatorsignal. Deshalb läuft die GMSK-Demodulation hier in Software auf dem STM32F405 (192 KiB RAM, FreeRTOS).

Signalkette RX

Antenne → AT1846S (Reg. 0x58 = 0xBCFD: Hochpass, Tiefpass, De-Emphasis umgangen;
                   Reg. 0x40 = 0x0031: Bit 0 schaltet einen ≈ 280-Hz-Hochpass ab)
        → AFOUT (Pin 9) → Kynar-Draht → MCU-Pin 18 = PC3 (ADC2, Kanal 13)
        → ADC2, getriggert von TIM8 mit 24 kHz, DMA2_Stream3 (5 Samples je Symbol)
        → Demodulator: GMSK-Filter, Taktrückgewinnung, 9-Tap-Entzerrer, Sync-Erkennung
        → D-Star-Rahmen (Header mit FEC und CRC, Sprache, Slow Data, Ende)
        → MMDVM-Protokoll über USB → MMDVMHost

OpenGD77 schreibt die AT1846S-Register bei jedem Kanal- und Moduswechsel neu. Im D-Star-Hotspot setzt die Firmware 0x58 und 0x40 danach jedes Mal wieder.

Signalkette TX

MMDVMHost → USB (D-Star-Header, Daten, Ende)
        → Bit-Ring → Framer (Präambel, Frame-Sync, Header mit FEC, Füllrahmen bei Netzlücken, Ende)
        → GMSK-Modulator (BT 0,5) im TIM8-Interrupt, 24 kHz
        → PWM an PC8 (TIM8 Kanal 3, 288 kHz) → Modulationseingang des HR-C6000
          (FM-Sendeaufbau schon vor dem Tasten gesetzt, Pre-Emphasis aus)
        → Zwei-Punkt-Modulation → PA → Antenne

Der FM-Sendeaufbau des HR-C6000 braucht bis zu ≈ 1 s, bis der Träger stabil ist. Die Firmware hält ihn deshalb im Empfang vorbereitet. Der Träger steht dann 62–83 ms nach dem Tasten.

Messwerte (Prototyp)

Größe Wert
Abtastung 24 000 Hz exakt, keine verlorenen Blöcke, kein Clipping (≈ 1/14 Aussteuerung)
RX-Fehlerrate am Pi-Star (BER) ID-31 0,0–0,4 %, IC-7100 0,0 % (−47 bis −52 dBm)
Vergleich mit MMDVM-Board am selben Signal gleichwertig (IC-7100) bzw. besser (ID-31: 0,4 % statt 4,5 %)
Rauschen ohne Signal 10 min ohne Fehlalarm
TX: Hub ≈ ±1,2 kHz (11 PWM-Stufen ≈ 110 Hz je Stufe, linear)
TX: Einschwingen nach dem Tasten 62–83 ms; Präambel = max(TXDelay, 150 ms)
TX: BER an der Gegenstelle 0,0–0,6 %
TX: Trägerablage ≈ −0,72 bis −0,75 kHz bei 438,1 MHz (≈ −1,7 ppm), gemessen mit HackRF am 10-MHz-OCXO; über 270 s Dauersendung ≈ 30 Hz Drift
TX: Dauer 270 s Dauersendung an der Dummy-Load ohne Fehler, Gehäuse +2 K (26 → 28 °C); Firmware-Watchdog als Notbremse nach 250 s, vorher beendet MMDVMHost (Timeout)
CPU Empfang ≈ 16 %, Modulator-Interrupt beim Senden ≈ 7 %
RAM frei Haupt-RAM ≈ 5,4 KB, CCM ≈ 1,8 KB

Bekannte offene Punkte

Referenzen (nur als Vorbild, kein Code übernommen)