C/C Pédale de soudage v2

  • Auteur de la discussion vibram
  • Date de début
V
vibram
Compagnon
15 Mar 2014
3 976
FR-74
  • Auteur de la discussion
  • #1
Salut à tous,

Je me permets de lancer un nouveau sujet car le projet est légèrement différent.
Maintenant que j'ai la première version de ma pédale complètement fonctionnelle (encore merci à tous pour votre aide), voici les améliorations apportées pour la V2:

Comme suggéré par phil135, je vais essayé de faire un circuit ouvert.
Cela permettra entre autre de ne pas avoir de valeur complètement loufoque en cas de problème.
Voici donc les différents éléments:

Ecran LCD de 20x4 sur lequel je commence par choisir l'ampérage minimum, l'ampérage maximum et l'erreur possible entre l'ampérage théorique et l'ampérage réel. (j'ai décidé d'utiliser des encodeurs rotatifs, c'est un test ! et j'ai poussé le vice en me servant des attachinterrupt, on verra ce que ça donne lors des premiers tests).
Il y aura un capteur a effet hall chargé de mesurer l'ampérage lors du soudage (il sera vraisemblablement relié à la prise terre par simplicité, c'est ce que j'ai retenu grâce à la loi des circuits. Là encore, à vérifier).
Enfin, lors du soudage, la pédale activera un potentiomètre. la fonction map me permettra de calculer la valeur théorique du courant et ainsi la comparer à la valeur réelle.
Pour faire cela je me sers d'un arduino mega comme j'ai 6 pins pour le attachinterrupt et suffisamment de gpio pour le LCD et les connexions avec le poste.
J'ai pondu une première version du code qui compile.
maintenant j'attends tous les éléments afin de réaliser les premiers tests (pas directement sur le TIG bien sur).

Comme d'habitude, je suis ouvert à toute remarque, je me sers de ce projet pour apprendre les bases :wink:

 
Dernière édition:
V
vibram
Compagnon
15 Mar 2014
3 976
FR-74
  • Auteur de la discussion
  • #2
Salut,

J'ai besoin d'un coup de main car je bloque !
Les encodeurs rtatifs se revelent etre une vraie plaie mais j'aimerais quand meme les utiliser dans mon projets.
J'utilise des encodeurs ALPS EC12E...

Les seuls exemples qui fonctionennt utilises forcement un bout de code hexadecimal ou binaire, chose que je ne maitrise absolument pas et les traducteurs en ligne ne m'aident pas suffisament.

Voici donc un sketch qui fonctionne sous un arduino UNO:


Ce sketch est tiré d'ici:
http://www.instructables.com/id/Improved-Arduino-Rotary-Encoder-Reading/

J'ai testé ce code, cela fonctionne.
On voit qu'il fait appel aux GPIO PIND puis un mysterieux bout de code.
La ligne suivante est également un mysterieux code que je ne comprends malheureusement pas.


Maintenant je dois utiliser 3 encodeurs.
J'ai donc un arduino mega affin de pouvoir faire tourner tous mes attachinterrupt.
Donc la premiere difficulté, cest que la manipulation des ports est différente, CF ce tableau:
http://spreadsheets.google.com/pub?key=rtHw_R6eVL140KS9_G8GPkA&gid=0

J'ai donc modifié le code en ajoutant pas mal de variables mais toujours basé sur l'exemple ci dessus
A noter que les 6 pins compatibles avec l'interrupt sont le 2,3,18,19,20 & 21

Naivement, en me basant sur la spreadsheet google, j'ai remplacé D par E etc avant que ca colle a mes numeros de pin maisbien sur cela ne fonctionne pas car le bout de code hexadecimal et binaire ne doivent pas être adaptés.

J'aimerais donc si possible que l'on m'explique ces bouts de code que je ne comprends pas et éventuellement des pistes pour corrger l'erreur.
Ou alors avez vous une alternative ?
Je pense qu'on doit pouvoir s'en sortir avec un digitalread mais comme je ne comrends pas la condition dans le if avec le masque, je suis completement bloqué.
En esperant que la nuit me porte conseil...

merci à vous!
 
S
speedjf37
Compagnon
15 Oct 2009
2 182
indre et loire
Bonjour,

Il faut adapter le code aux bits utilisée en particulier les masques.
J'ai juste adapté les lignes qui changent par rapport aux pin utilisées

https://www.arduino.cc/en/Hacking/PinMapping2560

#define GapPinA 2 //PE4
#define GapPinB 3 //PE5
reading = PINE & 0x30; //B00110000
if (reading == B00110000 && xx_Flag)

else if (reading == B00010000) xx_bFlag = 1; //signal that we're expecting pinB to signal the transition to detent from free rotation

else if (reading == B00100000) xx_aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation

// INVERSER les pin pour garder l'ordre des masques
#define AmpMinPinB 18 //PD3
#define AmpMinPinA 19 //PD2
reading = PIND & 0x0C; //B00001100
if (reading == B00001100 && xx_Flag)

else if (reading == B00000100) xx_bFlag = 1; //signal that we're expecting pinB to signal the transition to detent from free rotation

else if (reading == B00001000) xx_aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation

// INVERSER les pin pour garder l'ordre des masques
#define AmpMaxPinA 20 //PD1
#define AmpMaxPinB 21 //PD0
reading = PIND & 0x03;//B00000011
if (reading == B00000011 && xx_Flag)

else if (reading == B00000001) xx_bFlag = 1; //signal that we're expecting pinB to signal the transition to detent from free rotation

else if (reading == B00000010) xx_aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation

Cordialement JF
 
V
vibram
Compagnon
15 Mar 2014
3 976
FR-74
  • Auteur de la discussion
  • #4
Merci speedjf37,

Je vais essayé de comprendre et d'interpreter ca à tête reposée cet aprem !
je me doutais qu'il fallait adapter, mais c'est la manière utilisée que je ne connais pas.
J'ai regardé les bases du binaire ce matin, je vais voir si j'arrive à retrouver mes petits comme on dit
 
V
vibram
Compagnon
15 Mar 2014
3 976
FR-74
  • Auteur de la discussion
  • #5
Pourrais-tu expliquer comment tu arrives à "0x30", "0x0C", "0x03", j'ai beau essayé de regarder avec des convertisseur, je ne comprends pas la logique.
Enfin c'est l'ensemble des masques que je ne maitrise pas en réalité.

merci :wink:
 
S
speedjf37
Compagnon
15 Oct 2009
2 182
indre et loire
Pourrais-tu expliquer comment tu arrives à "0x30", "0x0C", "0x03", j'ai beau essayé de regarder avec des convertisseur, je ne comprends pas la logique.
Enfin c'est l'ensemble des masques que je ne maitrise pas en réalité.

merci :wink:
J'ai mis en binaire la correspondance avec l’hexadécimal (base 16 -> un caractère 0 à F pour chaque quartet de 4 bits )
en binaire les poids des bits par quartet : 8 4 2 1


#define AmpMaxPinA 20 //PD1
#define AmpMaxPinB 21 //PD0
Port D bit 0 et 1
0x03 = B00000011 soit les bit 0 et 1 poids(2 + 1) = 3

#define AmpMinPinB 18 //PD3
#define AmpMinPinA 19 //PD2
Port D bit 2 et 3
0x0C = B00001100 soit les bit 2 et 3 poids(8 + 4) = 12

#define GapPinA 2 //PE4
#define GapPinB 3 //PE5
Port E bit 4 et 5
0x30 = B00110000 soit les bit 4 et 5 poids(2 + 1) = 3
 
V
vibram
Compagnon
15 Mar 2014
3 976
FR-74
  • Auteur de la discussion
  • #7
Merci bien.
J'ai pas encore assimilé le passage du binaire à l'hexa (mais il existe des traducteur) en revanche jai bien compris les masques pour savoir quoi lire !
tip top merci, je teste le sketch avec les 3 encodeurs ce soir
 
V
vibram
Compagnon
15 Mar 2014
3 976
FR-74
  • Auteur de la discussion
  • #8
mon sujet ne suscite pas les foules mais sait on jamais si un jour cela peut servir tant mieux.
J'ai mis a jour le code:
Tout fonctionne sur un afficheur LCD 20x4:
Reglage de l'amperage minimum, maximum et de la tolérance entre courant réel et théorique, lecture du potentiomètre actionné par la pédale.

Maintenant il me reste à tester le module mesurant le courant mais c'est pas évident car je ne veux pas le faire sur mon TIG directement. Je pense essayé sur une batterie de 12v d'abord mais ce ne sera que pour tester la lecture. Ensuite j'ai la boucle qui selon la valeur réelle +/- la tolérance, va envoyer la commande de correction au TIG. Mais ca je ne pourrai essaye qu'en situation réelle malheureusement
 
Haut