Raspberry PI Stratum 1 NTP Server yang sangat presisi

Pada artikel ini, saya akan memberi tahu Anda cara membuat server Stratum 1 NTP pada Raspberry PI untuk menyinkronkan waktu untuk jumlah yang sederhana dan melupakan masalah yang terkait dengan ketidakcocokan waktu pada semua perangkat Anda selamanya. Dan yang paling penting, itu akan memberikan hasil dua urutan besarnya lebih akurat daripada server biasa.



Dalam artikel sebelumnya yang ditujukan untuk sinkronisasi waktu oleh radio dan SRNS (sistem komunikasi navigasi radio), saya tidak punya waktu untuk berbicara tentang pilihan penerima GPS / GLONASS dengan output PPS. Sementara itu, keakuratan penerimaan sinyal tergantung pada hal ini, nilainya bisa dari satu milidetik hingga beberapa mikrodetik, dan ini sering kali sangat penting.



Untuk penerimaan sinyal waktu paling akurat, Anda memerlukan penerima GPS / GLONASS dengan output PPS. Intinya adalah, bagaimanapun, bahwa di pasar Rusia tidak mudah untuk mendapatkan perangkat dengan karakteristik seperti itu dengan harga yang terjangkau. Banyak model seperti itu sudah lama tidak diproduksi, dan di toko online yang ditinggalkan dengan tata letak pada 1990-an, hanya uraiannya yang tetap dengan tawaran berlangganan pemberitahuan ketika barang tiba.





Daftar lengkap peralatan GPS yang teruji dapat ditemukan di sumber daya GitLab NTPSec. Tidak sulit untuk memperhatikan bahwa sejumlah kecil perangkat yang disajikan dalam daftar ditandai dengan 3-4 bintang dan opsi PPS. Dengan demikian, penerima berikut diciutkan.



  • Garmin GPS-18, bukan USB *** (perkiraan harga 10 ribu 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 * Kinerja luar biasa: GPSd mengenali receiver dengan cepat dan andal, dan laporan dihasilkan secara lengkap dan benar.



3 * Kinerja bagus: gpsd dengan masalah kecil atau latensi mengenali perangkat, tetapi laporan dihasilkan sepenuhnya dan benar.



Jika Anda terintimidasi oleh harga model ini, dan juga tidak ada keinginan besar untuk bermain-main dengan kelenjar, Anda tidak dapat membaca lebih lanjut. Penerima yang terhubung ke server melalui antarmuka USB atau RS232 akan memberikan penentuan waktu yang jauh lebih akurat daripada server NTP menggunakan tcp / ip. Tetapi jika cara samurai tidak asing bagi Anda, maka mari kita bangun server Raspberry PI NTP Anda dengan sinkronisasi waktu GPS.



Menyatukan Raspberry PI



Jadi: kami mengambil komponen berikut untuk server mikro kami.



  1. Raspberry Pi 4 Model B board, 4 GiB RAM (6200 rubel);
  2. Kasus, misalnya ini (890 rubel);
  3. Kartu Micro SD untuk 32 GiB, 16 GiB dimungkinkan; (540 gosok.)
  4. Modul GPS berdasarkan chip NEO-M8 u-blox (1700 rubel dengan antena);
  5. Antena GPS pada 15 dB;
  6. Besi solder.


Sebenarnya, u-blox NEO-M8 dilengkapi dengan antarmuka UART, tetapi untuk output PPS, Anda perlu menyolder pin-3 pada modul GPS ke konektor GPIO yang sesuai pada papan Raspberri Pi. Modul perusahaan Swiss telah mendapatkan popularitas di kalangan spesialis dan ini bukan kebetulan, karakteristik berbicara sendiri.



  • SRNS yang didukung: BeiDou, Galileo, GNSS; GPS / QZSS, GLONASS;
  • Tegangan suplai: 2,7 ... 3,6 V;
  • Antarmuka: UART, USB, SPI, DDC, I2C;
  • Protokol yang didukung: NMEA 0.183 versi 4.0, UBX (binary), RTCM 2.3;
  • Sensitivitas deteksi: -167 dBm;
  • Sensitivitas pelacakan: -160 dBm;
  • Waktu mulai dingin: 26 dtk;
  • Waktu mulai panas: 1,5 dtk;
  • Konsumsi daya: 35 mW;
  • Suhu kerja: -40 ... + 85 ° ;
  • Dimensi: 16x12.2x2.4 mm


Dalam konfigurasi ini dengan peralatan terbaru, perkiraan harga total Raspberry PI yang dirakit adalah 9330 rubel. Anda dapat menghemat uang dengan membeli Raspberry PI 3, atau empat dengan 2 GiB RAM. Anda masih dapat menghemat chip GPS, u-blox NEO-6M dengan biaya antena sekitar 650 rubel. Maka harga server NTP akan turun menjadi 5.500 rubel.





Modul GPS / Glonass UBLOX NEO 8M



Pertanyaan mungkin muncul, untuk apa semua investasi ini dan akurasi apa yang disediakan oleh metode sinkronisasi waktu ini atau itu. Piring ringkasan kecil untuk referensi.

Sumber sinyal waktu Kesalahan
GPS dengan jam atom ± 50 nSec
KPPS ± 1 μSec
PPS ± 5 μSec
Antarmuka USB 1.1 ± 1 mSec
Antarmuka USB 2.0 ± 100 μSec (100000 nSec)
NTP melalui jaringan ~ ± 30 mSec


Kernel PPS (KPPS) berbeda dari PPS karena KPS menggunakan fungsi kernel Linux / Unix untuk secara akurat mencatat perubahan status pada baris PPS. PPS biasa diimplementasikan dalam ruang pengguna. Jika kernel Linux mendukung KPPS melalui API RFC 2783, gpsd akan menggunakannya untuk meningkatkan akurasi.



Banyak distribusi Linux memiliki paket pps-tools yang menyediakan dukungan KPPS dan menginstal file header timepps.h. Pastikan untuk menginstal paket ini.



(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] 


Dengan demikian, dengan menghubungkan penerima GPS dengan output PPS melalui USB, kami mendapatkan peningkatan akurasi sinkronisasi waktu 300 kali lipat . Membaca dari chip GPS di papan dalam mode KPPS memberikan peningkatan akurasi dengan dua urutan besarnya .



Jujur saja - tidak semua dari kita tahu cara menggunakan besi solder, tidak semua orang menggunakan alat ini secara teratur. Dalam hal ini, masuk akal untuk mencari modul GPS yang tidak memerlukan kontak solder.





Raspberry Pi GPS / RTC Expansion Board



Ada beberapa papan seperti itu dan harganya mahal. Perbedaan harga akan sepenuhnya dikompensasi dengan pembelian besi solder dan biaya tenaga kerja.



Instalasi OS



Ada Raspberry PI OS juga. ka Raspbian, Anda cukup mengikuti tautannya , mengunduh versi terbaru dan menginstalnya. Banyak orang melakukan ini, tetapi mari kita ingat bahwa Raspberry PI 4 mendukung sistem operasi 64-bit, sementara Raspberry PI OS hanya memiliki modifikasi Debian Linux 32-bit untuk arsitektur Arm.



Ada sudut pandang yang tidak dapat dibenarkan pada OS 64-bit pada Raspberry PI 4, karena tidak ada cara untuk memberikan peningkatan kinerja karena fitur arsitektur dan perakitan. Sudut pandang ini bagi saya diragukan, mereka telah menulis tentang ini di Habré - OS 64-bit lebih cepat .



Ada port Debian Linux untuk arsitektur arm64, namun distribusinyaUbuntu untuk Raspberry PI memiliki halaman dan instruksi yang jelas. Pada halaman tersebut kami menemukan konfirmasi tambahan bahwa lebih baik memilih OS 64-bit.







Inventaris instalasi:



  • Raspberry Pi 4;
  • Kabel daya USB-C untuk Pi 4;
  • Kartu micro SD dengan gambar instalasi Ubuntu;
  • Monitor dengan output HDMI;
  • Kabel MicroHDMI;
  • Keyboard USB.


Langkah selanjutnya adalah menulis gambar instalasi ke kartu Micro SD. Jika Anda tidak memiliki utilitas dan program khusus untuk keperluan ini, dalam kasus paling sederhana itu sudah cukup.



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


Nama pasti perangkat terlihat dalam output dmesg ketika perangkat baru terdeteksi.



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


Masukkan kartu Micro SD, sambungkan monitor HDMI, keyboard USB, dan kabel daya untuk melakukan booting ke Server Ubuntu di Raspberry Pi. Nama pengguna dan kata sandi default adalah ubuntu.



Penyiapan server NTP



  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