Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:utrak:aprs

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
projekte:utrak:aprs [2014/10/21 10:29] – [Beschreibung] thastiprojekte:utrak:aprs [2014/11/09 19:39] thasti
Zeile 18: Zeile 18:
 ===== Implementierung ===== ===== Implementierung =====
 ==== AFSK-FM ==== ==== AFSK-FM ====
-Im MSP430 wird ein NCO implementiert, der mit möglichst geringem Fehler die nötigen Frequenzen erzeugt. Die Samplerate wird dabei aus dem vorhandenen Grundtakt so gewählt, dass der Fehler für Baudrate, Mark- und Spacefrequenz möglichst klein ist. Um dieses Optimum zu finden, wurde ein Matlab-Skript geschrieben, was nach Brute-Force-Methode den prozentualen Fehler für alle Einstellungen herausfindet ({{:projekte:utrak:msp_fm.m|}}). +Im MSP430 wird ein NCO implementiert, der mit möglichst geringem Fehler die nötigen Frequenzen erzeugt. Die Samplerate wird dabei aus dem vorhandenen Grundtakt so gewählt, dass der Fehler für Baudrate, Mark- und Spacefrequenz möglichst klein ist. Um dieses Optimum zu finden, wurde ein Matlab-Skript geschrieben, was nach Brute-Force-Methode den prozentualen Fehler für alle Einstellungen herausfindet ({{projekte:picoflights:msp_fm.m|}}). 
 Ein Timer stellt die Zeitbasis für den NCO zur Verfügung, dessen Samplerate so gewählt werden sollte, dass ein üblicher FM-Demodulator die Samplefrequenz schon nicht mehr in den NF-Zweig durchlässt. Ein Wert um die 10kHz sollte dafür ausreichen. Ein Timer stellt die Zeitbasis für den NCO zur Verfügung, dessen Samplerate so gewählt werden sollte, dass ein üblicher FM-Demodulator die Samplefrequenz schon nicht mehr in den NF-Zweig durchlässt. Ein Wert um die 10kHz sollte dafür ausreichen.
 Der Phasenakkumulator wird bei jedem Takt auf Grundlage des aktuell zu übertragenden Tons erhöht (FCW_MARK bzw. FCW_SPACE). Aus einer Sinus-Tabelle, erstellt mit einem kleinen Skript, wird der nächste Sinus-Wert ausgelesen und daraufhin der Si4060 auf den entsprechenden Kanal gewechselt. Der Phasenakkumulator wird bei jedem Takt auf Grundlage des aktuell zu übertragenden Tons erhöht (FCW_MARK bzw. FCW_SPACE). Aus einer Sinus-Tabelle, erstellt mit einem kleinen Skript, wird der nächste Sinus-Wert ausgelesen und daraufhin der Si4060 auf den entsprechenden Kanal gewechselt.
 +
 +Beim Si4060 beschränkte eine wenigstens annähernd saubere FM-Aussendung bisher, dass die PLL-Register nicht während des Sendens aktualisiert werden können. Dies lässt sich umgehen, indem man statt der PLL-Register selbst (Integer/Fractional-Teiler) einfach die Offset- oder Deviation-Register des FSK-Modems beschreibt, im Ergebnis ist es das gleiche. 
 +16 Bit "Einstellbreite" sind vorhanden, wenn man das Offsetregister verwendet. Der Hub sollte 3kHz nicht übersteigen, bei 30MHz Quarzfrequenz und einer PLL-Auflösung von 21 Bit hat man eine Frequenzauflösung von 14Hz im 70cm-Band, also sollte man 419 "Digits" Hub machen. Dies schlägt sich in der Sinustabelle des NCO nieder. Der Si4060 erzeugt so sogar ein im Nahfeld verhältnismäßig sauberes Spektrum. Der UART-Interrupt muss allerdings deaktiviert werden, sollte während der Sendung eine Nachicht vom GPS kommen, zerstört dies das Timing (zu hohe Auslastung).
 +
 +Als erster Test sollte ein Sinus mit 1200Hz ausgegeben werden. Das Ergebnis der Demodulation ist im folgenden Screenshot zu sehen. Mit 23dB Oberwellendämpfung ist es zwar sicherlich nicht optimal, aber weitab der zweiten Nutzfrequenz (2200Hz), sollte also nicht zur nennenswerten Verschlechterung der Demodulation führen.
 +
 +{{projekte:picoflights:fm-1200hz.png?800|}}
 +
 +Vor der Demodulation sieht das Spektrum nach einer typischen FM aus:
 +
 +{{projekte:picoflights:fm-1200hz-pre-demod.png?800|}}
  
 ==== Bit-Stream ==== ==== Bit-Stream ====
Zeile 27: Zeile 38:
 ==== AX.25-Protokoll ==== ==== AX.25-Protokoll ====
 Von der Software wird lediglich ein Puffer beschrieben, in welchem die Nutzdaten liegen. Das zugehörige Längenfeld muss mitbeschrieben werden. Die Sende-State-Machine kümmert sich um Aussendung der Flag-Sequenzen am Anfang und am Ende, der Header-Informationen, der Nutzdaten sowie der FCS (Frame Check Sequence).  Von der Software wird lediglich ein Puffer beschrieben, in welchem die Nutzdaten liegen. Das zugehörige Längenfeld muss mitbeschrieben werden. Die Sende-State-Machine kümmert sich um Aussendung der Flag-Sequenzen am Anfang und am Ende, der Header-Informationen, der Nutzdaten sowie der FCS (Frame Check Sequence). 
 +
 +Im Hinterkopf behalten: APRS braucht zwar immer den gleichen Header (Source: eigenes Rufzeichen, Destination: APRS), aber für evtl. Telemetriepakete muss man das eigene Rufzeichen als Target einstellen.
 +
 +==== APRS-Nutzdaten ====
 +In erster Instanz sollen lediglich Position und Höhe im APRS-Netz verteilt werden können. Dies wird mit einem gewöhnlichen Position Report (APRS Spec, Seite 32) bewerkstelligt. Positionen werden im NMEA-Format eingebunden (mit anhängtem N/S bzw E/W), die Höhe wird im Kommentarfeld in Fuß nach dem Altitude Identifier "/A=" angegeben. Danach folgt noch ein fester Kurztext.
 +
 +==== Design ====
 +{{projekte:picoflights:aprs.png?300|}}
 +
 +==== Samplerate ====
 +Am Si4060 zeigte sich kein Problem bei Verwendung von ~10kHz Samplerate unter Verwendung der 30MHz-Taktquelle. Wenn allerdings die RS-92 TCXOs mit 16.3676MHz verwendet werden, scheint der Si4060 keine so hohe Aktualisierungsrate mehr zuzulassen - nicht alle Frequenzwerte werden übernommen und das Spektrum unrein. Workaround ist die Verwendung der größtmöglichen Samplerate, die durch Experimentieren als >5kHz gefunden wurde. Damit ist man zwar gefährlich nah an der Nyquist-Grenze, was sich wegen des fehlenden Filters auch bemerkbar macht (nur noch etwa 3dB Spiegelfrequenzdämpfung nach der Demodulation beim 2,2kHz-Ton). Das TNC2S (als Quasistandard bei APRS-Digis) zeigte sich demgegenüber tolerant. 
 +Es sollte aber die Ursache gefunden werden und das Problem an der Ursache behoben (insofern dies möglich ist).
  
 ===== Links ===== ===== Links =====
   * [[https://www.tapr.org/pdf/AX25.2.2.pdf|AX.25-Spezifikation, Version 2.2]]   * [[https://www.tapr.org/pdf/AX25.2.2.pdf|AX.25-Spezifikation, Version 2.2]]
 +  * [[http://www.aprs.org/doc/APRS101.PDF|APRS-Spezifikation, Version 1.0]]
 +  * [[http://www.qsl.net/kb7tbt/aprs/APRS_Symbol_Chart.pdf|APRS-Symboltabelle]]
  
projekte/utrak/aprs.txt · Zuletzt geändert: 2015/07/24 08:28 von thasti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki