Nombre de pas exécutés différents du nbr de pas demandésstance

mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Nombre de pas exécutés différents du nbr de pas demandésstance

Message par mstrens »

Il y a quelques semaines, en voulant mettre en service ma nouvelle CNC, j'ai fait des tests de déplacement et j'ai constaté des anomalies.
Après quelques allers/retours, la cnc ne revenait pas au point de départ.
J'ai d'abord suspecté des pertes de pas dues à des points durs mais ce n'était pas cela car cela se produisait même si le moteur n'était pas relié à la cnc.
J'ai donc suspecté les drivers TB6600 et j'ai commandé de nouveau drivers TMC2160 que j'ai reçu hier.
J'ai continué mes tests aujourd'hui avec le moteur non relié à la cnc et ces nouveaux drivers.
A noter que ces drivers sont particulièrement silencieux à tel point qu'au début j'avais demandé un petit déplacement lent et j'ai cru que cela ne fonctionnait pas car je n'entendais rien.
Toutefois j'ai continué à constater des déplacements incorrects. L'erreur n'est pas très grande et il est probable que si je faisais de simples allers/retours je ne la remarquerais pas. Elle semble un peu plus importante quand le déplacement est plus lent.

Pour mes tests, j'ai écrit un fichier de gcode comme suit:

Code : Tout sélectionner

$101=240
$121=40
G21
G91

F500
G01 Y40
G4P1
G01 Y40
G4P1
G01 Y40
G4P1
G01 Y40
G4P1
$101=240 fixe le nbr de step/mm pour ma cnc avec de drivers en 1/8 pas
$121=40 fixe l'accélération (à une valeur conservative
G21 = distance en mm
G91 = déplacement en relatif
F500 = 500 mm/min
G01 Y40 = déplacement de 40mm = 6 tours moteurs dans mon cas)
G4P1 = arrêt pendant 1 sec pour avoir le temps de vérifier la position.

Les lignes G01 Y40 et G4P1 se répètent environ 150 fois.
Ceci provoque environ un déplacement de 6m (150 fois 40mm , 40mm = 6 tours, 1 tour =1600 steps).

A noter que ce Gcode ne peut pas fonctionner sur un moteur relié à la cnc car comme le moteur tourne toujours dans le même sens, la cnc atteindrait les fins de course. C'est important de faire tourner le moteur toujours dans le même sens car avec des allers/retours, si les décalages sont aléatoires, on reviendrait presque à la position initiale.

Après exécution (déplacement de 6m), j'observe un déplacement plus long d'environ 1/8 de tour moteur = quelques 1/10 de mm.

Il ne s'agit donc pas de perte de pas mais d'un nombre de pas plus grand que prévu.

Pour déterminer avec certitude si l'erreur venait de GRBL ou du driver, j'ai écrit un petit programme pour un arduino qui compte le nombre d'impulsions STEP (=PULSE) envoyées par GRBL au driver.
J'ai lancé (à plusieurs reprises) une commande G01 Y400 qui devrait donc générer 96000 steps.
A ma grande surprise, l'arduino a compté un peu plus de 100000 steps.
Le problème n'est donc pas le driver mais bien du côté de la carte GRBL.

J'ai refait les mêmes tests mais cette fois en n'alimentant pas les drivers en 24V et cette fois mon arduino compte exactement 96000 steps.
Le problème est donc lié à des parasites induits par les moteurs.

C'est très étonnant car les cartes TFT/GRBL sont alimentées en 5v par la prise USB de mon PC portable alors que les drivers sont alimentés par des vielles alim de pc récupérées.
Le portable n'a pas de masse commune avec les alims de drivers.
Les drivers ont des optocoupleurs et donc sont électriquement isolés.
Les fils qui vont du driver au moteur n'ont que 20cm de longs et sont à l'opposé des carte TFT/GRBL.

Je suis donc très surpris qu'il puisse y avoir des interférences.

Voila où j'en suis mais cela pourrait bien indiquer que les problèmes que certains ont imputés aux drivers (DM542 entre autre) ne sont peut être pas dûs aux drivers mais à des parasites sur la carte GRBL. A noter que plus le driver est performant, plus il est apte en général à traiter des signaux rapides et donc plus il peut réagir à des parasites qui proviennent de la carte GRBL.

Ce serait bien si d'autres personnes pouvait faire le même type de test.
En fait il suffit de :
- prendre un driver/moteur non attaché à une cnc.
- mettre un bout de tape sur l'axe du moteur pour avoir un point de repère
- calculer la distance à demander pour avoir un nombre exact de tours à exécuter le moteur (dépend du réglage des micro pas et du step/mm).
- lancer un Gcode du type G91 F500 G01 X12345 (12345 = étant la distance à parcourir de l'ordre de 6000 mm)
- vérifier à la fin si le repère sur l'axe moteur est au bon endroit (le même qu'au début).

Demain, j'essaierai de poursuivre les tests en ajoutant des résistances/capacités pour essayer de réduire les parasites et de solutionner le problème.
Avatar du membre
RoMaker
Administrateur du site
Messages : 5063
Enregistré le : 02 janv. 2017 20:24
Localisation : Montpellier
Contact :

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par RoMaker »

Salut Michel,

Je viens à l'instant d'effectuer le test demandé, et je n'ai eu absolument aucun décalage, même au bout de 6 mètres demandés, mon repère tombe pile poil aligné. (trait dessiné sur l'axe et le bâti moteur)

Ma config:
Carte GRBL V2.0
Driver DM542T stepperonline
alim 36V pour les drivers
Alim 5V 5A pour la carte GRBL
Moteur Nema 23 2.8A

steppers réglés à 1/4 de pas, 200 step/mm, soit un tour moteur pour 4mm et 800 steps (soit 1500 tours moteurs pour faire 6 mètres)

Le G-code employé:

Code : Tout sélectionner

G21
G91

F500
G01 X24
G4P1
G01 X24
G4P1
G01 X24
G4P1
G01 X24
G4P1
G01 X6000
Ton soucis provient peut être des alimentations employées ?
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par mstrens »

J'ai essayé avec 2 alim de pc différentes (une 12v et une double pour avoir 24V).
C'était le même problème dans les 2 cas.
Avatar du membre
RoMaker
Administrateur du site
Messages : 5063
Enregistré le : 02 janv. 2017 20:24
Localisation : Montpellier
Contact :

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par RoMaker »

essaye avec mes réglages, à savoir 200steps/mm et drivers en 1/4 de step et mon Gcode, chez moi c'est tout bon !
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par mstrens »

Je viens d'écrire un message ici
viewtopic.php?f=43&t=8234

Ce message décrit ce que j'ai fait et qui semble avoir solutionné mon problème.
A noter que, comme mentionné, j'ai mis sur mon github (https://github.com/mstrens/count_pulses_with_arduino) un petit programme qui permet de compter le nombre d'impulsions envoyées à un driver pour voir s'il y a des parasites en entrée du driver qui pourraient expliquer des décalages.

Ce petit programme est à faire tourner sur un arduino Uno, nano ou pro mini.

Mon driver makerbase TMC2160 (10€ environ) semble donc bien fonctionner, reste froid et permet un fonctionnement étonnamment silencieux.
Cela peut être une alternative intéressante au DM542.
Il exige toutefois l'ajout dun IC qui sert de buffer. Cet IC est un 74LS244 que j'avais sous la main mais il serait sans doute plus adapté de prendre un 74AC245.

Il existe aussi une version du TMC2160 qui dispose des pins DIR+/DIR-, PUL+/PUL- et donc évite l'ajout d'un buffer mais le prix est presque le double.

PS: je dois encore faire des tests avec mes anciens TB6600 pour voir si ma solution (buffer et résistances de rappel) fonctionne aussi pour eux.
Avatar du membre
RoMaker
Administrateur du site
Messages : 5063
Enregistré le : 02 janv. 2017 20:24
Localisation : Montpellier
Contact :

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par RoMaker »

Hello Michel,
Content que tu aies solutionné ton problème.

Ce qui est bizarre c'est qu'il n'y a pas de soucis de parasites chez la plupart des utilisateurs, et oui chez d'autres, il faudrait déterminer la source de ces parasites
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par mstrens »

Pour info, j'ai fait ce jour de nouveaux tests avec mes TB6600.
J'ai constaté qu'avec ces drivers TB6600, j'ai encore des décalages systématiques (déplacements plus longs que demandés) bien que mon module arduino qui compte le nombre de pas demandés précise bien que le nombre de pas demandés au driver est conforme.
J'en déduit donc que ce sont bien mes TB6600 qui sont défectueux.

Je vais donc commander d'autres modules makerbase TMC2160.

Le seul inconvénient que je vois avec ces drivers est qu'il faut insérer un buffer (idéalement un IC 74act244, 74act245, 74ac540 ou 74act541) entre la carte GRBL et les entrées des drivers car ils n'ont pas les entrées DIR- et PUL-.
Peut-être qu'avec de simples résistances pull up cela suffirait. Je vais aussi faire ce test pour voir.

@Romain. En fait, il serait bon de remplacer l'ULN2803 qui contrôle les pins DIR et STEP de la carte par un buffer du type 74ac541 ou 74act541.
Par rapport à l'ULN2803, ces buffers ont l'avantage de forcer tant le niveau haut que le niveau bas et donc d'avoir une meilleure immunité aux parasite. Ils ont aussi une chute de tension plus faible ce qui permet d'avoir une tension aux bornes des drivers plus proche de la valeur nominale des drivers (5V).
De plus, la carte serait alors compatible avec tous les types de drivers (car il serait aussi possible d'avoir un Gnd commun aux signaux DIR/STEP au lieu d'avoir uniquement la possibilité d'un Vcc commun).
Ceci exige toutefois un léger redesign de la carte car ces buffers ont 20 pins au lieu de 18.
A noter que je ne recommande pas de changer l'autre ULN2803 car le fait d'avoir une sortie à collecteur ouvert permet d'avoir un signal de plus de 5V si on met une résistance Pull up vers une source de tension de plus de 5V. De plus l'ULN2803 permet de contrôler un courant plus important (jusqu'à 500ma je pense).
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par mstrens »

Pour info j'ai fait un test avec un driver makerbase tmc-2160 en remplaçant le buffer par de simples résistances de rappel (de 250 à 500 ohm) et cela fonctionne.
Les 3 solutions possibles sont donc:
- le remplacement de l'uln2803 par un 74AC541 (la meilleure et la plus polyvalente)
- l'insertion d'un IC buffer (genre 74AC541) et de résistances de rappel (2 par driver) entre la carte et les drivers
- l'ajout seulement de résistances de rappel (2 par drivers) (la plus simple mais peut être un peut moins fiable - pourrait ne pas marcher avec certains drivers exigeant une tension à leurs bornes proche de 5V)
PatouRS
Messages : 12
Enregistré le : 14 janv. 2018 08:15

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par PatouRS »

Bonjour mstrens,

Concernant l'utilisation de la carte GRBL v2 avec les drivers makerbase TMC2160-OC, j'avais pensé simplement inverser les signaux grâce aux paramètres GRBL $2, $3 et $4 en raccordant les drivers à la masse au lieu du +5V.
Cela pourrait-il fonctionner ?

Encore merci à toute l'équipe, vous faites un boulot formidable.

Pat.
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Nombre de pas exécutés différents du nbr de pas demandésstance

Message par mstrens »

PatouRS a écrit : 21 mai 2021 13:02 Bonjour mstrens,

Concernant l'utilisation de la carte GRBL v2 avec les drivers makerbase TMC2160-OC, j'avais pensé simplement inverser les signaux grâce aux paramètres GRBL $2, $3 et $4 en raccordant les drivers à la masse au lieu du +5V.
Cela pourrait-il fonctionner ?

Encore merci à toute l'équipe, vous faites un boulot formidable.

Pat.
Avec les drivers makerbase TMC2160, on peut inverser au moins le signal step grace au paramètre $2 pour que ce soit de courtes impulsions positives qui parviennent au driver. En fait, il peut aussi fonctionner si on n'iverse pas le signal.
En fait le problème n'est pas l'inversion du signal mais le fait qu'il faut qu'un courant passe dans les optocoupleurs qui sont en entrée.
La carte (V1 ou V2) a un IC ULN2803 entre les sorties de l'ESP32 et les pin DIR/STEP/ENA. Ce ULN2803 est composé en fait de 8 transistors (un par signal) qui sont à collecteur ouvert. Ils fonctionnent donc chacun comme un interrupteur et sont tous reliés à Gnd. Ils peuvent donc laisser passer un courant venant d'une source positive pour le conduire à Gnd mais ne peuvent "fournir" le courant.
Avec des drivers comme les TB6600, cela ne pose pas de problème car pour chaque signal on a accès à une borne + et une -.
En reliant toutes les bornes + à du 5v, l'alimentation fournit directement le courant et quand l'ULN2803 est "passant", le courant traverse l'optocoupleur, l'ULN2803 et rejoint Gnd et ce pour chaque signal séparément.
Avec le makerbase TMC2160, comme c'est le Gnd qui est commun à tous les signaux, cela ne peut pas fonctionner.
Si tu raccordes directement le signal DIR (par exemple) de la carte à l'entrée DIR du driver, il n'y aura jamais de courant qui traversera l'optocoupleur quelque soit la position de l'interrupteur (constitué d'un huitième de l'ULN2803).
Une possibilité (qui fonctionne avec le test que j'ai fait) consiste à ajouter une résistance (dite de rappel) entre 5V et la pin (par exemple DIR) de la carte. Quand l'interrupteur (ULN2803) est ouvert, le courant va passer à travers cette résistance puis dans l'optocoupleur puis rejoindre gnd (via la pin gnd du driver). Quand l'interrupteur est fermé, le courant va passer à travers cette résistance puis va directement rejoindre Gnd via l'interrupteur. Le courant ne passera alors pas dans l'interrupteur. Suivant la position logique de l'interrupteur (ULN2803), on aura donc bien le fonctionnement voulu.
Toutefois, il faut choisir avec un certain soin la valeur de cette résistance de rappel.
En effet le driver a déjà (sur chaque entrée) une résistance interne de 330 ohm (je pense) en série avec l'optocoupleur. Cette résistance est indispensable pour limiter le courant dans l'optocoupleur. Le fait d'ajouter une résistance de rappel externe va avoir pour effet de réduire le courant qui traverse l'optocoupleur. Tout se passe comme si on augmentait la résistance interne de 330 Ohm.
Si on met une résistance trop élevée (disons 10k ou plus), le courant qui va traverser l'optocoupleur ne sera plus suffisant et le driver ne détectera plus rien.
Par contre, si on met une résistance trop faible (disons 10 ohm), le courant qui va passer dans l'ULN2803 quand il est passant va être trop élevé et il va chauffer/claquer.
Il faut donc trouver un compromis.
Personnellement, j'ai essayé avec une résistance de 270 et avec une de 560 ohm et cela a fonctionné.
La tension aux bornes du driver n'est pas de 5V (mais de l'ordre de 3V) mais cela suffit encore à transmettre le signal au travers de l'optocoupleur.

Le fait d'utiliser un buffer type 74AC541 (ou équivalent) est une meilleure solution car la tension aux bornes du driver peut alors être proche de soit de 0V soit de 5V (suivant le niveau logique) ce qui correspond à la valeur prévue.
Répondre