Я вообще считаю, что в данном случае нам НЕ НУЖЕН линейный датчик обратной связи, кроме концевиков. О.. вот она, РЕВОЛЮЦИЯ.
Судите сами: Допустим, мы достаточно точно подобрали коэффициент, и можем с большой точностью задавать скорость перемещения оси. Тогда, умножив скорость на время мы получим дистанцию. А теперь представьте, что текущее "положение" оси мы храним только в памяти МК... ммм. нет, проще будет алгоритм по шагам расписать
1 - включили и калибруемся от концевика до концевика. Т.е. с постоянной скоростью доезжаем до низа, затем до верха и по времени и скорости прикидываем расстояние. Возвращаемся в центр (та же скорость, но половина времени) - это будет позиция "0" Будем хранить позицию в глобальной переменной POSITION
2 - с приходом данных от компа вычисляем новое (будущее) положение оси, находим необходимую дистанцию перемещения, делим ее на время (уж время то мы знаем, поскольку сами настраиваем интервал передачи данных от компа к контроллеру). И получаем скорость, которую надо задать двигателю, что бы он к приходу следующих данных приехал ПРИБЛИЗИТЕЛЬНО в нужное место. А в переменной POSITION сохраняем новую позицию оси, КАК БУДТО мы реально ее достигнем к концу заданного интервала времени.
3 - с приходом очередных данных от компа вычисляем новую дистанцию перемещения не на основании РЕАЛЬНОЙ позиции, а на основании ИДЕАЛЬНОЙ, которую мы храним в переменной POSIТION.
4 - и так далее.
Давайте в цифрах. Допустим комп нам пришлет следующую последовательность положния оси : 100, 120, 50, 80, 100.
Допустим, интервал между посылками - 50мс.
Допустим, переменная POSITION = 0
Пришла первая посылка - 100. Вычисляем дистанцию D = (100 - POSITION) = 100. Вычисляем скорость, которую надо задать двигателю, что бы он за 50 мс прошел 100мм дистанции. S = abs(KP*D), где KP - наша калибровка. Задаем двигателю эту скорость и вычисляем POSUTION = POSITION + D.
Пришла вторая посылка - 120. D= (120 - POSITION) = 20, S=abs(KP*D), POSITION=PISITION+D
Пришла третья посылка - 50. D=(50-POSITION) = -70 (реверс), S=abs(KP*D)
... и так далее. Так вот, даже если мы ошиблись в коэффициенте калибровки KP, даже если интервалы в 50 мс выдерживаются не точно, реальное перемещение оси будет очень похоже на то, которое сим пытается нам задать. Пусть мы в реале получим не 100,120,50,80... а 102,119,55,78 - ну и фиг с ним, ИМХО.
Вот теперь вроде всё