Hola a todos, Maytuc yo me he empapado de todos los manuales pero aún ando en fase teórica por lo que no te puedo decir con hechos concretos hasta que no me ponga al fregao (aún estoy con la electrónica).
Yo creo que el problema está en el EMCMOT, el "core" de LinuxCNC siempre es un algoritmo PID y que salvo que haya algún error en principio es como lo que has hecho: alimentar los datos cmd (command=orden) y fbd (feedback=realimentación=encoder).
Peeero, no recuerdo donde, creo que en manual de HAL indica que EMCMOT implementa un PID "recortado" para usarlo con los PaP ... y de ahí intuyo que no genera pasos de correción si el error que resulta de calcular el PID de una posición resulta negativo.
Siento no poder serte más concreto, pero como te digo aún no he metido mano como tú... pero expero que te sirva de ayuda la pista (si estoy en lo cierto

).
-------------
Gil, si y no... todos los servos adolecen de lo que comentas. No son como un PaP que "clavan" la posición, siempre tienen un margen que se compensa con el cálculo que hacen a cada milisegundo de la posición.
El pico que comentas de pasarse 0.01, es en primera instancia la ganancia P, un valor muy alto va a producir lo que comentas... que salga como un cohete el servo y se pase de posición (y eso ya no lo devuelve nadie al material cortado). Para mejorar eso, el encoder ha de ser de mayor resolución que tu unidad mínima, para que se pueda pasar algunas unidades, detectar el error y compensar antes de que sea demasiado. De hecho haciéndolo bien hay dos encoders, uno en el eje del motor de mayor resolución y otro el de la regla, y se calcula sobre ambos.
Estas son las curvas típicas de ajuste de las variables P,I,D de un servo (la verde se considera la óptima) y como véis, hay una oscilación siempre sobre el punto de parada salvo "amariconar" el servo y dejarle muy lento (curva roja).

Salu2