Я вчера таки посидел вечером перед сном, изучил азык АВР-ов и стал анализировать исходник вышеупомянутого мной автора.
Интересная вещь оказалась. Там другой подход. Таблиц нет. А сделано вот как (применительно к скутеру это интерпретируется примерно так)-
Контроллер ждёт появления нерабочего импульса(для хонды начало этого импульса за 60гр до вмт, окончание за 48гр) . Отследив импульс полностью, он его замерил таймером.
(в градусах его ширина= 12градусов у скутеров) Теперь в запасе у контроллера есть немного времени даже с запасом, и вычисляется нужная задержка.
И вот тут самое интересное, как она формируется.Время, замеренное таймером при прохождении "нерабочего" импульса(у автора это время прохождения шторки) умножается на некоторый коэффициент и вычитается константа.
Это и есть требуемая задержка. При медленном вращении, эта вычитаемая константа не так заметна, так как вычитается из большого числа, а при больших оборотах константа начинает влиять сильнее, и задержка становится существенно меньше.
То есть, добавляется опережение. Вместо таблицы автор применил что-то вроде линейной функции у=A*x-b
Видимо, подбирая различные сочетания коэффициента и константы, автору удалось найти нужный наклон характеристики и начальные/конечные значения.
Далее автор применил метод кусочно-линейной аппроксимации графика, представив его в виде двух отрезков прямых с разными наклонами до и после точки перегиба.
То есть, до определённых оборотов действуют один коэфф и вычитаемая константа, далее другой коэф и другая константа, и наклон получается другой.
Короче, разгадал я алгоритм автора. (исходник был без комментариев). А что7 тоже идея. Исходник прост, занимает всего один лист бумаги, а судя по всему, работает.
Интересная альтернатива нашему пути.
Пожалуй, стоит попробовать. Только пересчитать коэффициенты или кварц другой поставить, чтоб до 12000 оборотов отрабатывал..