DS3231 DTCXO и GPS

Я экспериментирую с этой идеей: синхронизировать DTCXO с каким-нибудь стандартом частоты. У меня есть все необходимые детали, но я не могу придумать, как это реализовать.

У меня есть: Arduino Leonardo, GPS-модуль на базе u-blox 6010 с выходом PPS и плата расширения Proto Shield с установленным чипом DTCXO DS3231.

Моя главная идея заключается в том, что у DS3231 есть регистры старения, которые могут влиять на тактовую частоту. Постоянно подсчитывая прямоугольные импульсы частотой 8192 Гц с выхода DS3231 и синхронизируя их с сигналом частотой 1 Гц от GPS-модуля, я могу синхронизировать DTCXO с опорным тактовым сигналом. Это, в свою очередь, даст мне относительно хорошую опорную частоту 32768 Гц, на которой я смогу построить частотомер.

Оба режима: 8192 Гц и PPS — управляются прерываниями.

Есть ли у кого-нибудь идеи, как это сделать? Это означает искусственный интеллект на AVR, как предполагает мой инструктор?

, 👍0

Обсуждение

Возможно, использовать сигнал 8192 Гц в качестве сигнала синхронизации таймера?, @Ignacio Vazquez-Abrams

@IgnacioVazquez-Abrams Думаю, это не сработает. Leonardo отсчитывает эти 8192 Гц и сверяет их с 1 Гц PPS от GPS-модуля, уменьшая тактовую частоту, если отсчётов слишком много, и увеличивая, если слишком мало., @Maxthon Chan

И почему нельзя использовать сигнал частотой 1 Гц в качестве прерывания для подсчета импульсов таймера?, @Ignacio Vazquez-Abrams

@IgnacioVazquez-Abrams Я делаю это, тактирую микроконтроллер на частоте 16 МГц, одно прерывание подсчитывает 8192 Гц, а другое прерывание отслеживает 1PPS., @Maxthon Chan

Эх. Наверное, проще использовать таймер., @Ignacio Vazquez-Abrams

Эээ... Я, по сути, калибрую DTCXO, так что таймер — не самая лучшая идея..., @Maxthon Chan

Зачем? Он просто считает пульс., @Ignacio Vazquez-Abrams

Подсчитывая импульсы, я изменяю «регистр старения» DTCXO и пытаюсь дисциплинировать его с помощью GPS., @Maxthon Chan

Да, и вместо того, чтобы создавать отдельное прерывание для сигнала частотой 8192 Гц, вы позволяете таймеру считать его за вас., @Ignacio Vazquez-Abrams

Итак, ваше предложение заключается в том, чтобы подать 8192 Гц на вход счетчика, прерваться по PPS, позволить счетчику обрабатывать 8192 Гц и реагировать на основе значения счетчика (и сбрасывать его) при срабатывании прерывания PPS?, @Maxthon Chan

Да. Конечно, поначалу может возникнуть небольшая неравномерность, но умный алгоритм с ней справится., @Ignacio Vazquez-Abrams

Ну, я бы не стал использовать счётчик, пока GPS не определится, а это может занять несколько минут. Так что, на самом деле, это не такая уж и проблема. Пожалуйста, опубликуйте это как ответ, чтобы я мог его принять., @Maxthon Chan

Это интересный проект. У Arduino Leonardo достаточно портов ввода-вывода и возможностей обработки прерываний для решения этой задачи. Благодаря мониторингу и регулировке частот в реальном времени, его можно считать простой системой адаптивного управления, но без использования сложных алгоритмов искусственного интеллекта., @Hugh Davenport


1 ответ


1

Знаю, что вопрос старый, но дополню его на случай, если кому-то будет интересно: я тестировал DS3231, синхронизированный с передним фронтом GPS-импульса, и регистр старения в DS3231 настроен на уменьшение дрейфа. Я собрал три разных скетча утилиты, чтобы можно было проверить процесс без использования стандартных настольных инструментов: https://thecavepearlproject.org/2024/10/22/setting-accurate-rtc-time-with-a-gps-the-ds3231-aging-offset-to-reduce-drift/

Итог: большинство часов реального времени с индексом SN имеют дрейф 1 ppm, если только не настроить регистр возраста, что определённо стоит сделать. Не используйте варианты микросхем памяти с индексом SN для проектов, требующих краткосрочной точности, поскольку их джиттер составляет 2 ppm.

,