В настоящее время я пытаюсь создать часы Arduino с помощью библиотеки времени PJRC ( http://www.pjrc.com/teensy/td_libs_Time.html ). Я знаю, что, поскольку большинство плат Arduino работают с тактовой частотой 16 МГц и одним резонатором, время может стать «несинхронным» через определенный промежуток времени.
Однако мне было интересно, есть ли у кого-нибудь представление о точности библиотеки времени при использовании на Arduino DUE с тактовой частотой 84 МГц. Я проверял это и до сих пор часы были синхронизированы в течение нескольких часов. Спасибо!
time
arduino-due
KK6FSL
источник
источник
Ответы:
Ограничения точности библиотеки зависят от точности кристалла. Когда они изготавливают или готовят кристалл, они могут сделать его только в определенной степени точным, и окружающая среда кристалла (температура, влажность и т. Д.) Играет роль в его точности. Допустим, у вас есть кристалл, который выключается на 0,5 секунды каждый час, отлично подходит для краткосрочного периода, но если вы увеличите его за год, то к этому времени у вас будет больше часа. Если вы хотите, чтобы что-то сохраняло точное время в течение длительного периода, я предлагаю часы реального времени (они все еще имеют неточности), модуль GPS или подключение к Интернету для синхронизации.
Для получения дополнительной информации посмотрите статью в Википедии о кристаллах кварца.
Использование кристалла 84 МГц по сравнению с кристаллом 16 МГц не обязательно повысит точность часов Arduino, поскольку частота кристалла является скорее индикатором скорости процессора, чем точности. Точность часов Arduino в первую очередь зависит от точности кварцевого генератора.
РЕДАКТИРОВАТЬ: Я не эксперт по кварцевым генераторам, поэтому, если вы видите что-то не так, пожалуйста, дайте мне знать
источник
Пересматривая старый вопрос ... поскольку я нашел очень информативное сообщение в блоге, которое проливает новый свет на это. Но позвольте мне сначала предоставить некоторый контекст, прежде чем дать ссылку.
При оценке качества временной шкалы, будь то кристалл, керамический резонатор или стандарт частоты лабораторного уровня, следует выделить два понятия:
Точность важна, если вы хотите, чтобы ваши часы показывали правильное время «из коробки». Однако, если вы готовы потратить некоторое время на калибровку ваших часов, вам все равно, потому что вы собираетесь откалибровать любую неточность, которую вы измеряете. В ответе jfpoilpret приведен пример «ручного» протокола калибровки, который по необходимости довольно длительный. Если вы можете заимствовать модуль GPS с выходом 1PPS, калибровка может быть выполнена за несколько секунд.
Стабильность - более серьезная проблема. Если частота временной базы дрейфует случайным образом, это сведет на нет ваши усилия по калибровке. По сути, калибровка покажет вам, насколько быстры или медленны ваши часы сейчас , но не позволит вам предсказать, насколько быстро или медленно они будут работать в будущем .
Вот обещанная ссылка: Точность тактовой частоты Arduino , автор Joris van Rantwijk.
То, что сделал Джорис, - это измерить точность и стабильность Arduino Pro Mini (с керамическим резонатором) и старого Duemilianove (кристалл кварца). С моей точки зрения, основные выводы:
Вот его график отклонений Аллана , который измеряет нестабильность часов как функцию времени наблюдения:
(источник: jorisvr.nl )
Хотя это исследование имеет некоторые ограничения (были протестированы только две доски, а время наблюдения слишком короткое), оно хорошо продумано и очень информативно. Я призываю вас прочитать его целиком.
источник
Лучший способ узнать точность резонатора вашей платы - это измерить ее самостоятельно.
Для этого вы можете использовать
millis()
функцию Arduino на вашей доске и написать небольшой эскиз, который будет:millis()
значения каждый час или около того.Конечно, этот подход далек от совершенства, так как требует вмешательства человека и, таким образом, создаст дополнительные временные смещения во время измерений, поэтому вам необходимо измерять свои смещения времени на протяжении длительного периода.
Улучшенным подходом было бы подключить высокоточные часы RTC (точность должна быть выбрана на основе точности, необходимой для вашего приложения) к вашей плате и адаптировать эскиз так, чтобы он автоматически вычислял дрейф. После того, как вы получили смещение времени, вы можете сделать то же самое, что и шаг 5 выше в ваших эскизах, и отключить часы RTC от вашей платы.
Важные моменты :
Наконец, если вам действительно нужна высокая точность, то обязательно подключите внешний источник синхронизации (например, часы RTC, GPS, NTP) к вашей плате и используйте его в качестве SyncProvider для библиотеки PJRC.
источник
Ваш средний системный тактовый кристалл будет отключен на несколько десятков миллионных долей (частей на миллион). Они отлично подходят для стабильной и точной синхронизации сигналов, но очень важны для сохранения точного времени. Без специальных условий системный кристалл может быть выключен на несколько секунд в день.
Решение состоит в том, чтобы использовать надлежащие часы реального времени, управляемые так называемым часовым кристаллом 32768 Гц. Эти кристаллы легко в 10 раз лучше по точности. Вы можете настроить свой собственный генератор, который прерывает основной процессор и вести подсчет в вашем скриншоте Arduino, или вы обнаружите плату RTC.
Два случайных примера, которые появляются в Google с поисковыми терминами «прорыв RTC»:
источник