• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

sasasa

Member
sens12.jpg
соединить два сенсора с ESP(1) проводом.
С проводом они сейчас. Задача сделать соединение сенсоров с базой беспроводными.
Быстродействие сенсора пока не измеряли. Думаю что <5мкс. Это время Пьезо или оптика + срабатывания триггера шмитта и RS триггера
Вариант похожий на ваш "Вариант 2" сейчас тестируется, только с одной ЕСПкой, но хочется использовать только ESP8266 в сенсорном блоке вместо Ардуино+nRF24
 
Последнее редактирование:

sasasa

Member
nikolz, И в каких пределах будет ошибка без синхронизации ЕСПки на сенсоре? 0.5секунды?
 

sasasa

Member
Зачем синхронизация на сенсорах?
Она вообще не нужна на сенсорах.
Не понял!!
Сигнал с одного сенсора приходит за 0.5-1мс, сигнал с другого также. В сумме ошибка 1-2мс. Как её уменьшить до требуемых 5мкс без синхронизации таймеров?
Это я написал идеальный варианат. Пока у меня Пинг 4-94мс (!)
 

pvvx

Активный участник сообщества
Не всё понял из прочитанного. Типа все модули работающие по WiFi уже на железном уровне делают себе синхронизацию или это надо как то задействовать/активировать программно?
Типа да. Данный 64-х битный счетчик - это наверно и есть MAC_TIMER64BIT_COUNT: 0x3ff21048 Step: 1us
 

pvvx

Активный участник сообщества
Увы,Вы ничего не поняли.
Зачем синхронизация на сенсорах?
Она вообще не нужна на сенсорах.
Подумайте внимательно.
Думаю..... Стоит 4 микрофона по углам бункера 100x100 метров. Где-то в потемках там бродит Nikolz. Как по его воплям определить его местоположение?

Ущё для детей: Стоит 3 датчика освещенности разнесенные на 100 метров. Задача определить скорость движения облаков... (над Nikolz)

nikolz, И в каких пределах будет ошибка без синхронизации ЕСПки на сенсоре? 0.5секунды?
Nikolz не знает как работает WiFi. Вообще. В сети стоит координатор в виде AP кому и когда орать в эфир...

Полу-авто-перевод:
Стандарт 802.11 определяет функцию временной синхронизации (TSF) для поддержания общей развертки между узлами в сети. TSF требует, чтобы каждый узел реализовал 64-разрядный счетчик, который инкрементирует каждую микросекунду. Каждый узел поддерживает свой собственный таймер TSF и выводит микросекунд из своего собственного локального генератора. В инфраструктуре сети, схема синхронизации TSF обозначает таймер микросекунд на AP в качестве авторитетного времени для сети. В рамках своей нормальной работы AP передает кадры маяка на некотором заранее определенном интервале (обычно 102400 мксек). Каждый кадр маяка содержит 64-битное значение таймера TSF точки доступа в тот момент, когда происходит передача. Критически, поле временной метки радиомаяком должен быть установлен в момент передачи, а не во время создания пакета. Это гарантирует значение временной метки точно отражать любые задержки передачи. Каждая Station в сети, которая получает маяк от AP должна обновить свой локальный таймер микросекунд значением метки времени, содержащейся в маяке. С большой долей вероятности эта схема обеспечивает общую развертку по всей сети, с временными сдвигами между узлами, ограниченных максимальным дрейфом генератора в одном сигнальном интервале (между беаконами?).

Не знаю как в ESP8266, в RTL871x нашлось сразу это:

Код:
void CheckTSFIsStable(int ReqState);
int update_TSF(_DWORD, _DWORD, _DWORD);
void update_TSF(mlme_ext_priv *pmlmeext, uint8_t *pframe, unsigned int len);
void correct_TSF(_adapter *padapter, mlme_ext_priv *pmlmeext);
uint64_t TSFValue; // в struct mlme_ext_priv
Поищу, если что найду, то и попробую встроить в rtlDuino синхронизацию для таких проектов...

Получается что постоянно работающий счетчик с шагом 1 us на AP у вас есть, а на station надо его найти.
В esp есть такие функции:
Код:
uint32 system_get_time(void)
{
    return WdevTimOffSet + *((uint32*)0x3FF20C00);
}

uint32 system_relative_time(void)
{
    return *((uint32*)0x3FF20C00);
}
Но почему они 32-х битные - не понятно. Они тоже считают в 1 us от того-же счетчика, что давал ранее, а system_get_time имеет какую-то добавку-поправку...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Посмотрел и... ничего не понял. КАК это всё использовать и КАК написать/переписать код для быстрого приёма/передачи пакета. Как и где увидеть/прочитать timecode у принятого пакета?
Для ESP8266 - не знаю. Там код драйвера WiFi за семью печатями (скрыт многими китай слоями в бинарной либе).
Вам не требуется никакого быстрого приема-передачи. Когда считываете показания с датчика, то тут-же считываете значение счетчика TSF и неспешно передаете их на AP. На AP есть аналогичный счетчик TSF и вы знаете когда был считан датчик с точностью до десятка us.
Все недовольства, что не можете получить значения из WiFi на ESP направляйте в Espressif и Nikolz (он их очень любит :)).
 
Последнее редактирование:

pvvx

Активный участник сообщества
Почему то мне Ардуино ИДЕ ругается про WdevTimOffSet
error: 'WdevTimOffSet' was not declared in this scope
Там надо добавить какую то библиотеку?
Это "Reverse engineering" китайских кодов в закрытой либе WiFi EPS8266. Функция uint32 system_get_time(void) описана в user_interface.h, а это её "сикретные" потроха.
uint32 WdevTimOffSet сидит в закрытой либе libmain.a или libpp.a.
Просто эти функции обращаются к тому-же аппаратному таймеру-счетчику, который считает 64-х битный TSF, но где его прибавка-offset для station я не знаю.
Спрашивайте или пишите на Espressif сайте или просите у Nikolz - он любит у них попрошайничать... у него с ними наверно личная связь :)
Другим они отвечают только это: Thanks for your interest in ESP8266 ! и приговаривают, что они подумают... годами....
Вот стандарт у них на данный вопрос: Hardware timestamping - ESP8266 Developer Zone - Так и обновляют уже годы. :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вот это надо sasasa:
Счетчики TSF на модуле от Station и от AP:
TSF_ESP8266_AP.gif TSF_ESP8266_ST.gif
Ткнуть кнопку одновременно с запросом и ответом через websocket от web-сервера и выдачей beacon-a модулями я не могу :)
У китай-Espressif счетчик TSF для station не доделан и на SDK 2.x... По этой причине модуль ведет себя ужасно в группе - создает коллизии другим кое-как отсчитанным интервалом от беаконов AP...
TSF в ESP на station вставляется только путем бинарного патча китай-WiFi либы - помочь тут ничем не могу...
При приеме beacon на ESP8266 от внешней AP он сохраняется в структуре cnx_???. Она объявлена локально в исходниках wl_cnx.o и внешнего имени не имеет. Структура инициализируется в функции cnx_attach() в сегменте bss и внешних ссылок с именами на неё нет - привет китайцам из Espressif :)
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
@pvvx а если все ЕСПишки загнать в режим WIFI_AP_STA, это не даст возможность получать TSF и передать его на хост, для вычисления синхронизационной дельты уже на хосте?
 

pvvx

Активный участник сообщества
@pvvx а если все ЕСПишки загнать в режим WIFI_AP_STA, это не даст возможность получать TSF и передать его на хост, для вычисления синхронизационной дельты уже на хосте?
На картинке ESP8266 работает в режиме AP+ST с моей web-свалкой и патченной китай-либой. Т.е. у меня все TSF счетчики доступны и частично сделана коррекция для station. Исходников нет - патчено вручную :)
Распространять не буду - пусть китайцы думают :)
Чтение аппаратного 64-х битного счетчика TSF в 1 us от AP ESP изначально доступно в web-свалке всем ~sys_mactime~ .
С помощью этих TSF можно синхронизировать разнесенные по wifi звуковые колонки...
Но увы - я думаю, что это не будет возможно и на ESP-32S.

Передавать ничего не надо. Всё само. Для более сложной синхронизации (в наносекунды) уже надо что-то тусовать... TSF счетчик на Station модуля идет синхронно с счетчиком AP, куда соединен модуль. Без него связь по WiFi невозможна. Чем он точнее, тем меньше коллизий в сети, что не сказать о ESP8266 c китай-либой...
 
Последнее редактирование:

sasasa

Member
Поэтому имеет значение лишь постоянство этого запаздывания.
Вот именно - ПОСТОЯНСТВО! А я же написал 0.5-1мс. А это значит что "ПОСТОЯНСТВО" плавает с 0.5мс у каждого сенсора, что в итоге на 2 сенсора даёт 1мс. Ну и как же эту 1мс уменьшить до 5мкс?
Уточним задачу .
Два сенсора срабатывают независимо друг от друга. Надо измерить интервал времени между этими событиями.
Верно?
Поясните что именно Вы измеряете.
Всё правильно.
Некий объект ударяется об одно препятствие (1-й сенсор) и потом через ~100м об другое препятствие(2-й сенсор). Требуется узнать интервал времени и сколько разница в разных циклах с итоговой точностью 20мкс. Указанные 5мкс при измерении это с запасом на возможные ошибки сенсоров, таймеров, передатчиков итд.
 

sasasa

Member
Передавать ничего не надо. Всё само.
Что то я совсем не понимаю. Получается, что если две ЕСПки запустить как AP-STA, одной из них сделать connect to AP, то они сами будут себя синхронизировать и мне только остаётся посылать сигнал сенсора и не надо ничего думать о синхронизации? И только по таймкодам пакетов вычислить разность? Что то не верится что так просто.. Может быть я что то не до конца понял от вами написанного? Но если всё так, то как из пакета прочитать таймкод?
Или всё же мне надо самому вставить sys_mactime в пакет сигнала?
Может быть есть какие то альтернативы ЕСПке, которые полностью поддерживает всю TSF структуру без кривых кодов?
 
Последнее редактирование:

sasasa

Member
Т е на точность измерения влияет лишь нестабильность работы сенсоров и измерителя.
И как же флуктуация времени передача/приём? Вы видели мою картинку с Ping?
!! Как вы обеспечите стабильность времени передачи/приёма в пределах 5мкс???
UDP или ICMP будет меньше но не в 2000 раз.
Что такое ESP-NOW пока не изучил. Как она работает и какие временные интервалы?
И что делать если пакет потеряется? Теряем результат и в итоге ERROR o_O
 

Вложения

Последнее редактирование:

sasasa

Member
Эта картинка пинга с компа?
Да, это с планшета, Андроид. Согласен с "результат работы многозадачной ОС"
сигнал от второго сенсора пришел - посчитали разность.
Сколько (в мкс) по вашим замерам флуктуация интервала передача-приём?
И будет ли она постоянно не зависимо от расстояния и посторонних помех?
И остаётся под вопросом что делаем если один из пакетов потерян/не принят???
 
Сверху Снизу