- Liittynyt
- 17.10.2016
- Viestejä
- 371
TLDR; GPS-kelloihn synkronoitu NTP-palvelin Rasperry Pi:llä, ei ehkä originellein projekti.
Pikku puuhastelut vähän eskaloitui ja tilasin Aliexpressistä "lautasantennin" ja Mikroe:ltä u-blox NEO-M9N GNSS-vastaanottimen. Kaapin pohjalta löytyi og Raspberry Pi 1 Model B, joka sai luvan toimittaa palvelimen virkaa. Koko komeus sitten PoE-splitterin kanssa IP65 asennuskoteloon. Kirjoitushetkellä homma on vielä testaus ja validointi -vaiheessa, eli työpöydän nurkalla, mutta loppusijoituspaikka tulee olemaan kylmässä varastossa ja antenni pääsee katolle maston nokkaan.
Näistäkin asemista antenni näkee 22 satelliittia
NTP-verrokki
Aluksi konffasin Chronyn käyttämään Mikesin NTP-palvelimia, Chronystä taas datat Telegrafilla InfluxDB:hen, josta niitä voi Grafanalla analysoida. Tällä perus netin yli NTP -setupilla päästiin Chronyn mukaan noin 19us poikkeamaan ja hajontaa oli 213us. Tämä vastaa aika hyvin muita laitteita, joissa minulla on jo sama konffi pyörimässä. Raspberry Pi ei olekaan ihan surkea, mikä on jo itsessään yllätys.
PPS synkronointi
GNSS-moduuli UARTilla kiinni ja PPS-signaali GPIO-pinniin. GPSD osaa kaivaa nyt sarjaporttiin tulevasta NMEA-datasta päivämäärän ja tasasekunnit tahdistetaan PPS (pulse per second) signaaliin jonka U-blox generoi. Tässä meidän täytynee vain luottaa siihen että U-blox osaa asiansa ja PPS signaali on tosiaankin hyvin lähellä satelliittien kelloa. Tuloksena vaatimattomat tuhat kertaa tarkempi kello, poikkeama on enää vain 12ns, mutta hajonta pysyy varsin isona. Tämähän todennäköisesti aiheutuu Raspberry Pin CPU kuormasta, 700MHz ARM ei mahdottomiin pysty. Tätä ehkä voisi parantaa kääntämällä kernelin sopivammilla asetuksilla, mutta se jäänee toistaiseksi tekemättä.
Ylikellotus, piitahnaa kovalevyn väliin
Peruspalikat kun saatiin toimimaan niin sitten vähän optimoimaan. U-bloxin manuaalista löytyi iso läjä konfiguroitavaa. Esimerkiksi laitteen sisäisen navigaatiotilan saa asetettua stationaryksi eli satelliittidataa analysoidaan sillä olettamalla, että antenni pysyy kokoajan paikallaan. Tällä ei varsinaisesti ole vaikutusta kelloon, mutta sijannin paikkavirhe puolittui noin +- 1.5 metrin luokkaan. Jännemmät asetuksen löytyivät sitten PPS:n asetuksista, josta sen taajuutta pystyy nostamaan. Kokeilin ensin 10 Hz:ä ja se vähensi hajontaa merkittävästi, nostinkin pian taajuutta 32 Hz:iin. Nyt poikkeamaa on keskimäärin 11ns ja hajonta alle 700ns, eli kokoajan pysytään mikrosekunnin sisällä.
Sijannin hajontaa 24h aikana
Parannettavaa
Jotta tästä voisi merkittävästi parantaa pitäisi ainakin Raspberry vaihtaa johonkin toiseen. Ilmeisesti kaikki Raspit pois lukien CM4 ja 5 eivät tue hardware timestampingia verkkopiirissä, jolla saisi (ilmeisesti) hajontaa vähennettyä sitten kun kelloa rupeaa tarjoamaan lähiverkon muillekin laitteille. Chronyn esimerkkisivulla oli käytetty Intelin i210 verkkokortin GPIO pinniä PPS-signaalin seuraamiseen, tällöin jokainen pulssi aikaleimataan ja kun se lopulta käsitellään prosessorilla voidaan vähentää matkalla tapahtuneet viiveet. Näin päästään +-20ns hajontaan.
Onkos muilla BBS:läisillä GNSS tai rubidium-synkronoituja NTP-palvelimia? Minkälaisiin tarkkuuksiin olette päässet?
Pikku puuhastelut vähän eskaloitui ja tilasin Aliexpressistä "lautasantennin" ja Mikroe:ltä u-blox NEO-M9N GNSS-vastaanottimen. Kaapin pohjalta löytyi og Raspberry Pi 1 Model B, joka sai luvan toimittaa palvelimen virkaa. Koko komeus sitten PoE-splitterin kanssa IP65 asennuskoteloon. Kirjoitushetkellä homma on vielä testaus ja validointi -vaiheessa, eli työpöydän nurkalla, mutta loppusijoituspaikka tulee olemaan kylmässä varastossa ja antenni pääsee katolle maston nokkaan.
Näistäkin asemista antenni näkee 22 satelliittia
NTP-verrokki
Aluksi konffasin Chronyn käyttämään Mikesin NTP-palvelimia, Chronystä taas datat Telegrafilla InfluxDB:hen, josta niitä voi Grafanalla analysoida. Tällä perus netin yli NTP -setupilla päästiin Chronyn mukaan noin 19us poikkeamaan ja hajontaa oli 213us. Tämä vastaa aika hyvin muita laitteita, joissa minulla on jo sama konffi pyörimässä. Raspberry Pi ei olekaan ihan surkea, mikä on jo itsessään yllätys.
PPS synkronointi
GNSS-moduuli UARTilla kiinni ja PPS-signaali GPIO-pinniin. GPSD osaa kaivaa nyt sarjaporttiin tulevasta NMEA-datasta päivämäärän ja tasasekunnit tahdistetaan PPS (pulse per second) signaaliin jonka U-blox generoi. Tässä meidän täytynee vain luottaa siihen että U-blox osaa asiansa ja PPS signaali on tosiaankin hyvin lähellä satelliittien kelloa. Tuloksena vaatimattomat tuhat kertaa tarkempi kello, poikkeama on enää vain 12ns, mutta hajonta pysyy varsin isona. Tämähän todennäköisesti aiheutuu Raspberry Pin CPU kuormasta, 700MHz ARM ei mahdottomiin pysty. Tätä ehkä voisi parantaa kääntämällä kernelin sopivammilla asetuksilla, mutta se jäänee toistaiseksi tekemättä.
Ylikellotus, piitahnaa kovalevyn väliin
Peruspalikat kun saatiin toimimaan niin sitten vähän optimoimaan. U-bloxin manuaalista löytyi iso läjä konfiguroitavaa. Esimerkiksi laitteen sisäisen navigaatiotilan saa asetettua stationaryksi eli satelliittidataa analysoidaan sillä olettamalla, että antenni pysyy kokoajan paikallaan. Tällä ei varsinaisesti ole vaikutusta kelloon, mutta sijannin paikkavirhe puolittui noin +- 1.5 metrin luokkaan. Jännemmät asetuksen löytyivät sitten PPS:n asetuksista, josta sen taajuutta pystyy nostamaan. Kokeilin ensin 10 Hz:ä ja se vähensi hajontaa merkittävästi, nostinkin pian taajuutta 32 Hz:iin. Nyt poikkeamaa on keskimäärin 11ns ja hajonta alle 700ns, eli kokoajan pysytään mikrosekunnin sisällä.
Sijannin hajontaa 24h aikana
Parannettavaa
Jotta tästä voisi merkittävästi parantaa pitäisi ainakin Raspberry vaihtaa johonkin toiseen. Ilmeisesti kaikki Raspit pois lukien CM4 ja 5 eivät tue hardware timestampingia verkkopiirissä, jolla saisi (ilmeisesti) hajontaa vähennettyä sitten kun kelloa rupeaa tarjoamaan lähiverkon muillekin laitteille. Chronyn esimerkkisivulla oli käytetty Intelin i210 verkkokortin GPIO pinniä PPS-signaalin seuraamiseen, tällöin jokainen pulssi aikaleimataan ja kun se lopulta käsitellään prosessorilla voidaan vähentää matkalla tapahtuneet viiveet. Näin päästään +-20ns hajontaan.
Onkos muilla BBS:läisillä GNSS tai rubidium-synkronoituja NTP-palvelimia? Minkälaisiin tarkkuuksiin olette päässet?