ну собственно ты нашёл в чём проблема.
как я и говорил чтобы его сдвинуть нужно набрать ошибку, т.е. Программа думает что она передвинула фрезу на 150 шагов а на самом деле всё стоит.
Дёргается от перерегулирования.
Вот теперь можешь играться с подборкой алгоритма управления

Этот кусок:
motor_speed = 0;
int distance = abs(position-target);
if (distance > 255)
motor_speed = 255;
else
motor_speed = distance;
твоя функия управления.
с каждым s ты увеличиваешь разницу position-target
попробуй подобрать константу при которой двигатель начнёт двигаться при меньшей ошибке.
Или например так:
motor_speed = distance*2;
В общем тут уже теория автоматического управления, на эту тему много материалов в интернете.
И тут есть
forum2/topic5043.html