На картинке представлено, как управлять мотором с компенсацией люфта при наезде на концевик.
A - Мотор, "находясь внутри детали", обычно имеет некоторый люфт. Чтобы люфт не сказывался на точности перемещения, необходимо приезжать в заданную координату так, чтобы мотор толкал деталь с одной и той-же стороны. (справа или слева)
"Мотор внутри детали" - это условно. Понятно, что вал мотора крутит некие рычаги/приводы, которые собственно и перемещают деталь. Все эти механические части привода дают суммарный люфт, которые иногда требуется компенсировать для перемещения с точностью в микрометры.
Б - Перемещаясь вправо или лево мотор может наехать на концевик
В - Наехав на концевик, мотор должен остановиться. Остановка может происходить не на самом концевике, особенно если движение происходит с плавным разгоном-торможением (по S-профилю / линейно / по экспоненте / по синусу).
Иногда требуется отъезжать от концевика на некоторое расстояние LimRemove, а не "стоять на концевике". Например, с датчиком Холла возможно намагничивание ответной части и концевик начнет срабатывать с более дальнего расстояния. Т.е. точность определения концевика снизится.
Г - Возвращаем мотор в обратную сторону, пока концевик не отключится.
Да - Если компенсация люфта не требуется, то отходим от концевика на LimRemove. Обработка концевика закончена.
Дб - Если перемещаемся с компенсацией люфта, то в зависимости от концевика и того, с которой стороны толкает деталь мотор
Е - В случае Дб1, возвращаемся на BacklashSteps, чтобы выбрать люфт и вернуть контакт мотора и детали с нужной стороны. Обработка концевика закончена.
В приведенном примере важно, чтобы:
Т.е. при смене стороны контакта мотора с деталью, необходимо сделать на BacklashSteps шагов больше в заданном направлении, чтобы выбрать люфт и реально сдвинуть деталь на заданное расстояние. А затем сменить направление и выбрать люфт в обратную сторону. Перемещение BacklashSteps должно быть больше чем реальный люфт "мотора в детали".