خادم Raspberry PI Stratum 1 NTP فائق الدقة

في هذه المقالة ، سأخبرك بكيفية بناء خادم Stratum 1 NTP على Raspberry PI لمزامنة الوقت لمقدار متواضع ونسيان المشاكل المرتبطة بعدم تطابق الوقت على جميع أجهزتك إلى الأبد. والأهم من ذلك ، أنه سيعطي نتائج أكثر دقة من خادم عادي.



في المقالة السابقة المخصصة لمزامنة الوقت عن طريق الراديو و SRNS (أنظمة اتصالات الملاحة اللاسلكية) ، لم يكن لدي الوقت للحديث عن اختيار جهاز استقبال GPS / GLONASS مع إخراج PPS. وفي الوقت نفسه ، تعتمد دقة استقبال الإشارة على ذلك ، ويمكن أن تتراوح القيمة من مللي ثانية إلى عدة ميكروثانية ، وغالبًا ما يكون ذلك ذا أهمية حاسمة.



لاستقبال إشارة الوقت الأكثر دقة ، تحتاج إلى جهاز استقبال GPS / GLONASS مع إخراج PPS. ومع ذلك ، فإن النقطة هي أنه في السوق الروسية ليس من السهل الحصول على جهاز بمثل هذه الخصائص بسعر مناسب. توقفت إنتاج العديد من هذه النماذج منذ فترة طويلة ، وفي المتاجر المهجورة عبر الإنترنت مع تخطيط التسعينات ، بقيت أوصافها فقط مع عرض للاشتراك في إشعار عند وصول البضائع.





يمكن العثور على قائمة كاملة بأجهزة GPS المختبرة على مورد GitLab NTPSec. ليس من الصعب ملاحظة أن عددًا صغيرًا من الأجهزة المعروضة في القائمة تم تمييزها بـ 3-4 نجوم وخيار PPS. وبالتالي ، فإن المستقبلات التالية مدرجة في القائمة المختصرة.



  • Garmin GPS-18 ، وليس USB *** (السعر التقريبي 10 آلاف روبل)
  • GlobalSat MR-350P ****
  • Jackson Labs FireFly-II ***
  • ماجلان تاليس إيه سي 12 ***
  • موتورولا Oncore GT + ***
  • نافيسيس GR601-W ****
  • SkyTraq SKG16B ****
  • تريمبل لاسين آي كيو ***
  • u-blox ANTARIS LEA-4T ***
  • يو-بلوكس EVK 6H ****
  • u-blox LEA SQ ****


4 * أداء ممتاز: يتعرف GPSd على جهاز الاستقبال بسرعة وموثوقية ، ويتم إنشاء التقارير بشكل كامل وصحيح.



3 * الأداء الجيد: يتعرف نظام تحديد المواقع العالمي (GPS) الذي يعاني من مشاكل بسيطة أو زمن الوصول على الأجهزة ، ولكن يتم إنشاء التقارير بشكل كامل وصحيح.



إذا كنت تخشى من سعر هذه النماذج ، ولا توجد أيضًا رغبة كبيرة في العبث بالغدد ، فلا يمكنك قراءة المزيد. سيوفر جهاز الاستقبال المتصل بالخادم عبر واجهة USB أو RS232 تحديدًا للوقت أكثر دقة من خادم NTP الذي يستخدم TCP / IP. ولكن إذا كانت طريقة الساموراي ليست غريبة عليك ، فلنقم ببناء خادم Raspberry PI NTP الخاص بك مع مزامنة وقت GPS.



تجميع التوت التوت PI



لذلك: نأخذ المكونات التالية لخادمنا الصغير.



  1. لوحة Raspberry Pi 4 Model B ، 4 غيغابايت من ذاكرة الوصول العشوائي (6200 روبل) ؛
  2. حالة ، على سبيل المثال هذا (890 روبل) ؛
  3. بطاقة Micro SD لـ 32 جيجا بايت ، 16 جيجا بايت ممكنة ؛ (540 فرك).
  4. وحدة GPS تعتمد على رقاقة u-blox NEO-M8 (1700 روبل مع هوائي) ؛
  5. هوائي GPS عند 15 ديسيبل ؛
  6. لحام حديد.


في الواقع ، تم تجهيز u-blox NEO-M8 بواجهة UART ، ولكن بالنسبة لإخراج PPS ، تحتاج إلى لحام pin-3 على وحدة GPS إلى موصل GPIO المقابل على لوحة Raspberri Pi. اكتسبت وحدة الشركة السويسرية شعبية بين المتخصصين وهذا ليس مصادفة ، فالخصائص تتحدث عن نفسها.



  • SRNS المدعومة: BeiDou، Galileo، GNSS؛ GPS / QZSS ، GLONASS ؛
  • امدادات التيار الكهربائي: 2.7 ... 3.6 فولت ؛
  • الواجهات: UART ، USB ، SPI ، DDC ، I2C ؛
  • البروتوكولات المدعومة: NMEA 0.183 الإصدار 4.0 ، UBX (ثنائي) ، RTCM 2.3 ؛
  • حساسية الكشف: -167 ديسيبل
  • حساسية التتبع: -160 ديسيبل
  • وقت البدء البارد: 26 ثانية ؛
  • وقت البدء الساخن: 1.5 ثانية ؛
  • استهلاك الطاقة: 35 ميغاواط ؛
  • درجة حرارة العمل: -40 ... + 85 درجة مئوية ؛
  • الأبعاد: 16x12.2x2.4 ملم


في هذا التكوين بأحدث المعدات ، سيكون السعر الإجمالي التقريبي لـ Raspberry PI المجمع 9330 روبل. يمكنك توفير المال عن طريق شراء Raspberry PI 3 ، أو أربعة مع 2 غيغابايت من ذاكرة الوصول العشوائي. لا يزال بإمكانك الحفظ على شريحة GPS ، u-blox NEO-6M مع هوائي يكلف حوالي 650 روبل. ثم سينخفض ​​سعر خادم NTP إلى 5500 روبل.





وحدة GPS / Glonass UBLOX NEO 8M



قد يطرح السؤال ، ما هي كل هذه الاستثمارات وما هي الدقة التي توفرها هذه الطريقة أو تلك من مزامنة الوقت. لوحة ملخص صغيرة كمرجع.

مصدر إشارة الوقت خطأ
GPS مع ساعة ذرية ± 50 ثانية
KPPS ± 1 ecSec
PPS ± 5 ecSec
واجهة USB 1.1 ± 1 مللي ثانية
واجهة USB 2.0 ± 100 μ ثانية (100000 نيوتن ثانية)
NTP عبر الشبكة ~ ± 30 مللي ثانية


يختلف Kernel PPS (KPPS) عن PPS في أنه يستخدم وظيفة kernel Linux / Unix لتحديد الطابع الزمني بدقة لتغيير الحالة في سطر PPS. يتم تطبيق PPS المعتاد في مساحة المستخدم. إذا كانت نواة Linux تدعم KPPS من خلال API RFC 2783 ، فسيستخدمها gpsd لتحسين الدقة.



تحتوي العديد من توزيعات Linux على حزمة أدوات pps التي توفر دعم KPPS وتثبت ملف رأس timepps.h. تأكد من تثبيت هذه الحزمة.



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


وبالتالي ، من خلال توصيل جهاز استقبال GPS بمخرج PPS عبر USB ، نحصل على زيادة 300 مرة في دقة مزامنة الوقت. القراءة من شريحة GPS على اللوحة في وضع KPPS تعطي زيادة في الدقة بمقدار أمرين آخرين .



لنكن صادقين - لا يعرف كل منا كيفية استخدام مكواة لحام ، ولا يستخدم الجميع هذه الأداة بانتظام. في هذه الحالة ، من المنطقي البحث عن وحدة GPS لا تتطلب جهات اتصال لحام.





لوح التوسيع Raspberry Pi GPS / RTC



هناك عدد قليل من هذه اللوحات وهي غالية الثمن. سيتم تعويض الفرق في السعر بالكامل عن طريق شراء مكواة لحام وتكاليف العمالة.



تثبيت نظام التشغيل



هناك Raspberry PI OS كذلك. كا Raspbian ، يمكنك فقط اتباع الرابط ، تنزيل أحدث إصدار وتثبيته. يقوم العديد من الأشخاص بذلك ، لكن دعنا نتذكر أن Raspberry PI 4 يدعم نظام التشغيل 64 بت ، بينما يحتوي Raspberry PI OS على تعديلات 32-bit Debian Linux فقط لهندسة Arm.



هناك وجهة نظر من هذا أنه غير مبرر على نظام تشغيل 64 بت على Raspberry PI 4 ، حيث لا توجد طريقة لتوفير مكاسب في الأداء بسبب خصائص الهيكل والتجمع. تبدو لي وجهة النظر هذه مشكوكًا فيها ، فقد كتبوا بالفعل عن هذا على Habré - نظام التشغيل 64 بت أسرع .



يوجد منفذ ديبيان لينكس لهندسة arm64 ، لكن التوزيعيحتوي Ubuntu for Raspberry PI على صفحة وتعليمات واضحة. في الصفحة ، نجد تأكيدًا إضافيًا على أنه من الأفضل اختيار نظام تشغيل 64 بت.







جرد التثبيت:



  • التوت بي 4 ؛
  • كابل طاقة USB-C لـ Pi 4 ؛
  • بطاقة Micro SD مع صورة تثبيت Ubuntu ؛
  • الشاشة مع إخراج HDMI ؛
  • كابل MicroHDMI ؛
  • لوحة مفاتيح USB.


الخطوة التالية هي كتابة صورة التثبيت على بطاقة Micro SD. إذا لم يكن لديك أداة مساعدة وبرنامج متخصص لهذه الأغراض ، في أبسط الحالات يكون ذلك كافيًا.



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


يظهر الاسم الدقيق للجهاز في إخراج dmesg عند اكتشاف جهاز جديد.



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


أدخل بطاقة Micro SD ، وقم بتوصيل شاشة HDMI ولوحة مفاتيح USB وكابل الطاقة للتمهيد في خادم Ubuntu على Raspberry Pi. اسم المستخدم وكلمة المرور الافتراضية هو أوبونتو.



إعداد خادم 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