Auteur Sujet: Roue codeuse pour mon pont tournant  (Lu 18456 fois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Roue codeuse pour mon pont tournant
« le: avril 25, 2020, 12:04:30 pm »
Bonjour,

Les infos de départ sont ici : http://modelleisenbahn.triskell.org/spip.php?article79

Il m'est venu l'idée de faire la roue codeuse en utilisant la technologie des PCB. Les zones blanches sont remplacées par des facettes métallisées, les zone noires sont noires car on peut choisir un PCB noir (même noir mat chez Seeed mais ils demandent un peu cher). Ça permet aussi d'avoir des perçage précis pour monter le moyeu.

Ça n'a pas de rapport direct avec l'Arduino mais comme ça touche la fabrication de PCB, j'ai pensé que ça pouvait intéresser du monde.

Dessiner la roue à la main dans un éditeur de PCB est une opération permettant d'aller pointer assez rapidement à l'asile le plus proche. J'ai donc écrit un programme en C/C++ qui engendre directement des fichiers au format Gerber et un fichier au format Excellon pour les perçages. Le programme a été écrit rapidement mais comprendre pourquoi les fichiers n'étaient pas visualisés chez JLCPCB a été une autre paire de manche. Bref après deux soirées passées dessus, ça fonctionne. Du moins autant qu'on peut en juger sans commander les cartes.

Ça m'a permis d'apprendre un peu plus en détails comment étaient fichus ces fichiers et plonger dans des langages des années 80 conçus par des mécaniciens, ça pique un peu, voire beaucoup  :-\ ::)

Donc le programme compile sous Unix (Linux je pense, Mac OS X sûr) et se lance bien évidemment en ligne de commande.

Pour le compiler :

g++ -o coding-wheel coding-wheel-pcb.cpp

Il y a une aide minimaliste que l'on obtient en le lançant sans argument :


Eridani-5721:coding-wheel jlb$ ./coding-wheel
Usage: coding-wheel <name> <inner radius> <radius step> <number of values> <gap> [r/g/gr]
  <name>:             name of the destination directory and of the files.
  <inner radius>:     the radius to the center of the inner facet.
  <radius step>:      distance between two facets centers on the same radius.
  <number of values>: number of coded values.
  <gap>:              distance between 2 adjacent facets borders.
  [r/g/gr]:           optional argument. Without any the coding wheel
                      uses a binary coding with inner low order bit.
                      r:  binary coding with outer low order bit.
                      g:  Gray coding with inner low order bit.
                      gr: Gray coding with outer low order bit.

En pièce jointe une roue capturée sur la visionneuse de JLCPCB, générée avec :

Eridani-5721:coding-wheel jlb$ ./coding-wheel roue 35.5 4.5 100 .2 gr
Center coordinates (mm): (65.75, 65.75)
Diameter: 131.50 mm
Gray coding, outer low order bit

Ça peut peut-être servir à quelqu'un :)
« Modifié: avril 25, 2020, 12:10:53 pm par Jean-Luc »
Cordialement

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 809
    • Voir le profil
Re : Roue codeuse pour mon pont tournant
« Réponse #1 le: avril 25, 2020, 05:46:11 pm »
Je n'en ai pas l'usage, mais je trouve ça magnifique. Quel boulot pour en arriver là...

Pyk35

  • Full Member
  • ***
  • Messages: 110
    • Voir le profil
Re : Roue codeuse pour mon pont tournant
« Réponse #2 le: avril 25, 2020, 09:10:08 pm »
Je trouve ça vraiment excellent, chapeau!
Par contre je n’ai pas compris l’usage final, c’est pour détecter la position précise de ton pont? la combinaison des pistes te permet d’avoir une valeur absolue de la position au lieu d’une position relative ?
Comment détecteras tu la position, sur le cuivre par contact à la façon d’un joint tournant? En optique avec une led IR?

Encore bravo,
A+
Cédric

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Roue codeuse pour mon pont tournant
« Réponse #3 le: avril 25, 2020, 10:17:48 pm »
Merci :)

@Pyk35 : C'est effectivement pour avoir la position absolue du pont. Quand on met sous tension un moteur pas à pas, la combinaison d'entrées que l'on va mettre va définir le home state. Les 3 autres combinaisons appliquées successivement font avancer le moteur.

Donc 1 home state tous les 4 pas.

Donc un moteur à 200 pas par tours a 50 home states et un à 400 pas, 100 home states. C'est ce que je veux détecter, le numéro du home state à l'allumage.

J'utilise un moteur pas à pas de 400 pas par tour en direct, sans réduction, avec un driver qui fait du micro-stepping (et qui a aussi un home state bien sûr) : 32 µPas par pas, soit 12800 µPas par tour. Sur un pont tournant en N, ça donne une précision de  2 * PI * 75mm / 12800 = 0,18mm. Mais je regarde aussi un autre driver de ST Micro, le STSPIN820, dont Pololu fait une break out board et qui monte 256 µPas par pas.

C'est effectivement avec un capteur IR par réflexion, les zones étamées du PCB servent de miroir. J'ai fait des essais avec le OMRON EE-SY193 mais ce capteur a un défaut : son optimum de distance est de 0,75mm et son épaisseur est de 0,95mm. Il n'est non plus facile à souder en amateur. Il faut donc que la roue soit, optimalement, à 1,7mm du PCB où sont soudés les capteur :



Or le moteur pas à pas est fixé à ce même PCB via des vis. Mais les vis à tête cylindrique ont une tête dont l'épaisseur est supérieure à 2mm  :-\

J'ai donc fraisé la carte mais je n'ai pas de fraiseuse et les précision est pas top. Du coup quand je visse le moteur, comme mes fraisages ne sont pas exactement centrés, les vis ne sont pas parfaitement alignées avec les trous de fixation du moteur et la carte est déformée   :'(

Donc j'ai trouvé ce capteur SHARP :



Il fait 2mm de haut et a une distance optimum de 3mm, ce qui laisse une place confortable pour les têtes de vis.
« Modifié: avril 25, 2020, 10:23:09 pm par Jean-Luc »
Cordialement

Pyk35

  • Full Member
  • ***
  • Messages: 110
    • Voir le profil
Re : Roue codeuse pour mon pont tournant
« Réponse #4 le: avril 25, 2020, 11:04:13 pm »
Épatant tout ça!
Par contre, quel codage utilises-tu ? Combien de données tu arrives à dénombrer avec ce codage (2^7=128?). Je suis épaté par cette roue, comment as-tu « pensé » sa conception pour ne pas qu’un point soit en doublon par exemple?
C’est simplement un codage binaire entre 0 et 127?

As-tu prévu de vernir le pcb pour éviter que la réflexion soit affaiblie dans le temps? Il y a toujours la finition « or » qui te protégera dans le temps.

A+
Cédric

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Roue codeuse pour mon pont tournant
« Réponse #5 le: avril 25, 2020, 11:22:21 pm »
Mon proto est en binaire, noir = 1, blanc = 0. Idem pour la version PCB : noir = 1, métallisation = 0

Celle qui est au dessus en version PCB est en code Gray (binaire réfléchi). Du coup ça garantit qu'il n'y a pas de doublons.

J'ai effectivement 7 capteurs mais je vais de 0 à 99. La limite technique est la taille de la facette le plus vers le centre. Là elle fait 2mm de large.

Je n'ai pas prévu de vernir le PCB. J'ai des cartes inemployées car surnuméraires depuis 6 ou 7 ans et le brillant est toujours parfait. Au pire si j'ai des soucis, je démonte et hop, un coup de polish :-) La finition or sera également moins réfléchissante.
Cordialement

Pyk35

  • Full Member
  • ***
  • Messages: 110
    • Voir le profil
Re : Roue codeuse pour mon pont tournant
« Réponse #6 le: avril 26, 2020, 12:18:45 am »
Oui le Gray te garantit de n’avoir qu’un bit qui change à la fois.

Donc encore bravo et merci pour toutes tes explications !
A+
Cédric