Aide Mini CNC avec un servo

  • Auteur de la discussion guillaumetell
  • Date de début
G

guillaumetell

Nouveau
Bonjour à tous,
je suis nouveau et je souhaite de l'aide pour mon projet , peut-être avez-vous déjà rencontré ce problème , merci d'avance pour votre aide.
j’ai réalisé la petite CNC qu’on trouve sur internet avec :

pour le hard :Arduino uno, shield cnc, 2 anciens lecteurs de dvd, un miniservo Towerpro sg90
pour le soft : Grbl-mi ,UniversalGcodeSender et Inkscape avec l’extension Mi- GRBL Z-AXIS servo controller.

Je sais générer du g-code et le charger dans UGS ;
Les axes se déplacent bien mais pas le servo qui fait bouger le crayon pourtant ,ce servo va bien
s’il est piloté directement avec l’arduino et un sketch tout simple.

J’ai même alimenté ce servo avec une source 5v 3A individuelle hors du shield cnc avec les masses communes….Rien à faire.

j’ai constaté avec un oscillo que les fréquences étaient différentes entre Arduino seul sur le servo avec le sketch Knob ou sweep : période T =20ms donc f=50 Hz
et le grplUpload ou là : période T= 1ms donc f=1000Hz

Ne serait-ce pas là le problème ? et si oui comment le corriger ,il aurait-il quelque chose à faire dans le config.h du grbl-mi ?
merci d'avance pour votre aide
Guillaumetell
 
S

speedjf37

Compagnon
Bonjour,

Je ne connais aucune des 2 versions mais je jouerais bien avec !

JF
 
J

jpbbricole

Compagnon
Bonsoir
1548875010850.png


Je viens d'essayer cette version avec servo, en jouant avec les paramètres:

define RC_SERVO_SHORT 9 // Timer ticks for 0.6ms pulse duration (9 for 0.6ms)
define RC_SERVO_LONG 39 // Timer ticks for 2.5 ms pulse duration (39 for 2.5ms)

Dans le fichier spindle_control.c

J'arrive à un demi tour du servo avec la commande M3S0 à M3S255 et les temps, à l'oscillo correspondent, 0,6ms à 2.5ms. (Sur pin Z+ du shield ou D11 sur l'Arduino)

Cordialement
jpbbricole
 
G

guillaumetell

Nouveau
Bonsoir Voir la pièce jointe 451610

Je viens d'essayer cette version avec servo, en jouant avec les paramètres:

define RC_SERVO_SHORT 9 // Timer ticks for 0.6ms pulse duration (9 for 0.6ms)
define RC_SERVO_LONG 39 // Timer ticks for 2.5 ms pulse duration (39 for 2.5ms)

Dans le fichier spindle_control.c

J'arrive à un demi tour du servo avec la commande M3S0 à M3S255 et les temps, à l'oscillo correspondent, 0,6ms à 2.5ms. (Sur pin Z+ du shield ou D11 sur l'Arduino)

Cordialement
jpbbricole
 
G

guillaumetell

Nouveau
Bonjour,
Je crois bien que le servo est HS car maintenant il ne va plus même en direct sur la arduino uno
Je vais en commander un autre sur aliexpress...
 
G

guillaumetell

Nouveau
Bonjour les amis avec une attention particulière à jpbbricole qui s'est intéressé à mon problème,

Je reviens dans ce forum avec un nouveau servo G90,

j’ai toujours le même problème , mon sevo part à fond avec la commande M3 quelque soit la valeur de S xxx. Je dois tout de suite faire un M5 pour éviter qu’il ne soit encore HS.

J’ai constaté à l’oscillo que le rapport Cyclique varie de 0 à 100 % selon que S soit de 0 à 1023 comme si on pilotait encore en PWM une broche classique...

J’ai l’impression que le GRBLupload,bien que j’ai essayé la version servo master ou Mi ,n’est pas pris en compte par universal gcode sender.

je ne vois pas ce qui cloche ? pourriez-vous m'aider s'il vous plait.
cordialement
Guillaumetell
 
J

jpbbricole

Compagnon
Salut guillaumetell
J’ai constaté à l’oscillo que le rapport Cyclique varie de 0 à 100 % selon que S soit de 0 à 1023
J'ai refait l'essai avec cette version de GRBL et un servo et ça fonctionne très bien mais avec S0 à S255.
Les essais sont faits avec UGS.

Est-tu bien sûre de charger la bonne version ?
Pour tester:
dans le répertoire \libraries\grbl-servo-master, avec le bloc-notes, tu édites le fichier report.c, tu cherches la ligne // Welcome message, en dessous tu modifies la ligne

printPgmString(PSTR("\r\nGrbl " GRBL_VERSION " ['$' for help]\r\n"));
en
printPgmString(PSTR("\r\nGrbl " GRBL_VERSION " guillaumetell servo ['$' for help]\r\n"));

Tu sauves et retélécharges GRBL.

Au lancement de UGS tu dois avoir le prompt:

Grbl 0.9i guillaumetell servo ['$' for help]

A+
Cordialement
jpbbricole
 
G

guillaumetell

Nouveau
Bonjour jpbbricole,
j'ai fait comme tu m'as dit et quand j'ouvre UGCS je ne vois pas ce que j'ai ajouté et il apparait toujours "
**** Connected to COM3 @ 115200 baud ****
Grbl 1.1g? ['$' for help]
>>> $$ etc …"
donc le fait de télécharger à nouveau grbl-servo-master/upload dans l'Arduino n'a pas d'incidence dans UGCS...
Mais alors quel "report.c" va-t-il lire ? j'ai bien un dossier GRBL dans la racine du c: j'y ai aussi fait la modif au cas où.
Qu'en penses-tu? n'y a-t-il pas dans start-Windows-bat une indication ? merci d'avance.
dis-moi si je dois le mettre en pièce jointe.
 
J

jpbbricole

Compagnon
Bonsoir guillaumetell

Un petit tuto pour charger GRBL
Tu télécharges ici
1551892431919.png

Dans le répertoire Téléchargements, tu as :
1551892458133.png

Doubles-clique dessus et tu as :
1551892500095.png

Clic droite dessus et copier
Dans le répertoire C:\Users\tonNomUtilisateur\Documents\Arduino\libraries, tu fais coller et tu dois trouver le répertoire
1551892582297.png

Tu ouvres l’IDE Arduino, dans Fichier/Préférences, contrôle l'endroit des croquis
1551892969154.png

Au besoin, adaptes le texte.

Dans Fichier/Exemples tu dois trouver
1551892615010.png

Tu règles le port com ainsi que le type de cartes et tu télécharges, ça devrait être OK.
Le fichier report.c se trouve dans:
C:\Users\tonNomUtilisateur\Documents\Arduino\libraries\grbl-servo-master

A+
Cordialement
jpbbricole
 
G

guillaumetell

Nouveau
Bonjour jpbbricole,
Je te suis très reconnaissant pour tout le temps que tu me consacres , j'ai suivi tes conseils et j'ai rechargé grbl-servo-master comme tu me l'as suggéré.
Hélas rien ne change , j'ai alors mis des repères différents dans tous les fichiers report.c que j'ai pu trouver, je me suis aperçu que UGS allait lire celui
qui est dans document\arduino\librairies\grbl et non grbl-servo-master pour le forcer à aller voir le deuxième j'ai renommer le premier en ggrbl.
j'ai télévervé à nouveau le bon upload dans l'Arduino , relancé UGS et là miracle (enfin peut-être pas quand même) ….

**** Connected to COM3 @ 115200 baud ****
Grbl 0.9iguillaumetell ['$' for help] "
dans la console .
J'ai tout de suite essayé divers M3 Sxxx , et M5 le servo bouge .
J' en suis là pour l'instant çà a l'air de bien fonctionner , je vais continuer à explorer , paramétrer ma machine et m'initier à inkscape pour faire du G-code

merci encore pour ton aide , j' en aurai sûrement encore besoin plus tard si ce n'est pas trop te demander.
bonne soirée
Guillaumetell
 
J

jpbbricole

Compagnon
Salut guillaumetell

Super :smt023
UGS allait lire celui
qui est dans document\arduino\librairies\grbl
J'en avais le soupçon, c'était typiquement les symptômes.
Pour ton information, UGS ne va pas lire dans ce répertoire, il ne lit que ce que tu as téléversé dans l'Arduino.
Ce répertoire est lu par l'IDE Arduino au moment d'ouvrir l'exemple grbl-servo-master/grblUpload. Ensuite, l'IDE compile et téléverse le programme GRBL dans l'Arduino.
j' en aurai sûrement encore besoin plus tard si ce n'est pas trop te demander.
Avec plaisir!

A+
Cordialement
jpbbricole
 
M

Marc PELTIER

Compagnon
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.
 
Dernière édition:
Haut