@niкolz, вы можете дать пример кодa, чтобы сделать тест на ЕСПках? Пока мне рубеж 50мкс не удаётся преодалеть.
Про систематические ошибки не совсем полял. Что и как вычислять?
Начинаю рассказ, почему в алгоритме синхронизации по базе (часам роутера) у pvvx получается в экспериментах
ошибка в 5 мкс на интервале 0.1 сек, а при измерении временного интервала между двумя сенсорами ошибка
может составить до 150 мкс.
------------------
После объяснения приведу свой оригинальный алгоритм, который действительно обеспечивает устранение указанной ошибки.
--------------------
Теория:
В методе синхронизации по базе, мы подменяем значения собственных частов модулей, некоторой оценкой значений часов базы.
В WIFI базой является роутер (AP), часы которого значения TT0 с минимальным тактом T0.
По условию задачи, есть два сенсора E1 и E2 , часы которых генерируют значения TT1 и TT2 c минимальными тактами T1 и T2 соответственно.
В общем случае, часы E1 имеют погрешность хода D1=T1-T0, часы E2 D2=T2-T0.
-------------------------------
AP периодически посылает на E1 и E2 дискретные значения TSF текущего значения TT0 .
Период дискретизации выбирается пользователем произвольно, но рекомендован TD=( 2^10)*100 мкс = 102400 мкс. Так как T0=1 мкс, то TSF увеличивается с шагом 102400.
----------------------------------------------
В результате на E1 и E2 используем в качестве показаний часов значения TSF, которые точно равны текущему значению часов APс интервалом TD.
Т е шаг изменения таких часов будет составлять 102.4 мс.
внутри этого интервала реализуется приблизительное вычисление текущего времени с дискретностью T1 и T2.
---------------------------
Для этого, запоминается значение внутренних часов модуля TD1 и TD2 при получении значения TSF и от этого момента к значению TSF прибавляется разность текущего значения и время приема TSF.
Таким образом, в каждом модуле, на интервале TD рассчитывается примерное значение текущего времени AP по формуле
сенсор E1: TT1n=TSF+TT1-TD1
сенсор E2: TT2n=TSF+TT2-TD2
--------------------
Далее рассмотрим причины ошибок и их величину на примере модулей, которые я исследовал.
---------------------
Исследование относительного ухода времени частов TT1 и TT2 показали, что величина систематической погрешности значения DTT=TT1-TT2 =(T1-T2)*102400 и составляет 55 мкс за секунду.
Это означает, что при измерении относительной рассинхронизации часов сенсоров E1 и E2, т е значения DTTn=TT1n-TT2n, мы получим на интервале 102.4 мкс в идеальном случае систематическую ошибку 5.5 мкс.
Что и наблюдается и ошибочно принимается некоторыми товарищами за максимальную ошибку измерения.
Однако, полученная величина - это минимальное значение ошибки.
Максимальная величина этой ошибки может быть в десятки раз больше.
По моим экспериментальным данным ее значение в лучшем случае лежит в диапазоне до 150 мкс.
--------------------------
Такая ошибка возникает по следующей причине.
В задаче эксперимента необходимо измерить разность времени срабатывания сенсоров.
Т е моменты времени TT1 и TT2, в которые произойдут события не синхронизированы, а следовательно могут происходит на любом временном расстоянии от момента прихода значения TSFв сенсоры.
В результате ошибка рассинхронизации будет равна
DDTnk=(T1-T0)*N1-(T2-T0)*N2,
где N1 и N2 - произвольные целые числа в диапазоне от 0 до 102400.
Например, для N1=0 и N2=102400, получаем DDTnk=(T2-T0)*102400.
если будет пропущен прием очередного TSF, что иногда происходит, то ошибка кратно возрастает .В моем эксперименте эта величина получилпсь в диапазоне до 150 мкс.
========================
Алгоритм.
Теперь полагаю понятна причина маленькой ошибки при синхронном чтении часов E1 и E2 и причина большой ошибки в замере разности времени событий.
Перехожу к моему оригинальному алгоритму, который устарняет большие ошибки и реально позволяет достичь приемлемой точности.
Чтобы устранить указанную ошибку необходимо формулу вычисления оценки текущего времени APв модуле Eизменить следующим образом:
вместо
TTn=TSF+TT-TD
записать
TTn=TSF+A*(TT-TD),
где A=(TSF-TSF0)/(TD-TD0);
TSF0 - предыдущее значение TSF0;
TD0 - значение момента приема TSF0
--------------------------------
PS: если хотите, чтобы синхронизация была действительно с малой ошибкой, то просите pvvx, чтобы он в свою примитивную программу добавил мой оригинальный алгоритм.