Для начала коротко опишу проект:
Делаю станок на продольной оси которого будет трудиться шаговик, мотаясь из стороны в сторону на 800мм. Коллекторный двигатель в этот момент будет максимально равномерно крутить заготовку.
С точки зрения дуины имеем одно прерывание по событию - детектор нуля каждую сотую секунды (думаю в этом прерывании производить все вычисления типа ПИД и прочих поправок), и одно прерывание на работу диммера каждые 40мс(не медленнее).
От шаговика нужно получить ускорения-замедления и возможность отправлять его точно на большие расстояния(без обратной связи, будем думать, что он ничего не пропускает
![Зелёный :mrgreen:](./images/smilies/icon_mrgreen.gif)
С первым было 2 варианта: 1. организовать ещё одно прерывание с плавающей частотой
2. изменение значения divider (использовать его?)
С первым всё хорошо , кроме того, что это уже третье прерывание в программе и я как-то не знаю как они все будут дружить и кто кого будет прерывать
![Озадачен :?](./images/smilies/icon_e_confused.gif)
Со вторым сложнее, опять же: 1. Тупо плюсовать каждый шаг в переменную uint32_t
2. Перед тем как отправить двигатель из одной стороны в другую считать за сколько он должен дойти и каждые 40мс проверять истекло ли это время.
Второй вариант мне казался интереснее до тех пор пока я не подумал сколько же раз придётся пересчитывать время при добавлении ускорений, причём не только на концах участка, но и по пути
ps шаговик нема 23 с шагом 1,8 градуса