Le problème est classique, et il se retrouve pour les broches que l'on cherche à faire tourner avec un moteur Brushless et un contrôleur (ESC) de modélisme.
Les servos de modélisme (servos RC), tout comme les ESC pour moteur brushless, attendent des signaux en créneau dont la longueur varie entre 1 et 2 ms, à une fréquence de 50 Hz. C'est bien ce que génèrent les différentes librairies pour Arduino, et donc, avec un Arduino, ça marche.
En revanche, les logiciels de CNC (même ceux pour Arduino) sont généralement capables de sortir un signal MLI (modulation de largeur d'impulsion, ou PWM en anglais), résolu sur 1024 niveaux, entre 0 et 1023, à une fréquence que l'on choisit. Si l'on choisit 50 Hz, pour être comme les servos RC, la largeur du créneau, qui exprime toute la plage des réglages possibles, peut donc varier entre 0 et 20ms, alors qu'on a besoin d'une variation entre 1 et 2ms pour exprimer cette même variation ! Ce n'est pas du tout la même chose!
Autrement dit, sur les 1024 pas possibles d'une MLI fabriquée à 50 Hz, seuls ceux situés entre le pas 51, et le pas 102, correspondent à ce que peut comprendre un servo RC. En dessous de 51/1024, c'est à fond dans un sens, et au-dessus de 102/1024, c'est à fond dans l'autre sens, et on a une petite plage de réglage de 51 bits, entre les deux. De toute évidence, ça ne va pas !
Pour faire fonctionner convenablement un servo RC avec un logiciel CNC, il faut que ledit logiciel soit capable de générer le bon signal, grâce à un module spécifique à trouver sur le net (LinuxCNC et Machinekit ont déjà été bidouillés dans ce sens, je me souviens). Si un gbrl "spécial servos RC" existe, alors le problème est résolu...
Si l'on ne peut pas intervenir sur le logiciel CNC, il faut prendre le signal MLI tel qu'il sort, et le faire traduire par un petit module Arduino séparé, qui prendra en entrée l'information MLI, et génèrera en sortie le signal RC attendu.