ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 апреля
822458
Dingo (09.03.2018 06:47, просмотров: 3068)
Программный PLL для долговременной синхронизации таймеров. Кажется, изобретаю велосипед. Возможно, что для езды по шпалам. Кратко суть происходящего: девайс получает пакеты с неким периодом, и надо подстроить свой периодический таймер под эти самые принимаемые пакеты, в идеале с точностью до фазы. В первом варианте, как сейчас и работает, всё просто: к следующему периоду добавляем ошибку. Всё. сдвиг по фазе устраняет идеально. Однако же, если периоды различаются, то получим постоянное отставание или убегание на ошибку в зависимости от знака разницы. Максимальный диапазон подстройки ±полпериода. 1) Разница ошибок. Если таймер устройства настроен на период, допустим, пусть будет 30 (тактов, единиц, попугаев) и получены последние ошибки en=-3 и en-1=-3, то мне вот ясно, что надо ещё и период подкорректировать на эти самые -3. Как это реализовать в алгоритме? Попытка построить что-то с запоминанием предыдущей ошибки(en-1) и учётом разницы между ними (en и en-1) пока закончилась неудачей; возможно, что-то не учёл или неправильно делал. 2) Модификация предыдущего. Может несколько последних ошибок анализировать? Как тогда выбрать, сколько именно? Следует ли их корректировать после внесения изменений в период? 3) Интегратор-сумматор с порогом. То есть копить ошибки, при выходе модуля суммы за некий порог корректировать не только фазу, но и период таймера. При коррекции периода уменьшать накопленную сумму на скорректированную величину. Пример для порога 10ед.: ошибки -3[-3] -3[-6], -3[-9], -3[-12]=> корректируем на -2 =>[-10], -1[-11] => 0[-10], 0[-10], ... Первые прикидки в голове дают рабочий вариант, но появляются вопросы. Первый: как выбрать величину порога? Потому что от отношения порога к ошибке и к периоду сильно зависит скорость подстройки. Подстройка фазы тоже не вполне понятно как отработает: при совпадении знака с последней подстройкой даст ошибку для периода, которая потом вызовет постепенное накопление суммы в противоположную сторону до корректировки периода до некорректной величины и так далее. То есть установление совпадающих периодов может затянуться до двух модулей сумматора (пройти от "-" к "+"). На картинке случай 1), как постоянной коррекцией фазы корректируется период. До t0 всё синхронно, потом период пакетов меняется. Возникает ошибка(красная толстая линия), которая учитывается в следующем периоде(тонкая красная), но она же возникает снова в следующем цикле и так далее. Подскажите, вдруг кто-нибудь делал подобное или имеет недостающие у меня знания?
image