Все знают о спутниковых системах определения координат. Они также позволяют узнать скорость и текущее время. На основе таких систем строят серверы точного времени, о которых уже много раз здесь говорилось, и не только здесь. Точность этих систем растет, цена падает, короче, прогресс не стоит на месте. Совсем, казалось бы, недавно речь шла о миллисекундах, и вот уже микросекунды никого не удивляют. И недалек тот день, когда...
Честно говоря, этот день уже настал для меня. Не так давно попалась на глаза информация о том, что один из производителей для своих модулей обещает точность интервала выходного сигнала PPS порядка десятков наносекунд.
Другими словами, появился эталон секунды с очень приличной точностью. Правда, он не всегда под рукой, и часто зависит от внешних обстоятельств, но вы можете добиться благоприятных условий и получить его. И, главное, как бы скопировать себе.
На всякий случай я посмотрел, как идут дела у других производителей подобной продукции и обнаружил примерно такие же технические характеристики. “Тенденция, однако” — пронеслась мысль в моей голове, примерно, как у Штирлица. Надо было что-то делать.
Те из читателей, кто знает, как отпаять резистор от печатной платы или как припаять микросхему и даже умеют это делать, мысленно согласятся со мной, что иметь в хозяйстве частотомер, который обеспечивает точность 7-8 знаков, никогда не помешает. Особенно, если он будет занимать мало места, а вам не придется занимать много денег на его покупку. А те, у кого мысль не любит останавливаться могут подумать о часах, которые ошибаются на несколько секунд в год (в седьмом знаке, Клара). Поклонники любительской радиосвязи вспомнят, наверное, о конструировании хорошего самодельного узкополосного фильтра на кварцевых резонаторах.
Первое, что надо было сделать — это найти подходящее “железо”. Мне приглянулась простая оценочная плата с небольшим модулем Teseo-LIV3F от известной компании. Ниже показано, как она выглядит.
Эта штука продается с выносной активной антенной, которую можно установить ближе к окну, чтобы хорошо “видела” спутники. Перемычки (jumpers) выставлены на плате так, как требуется для нашего дальнейшего повествования и успешного программирования. На фото также присутствуют схемотехнические доработки в виде одного диода с хорошим быстродействием.
Схема доработок будет показана ниже. Производителем предусмотрено, что эту плату можно вставить в подходящую оценочную плату Nucleo с микроконтроллером на борту (на самом деле это разъемы для Arduino, но с 32-ух бит не хочется уходить). В описании самого GPS/GNSS модуля я нашел следующее.
Это весьма неплохо и может послужить первым приближением к хорошему частотомеру. Теперь у меня есть очень точный секундный интервал, и я могу подсчитать частоту колебаний, например, своего, собственноручно термостатированного, кварцевого генератора. И даже, возможно, подстроить ее в нужную для себя сторону. Это будет потом, наверное. А пока что захотелось замерить частоты кварцевых резонаторов, скопившихся в хозяйстве.
Подходящая плата из серии Nucleo построена на STM32L476RG. Она поставляется без кварцевого резонатора (часовой – не в счет). Ниже на фото показаны стрелками места, куда пришлось припаять недостающие элементы.
Этот вариант платы выбран по трем соображениям. Первое, генератор микроконтроллера с внешним резонатором работает от 4 до 48 МГц. Такие допуски есть не у всех микроконтроллерных плат Nucleo. Этот генератор мы и будем запускать с нашими кварцами. Второе, последовательный порт (UART) можно тактировать от отдельного встроенного RC-генератора с точностью 1% на частоте 16 МГц. Следовательно, не надо будет менять настройки и делители в конфигурации UART с изменением частоты внешнего генератора. И самое главное, для кварцевого резонатора предусмотрено место под навесной монтаж, куда можно установить разъемы, чтобы не припаивать каждый раз очередной резонатор.
Последовательный порт уже соединен с виртуальным USB портом в бортовом отладчике. Значит можно воспользоваться эмулятором терминала для вывода информации. После доработки и установки для кварца двух обрезков от цангового разъема, плата выглядит следующим образом.
Теперь надо запускать таймер ровно на одну секунду, а считать он будет импульсы своего системного тактового генератора, то есть частоту нашего кварцевого резонатора. К счастью, в таймере предусмотрен режим, при котором он одновременно сбрасывается и запускается от нарастающего фронта внешнего импульса.
Сразу захотелось сделать так, чтобы не усреднять несколько секундных измерений, а мерить частоту за десять секунд, то есть, более точно. Для этого, собственно, и потребовалось добавить в схему диод и поддержать эту мысль программным путем. Доработка схемы показана ниже.
На следующих диаграммах показано, как из секундного интервала сделать десятисекундный.
Сигнал PPS подается на таймер через диод, а на дополнительный вход внешнего прерывания – напрямую. В прерывании от таймера разрешается внешнее прерывание, которое, досчитав до десяти, запрещает себя и меняет подтягивающий резистор с верхнего на нижний.
Красными стрелками показаны моменты срабатывания прерывания таймера, а зелеными отмечены моменты запуска внешнего прерывания, по которому считаются требуемые секундные интервалы. Синим показано включение-выключение подтягивающих резисторов. Проект сделан в IAR и посмотреть его можно здесь. На фото ниже показан результат работы программы контроллера совместно с эмулятором терминала, на котором видно установившееся состояние.
Чтобы увидеть график, а не сухие строчки значений частоты, пришлось сочинить небольшую утилиту под Windows. Ее тушка находится там же где и проект прошивки.
Все эксперименты проходили по одинаковому сценарию. Перед измерениями плату оставляли на пятнадцать — двадцать минут в холодильнике, где было чуть ниже нуля. Затем она естественным путем нагревалась до комнатной температуры в течение получаса. Потом плата и резонатор получали от фена теплый воздух на несколько минут (тут одинаковых условий не получилось).
Хорошие резонаторы вели себя хорошо, то есть в соответствии с графиком температурной зависимости AT среза кристалла. Эти графики (или многочисленные копии?) легко отыскать в сети. Ниже показаны результаты измерений трех резонаторов на 16 МГц.
Потом оказалось, что бывают исключения из привычной картины поведения. Ниже показаны данные двух кварцев одинакового вида и, скорее всего, одного происхождения, которые повели себя по-разному.
На резонатор, который ведет себя привычно, я просто подышал немного, а второй решил нагреть сильнее, поскольку он показал себя иначе. Как легко видеть зависимость от температуры у него или сдвинута, или просто другая.
Еще одно интересное наблюдение. После воздействия по температуре, резонатор не возвращается к прошлым значениям частоты, или у меня не хватило терпения дождаться. В любом случае, это не важно, если вас не волнуют знаки после шестого.
Вот еще одно наблюдение. Это один и тот же резонатор, который пришлось замерить дважды, поскольку он вызвал удивление. Я пока объяснения такому поведению не нашел и не придумал.
Полезно было бы снять индивидуальную зависимость частоты от температуры для отдельного резонатора. Тогда можно сделать высокостабильный генератор секундных интервалов используя хороший датчик температуры и зная температурную кривую резонатора. Однако, для этого уже понадобится термокамера. Интересно, какие датчики температуры сегодня можно считать хорошими?