Точность часов Arduino

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

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

8 голосов | спросил KK6FSL 16 FebruaryEurope/MoscowbSun, 16 Feb 2014 03:54:05 +0400000000amSun, 16 Feb 2014 03:54:05 +040014 2014, 03:54:05

4 ответа


8

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

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

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

EDIT: Я не эксперт в отношении кварцевых генераторов, поэтому, если вы видите что-то не так, пожалуйста, дайте мне знать

ответил Jesse Laning 16 FebruaryEurope/MoscowbSun, 16 Feb 2014 04:30:46 +0400000000amSun, 16 Feb 2014 04:30:46 +040014 2014, 04:30:46
4

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

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

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

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

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

Вот обещанная ссылка: тактовая частота Arduino точность , Джорис ван Рандвик.

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

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

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

Алланное отклонение частоты часов Arduino http://jorisvr.nl/images/arduinofreq/allandev_small .png

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

ответил Edgar Bonet 2 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 02 Sep 2016 19:08:13 +0300 2016, 19:08:13
2

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

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

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

ответил jippie 16 FebruaryEurope/MoscowbSun, 16 Feb 2014 11:50:26 +0400000000amSun, 16 Feb 2014 11:50:26 +040014 2014, 11:50:26
2

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

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

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

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

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

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

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

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

ответил jfpoilpret 16 FebruaryEurope/MoscowbSun, 16 Feb 2014 12:20:35 +0400000000pmSun, 16 Feb 2014 12:20:35 +040014 2014, 12:20:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132