Hochpräziser Raspberry PI Stratum 1 NTP-Server

In diesem Artikel werde ich Ihnen erklären, wie Sie einen Stratum 1-NTP-Server auf einem Raspberry PI erstellen, um die Zeit für eine bescheidene Menge zu synchronisieren und die Probleme zu vergessen, die mit der Zeitinkongruenz auf allen Ihren Geräten für immer verbunden sind. Und am wichtigsten ist, dass die Ergebnisse zwei Größenordnungen genauer sind als bei einem normalen Server.



Im vorherigen Artikel über die Zeitsynchronisation durch Funk und SRNS (Funknavigationskommunikationssysteme) hatte ich keine Zeit, über die Wahl eines GPS / GLONASS-Empfängers mit PPS-Ausgang zu sprechen. In der Zwischenzeit hängt die Genauigkeit des Signalempfangs davon ab, der Wert kann zwischen einer Millisekunde und mehreren Mikrosekunden liegen, und dies ist häufig von entscheidender Bedeutung.



Für den genauesten Zeitsignalempfang benötigen Sie einen GPS / GLONASS-Empfänger mit PPS-Ausgang. Der Punkt ist jedoch, dass es auf dem russischen Markt nicht einfach ist, ein Gerät mit solchen Eigenschaften zu einem erschwinglichen Preis zu bekommen. Viele solcher Modelle werden seit langem nicht mehr hergestellt, und in verlassenen Online-Shops mit dem Layout der neunziger Jahre blieben nur ihre Beschreibungen mit dem Angebot, eine Benachrichtigung zu abonnieren, wenn Waren eintrafen.





Eine vollständige Liste der getesteten GPS-Geräte finden Sie in der GitLab NTPSec-Ressource. Es ist nicht schwer zu bemerken, dass eine kleine Anzahl von Geräten in der Liste mit 3-4 Sternen und der PPS-Option gekennzeichnet ist. Somit werden die folgenden Empfänger in die engere Wahl gezogen.



  • Garmin GPS-18, nicht USB *** (ungefährer Preis 10 Tausend Rubel)
  • GlobalSat MR-350P ****
  • Jackson Labs FireFly-II ***
  • Magellan Thales AC12 ***
  • Motorola Oncore GT + ***
  • Navisys GR601-W ****
  • SkyTraq SKG16B ****
  • Trimble Lassen IQ ***
  • u-blox ANTARIS LEA-4T ***
  • u-blox EVK 6H ****
  • u-blox LEA SQ ****


4 * Hervorragende Leistung: GPSd erkennt den Empfänger schnell und zuverlässig und Berichte werden vollständig und korrekt generiert.



3 * Gute Leistung: GPSD mit geringfügigen Problemen oder Latenz erkennt Geräte, aber Berichte werden vollständig und korrekt generiert.



Wenn Sie vom Preis dieser Modelle eingeschüchtert sind und auch kein großer Wunsch besteht, an Drüsen zu basteln, können Sie nicht weiter lesen. Ein Empfänger, der über eine USB- oder RS232-Schnittstelle mit einem Server verbunden ist, bietet eine viel genauere Zeitbestimmung als ein NTP-Server mit TCP / IP. Aber wenn Ihnen der Weg der Samurai nicht fremd ist, bauen wir Ihren Raspberry PI NTP-Server mit GPS-Zeitsynchronisation.



Himbeer-PI zusammenstellen



Also: Wir nehmen die folgenden Komponenten für unseren Mikroserver.



  1. Raspberry Pi 4 Model B Board, 4 GiB RAM (6200 Rubel);
  2. Fall zum Beispiel dies (890 Rubel);
  3. Micro SD-Karte für 32 GiB, 16 GiB ist möglich; (540 Rub.)
  4. GPS-Modul basierend auf U-Blox NEO-M8-Chip (1700 Rubel mit Antenne);
  5. GPS-Antenne bei 15 dB;
  6. Lötkolben.


Eigentlich ist u-blox NEO-M8 mit einer UART-Schnittstelle ausgestattet, aber für den PPS-Ausgang müssen Sie Pin-3 am GPS-Modul mit dem entsprechenden GPIO-Anschluss auf der Raspberri Pi-Platine verlöten. Das Modul des Schweizer Unternehmens hat bei Fachleuten an Beliebtheit gewonnen und das ist kein Zufall, die Eigenschaften sprechen für sich.



  • Unterstützte SRNS: BeiDou, Galileo, GNSS; GPS / QZSS, GLONASS;
  • Versorgungsspannung: 2,7 ... 3,6 V;
  • Schnittstellen: UART, USB, SPI, DDC, I2C;
  • Unterstützte Protokolle: NMEA 0.183 Version 4.0, UBX (binär), RTCM 2.3;
  • Erkennungsempfindlichkeit: -167 dBm;
  • Tracking-Empfindlichkeit: -160 dBm;
  • Kaltstartzeit: 26 s;
  • Heißstartzeit: 1,5 s;
  • Leistungsaufnahme: 35 mW;
  • Arbeitstemperatur: -40 ... + 85 ° C;
  • Abmessungen: 16 x 12,2 x 2,4 mm


In dieser Konfiguration mit der neuesten Ausrüstung beträgt der ungefähre Gesamtpreis des zusammengebauten Himbeer-PI 9330 Rubel. Sie können Geld sparen, indem Sie einen Raspberry PI 3 oder einen Four mit 2 GiB RAM kaufen. Sie können immer noch auf einem GPS-Chip sparen, u-blox NEO-6M mit einer Antenne kostet etwa 650 Rubel. Dann sinkt der Preis des NTP-Servers auf 5500 Rubel.





GPS / Glonass-Modul UBLOX NEO 8M Es



kann sich die Frage stellen, wofür all diese Investitionen sind und welche Genauigkeit diese oder jene Methode der Zeitsynchronisation bietet. Kleine Übersichtsplatte als Referenz.

Zeitsignalquelle Error
GPS mit Atomuhr ± 50 nSec
KPPS ± 1 μSec
PPS ± 5 μSec
USB 1.1-Schnittstelle ± 1 mSec
USB 2.0-Schnittstelle ± 100 μSec (100000 nSec)
NTP über das Netzwerk ~ ± 30 mSec


Kernel PPS (KPPS) unterscheidet sich von PPS darin, dass es eine Linux / Unix-Kernelfunktion verwendet, um eine Statusänderung in der PPS-Zeile genau zu zeitstempeln. Das übliche PPS wird im User-Space implementiert. Wenn der Linux-Kernel KPPS über API RFC 2783 unterstützt, wird es von gpsd verwendet, um die Genauigkeit zu verbessern.



Viele Linux-Distributionen verfügen über ein pps-tools-Paket, das KPPS-Unterstützung bietet und die Header-Datei timepps.h installiert. Stellen Sie sicher, dass Sie dieses Paket installieren.



(1:1146)$ sudo emerge -av pps-tools

Local copy of remote index is up-to-date and will be used.
These are the packages that would be merged, in order:

Calculating dependencies... done!
[binary   R    ] net-misc/pps-tools-0.0.20120407::gentoo  0 KiB

Total: 1 package (1 reinstall, 1 binary), Size of downloads: 0 KiB
Would you like to merge these packages? [Yes/No] 


Durch den Anschluss eines GPS-Empfängers mit PPS-Ausgang über USB wird die Genauigkeit der Zeitsynchronisation um das 300-fache erhöht. Das Ablesen vom GPS-Chip auf der Platine im KPPS-Modus erhöht die Genauigkeit um weitere zwei Größenordnungen .



Seien wir ehrlich - nicht alle von uns wissen, wie man einen Lötkolben benutzt, nicht jeder benutzt dieses Werkzeug regelmäßig. In diesem Fall ist es sinnvoll, nach einem GPS-Modul zu suchen, für das keine Lötkontakte erforderlich sind.





Raspberry Pi GPS / RTC-Erweiterungskarte



Es gibt nur wenige solche Karten und sie sind teuer. Die Preisdifferenz wird durch den Kauf eines Lötkolbens und die Arbeitskosten vollständig ausgeglichen.



Installation des Betriebssystems



Es gibt auch ein Raspberry PI OS. ka Raspbian, Sie können einfach dem Link folgen , die neueste Version herunterladen und installieren. Viele Leute tun dies, aber denken wir daran, dass Raspberry PI 4 ein 64-Bit-Betriebssystem unterstützt, während Raspberry PI OS nur 32-Bit-Debian-Linux-Modifikationen für die Arm-Architektur enthält.



Es gibt einen solchen Standpunkt, dass er auf einem 64-Bit-Betriebssystem unter Raspberry PI 4 nicht gerechtfertigt ist, da es aufgrund der Besonderheiten der Architektur und der Baugruppe keine Möglichkeit gibt, einen Leistungsgewinn zu erzielen. Diese Sichtweise scheint mir zweifelhaft, haben sie schon geschrieben über diese auf Habré - 64-Bit - Betriebssystem schneller ist .



Es gibt einen Port von Debian Linux für die arm64-Architektur, jedoch die DistributionUbuntu für Raspberry PI hat eine übersichtliche Seite und Anweisungen. Auf der Seite finden wir eine zusätzliche Bestätigung, dass es besser ist, ein 64-Bit-Betriebssystem zu wählen.







Installationsinventar:



  • Himbeer Pi 4;
  • USB-C-Stromkabel für Pi 4;
  • Micro SD-Karte mit Ubuntu-Installationsimage;
  • Monitor mit HDMI-Ausgang;
  • MicroHDMI-Kabel;
  • USB-Tastatur.


Der nächste Schritt besteht darin, das Installationsimage auf die Micro SD-Karte zu schreiben. Wenn Sie für diese Zwecke kein spezielles Dienstprogramm und Programm zur Verfügung haben, reicht dies im einfachsten Fall aus.



sudo dd if=/path/to/ubuntu-core-arm64.iso of=/dev/mmcblk0 status=progress


Der genaue Name des Geräts wird in der dmesg-Ausgabe angezeigt, wenn ein neues Gerät erkannt wird.



PM: Adding info for No Bus:179:0
device: 'mmcblk0': device_add
PM: Adding info for No Bus:mmcblk0


Legen Sie eine Micro-SD-Karte ein, schließen Sie einen HDMI-Monitor, eine USB-Tastatur und ein Netzkabel an, um Ubuntu Server auf dem Raspberry Pi zu starten. Der Standardbenutzername und das Standardkennwort sind Ubuntu.



NTP-Server-Setup



  1. Raspberry PI (headless), IP . .



    (1:1151)$ arp -na | grep -i "dc:a6:32"


    Pi HDMI USB , 1-2 .
  2. ssh



    (1:1152)$ ssh ubuntu@<Raspberry Pi’s IP address>
  3. .



    user@server ~$ sudo apt-get install aptitude
    user@server ~$ sudo aptitude install wpasupplicant gpsd chrony
  4. Wi-Fi wpasupplicant.
  5. Linux UART0 Pi /dev/ttyAMA0. UART0 GPS Linux. console=ttyAMA0,115200, console=tty1. /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT. , /boot/config.txt, .



    Raspberry Pi 4 6 UART-

    UART0 PLO11 /dev/ttyAMA0 (Bluetooth)
    UART1 mini UART /dev/ttyS0
    UART2 PLO11
    UART3 PLO11
    UART4 PLO11
    UART4 PLO11
    UART2-5 .



    , UART0 — , UART1, mini UART. Bluetooth UART1 , UART0. /etc/default/grub, /boot/config.txt enable_uart=1.
  6. /etc/defaults/gpsd .



    DEVICES="/dev/ttyAMA0 /dev/pps0"
    GPSD_OPTIONS="-n"
    USBAUTO="false"
  7. , gpsd.



    user@server ~$ sudo /etc/init.d/gpsd start
    user@server ~$ sudo /etc/init.d/gpsd restart
  8. GPS.



    user@server ~$ cat /dev/ttyAMA0
    user@server ~$ cgps -s
    user@server ~$ ppstest /dev/pps0
  9. /etc/ntp.conf.



    , Stratum 1, 2 NTP (, pool [0-9].subdomain.pool.ntp.org) , GPS/PPS .



    # GPS Serial data reference (NTP0)
    server 127.127.28.0 minpoll 4
    fudge 127.127.28.0 flag1 1 time1 0.9999 refid GPS #flag1 - PPS on


    # GPS PPS reference (NTP1)
    server 127.127.22.0 minpoll 4
    fudge 127.127.22.0 flag3 1 refid PPS #flag3 - enable KPPS API


    NTP0 , GPS. NTP1 PPS .
  10. ntpd



    user@server ~$ sudo /etc/init.d/ntpd restart









All Articles