Точность часов времени Arduino

10

В настоящее время я пытаюсь создать часы Arduino с помощью библиотеки времени PJRC ( http://www.pjrc.com/teensy/td_libs_Time.html ). Я знаю, что, поскольку большинство плат Arduino работают с тактовой частотой 16 МГц и одним резонатором, время может стать «несинхронным» через определенный промежуток времени.

Однако мне было интересно, есть ли у кого-нибудь представление о точности библиотеки времени при использовании на Arduino DUE с тактовой частотой 84 МГц. Я проверял это и до сих пор часы были синхронизированы в течение нескольких часов. Спасибо!

KK6FSL
источник
Ограничения точности библиотеки зависят от точности кристалла. Допустим, у вас есть кристалл, который выключается на 0,5 секунды каждый час, отлично подходит для краткосрочного периода, но если вы увеличите его за год, то к этому времени у вас будет больше часа. Если вы хотите, чтобы что-то сохраняло точное время в течение длительного периода, я предлагаю часы реального времени (они все еще имеют неточности), модуль GPS или подключение к Интернету для синхронизации.
Джесси Лэнинг
@jamolnng Спасибо за ваш ответ. Знаете ли вы точность кристалла на Arduino DUE или где я мог бы найти его?
KK6FSL
Наилучшая точность, которую вы получите, составляет 84 МГц, когда они изготавливают или готовят кристалл, они могут сделать его только до определенной степени точности, а также окружающая среда кристалла (температура, влажность и т. Д.) Играет роль в Точность этого.
Джесси Лэнинг
@jamolnng Так можно ли ожидать большей точности с кристаллом 84 МГц, а не с кристаллом 16 МГц на большинстве других Arduinos?
KK6FSL
5
«Лучшая точность, которую вы собираетесь получить, - это 84 МГц» - для меня это не имеет особого смысла!
Cybergibbons

Ответы:

10

Ограничения точности библиотеки зависят от точности кристалла. Когда они изготавливают или готовят кристалл, они могут сделать его только в определенной степени точным, и окружающая среда кристалла (температура, влажность и т. Д.) Играет роль в его точности. Допустим, у вас есть кристалл, который выключается на 0,5 секунды каждый час, отлично подходит для краткосрочного периода, но если вы увеличите его за год, то к этому времени у вас будет больше часа. Если вы хотите, чтобы что-то сохраняло точное время в течение длительного периода, я предлагаю часы реального времени (они все еще имеют неточности), модуль GPS или подключение к Интернету для синхронизации.

Для получения дополнительной информации посмотрите статью в Википедии о кристаллах кварца.

Использование кристалла 84 МГц по сравнению с кристаллом 16 МГц не обязательно повысит точность часов Arduino, поскольку частота кристалла является скорее индикатором скорости процессора, чем точности. Точность часов Arduino в первую очередь зависит от точности кварцевого генератора.

РЕДАКТИРОВАТЬ: Я не эксперт по кварцевым генераторам, поэтому, если вы видите что-то не так, пожалуйста, дайте мне знать

Джесси Ланинг
источник
5

Пересматривая старый вопрос ... поскольку я нашел очень информативное сообщение в блоге, которое проливает новый свет на это. Но позвольте мне сначала предоставить некоторый контекст, прежде чем дать ссылку.

При оценке качества временной шкалы, будь то кристалл, керамический резонатор или стандарт частоты лабораторного уровня, следует выделить два понятия:

  • точность : насколько близка частота временной базы к ее номинальному значению
  • стабильность : насколько эта частота дрейфует со временем

Точность важна, если вы хотите, чтобы ваши часы показывали правильное время «из коробки». Однако, если вы готовы потратить некоторое время на калибровку ваших часов, вам все равно, потому что вы собираетесь откалибровать любую неточность, которую вы измеряете. В ответе jfpoilpret приведен пример «ручного» протокола калибровки, который по необходимости довольно длительный. Если вы можете заимствовать модуль GPS с выходом 1PPS, калибровка может быть выполнена за несколько секунд.

Стабильность - более серьезная проблема. Если частота временной базы дрейфует случайным образом, это сведет на нет ваши усилия по калибровке. По сути, калибровка покажет вам, насколько быстры или медленны ваши часы сейчас , но не позволит вам предсказать, насколько быстро или медленно они будут работать в будущем .

Вот обещанная ссылка: Точность тактовой частоты Arduino , автор Joris van Rantwijk.

То, что сделал Джорис, - это измерить точность и стабильность Arduino Pro Mini (с керамическим резонатором) и старого Duemilianove (кристалл кварца). С моей точки зрения, основные выводы:

  • обе часы крайне неточны, поэтому для использования в качестве часов необходимо будет выполнить пользовательскую калибровку
  • Кристалл кварца из Дуэмилианове имеет приличную стабильность, лучше, чем 1,5e-8 при времени усреднения 6 часов
  • стабильность керамического резонатора Pro Mini жалкая, более чем на два порядка хуже, чем кристалл, что делает его практически бесполезным в качестве часового механизма

Вот его график отклонений Аллана , который измеряет нестабильность часов как функцию времени наблюдения:

Аллан отклонение тактовой частоты Arduino
(источник: jorisvr.nl )

Хотя это исследование имеет некоторые ограничения (были протестированы только две доски, а время наблюдения слишком короткое), оно хорошо продумано и очень информативно. Я призываю вас прочитать его целиком.

Эдгар Бонет
источник
1
Частота кристаллов кварца изменяется незначительно с температурой. Если вы можете контролировать температуру, это помогает поддерживать стабильность частоты.
Дункан C
3

Лучший способ узнать точность резонатора вашей платы - это измерить ее самостоятельно.

Для этого вы можете использовать millis()функцию Arduino на вашей доске и написать небольшой эскиз, который будет:

  1. позволяет установить начальное время для измерения смещения времени (например, с помощью простой кнопки); Вы нажмете кнопку на основе точного времени.
  2. затем повторно вызывайте millis () до тех пор, пока не истечет как минимум 120 часов ("часов Arduino", что будет около 5 дней)
  3. отображать сигнал по истечении этих 120 часов (ваш эскиз, вероятно, должен «предупредить вас» до того, как будет достигнуто точное время, чтобы подготовиться к измерению)
  4. по истечении 120 часов проверьте свое эталонное время (используется в шаге 1.) и проверьте, сколько времени прошло (должно быть 120 часов +/- epsilon)
  5. как только вы узнаете смещение часов и при условии, что ваша доска будет работать в тех же условиях окружающей среды (в основном, при температуре), что и ваша мера, вы можете использовать ее в своих эскизах для настройки millis()значения каждый час или около того.

Конечно, этот подход далек от совершенства, так как требует вмешательства человека и, таким образом, создаст дополнительные временные смещения во время измерений, поэтому вам необходимо измерять свои смещения времени на протяжении длительного периода.

Улучшенным подходом было бы подключить высокоточные часы RTC (точность должна быть выбрана на основе точности, необходимой для вашего приложения) к вашей плате и адаптировать эскиз так, чтобы он автоматически вычислял дрейф. После того, как вы получили смещение времени, вы можете сделать то же самое, что и шаг 5 выше в ваших эскизах, и отключить часы RTC от вашей платы.

Важные моменты :

  • измерьте временной сдвиг на плате, который позже будет нуждаться в настройке часов (если у вас есть несколько досок, вы должны измерить один дрейф на доску)
  • обеспечить стабильность среды, в которой будет использоваться ваша доска

Наконец, если вам действительно нужна высокая точность, то обязательно подключите внешний источник синхронизации (например, часы RTC, GPS, NTP) к вашей плате и используйте его в качестве SyncProvider для библиотеки PJRC.

jfpoilpret
источник
2

Ваш средний системный тактовый кристалл будет отключен на несколько десятков миллионных долей (частей на миллион). Они отлично подходят для стабильной и точной синхронизации сигналов, но очень важны для сохранения точного времени. Без специальных условий системный кристалл может быть выключен на несколько секунд в день.

Решение состоит в том, чтобы использовать надлежащие часы реального времени, управляемые так называемым часовым кристаллом 32768 Гц. Эти кристаллы легко в 10 раз лучше по точности. Вы можете настроить свой собственный генератор, который прерывает основной процессор и вести подсчет в вашем скриншоте Arduino, или вы обнаружите плату RTC.

Два случайных примера, которые появляются в Google с поисковыми терминами «прорыв RTC»:

jippie
источник