Здравствуйте.
Для начала коротко опишу проект:
Делаю станок на продольной оси которого будет трудиться шаговик, мотаясь из стороны в сторону на 800мм. Коллекторный двигатель в этот момент будет максимально равномерно крутить заготовку.
С точки зрения дуины имеем одно прерывание по событию - детектор нуля каждую сотую секунды (думаю в этом прерывании производить все вычисления типа ПИД и прочих поправок), и одно прерывание на работу диммера каждые 40мс(не медленнее).
От шаговика нужно получить ускорения-замедления и возможность отправлять его точно на большие расстояния(без обратной связи, будем думать, что он ничего не пропускает ).
С первым было 2 варианта: 1. организовать ещё одно прерывание с плавающей частотой
2. изменение значения divider (использовать его?)
С первым всё хорошо , кроме того, что это уже третье прерывание в программе и я как-то не знаю как они все будут дружить и кто кого будет прерывать , да и т.к. control() будет вызываться каждые 40мс(кстати, сколько мс этот метод съедает?),второй вариант даёт более-менее приемлемое изменение скорости, но... скорее всего недостаточное т.к. скорость перемещения каретки должна быть строго согласована со скоростью вращения двигателя, а дискретизация на 100-200оборотах весьма приличная
Со вторым сложнее, опять же: 1. Тупо плюсовать каждый шаг в переменную uint32_t
2. Перед тем как отправить двигатель из одной стороны в другую считать за сколько он должен дойти и каждые 40мс проверять истекло ли это время.
Второй вариант мне казался интереснее до тех пор пока я не подумал сколько же раз придётся пересчитывать время при добавлении ускорений, причём не только на концах участка, но и по пути
ps шаговик нема 23 с шагом 1,8 градуса
Точное позиционирование шагового двигателя на оси
Вернуться в «Шаговые двигатели и драйверы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость