Автор Тема: GPSDO - стандарт частоты и времени  (Прочитано 383 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн R8ACZ

  • Постоялец
  • ***
  • Сообщений: 133
  • Карма: +66/-9
GPSDO - стандарт частоты и времени
« : 10 Апреля 2018, 23:35:17 »
GPSDO (GPS disciplined oscillator) - высокочастотный генератор частоты (термостабилизированный кварцевый резонатор или рубидиевый генератор) стабилизированный по атомным часам спутниковой системы навигации. Конструктивно представляет GPS приёмник с внешней антенной, который на выходе выдаёт высокоточные сигналы с определённой периодичностью (1Гц - 15МГц), с использованием которых микроконтроллер корректирует частоту локального источника частоты (например OCXO). Преимуществом такого метода является то, что компоненты такой системы не очень дорогие, а стабильность частоты получается очень высокой (1*10^-12 - 1*10^-14), сравнимый с Цезиевым эталоном частоты. Недостатком является необходимость подключения внешней антенны GPS, и расположение её под открытым небом.

GPSDO широко используется в различной телекоммуникационной аппаратуре, по этой причине можно относительно недорого купить списанные модули от старой аппаратуры. На ebay можно найти наверняка рабочие модули, упакованные в красивые корпуса, с уже выведенными разъёмами питания, 10МГц и 1PPS, ценой от $90-100 и выше. Подобные модули, но без красивой коробочки можно приобрести на taobao за 200-500 юаней, но кроме того, что прямой доставки с данной площадки по разумным ценам до России нет, так ещё и большинство модулей маркировано как "не рабочий, под разбор на запчасти" или "не тестировался, но кристалл работает", в общем лотерея.

Я решил сыграть в лотерею, и приобрёл несколько, и часть оказались рабочими, хотя и с нюансами. Привыкнув к тому, что современный телефон при холодном старте находит местоположение за считанные минуты, решил поначалу что все модули не рабочие. Но оказалось, что в условиях не совсем открытого неба (антенна на балконе), старым GPS приёмникам из двухтысячных годов требуется значительно больше времени, чем современным. Из-за того, что у меня в зоне видимости оказалось всего 4 спутника, определение местоположения и синхронизация частоты заняла примерно час.

Trimble 57963-d GPSDO module


Для питания модуля требуется источник питания 5.5V 2A (6V также допустимо). По UART модуль молчит, на выходе 10MHz так же тишина. Возможно модуль не рабочий, отложил его пока. Именно такие модули устанавливают в GPSDO, продаваемые на ebay. Как и в остальных модулях, GPS антенна требуется активная, на неё подаётся питание 5В. Подробнее про данный модуль можно прочитать по ссылке.

Symmetricom UCCM GPSDO module


Для питания модуля требуется источник питания 5.5V 2A (6V также допустимо). Для управления наружу выведен RS232 интерфейс, но удалив чип RS232-UART конвертера и запаяв пару перемычек (как показано на фото) можно получить доступ напрямую к UART. После подачи питания модуль сразу запускается и начинает искать спутники. UART работает на стандартных настройках и скорости 57600. Для получения справки по доступным командам можно отправить знак вопроса в порт:
Цитировать
UCCM-P > ?
*IDN?
ALARm:HARDware?
ALARm:OPERation?
DIAGnostic:OUTPut ON|OFF
OUTPut:ACTive:ENABle
OUTPut:ACTive:DISable
OUTPut:ACTive:HOLDover:DURation:THReshold <seconds>
OUTPut:ACTive:HOLDover:DURation:THReshold?
OUTPut:INACTive
OUTPut:INACTive?
OUTPut:STATe?
SYNChronization:HOLDover:DURation:STATus:THReshold <seconds>
SYSTem:PRESet
SYNChronization:TFOMerit?
LED:GPSLock?
SYNChronization:FFOMerit?
GPS:POSition N or S,<deg>,<min>,<sec>,E or W,<deg>,<min>,<sec>,<height>
GPS:POSition?
GPS:POSition:HOLD:LAST?
GPS:REFerence:ADELay <numeric value>
GPS:REFerence:ADELay?
GPS:SATellite:TRACking:COUNt?
GPS:SATellite:TRACking?
DIAGnostic:ROSCillator:EFControl:RELative?
SYNChronization:TINTerval?
DIAGnostic:LOG:READ:ALL?
DIAGnostic:LOG:CLEar
SYSTem:PON
OUTPut:MODE?
SYSTem:STATus?
SYSTem:COMMunication:SERial1:BAUD 9600|19200|38400|57600
SYSTem:COMMunication:SERial1:BAUD?
SYSTem:COMMunication:SERial1:PRESet
SYSTem:COMMunication:SERial2:BAUD 9600|19200|38400|57600
SYSTem:COMMunication:SERial2:BAUD?
SYSTem:COMMunication:SERial2:PRESet
OUTPut:STANby:THReshold <seconds>
changeSN
SYNChronization:REFerence:ENABLE LINK|GPS
SYNChronization:REFerence:DISABLE LINK|GPS
SYNChronization:REFerence:ENABLE?
STATus
POSSTATus
TOD EN|DI
TIME:STRing?
REFerence:TYPE GPS|LINK
REFerence:TYPE?
PULLINRANGE 0|1|2|...|254|255
PULLINRNAGE?
DIAGnostic:LOOP?
DIAGnostic:ROSCillator:EFControl:DATA GPS|<value>
DIAGnostic:ROSCillator:EFControl:DATA?
OUTPut:TP:SELection PP1S|PP2S
OUTPut:TP:SELection?
GPSystem:SATellite:TRACking:EMANgle <degrees>
GPSystem:SATellite:TRACking:EMANgle?
DIAGnostic:TCODe:STATus:AMASk
DIAGnostic:TCODe:STATus:OMASk
DIAGnostic:TCODe:ERRor:AMASk
DIAGnostic:TCODe:ERRor:OMASk
DIAGnostic:HOLDover:DELay
DIAGnostic:HOLDover:DELay?
GPS:SATellite:TRACking:IGNore <PRN>, ...,<PRN>
GPS:SATellite:TRACking:IGNore?
GPS:SATellite:TRACking:INCLude <PRN>, ...,<PRN>
GPS:SATellite:TRACking:INCLude?
GPS:SATellite:TRACking:<select>:ALL
Command Complete

Для получения информации о текущем состоянии модуля и качестве приёма GPS используются команды "POSSTATus", "SYST:STAT?". Также будет полезной команда "DIAGnostic:LOG:READ:ALL?" - она отображает лог статусов модуля, по которому можно узнать об ошибках. Например у меня в нём часто фигурирует запись "PDOP too high", что означает плохое качество сигнала GPS, из-за чего позиция определяется менее точно.

Цитировать
UCCM-P > STATus

                 - UCCM Slot STATE -



1-1. #Now ACTIVE STATUS ---------------- [Master]
1-2. #Before ACTIVE STATUS ------------- [OCXO Warm]
2-1. #Reference Clock Operation -------- [Not Used]
2-2. #Current Reference Type ----------- [GPS]
2-3. #Current Select Reference --------- [GPS 1PPS]
2-4. #Current Reference Status --------- [Good Accuracy & Stable]
     #GPS STATUS ----------------------- [Available]
     #Priority Level ------------------- [GPS > LINK]
     #ALARM STATUS
     #H/W FAIL ---------- [ LINK ]
3-1. PLL STATUS ------------------------ [Enable]
3-2. Current: PLL MODE ----------------- [NORMAL 2 MODE]
Command Complete

По команде "DIAGnostic:LOOP?" можно увидеть отладочную информацию по корректировочным коэффициентам для опорного генератора:
Цитировать
UCCM-P > DIAGnostic:LOOP?
-------------------------------------------------------------------------------
4/5/2018 17:14:33
-------------------------------------------------------------------------------

   LOS      MEAS       NCO STATUS WEIGHT PBUC FBUC DBUC LBUC IBUC G  M TC
-------------------------------------------------------------------------------
 0:  1  0.000e+00  0.000e+00 0x07AC   0   700  700    0    0    2  2  4 29
 1:  1  0.000e+00  0.000e+00 0x068C   0   700  700    0    0    0  2 14 226
GPS: 0 -2.818e-08 -2.439e-08 0x0000   1  ---- 1000 1000 ---- ----  3  6 31
-------------------------------------------------------------------------------
freq cor  = -2.439396e-08
phase cor = -8.000000e-10
gps phase = 7.366667e-08
temp cor  = 2.053135e-11
Command Complete

GPS антенна так же используется активная, с подачей питания 5В по фидеру. В выводе команды "POSSTATus" можно увидеть ток, потребляемый GPS антенной. Подробнее о модуле можно прочитать на форуме  eevblog.

True Position GPSDO module

В отличии от предыдущих двух, для питания данного модуля используется источник напряжением 12В (допустимо 9-15В) с током 2А. Данный модуль имеет выведенные на колодки интерфейсы RS232 и UART (скорость 9600, настройки по умолчанию). После подачи питания модуль не начинает работу и требует наличие внешнего контроллера. Для загрузки модуля и начала работы требуется отправить в UART порт сообщение "$PROCEED", если этого не сделать, то модуль будет раз в секунду отправлять в порт сообщение вида:
Цитировать
$GETVER 12.0.1 BOOT 10 fbde 7437 06162200C2000A2007090BF8

Ключевое слово в данном сообщении "BOOT". После отправки команды модуль загрузится, загрузит из памяти предыдущие координаты места установки и начнёт поиск спутников. Раз в секунду в порт отправляется сообщение "$CLOCK" с текущей меткой времени. Раз в пять секунд отправляется сообщение "$STATUS", в котором содержится информация о состоянии (статус выхода 10МГц, статус выхода 1PPS, статус GPS антенны, время с момента фиксации текущей позиции в секундах, количество спутников, идентификатор состояния). Также раз в пять секунд отправляется сообщение "$EXTSTATUS", в котором последнее число означает температуру (платы, в районе OCXO, скорее всего):
Цитировать
>$PROCEED

$SETPOS
$SETPOS
$SETDELAY
$CLOCK 693878408 0 7
$EXTSTATUS 0 0 00.00 0.00
$STATUS 0 0 0 0 0 11
$CLOCK 693878409 0 7
$CLOCK 693878410 0 7
$CLOCK 693878411 0 7
$CLOCK 693878412 0 7
$CLOCK 693878413 0 7
$EXTSTATUS 0 0 00.00 44.13
$STATUS 0 0 0 0 0 19
$CLOCK 693878414 0 7
$CLOCK 693878415 0 7
$CLOCK 693878416 0 7
$CLOCK 693878417 0 7
$CLOCK 693878418 0 7
$EXTSTATUS 0 0 00.00 44.13
$STATUS 0 0 0 0 0 19

Так как раньше модуль стоят на другой стороне земного шара, то для ускорения поиск текущей позиции можно указать примерное местоположение вручную с использованием команды "$SETPOS" (формат можно посмотреть отправив команду "$GETPOS").

Описание команд и статусных сообщений, полученное путём реверс-инженеринга прошивки модуля:
Цитировать
        // Based on FW 12.0.1
        // Commands:
        //
        // $PROCEED [Send at startup to get past the bootloader]
        //
        // $FACT [Factory preset]
        // $GETBDELAY [returns board delay, nanoseconds]
        // $GETDELAY [returns cable delay, nanoseconds]
        // $GETPOS [return position ]
        // $GETSCALEFACTOR [Returns a float, such as 3.742106e-3]
        // $GETVER [returns version info]
        // $KALDBG <0|1> [Enable reporting of Kalman filter parameters]
        // $PPSDBG <0|1> [Enable or disable timing information every second]
        // $RESET [Unit software reset]
        // $SETBDELAY <n> [-32 <= n <= 32, Set board delay, PPS4 units (roughly 5 or 6 ns). PPS4 is controlled to equal this value]
        // $SETDELAY <n> [-32768 <= n <= 32767Set cable delay, nanoseconds]
        // $SETPOS <n> <n> <n> [set position to Lat/Long/Elevation_MSL, send value returned by survey]
        // $SURVEY <n> [survey for n hours, default is 8]
        // $TRAINOXCO [Start OXCO Training. This restarts the board ($PROCEED needed), and measures freq
        //             change with 500 ADC count]
        // $UPDATE FLASH [update flash memory settings]
        //
        // Other unknown commands:
        // $GETA [returns -1; Attenuator?]
        // $GETP [returns -1 255; Potentiometer?]
        // $SET1PPS  ["$SET1PPS 0"/"$SET1PPS 1"] seems to go to a manual holdover mode, and status changes to 3]
        //           [Seems to return to normal a few minutes after "$SET1PPS 1 1"???  (Status goes 8,16,17,18,0]
        //

        // Messages:
        // $STATUS
        // 1: (Maybe 10 MHz bad, based on packrat docs)
        // 2: (Maybe PPS bad, based on packrat docs)
        // 3: Antenna is bad? 0=good
        // 4: Holdover duration (secs)
        // 5: Number of sats tracked (different than, but within 2 of $EXTSTATUS, perhaps only counts channels 0-7???, range is 0-8)
        // Status [Locked = 0, Recovery = 1, (Forced holdover?)=3, Train OXCO=7, Holdover = 8,
        //        [Startup A/B/C/D = 10/11/2/19 ]
        //        [ (transition from 1 to 0) = (14,15,16,17,18) ] Wait states when transitioning
        //        [ (transition from 0 to 1) = (20,21,22) ]  Wait states when transitioning
        //  (6 = locked, but unknown location????)
        //
        // $PPSDBG 1187153266 3 25.28081e3 -253 -6 2 2 0.0
        // 1: same as clock (GPS Time)
        // 2: Same as $STATUS status, but updates much more often (and seems to skip states less often)
        // 3: Floating point number. Output voltage. Tends towards 29e3 on my board. Proportional to the DAC voltage
        //         On my RevC CTS board, Vbias ~= 6.25e-5*PPS3. This may make sense for a 4.096 V reference: 4.096/2^16=6.25e-5
        //         During startup, it is not put in the result string (this field is blank, so two sequential space characters are in the string)
        // 4: Measured phase offset? Units seem something like 6.5*ns
        // 5: Looks like a saw-tooth between -15 and 15 (or so). Perhaps the quantization error reported by the GPS module?
        // 6: Normally 0, but sometimes 2 (related to holdover/startup?)
        // 7: Normally 0, but sometimes 1 or 2 (related to holdover/startup?)
        // 8: Always 0.0?
        //
        // $EXTSTATUS
        // 1: SurveyStatus [0=normal, 1=surveying]
        // 2: Number of sats (different than, but within 2 of $STATUS, perhaps only counts channels 0-9, range is 0-10)
        // 3: DOP (maybe TDOP?)
        // 4: Temperature (close to FPGA? close to oven?) (my board reads about 45C)
        //
        // $GETPOS (sent after setting position, or requesting position
        // Latitude
        // Longitude
        // Elevation_MSL
        // Correction to MSL to get WGS elevation (add this value to MSL to get WGS ellipsoid)
        // Status flag [(Normal?)=0 on 196 board or =2 on Bliley board, Surveying=3], or maybe a FOM?
        //
        // $SURVEY 40448488 -86915296 225 -34 7129
        // [sent during a survey]
        // 1: Latitude
        // 2: Longitude
        // 3: Elevation_MSL
        // 4: Correction to MSL to get WGS elevation (add this value to MSL to get WGS ellipsoid)
        // 5: Number of seconds remaining
        //
        // $SAT
        // Channel # (0-based, seems to only return channel 0 through 7)
        // GPS Sattelite number
        // Elevation (degree)
        // Azimuth (degree)
        // SNR (dB*Hz)
        //
        // $CLOCK 1187156731 18 3
        // GPS UNIX-timestamp (secs since 1970), but my board is off by 10 years (reporting 2007 while it is 2017)
        // Count of leap-seconds
        // Time figure-of-merit (1=good, 7=bad)
        //
        // $GETVER 12.0.1 BOOT 10 fbde 7437 06162200B0000A2004183ACC
        // $GETVER 12.0.1 0.4850266.0.1 19 fbde 7437 06162200B0000A2004183ACC
        // [version information, I used this to know if I need to send the PROCEED command, String contains BOOT when in bootloader mode]
        // [During boot, only terminated with LF but not CR(or maybe other-way around?)]
        // 1: Bootloader version?
        // 2: ("BOOT" during boot) or (software or perhaps GPS version info????)
        // 3: Status code (same as $STATUS)
        // 4: CRC of something?
        // 5: Always 7437?
        // 6: (Part number: 06162200)(Board Rev: B)(Assembly version: 0000)(Delimeter: A)(Year: 2004)(Week?: 18)(SN?: 3ACC)
        //
        // $WSAT 4 138 209 38 0
        // [WAAS Satellite info, same format as $SAT]
        //
        // $SET1PPS
        // [Sent at boot, but also in response to a $SET1PPS command. Sent every 20 seconds.]
        //
        // $KALDBG 1187203779 0.08 29.59241e3 0.120e-3 0.568 0 0
        // [Only be sent when reference is locked (state=0)]
        // 1: GPS UNIX-timestamp (secs since 1970), but my board is off by 10 years (reporting 2007 while it is 2017)
        // 2: Floating point number.
        //     Resets to 0 at time of lock (and at end of holdover).
        // 3: Floating point number. Magnitude is similar to PPS3, but does not track it so well.
        // 4: Floating point.
        //     Resets to 0 at time of lock (and at end of holdover).
        // 5: Floating point. Smoothed version of PPS3, seems like ~6.5*(PPS phase in ns)?
        //     Resets to 0 at time of lock (and at end of holdover).
        // 6: Flag, always zero?
        // 7: Flag, always zero?

Подробнее о модуле, а также пример контроллера для запуска модуля можно найти на github.

« Последнее редактирование: 10 Апреля 2018, 23:41:42 от R8ACZ »

 



Последние сообщения на форуме:
[Доска частных объявлений] Re: Продается комплект аппаратуры для начинающего радиолюбителя от RA9AMO от ra9apk 23 Сентября 2018, 22:54:53
[Программы для радиолюбителей] Re: CAT4Web - синхронизация трансивера и WebSDR от R8AEF 22 Сентября 2018, 16:54:41
[Маяки, репитеры, эхолинки и их частоты] Re: Маяк R8ACZ/B 144.450 от R8CAS 22 Сентября 2018, 14:02:14
[Новости] RРусская локализация JTDX v18.1.0.92 от RN9AZ 22 Сентября 2018, 04:57:19
[Программы для радиолюбителей] JTDX v18.1.0.92 - тестирование нового функционала <UA3DJY> от RN9AZ 22 Сентября 2018, 04:54:31
[Новости] Re: ГКРЧ на заседании 12 сентября 2018 дала зеленый свет стандарту DRM+. от ub8aez 21 Сентября 2018, 19:30:58
[Беседка] Re: радиоклуб в Челябинске от R9AZ 21 Сентября 2018, 00:45:20
[Маяки, репитеры, эхолинки и их частоты] Re: Запись круглого стола на Миасском репитере. от R9AZ 20 Сентября 2018, 22:32:12
[Программы для радиолюбителей] Re: Аппаратный журнал от RX4HX LogHX3Setup_build_438 от RN9AZ 20 Сентября 2018, 20:41:17
[Доска частных объявлений] Re: Имеются вот такие блоки питания от видеоаппаратуры, 13В-5А. от RT8A 18 Сентября 2018, 15:44:34
[Новости] Вышла в свет новая версия WSJT-X K1JT от RN9AZ 18 Сентября 2018, 10:41:39
[Новости] Re: СЮТ г.Копейска. от RN9AZ 17 Сентября 2018, 17:47:56
[Беседка] Аврора - видио из космоса от RN9AZ 15 Сентября 2018, 09:14:09
[Беседка] Re: Николвю. от RL9A 13 Сентября 2018, 21:31:40
[Новости] 6Н-1 или каким было радио в конце 30-х годов прошлого от RN9AZ 13 Сентября 2018, 18:23:11
[Доска частных объявлений] Усилитель ACOM 1000 от ra9aaa 11 Сентября 2018, 09:57:53
[Доска частных объявлений] У кого есть притензии к этому человеку R8ADW от RN9AZ 11 Сентября 2018, 07:41:12
[Беседка] Учимся считать. А с вами такое случалось? от RN9AZ 10 Сентября 2018, 07:36:11
[Доска частных объявлений] Re:мачта Р-140 от UA9APX 08 Сентября 2018, 14:27:52
[Доска частных объявлений] Аксессуары для р/ст-3 от ra9aaa 08 Сентября 2018, 11:37:16