На станке мотор ДПМ35 перемещает каретку. На валу мотора крыльчатка с опто-датчиком, две фазы, сдвинутые на 90 градусов. Этот сигнал приходит на Атмегу, которая через драйвер
A3950 ШИМом управляет данным мотором. Задача разогнаться с заданным ускорением до нужной скорости, двигаться с постоянной скоростью, и затормозить с заданным ускорением в нужном месте с точностью плюс-минус четверть фазы датчика.
Вроде ничего сложного, разгоняться и стабилизировать скорость получается, а вот соблюсти точность остановки по заданной координате не получается. Либо чуть переезжает, затем возвращается, либо чуть не доезжает, почти останавливается, потом дотягивает на малой скорости.
Какой алгоритм управления должен быть для торможения? Всю голову изломал. Дело еще в том, что сила трения (или чего там) неравномерна по длине перемещения. То есть если двигаться на постоянной скорости и затем снять воздействие на мотор, расстояние, проезжаемое до остановки, может меняться раза в потрора, в зависимости от координаты останова.
То есть как математически найти величину воздействия (значение ШИМ и знак) на мотор, зная текущую координату, конечную координату и длительность последнего периода фазы оптодатчика?