FORUM Syndrome-OC - Jacky-PC


  Electronique


  CNC


  [PROJET] Compteur de pas moteurs pas à pas

 




fran123, fredo428, urss9 Le salon de discussion : Endeavour, 2 utilisateurs anonymes et 18 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PROJET] Compteur de pas moteurs pas à pas

n°80577
mdog
Posté le 06-02-2008 à 21:57:18  profilanswer
 

Bonsoir à tous,
 
Je bosse actuellement sur une fraiseuse numérique qui avance bien (voir mon autre post), et j'ai eu une idée, donc je voudrais votre avis et votre aide.
Je voudrais bien intégrer à ma fraiseuse un écran LCD qui afficherait la position courante sur chacun des axes. J'ai envisagé deux possibilités pour détecter la position et je voudrais savoir quelle est la meilleure d'après vous, dans les deux cas j'utilise un microcontroleur PIC 16F84 ou 16F876.
1 - Brancher en parrallèle sur la sortie "STEP" de ma carte de commande l'entrée du pic, ce qui permet de compter les pas. Est-ce possible sachant que sa va monter à 2000 pas par seconde voir plus? Sinon je pourrait aussi ajouter un diviseur décimal en entrée du pic pour diviser le nombre de signaux par 10. Serais-ce une bonne solution d'après vous ?
2 - Relier à mes axes des encodeurs, comme ceux récupérés dans une souris (pour la molette) par éxemple. Mais là je ne sais pas du tout comment utiliser sa, je sais que c'est de l'infrarouge mais rien d'autre...
 
D'après-vous est-ce réalisable? Habituellement je cadence mes pic à 4Mhz, mais je pense que du 20Mhz va être indispensable non ?
 
Je précise que j'ai choisis de créer un nouveau post car sa peut surement intérésser pas mal de gens, donc autant créer un post rien que pour sa.
 
D'avance merci pour vos idées/suggestions/réactions.
 
@+
Mdog


Message édité par bilbot le 15-02-2008 à 20:17:42
mood
Google
Posté le 06-02-2008 à 21:57:18  profilanswer
 

n°80581
K-micaz
Posté le 06-02-2008 à 23:41:07  profilanswer
 

je pense que la solution la plus simple est la premiere mais je vais pas pouvoir t'aider car j'ai pas encore attaqué les pics en cours (on devrait commencer bientot ...)

n°80582
mdog
Posté le 06-02-2008 à 23:45:31  profilanswer
 

Oui je pense aussi après avoir fait quelques recherches, et en branchant également la sortie DIR pour incrémenter ou décrémenter le compteur. Je pense que je vais utiliser un compteur décimal pour permettre de diminuer le nombres d'impulsions et sa devrait fonctionner...  
 
Si j'y parviens je posterai mes schemas.  
@+
Mdog

n°80583
mdog
Posté le 07-02-2008 à 00:09:22  profilanswer
 

Bon voila où j'en suis de mes réflexions.
 
J'utilise les sortie STEP et DIR de ma carte de commande, la sortie dir me permet de savoir s'il faut incrémenter ou décrémenter la position sur l'axe (ça c'est le boulot du pic). Ensuite j'utilise un 4017 pour diviser les impultions STEP par 10.
 
J'ai des moteurs 200 pas par tours utilisé en demi-pas soit 400 pas par tour, avec des tiges filetées au pas de 1,5mm.
J'ai donc une résolution théorique de 0,00375mm, soit en divisant par 10 0,0375mm de résolution sur l'afficheur ce qui est largement suffisant.
Le problème c'est qu'en utilisant un 4017, lorsque le moteur change de sens je perds des pas, donc la solution sera d'utiliser un compteur/décompteur. Je n'en ai trouvé qu'en binaire, quelqu'un connait-il la ref d'un comteur-décompteur décimal? (ce qui m'arrangerais mais je peux me débrouiller avec un compteur binaire + une porte AND).
 
Après reste la partie prog sur le pic mais je pense pouvoir m'en sortir assez facilement...
 
@+
Mdog.

n°80587
mdog
Posté le 07-02-2008 à 09:15:50  profilanswer
 

Bonjour à tous.
Je pense avoir trouvé la solution pour faire ce que je veux assez facilement.
Tout d'abord comme je l'ai dit, j'utilise un 4510 pour diviser par 10 les impultions STEP qui arrivent au pic. Grace à ce composant qui est un compteur/décompteur BCD je ne perds pas de pas lorsque le moteur change de sens puisque le compteur aussi repart dans l'autre sens. Ce compteur est codé BCD, donc je détecte le 9 binaire grace à une porte AND.
 
Niveau prog sur le pic, je connecte les sorties des compteurs BCD au pin RB4 à RB7 pour utiliser les interruptions. J'active les interruptions sur ces pattes (activée par changement d'état). Lorsque l'interruption est activée, je compage l'état des pates RB4 à RB7 à l'état précédent enregistré (ainsi si deux STEP sont activés en même temp sa marche également), et j'ajuste la valeure de la position sur les axes. Le programme principal ne fait que rafraichir l'affichage sur l'écran.
 
Si vous avez des suggestions où des choses auxquelles je n'aurais pas pensé.
 
@+
Mdog

n°80588
mdog
Posté le 07-02-2008 à 09:30:56  profilanswer
 

Bon alors j'ai besoin d'un pro des pic. Sa m'aiderai bien de pouvoir valider en tant qu'interruption uniquement les front montant sur les pattes RB4 à RB7, or d'après ce que je vois on peux simplement valider le changement d'état, donc front montant OU déscendant... Sa va me faire des lignes de code en plus et je voudrais faire le plus simple possible pour être sur de ne pas sauter de pas... C'est vrai que je vais bosser à 20Mhz mais bon...  
 
Si quelqu'un a une solution ou sais si c'est impossible...
 
@+
Mdog

n°80590
ced-2k
TODO : Insert text here.
Posté le 07-02-2008 à 11:19:45  profilanswer
 

Je ne pense pas que tu puisse faire cela, l'interrupt est lancée à chaque changement d'état.
Mais bon tu n'as qu'a faire un IF ce n'est pas vraiment couteux ;)

n°80591
bilbot
L'Isarien des Flandres
Posté le 07-02-2008 à 12:43:20  profilanswer
 

ya une solution qui est pas mal et pas trop compliqué à mettre en oeuvre et qui devrait t'affranchir de tous les composants externe (porte logique and co) : le CPLD. A l'epoque ou j'etais etudiant, j'avais fait un truc similaire, sauf que je comptais les impulsions en sortie d'un codeur incremental. L'avantage de ce type de composant, c'est que ca peut travailler a très haute fréquence et que les opérations sont déclenchées sur  les fronts montants ou déscendants. Ce que faisait mon composant, c'est qu'il sortait la position du codeur sur 8 bits. Par contre faut avoir des notion de VHDL.


---------------
www.jackypc.com
Be creative with your style !
n°80592
K-micaz
Posté le 07-02-2008 à 13:49:29  profilanswer
 

Ouai le VHDL c'est pas mal dutout, voila un ptit prog d'un compteur/decompteur decimal que je viens de faire mais il a quelques petits soucis ... (bilbot, vu que tu as l'air de connaitre, si tu vois comment on pourrais faire ce prog ...)
 
entity Compt is
  port ( STEP, DIR : in std_logic ;
         Q = buffer integer range 0 to 15;
         SORTIE : out std_logic_vector (3 downto 0);  
         Retenue : out std_logic);  
end;
 
architecture
 
    begin
 
         process (STEP, DIR)
 
           begin
 
             if rising_edge (STEP) and DIR = '1' then Q<=Q+1;
 
             elsif rising_edge (STEP) and DIR = '0' then Q<=Q-1;
 
             elsif Q = 9 then Q<=0 and Retenue<='1';
 
             Sortie <= Q;
             
             endif;
 
         end process;
 
end architecture;
 
Ce programme compte si DIR est a 1 et decompte si DIR est a 0. Mais il ne fait que les unitées (on doit monter plusieurs compteurs en cascade(on peut le faire dans un seul et même composant mais je sais pas comment on le fait ...)) et a une sortie de Retenue pour dire au compteur d'apres qu'il peut s'incrementer et je sais pas comment faire pour dire au second compteur de se desincrementer quand  DIR = 0 ...

n°80598
force-pc
Pas de zap :(
Posté le 07-02-2008 à 21:22:23  profilanswer
 

Salut
pas de probleme pour 2000 pas par seconde
Ca passe en tout cas sans probleme sur un pic 30F


---------------
force-pc ===>> Graveuse numérique 99,9%
n°80599
mdog
Posté le 07-02-2008 à 21:49:47  profilanswer
 

Merci beaucoup pour vos réponses!
 
En ce qui concerne le VHDL je ne connais pas, donc je vais pas me lancer la dedans... J'ai un 16F876 cadencé à 20Mhz, ce sera suffisant. Aujourd'hui je suis allé acheter les composants qu'il me manquait pour ma carte de commande et j'en ai profité pour acheter des 4510 et des portes AND, après quelques tests sa fonctionne sans problèmes. Même si sa peux passer à 2000 pas par secondes je préfere quand même diviser par 10 pour être vrément certain de compter tous les pas, la mise en place du 4510 est vraiment très simple donc... Je me lancerais dans la prog un peu plus tard, j'ai fais sa vite-fait au brouillon, c'est vraiment pas compliqué. Je vais donc faire une carte tout-en-un avec un afficheur pour afficher la position sur chacuns des axes ainsi surement que la tension délivrée par l'alim de puissace (je voulais un volt-mettre à aiguilles mais c'est trop chere à mon gout), et une commande manuelle de la fraiseuse avec le schema que j'ai mis sur mon autre post. La carte viendra se glisser entre la carte de commande et les cartes de puissance.
 
Je posterais des schemas et peut-être des typons lorsque ce sera fini ;)
 
@+
Mdog

n°80601
K-micaz
Posté le 07-02-2008 à 22:40:58  profilanswer
 

[HS on] Force-pc, LE pionnier de la CNC sur le forum [:otakonleboss] , alors ça usine dur ? [HS off]
 
Pour ce qui est du prog, tu pourras le poster car j'aimerais bien essayer de le comprendre ... sur l'ecran il y aurra : X = ***   Y = ***  Z = *** ?

n°80602
force-pc
Pas de zap :(
Posté le 07-02-2008 à 23:22:27  profilanswer
 

ok pour le pic
Pour la cnc je mettrai des photos des pièces réalisées sur le topic ;)


---------------
force-pc ===>> Graveuse numérique 99,9%
n°80603
mdog
Posté le 07-02-2008 à 23:26:29  profilanswer
 

Oui éxactement ;). + la tension délivrée par l'alim de puissance (pont de résistance et exploitation tu convertisseur analogique du pic).
Je peux déjà te faire un topo sur le principe fonctionnel du programme :
1-Déclaration des interuptions sur les pates RB4 à RB7. On apellera les pates RB4 à RB7 STEP pour la suite de l'explication.
2-Lorsqu'un changement d'état est détecté sur l'un des bits step, on lance l'interruption.
3-On compare la valeure de chaque bit step à la valeure relevée précédement pour savoir lequel à été modifié.
4- Lorsqu'un bit step est passé de 0 à 1, on incrémente une variable position correspondante, on enregistre la nouvelle valeure du bit pour la prochaine comparaison.
5-Dans le programme principal, on rafraichit toutes les X ms l'affichage (et on fait l'aquisition de la tension d'alim au passage).
 
Le problème c'est que l'intéruption va également être lancée lorsqu'un bit STEP passe de 1 à 0 et cela ne nous intéresse pas et nous fait perdre du temps, donc j'ai pensé utiliser uniquement les interruptions de la patte INT , car on peux choisir de valider un front montant OU descendant comme source d'interruption, le tout en reliant tous les bit step à cette entrée (avec des diodes bien sur).  
 
Vous en pensez quoi ?
 
Sa permet aussi d'alléger les boucles de conditions puisqu'il n'est plus nécéssaire de tester si le bit est passée de 0 à 1 mais simplement de vérifier s'il à été modifié...
 
Sinon je reviens d'une petite séance de test de mon diviseur à base de 4510 sur le port parallèle, et sa fonctionne impec ;). En plus le cablage du 4510 est très simple.
 
@+
Mdog

n°80604
mdog
Posté le 07-02-2008 à 23:48:14  profilanswer
 

Hum après réfléxion sa ne va pas fonctionner le coup de la patte INT... Mon circuit diviseur ne me sort pas des impulsions, donc si la fraiseuse s'arrète sur le mauvais pas sur un axe, les autres ne seront plus incrémentés. Du coup j'en reviens à la première solution qui me semble la meilleure...
 
Je vais bosser un peu sur le prog.
 
@+
Mdog.

n°80605
mdog
Posté le 08-02-2008 à 00:09:47  profilanswer
 

Voila une première ébauche du programme, je l'ai tapé sur le bloc-note car j'ai pas mon compilateur sur ce PC, donc il y a peut-etre de grosses érreures que je n'ai pas vu... Il reste l'interfaçage avec le LCD mais j'ai déjà les routine il y a plus qu'à les adapter :
 

Code :
  1. //------------Declaration des entrées/sorties et variables--------------
  2. char prec_step_X;  //Valeure précédement stockée du bit STEPX
  3. char prec_step_Y;  //Valeure précédement stockée du bit STEPY
  4. char prec_step_Z;  //Valeure précédement stockée du bit STEPY
  5. char val_X;   //Nombres de pas comptés sur X
  6. char val_Y;   //Nombres de pas comptés sur Y
  7. char val_Z;   //Nombres de pas comptés sur Z
  8. char pos_X;   //Position sur l'axe X
  9. char pos_Y;   //Position sur l'axe Y
  10. char pos_Z;   //Position sur l'axe Z
  11. bit STEP_X @ RB4;
  12. bit STEP_Y @ RB5;
  13. bit STEP_Z @ RB6;
  14. bit DIR_X @ RB0;
  15. bit DIR_Y @ RB1;
  16. bit DIR_Z @ RB2;
  17. //------------------------------Interruption----------------------------
  18. #pragma origin 4
  19. interrupt compteur (void)
  20. {
  21. int_save_registers
  22. if(prec_step_X==0 && STEP_X==1){
  23.  if(DIR_X==0){++val_X;}
  24.  else{val_X=val_X-1;}
  25. }
  26. if(prec_step_Y==0 && STEP_Y==1){
  27.  if(DIR_Y==0){++val_Y;}
  28.  else{val_Y=val_Y-1;}
  29. }
  30. if(prec_step_Z==0 && STEP_Z==1){
  31.  if(DIR_Z==0){++val_Z;}
  32.  else{val_Z=val_Z-1;}
  33. }
  34. RBIF = 0;
  35. int_restor_registers
  36. }
  37. //-------------------------Fonction principale-----------------------------
  38. void main (void)
  39. {
  40. TRISB = 0b0001000;
  41. INTCON = 0b10001000;
  42. pos_x = val_x*0,0375;
  43. pos_Y = val_Y*0,0375;
  44. pos_z = val_Z*0,0375;
  45. //Affichage sur LCD
  46. }


 
N'hésitez pas à me donner votre avis.
@+
Mdog

n°80624
mdog
Posté le 10-02-2008 à 21:34:20  profilanswer
 

Bonsoir à tous.
Tout d'abord le code que j'ai donné est faux je m'en suis rendu compte après-coup, il faut aussi réenregistrer la valeure des entrées RB4-RB6 lorsqu'elle repassent à 0...
Ensuite pour ce qui est de mon montage diviseur à base de 4510 il fonctionne très bien, je posterai des schemas plus tard. J'ai testé le 4510 jusqu'a 5,5Mhz sans problèmes, sa fonctionne parfaitement.  
 
Pour ce qui est de l'affichage sur le LCD (série), j'ai trouvé une bibliotheque très complete, prévue pour 20Mhz en plus donc pas besoin de revoir les delays...
Je vais bosser la dessus dans la semaine et je vous donne des nouvelles bientot.
 
@+
Mdog

n°80635
mdog
Posté le 12-02-2008 à 15:53:39  profilanswer
 

Bonsoir à tous!
Un petit up histoire de dire que ce projet de compteur de pas est en bonne voie puisque j'ai résolus tous les petits problème que j'avais. J'ai testé à l'oscillo mon étage de division et sa fonctionne niquel (division de la fréquence par 10). J'ai fait des schemas, au brouillon pour le moment, j'ai bossé un peu sur la prog...
Quand tout sera terminé je posterai mes schemas et programmes si sa peux intéresser quelqu'un.
 
@+
Mdog

n°80639
mdog
Posté le 13-02-2008 à 11:24:47  profilanswer
 

Bonjour à tous!
J'ai une petite question... Ma carte qui permettra d'afficher la position sur les axes va aussi comporter un contrôle manuel, il faut donc un inter pour basculer entre contrôle manuel et contrôle par l'ordinateur... Pour désactiver le contrôle manuel pas de problèmes, je coupe l'alim sur cette partie du circuit, en revanche je me demande comment désactiver la partie commande par le PC.
J'utilise la carte de commande du site optocoup, je pensais donc me servir du fait qu'elle comporte une entrée pour arrêt d'urgence. Lorsque cette partie du circuit est ouvert, les sortie du conducteur de bus passent à l'état "High Impedance". Premièrement, qu'est-ce-que sa signifie concrètement? Ensuite, lorsque je serais en contrôle manuel, je prend le contrôle des cartes de puissance, mais cela fait que j'ai les signaux TTL qui remontent en même temps jusqu'au conducteur de bus. Est-ce grave si les sorties de ce conducteur sont à l'état "High Impedance"? Je ne risque pas de faire cramer le conducteur (74LS541) ni de laisser remonter les signaux jusqu'au PC ?
 
En gros je voudrais savoir ce qu'il se passe quand on envoi des signaux TTL sur une sortie placée à l'état "High Impedance".
 
Si je n'ai pas été assez clair n'hésitez pas à me le dire, je reformulerai mes questions.
 
@+
Mdog

n°80642
ced-2k
TODO : Insert text here.
Posté le 13-02-2008 à 11:57:33  profilanswer
 

High Impedance c'est justement utilisé pour ce que tu veux faire :)
 
Cela signifie que le composant est "déconnecté" du bus. Physiquement bien sûr il est toujours connecté, mais en High Impedance c'est comme s'il était déconnecté.
 
http://fr.wikipedia.org/wiki/Haute_impedance

n°80646
mdog
Posté le 13-02-2008 à 20:50:24  profilanswer
 

Bonsoir,
Merci pour ta réponse, effectivement en cherchant je me suis dis que j'allais le taper en français et je suis tombé sur la même page que toi, donc c'est niquel pour mon utilisation :)
 
@+
Mdog

n°81231
K-micaz
Posté le 05-05-2008 à 23:08:23  profilanswer
 

petit up pour ce projet interressant :)
 
Alors, ou que s'en en est ?
J'ai commencé la prog sur µC en cours, j'arrive enfin, a comprendre ton programme posté plus haut :D
Vivement la suite !!

n°81232
mdog
Posté le 05-05-2008 à 23:57:05  profilanswer
 

^^. Le projet est terminé puisque la carte est désormais fonctionnelle! J'en ai parlé sur mon topic fraiseuse mais tant qu'à faire je vais le faire ici puisque j'ai créé ce sujet :lol:.
 
Donc pour commencer j'ai laissé tomber l'idée du diviseur de fréquence en entrée sur les entrées Step, car après test c'est inutile (en tout cas aux fréquences que j'ai pu tester, qui sont celles utilisée par nos fraiseuses amateurs).
Ensuite j'ai finalement fait deux écrans sur le programme final, l'un qui affiche les positions, et l'autre qui affiche les 3 températures des L298 ou autres éléments de puissance de l'électronique, grâce à trois sondes LM35 (Elles sont simples d'utilisation et sortent 10mV par degrés, donc simple à interfacer avec un pic grâce aux entrée analogiques).
 
Mes schémas intègreront le buffer pour éviter de multiplier le nombre de cartes, donc en entrée on aura le port parallèle, et puis les sorties vers cartes de puissance, LCD, interrupteurs etc... J'ai déjà fait des schémas qui intègrent les diviseurs de fréquence donc il faudra que je modifie un peu sa.
 
La carte intègre aussi un contrôle manuel de la fraiseuse et permet d'afficher un message lorsque l'on passe en mode manuel ou contrôlé par le PC (pas forcément utile mais je trouvais sa sympa ^^).
 
Tout ça fonctionne très bien ;). Malheureusement pour le moment j'ai pas eu le temps de faire les schémas définitif mais je les donnerais, ainsi que le programme, et je ferais un PCB également si j'ai le temps, ou bien si quelqu'un veux s'en charger dès que j'aurais terminé les schémas pas de problème sa me fera sa en moins...
 
Je ferais un up avec tout ça dès que j'ai le temps, surement début juin lorsque je serais en vacances :D
 
@+
Mdog

mood
Google
Posté le 05-05-2008 à 23:57:05  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Electronique


  CNC


  [PROJET] Compteur de pas moteurs pas à pas

 

Hit Parade