• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Синхронизация часов.

sasasa

Member
2 модуля ЕСП8266 должны записать и переслать на 3-й модуль время срабатывания сенсора
Не могу разобраться как сделать синхронизацию часов/таймеров для 2-х модулей есп8266. Точность нужна максимально возможная, я надеюсь в пределах 5 микросекунд.
Расстояние между модулями 100м. Надо без проводов, ИК и GPS тоже не годится.
 
Последнее редактирование:

086dx66

Member
Никак
Ты не можешь гарантировать время прохождения пакета между модулями. 5 мск мне кажется не достичь
А к чему такая точность?
 

sasasa

Member
Не прохождение пакета, а фиксация сигнала с сенсора должна быть с точностю 5мкс на всех модулях. Пересылать потом можно по тихонько.
 
Последнее редактирование:

086dx66

Member
Еще раз
По технологии вифи ты не можешь гарантировать время передачи если тебе так более понятно
Оно зависит от многих причин
Логично фиксировать данные на месте , а потом в какой-то момент сливать их на сервер
Идеально даже 2м модулям не отсинхронить время
Будет какая-то погрешность в любом случае, а какая будет как раз зависеть от времени через которое пакет/сообщение с временем дойдет до девайса и его нельзя гарантировать
 

sasasa

Member
А где я упомянул что надо обязательно через WiFi или Ethernet синхронизировать?
 

086dx66

Member
Вообщем поднимай ntp сервер локальный и синхронь с ним периодически есп по вифи
Погрешность 1-2 сек думаю все равно будет
Другой вариант - оптика, но затраты ;(
 

sasasa

Member
Без проводов можно на пример радиоканал. Но вот какой именно приёмник/передатчик там припаять, чтобы синхронизация была в пределах 5мкс, никак немогу понять.
 

Сергей_Ф

Moderator
Команда форума
@sasasa ну и какую скорость по радиоканалу Вы получите? 400 бод? Ну и прикиньте, сколько по времени будет юникстайм передаваться, это 32 бита.
Можно наоборот, для 5 мкс путём несложных вычислений, получаем 15 мбит/сек. И это без учёта накладных расходов - только 32 бита.
 

sasasa

Member
Не понимаю, какая разница сколько времени требует передача. Для того можно коррекцию сделать, хотя мне не важно сколько время отличается от GPS. Главное чтобы обе ЕСПки били между собой в пределах 5мкс.
Пробовал с nRF24L01, но там раз от раза +-10-20мкс разница :(
 

Сергей_Ф

Moderator
Команда форума
@sasasa а кто Вам сказал, что по радиоканалу вы получите гарантированную по времени задержку? Помех нет? Вы в пустыне будете работать?
 

sasasa

Member
Ну если я с первым модулем, который был под рукой (nRF24), получил разницу в пределах 20мкс, то наверное есть варианты чтобы улучшить этот результат до 5мкс. Надеюсь что есть более приспособленные модули. Как же GPS работает? Там что, нет помех? и 1 мкс без проблем, и битреит какой?
 

Сергей_Ф

Moderator
Команда форума
я с первым модулем, который был под рукой (nRF24), получил разницу в пределах 20мкс,
Вариант, просто повезло, не рассматриваете? Очень неплохой результат. Это на 100 метрах? ;) Синхронизировали именно время или момент срабатывания?
Как же GPS работает? Там что, нет помех? и 1 мкс без проблем, и битреит какой?
вот совсем не уверен в этой цифре для GPS. Есть пруф?
 

sasasa

Member
Синхронизировать именно время или момент срабатывания?
Это разница таймеров после их обнуления.
Пока не на 100м, но через кирпичную стену в центре города. Требуемые 100м будет в прямой видимости бне города.
Это средняя ошибка. Максимальная (примерно каждый 20-ый раз) около 40мкс.
вот совсем не уверен в этой цифре для GPS. Есть пруф?
Это тех. характеристики дешёвых аппаратов. На такие которые дают 40нс и меньше я не смотрю :)
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
@sasasaВы температуру пробовали менять? Микроволновку включать и выключать во время тестов? По телефону сотовому звонить рядом с ними?
Что то мне подсказывает, что Ваши 20-40 мкс на nrf - это идеальные тепличные условия.

Проще момент срабатывания передавать на центральное устройство, а привязку времени на нем уже делать. Тем более оно, как правило, более быстродействующее.
 

sasasa

Member
Проще момент срабатывания передавать на центральное устройство
Да, можно и такой вариант. В принципе я не вижу разницы. Ошибка будет та же.
На счёт тепличных условий - если посмотреть сколько вокруг WiFi сетей, то так не кажется. 20-40мкс это не время передачи сигнала, а итоговая разница двух таймеров на ЕСПках.
 

KomX

Member
@sasasa
Простенький алгоритм синхронизации часов:
1. Пусть Ваши подопечные сенсоровладельцы слушают какой-нибудь UDP порт;
2. Пошлите с головного устройства UDP пакет в этот порт (один для всех, как шлёте на своего робота) с какой-нибудь заведомо заданной последовательностью символов;
3. Подопечные на лету разгребают последовательность и сравнивают с образцом (алгортм возьмите из робото-архива);
4. Как только последовательности совпали, подопечные запоминают своё время и неспешно передают его головному устройству;
5. Головное устройство сравнивает полученные значения и одному из подопечных отсылает корректировочный пакет, - "Добавь (убавь), мол, пару-тройку секунд..."
 

sasasa

Member
Здравствуйте КоmХ! Рад услышать, давно не общались. Ваш алгоритм не до конца понял. Там же не совсем одинаковая задержка сигнала/пакета будет при передачи туда-обратно? И какую точность можем прогнозировать с таким способом синхронизации? Речь идёт о микросекундах. <5
Попробовать конечно можно.
 
Последнее редактирование:

KomX

Member
И Вам не хворать!
Я так понимаю, что, запустив прослушивание порта, периферийные чипы занимаются своими делами.
Когда головное устройство шлёт пакет, то периферия должна его принять, отложив все свои "хлопоты". И эти процессы (передача и приём) происходят одновременно, если у нас нет ретрансляторов, а значит и момент приёма заданной последовательности будет един (в некотором приближении).
Так как код обработки UDP пакета у Вас будет одинаков, то и время периферийного устройства будет сохранятся в один и тот же момент (от возникающих аппаратных прерываний в промежутке времени между "есть пакет!" и "который час?" возможна временная разбежка).
Далее нам "торопиться не нада", - можем спокойно пересылать на головное устройство периферийные замеры. Головное устройство, не торопясь, может высчитать временную дельту для каждого периферийного модуля относительно времени от любого произвольно взятого периферийного модуля (он, тип, эталон) и неспешно разослать эти корректировочные дельты по всем оставшимся не эталонным модулям соответственно.
Точность же спрогнозировать не смогу в силу замечаний в скобочках и возникающих на практике рецидивов, как приём отражённого Wi-Fi сигнала, например.
 
Сверху Снизу