@eliseyizum

Чем определена точность времени в электронных устройствах?

Приветствую. Сразу скажу я чайник, не имею соответствующего образования и многих вещей не понимаю. Суть вопроса в следующем:
Нашел я вот такой интересный мне девайс - https://dstike.com/products/dstike-esp32-watch-devkit, построенный на ESP32. Насколько я знаю для этих микроконтроллеров есть Arduino, подумал было бы неплохо накодить себе такие вот умные часы, опыт в разработке для ардуино у меня есть. Сразу стал вопрос определения времени и в Arduino есть встроенная функция millis() для определения времени в миллисекундах с начала работы МК, а начальное время брать из интернета. Однако гуглением было выяснено, что такие часы будут не точными благодаря встроенному генератору частоты. Здесь я и запутался, так как не понимаю разницу между ними. В частности интересует ответ на вопрос, почему самые обычные кварцевые часы показывают время достаточно точно, в то время как здесь я должен использовать DS3231 или мб я заблуждаюсь и DS3231 со своей системой компенсации температуры уделывает любые часы Casio? Какие типы генераторов частоты используются в:
Кварцевых часах
Адрудино (допустим Уно)
ESP32 (в даташите указано несколько таких, я про тот который считает значения millis() при использовании ядра ардуино)
Raspberry Pi
DS3231
Заранее извиняюсь за расплывчатость вопроса, но мне очень сложно грамотно его сформулировать, т.к. в теории не сведущ и информацию черпаю гуглением по форумам в разнобой.
  • Вопрос задан
  • 1985 просмотров
Решения вопроса 1
gbg
@gbg
Баянист. Тамада. Услуги.
Точность часов определяется типом используемого источника колебаний. Самый точный - термостатированный кварцевый генератор. Эта штука прямо представляет собой термос с электроникой стабилизации температуры и кварцевым резонатором внутри. Применяется в профессиональной и лабораторной технике.

Далее, кварцевый резонатор обычный. Типичная бытовуха, работает достаточно точно для бытовых применений.

R-C генератор. Работает нестабильно, частота плывет от температуры.

Теперь, как это все обрабатывается - если за часты отвечает отдельная железка (те же часики-далласики DS3231) - проблем нет, все импульсы будут посчитаны и результат четко выдан.

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

Понятно, что всякие штуки типа mills могут выдать определенную лажу - зависит от организации прошивки.

Самое точное - внешние часы со своей батарейкой + синхронизация от NTP, GPS, или от радио
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
profesor08
@profesor08
Погрешность настолько меленькая, что визуально не заметишь, возможно даже никогда.
Ответ написан
@VT100
Embedded hardware & software.
Тоже не настоящий сварщик (не знаю подходящую к задаче терминологию), но для начала - надо сделать ТЗ. А именно - какой уход часов допустим на длительном интервале и с какой точностью надо выдать время в конкретный момент? Тогда станет понятнее, к чему стремиться и как.
С уходом на длительных интервалах можно бороться термостабилизацией генератора, введением поправок (как усреднённых, так и посчитанных для изменений температуры, напряжения питания и т.п.), синхронизацией с внешними источниками и т.д.
С точностью выдачи текущего времени - скорее программно. Например "миллис" тут никаким боком не ляжет - она останавливает исполнение программы и тупо ждёт в цикле истечение заданного интервала. Изучайте прерывания, без них тут никуда.
Ответ написан
@osgeller
VT100, функция "millis()" не останавливает работу программы, она просто возвращает время работы микроконтроллера с момента включения, это время в ардуино подсчитывается постоянно по прерыванию таймера.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы