Aide Butée positionnement pour SCIE PANNEAU sur base arduino et codeur incremental ?

  • Auteur de la discussion dubois
  • Date de début
D

dubois

Compagnon
Bonsoir ,
Merci beaucoup pour ton travail et tous ce temps passé pour moi ,
Je te tiens au courrant de l'avance, je vait effectivement commencer simplement pour le moment, qu'appelle tu le réglage semi-automatique de la position de départ?
Bonne soirée à tous
 
J

jpbbricole

Compagnon
Bonjour
qu'appelle tu le réglage semi-automatique de la position de départ?
C'est un dispositif qui se compose d'un capteur magnétique et d'un petit aimant et qui permet, par quelques indications sur l'affichage, de caler exactement la position 0 de ton installation, cela prend max. 5 sec. C'est la version de homing "luxueuse" :wink:
Autrement, le homing simple consiste à positionner l'installation sur une position sûre, de mesurer la distance jusqu'au 0 mm, et de renseigner la variable

homeOffsetStepsTo0mm = -325; // Nombre de pas entre le capteur de homing et le 0mm

et démarrer le programme avec l'installation sur cette position.

Dans la première phase, cette option ne fonctionne pas, pour faire le homing, il faut positionner l'installation sur le 0 mm et faire un reset de l'Arduino.

Cordialement
jpbbricole
 
Dernière édition:
D

dubois

Compagnon
Ok merci pour ces précisions !
Donc nous avons suivi tes instructions et sous l'égide de mon garçon j'ai testé le programme donc si je comprends bien tu mets 2400 pas par tour pour un codeur incrémental de 600 pas 2 voix front montant et descendant soit 2400 c'est ça ?
Merci pour tout nous avons fait le câblage en volant et ça fonctionne :7dance: je testerai avec un petit détecteur inductif pour le homing comme sur le shema plus tard l'essentiel est là !!
Merci encore pour tout
bonne soirée à tous
 
J

jpbbricole

Compagnon
codeur incrémental de 600 pas 2 voix front montant et descendant soit 2400 c'est ça ?
Oui.
je testerai avec un petit détecteur inductif pour le homing...
En fait, j'ai trouvé beaucoup simple pour faire le homing, sans capteur, je te fais un tuto.
Merci pour tout nous avons fait le câblage en volant et ça fonctionne :7dance:
Vous êtes des bêtes en micro informatique, salutations à ton garçon.

Bonne soirée
jpbbricole
 
D

dubois

Compagnon
Oui.

En fait, j'ai trouvé beaucoup simple pour faire le homing, sans capteur, je te fais un tuto.

Vous êtes des bêtes en micro informatique, salutations à ton garçon.

Bonne soirée
jpbbricole
Tu est infatigable comme le dit wika ! Je suis évidemment preneur de ta solution !
Merci pour tes encouragements !
Bonne soirée
 
J

jpbbricole

Compagnon
Bonjour

Voici la méthode de calibration (cette description se retrouve dans le fichier Mode emploi.pdf):

A faire une fois pour toute pour autant qu'il n'y a pas de modifications de cette partie:

1) Repérer un point ou mettre un point sur lequel on peut appuyer la partie mobile (PM) comme position de repos (PR).
2) Dans le fichier
USIN_ButeeScieRotEnc_Setup.h,
mettre la variable à 0.
homeOffsetStepsTo0mm = -0; // Nombre de pas entre le capteur de homing et le 0mm
Téléverser le programme dans l’Arduino.
3) Démarrer l'Arduino.
4) Appuyer la PM sur la butée de repos.
5) Reset de l'Arduino.
6) Manuellement, amener la PM sur ce qui est la position 0 mm et relever le nombre de pas sur l'afficheur.
7) Dans le fichier
USIN_ButeeScieRotEnc_Setup.h,
renseigner la variable du résultat obtenu en négatif.
homeOffsetStepsTo0mm = -xxx; // Nombre de pas entre le capteur de homing et le 0mm
Téléverser le programme dans l’Arduino.

Pour que cela fonctionne, à chaque démarrage du système, la PM doit être appuyée sur la PR, ou en cours de travail, amener la PM sur la PR et faire un reset de l’Arduino.

Il faut télécharger la dernière version du programme Programme 016.zip

Bonne journée
jpbbricole
 
D

dubois

Compagnon
[Bonsoir à tous,
Une petite vidéo vite fait de l'avancement des travaux ! Je prendrai le temps de faire quelques chose de mieux plus tard et dans le bon sens !
Bonne soirée à tous

 
J

jujujuju2004

Apprenti
Bonjour à tous,
Nous venons de finir le réglé avec le codeur incrémental, l'arduino dans sa boîte, mais, il y a un problème : le codeur saute des pas quand il est en mouvement, résultat, la valeur (en mm) affiché n'est pas bonne. Est-il possible de baisser la résolution ou faut-il changer le codeur ? (L'arduino n'est pas un officiel mais normalement cela ne change rien ?)
Une vidéo sur Youtube est en train de s'uploader.
Jules, fiston de dubois !
 
J

jpbbricole

Compagnon
BonsoirJules, fiston de dubois

Pourrais-tu mettre le programme sur le forum.

Cordialement
jpbbricole
 
J

jujujuju2004

Apprenti
Bonjour Jpbbricole,

Voici le fichier ci joint. Je me posais juste une question, dans le code, sur le setup, tu as mit une valeur "nombre de pas par tour" qui est actuellement à 2400, alors que le codeur est un 600 pas par tour, est-ce normal ?

J'ai aussi tésté la solution de la librairie "digitalWriteFast" mais je ne sais pas si il y a juste besoin de la mettre dans le programme ou si il faut modifier des trucs dans le code, quelqu'un pourrait m'éclairer si cela est une solution possible ?

Jules
 

Fichiers joints

  • USIN_ButeeScieRotEnc.zip
    3 KB · Affichages: 99
J

jpbbricole

Compagnon
Bonjour jujujuju2004



Je me posais juste une question, dans le code, sur le setup, tu as mit une valeur "nombre de pas par tour" qui est actuellement à 2400, alors que le codeur est un 600 pas par tour, est-ce normal ?

Oui, ce codeur a bien 600 impulsions par tour pour A et pour B
1546067645108.png

La programmation de lecture

attachInterrupt(digitalPinToInterrupt(rotencApin), rotencAchangeHandling, CHANGE);

Réagit sur l’événement CHANGE, c'est-à-dire sur flanc montant et flanc descendant, cela veut dire que pour chaque impulsion on a 2 événements donc 2*2 = 4..

Dans le courant de la journée, je vais tester cette nouvelle bibliothèque, mais, avec le programme actuel, j’ai fait des essais de vitesse, sans problème.

Je pense qu’il y a des perturbations dans l’environnement et que les résistances PULL_UP internes de l’Arduino sur les entrées A et B ne sont pas suffisantes, donc je te propose d’ajouter 2 résistances de polarisation, sur les entrées A et B comme sur ce schéma.

1546067719385.png


A ta disposition
Cordialement
jpbbricole
 
J

jpbbricole

Compagnon
Bonjour
il y a des solutions logicielles avant de changer le codeur
Un GRAND MERCI, je connaissait pas, le résultat est flagrant:

digitalRead 1000 x
3592 uSec.

digitalReadFast 1000 x
348 uSec.

Je vais mettre cette bibliothèque partout où j'ai un encodeur.

@jujujuju2004 , je te mets la version (V 0.1B) avec la bibliothèque digitalWriteFast.h.
Il faut faire la modification du post #105.

Cordialement
jpbbricole
 

Fichiers joints

  • USIN_ButeeScieRotEncB.zip
    6.4 KB · Affichages: 97
J

jujujuju2004

Apprenti
Bonjour jpbjpbbricole,

Merci beaucoup pour ton aide précieuse, je testerais avec le code qui contient la librairie DigitalReadFast, en te tenant au courant. Je pense plus que ce soit la perturbation je tenterais aussi avec les résistances de polarisation.

Merci, Jules
 
J

jujujuju2004

Apprenti
Petit retour, après avoir monté les 2 résistances, cela augmente grandement la précision, moins de pas sont perdus. Le seul problème est que je n'avais pas de résistance de 2,2k, j'en ai mit une 2k, est-ce que cela pose un problème ? Y aurait-il plus de précision avec une 2,2k ?

Et aussi, y aurait-il possibilité de mesurer que dans le front montant si cela a une plus grande précision ? Si ça ne change rien ça ne sert à rien, surtout si c'est pour changer un gros morceau du code.

Merci, Jules
 
C

cr-_-

Compagnon
Bonjour,

@jpbbricole heureux d'avoir pu aider, j'ai passé pas mal de temps à me battre avec les vitesses d'IO, et cette librairie à participé à une partie de la solution

Pour les résistances 2K c'est bon, si il y a encore des perturbations tu peux même probablement descendre à 1k (il faut juste vérifier le courant que peut sortir le codeur)

si tu compte que sur le front A tu perds en précision, en passant de 2400 impulsions par tour à 600 mais en devant quand même regarder le signal B pour savoir dans quel sens tu dois compter. En résumé côté logiciel j'estime à environ 2µseconde de gain par économie de comptage donc 6µs au total ce qui est négligeable devant les digitalReadFast

Pour optimiser encore il vaut mieux utiliser les fonctions de bas niveau du style if (PORTB & _BV(PIN3) { ... } c'est beaucoup moins flexible mais ça ne prends que quelques instructions
 
J

jujujuju2004

Apprenti
Merci à toi aussi cr-_-, je vais tester aussi avec le code digitalReadFast (que je n'ai pas encore mit sur la carte, c'est encore le code de base), pour le code si cela fonctionne comme ça je ne vais pas toucher à cette partie du montage, merci pour votre soutient

Jules
 
J

jpbbricole

Compagnon
Y aurait-il plus de précision avec une 2,2k ?
Ce n'est pas un problème de précision qui est réglé par des résistances plus ou moins grandes (elle dépend de l'encodeur et de la mécanique), c'est l’influence que peut avoir l'environnement spécialement électrique comme des moteurs, néons etc sur la qualité du signal issu de l'encodeur. En baissant la valeur des résistances on diminue l'influence de ces perturbations. Comme indiqué par @cr, on peut descendre jusqu'à concurrence de ce qu'accepte l'étage de sortie de l'encodeur. Au départ j' n'en avais pas mis parce que, dans la programmation avec pinMode(pinEntree, INPUT_PULLUP), on mets une résistance d'entrée interne au proc de l'Arduino qui est entre 20 et 50k. ce qui est un peu élevé pour un milieu perturbé.
S'il y a toujours ce genre de problème, la prochaine étape est de mettre, à l'encodeur, un câble blindé dont le blindage serait connecté côté Arduino.

Cordialement
jpbbricole
 
J

jujujuju2004

Apprenti
Ok, pour l'instant la précision à l'air d'être plus présente, mais sur l'encodeur il y a déjà un câble de blindage, il faudrait peut-être que je le connecte à l'arduino ? Mais où ?

Jules
 
J

jujujuju2004

Apprenti
Ok, merci beaucoup a toi jpbbricole, je testerais demain

Bonne soirée, Jules
 
J

jujujuju2004

Apprenti
Bonjour tout le monde,

Je viens juste de souder le fil de blindage sur le ground, mais rien n'y fait, même en allant doucement, quand le codeur revient à sa position 0 on pert environ 15 pas, si l'on refait un deuxième aller retour, encore plus de pas son perdu. Ce n'est pas assez précis pour l'utilisation donnée.

Jules
 
J

jpbbricole

Compagnon
Bonsoir jules
QUOTE="jujujuju2004, post: 1397841, member: 43271"]Ce n'est pas assez précis pour l'utilisation donnée.[/QUOTE]

Je te prépare une autre version pour demain matin.

Bonne soirée
jpbbricole
 
J

jujujuju2004

Apprenti
Bonsoir,

Merci pour ton aide mais pas besoin de se presser, tu as le temps, merci beaucoup quand même.

Jules
 
W

wika58

Compagnon
...Je te prépare une autre version pour demain matin.
Aah ce jpb, tjrs aussi serviable...
Quel plaisir de t'avoir avec nous dans cette section.
Et merci aux autres contributeurs aussi bien sûr.

Longue vie à la section Arduino sur notre forum :tumbsupe:
 
J

jpbbricole

Compagnon
Salut Pat
wika58 post: 1398136 a dit:
Quel plaisir de t'avoir avec nous dans cette section.
Plaisir tout à fait partagé ,:-D:-D:-D

Et pour terminer l'année, une nouvelle version C dont le codeur est géré par une librairie au lieu d'une gestion "à la main".
Le zip contient le sketch ainsi que la bibliothèque.

Je vous souhaite, à tous, un SUPERBE passage vers cette nouvelle année. Surtout ne soyez pas trop sages :partyman:

A 2019!
jpbbricole
 

Fichiers joints

  • USIN_ButeeScieRotEncC.zip
    18.5 KB · Affichages: 111
J

jujujuju2004

Apprenti
Bonjour jpbbricole,

Merci pour cette nouvelle version que je vais m'empresser de tester, je vous souhaite à tous aussi un superbe passage à cet nouvelle année, et encore merci à toi jpbbricole.

Jules
 

Sujets similaires

F
Réponses
6
Affichages
25 646
fraiddy
F
lion10
Réponses
35
Affichages
35 639
lion10
lion10
M
Réponses
15
Affichages
22 460
FTX
grouch
Réponses
5
Affichages
2 553
grouch
grouch
M
Réponses
185
Affichages
24 803
wika58
W
N
Réponses
62
Affichages
10 444
Yakov TOPRAK
Y
Haut