Programmation Flowcode - Codeur incrémental
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

Programmation Flowcode - Codeur incrémental



  1. #1
    P4ul0

    Programmation Flowcode - Codeur incrémental


    ------

    Bonjour à tous,

    Je suis actuellement en Terminale S option SI (sciences de l'ingénieur) et j'aurais besoin d'un peu d'aide pour mon projet de fin d'année, que j'espère trouver ici
    Mon but est de créer un programme sous Flowcode qui fera traiter à mon pic (16F877A) les impulsions de deux codeurs incrémentaux.
    Jusqu'à maintenant j'ai réussi à bidouiller un programme qui détecte et compte les fronts montants sur le port RB0 (simulés avec un interrupteur) grâce à des interruptions.
    Mais mon problème est ici : le programme ne détecte qu'un front montant sur 3 environ ! Je pense qu'il doit y avoir une histoire de fréquence là dedans mais je vois pas comment résoudre ça pour que mon programme traite chaque front montant (sans en zapper un ou deux).
    J'aimerais aussi un peu d'aide pour savoir comment traiter simultanément 2 signaux...

    Voilà, en espérant que quelqu'un puisse m'aider !

    -----

  2. #2
    DAUDET78

    Re : Programmation Flowcode - Codeur incrémental

    J'aime pas le Grec

  3. #3
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    Bonsoir,

    Deux codeurs...
    En général, un codeur à au moins deux sorties.
    Tu ne parles que de RB0

    Peux-tu préciser où tu branches tes codeurs svp

    A quelle vitesse évoluent les informations issues de tes codeurs

  4. #4
    P4ul0

    Re : Programmation Flowcode - Codeur incrémental

    Bonsoir,

    Tout d'abord merci pour vos réponses !

    Je n'utilise que le signal A de chaque codeur pour l'instant afin de ne pas trop me compliquer la tâche, je suis débutant en électronique...
    J'utiliserais peut-être les deux autres signaux par la suite mais le sens de rotation ne m'est pas trop utile (signal B). Le signal Z pourrait me l'être en revanche, vu que je souhaite coder une position.

    Pour l'instant ce n'est qu'un programme de test, je souhaiterais bien comprendre le fonctionnement avant la mise en oeuvre ^^.
    Je prévois de les brancher sur le port B de mon PIC (le traitement d'interruptions n'est possible qu'ici, non ?).
    Mes codeurs auront une vitesse de 100tr/min environ.

  5. A voir en vidéo sur Futura
  6. #5
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    Le problème avec les interruptions va venir avec le second codeur.

    Avec un seul rien de plus simple :
    Tu actives l'interruption sur front montant de la broche d'interruption
    tu édites la macro d'interruption dans laquelle tu fais : variable = variable +1 et c'est tout

  7. #6
    P4ul0

    Re : Programmation Flowcode - Codeur incrémental

    Oui, le problème est qu'un front montant sur trois environ est pris en compte...
    Comment pourrais-je faire pour mettre mes deux codeurs ?

  8. #7
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    Une chose à la fois...
    Peux tu me faire une photo d'écran de ton programme SVP

  9. #8
    P4ul0

    Re : Programmation Flowcode - Codeur incrémental

    J'ai fait un programme de façon à ce qu'une led s'allume et éteigne un moteur pas à pas lorsque le nombre de fronts montants = 2.
    partie 1.PNG
    partie 2.PNG
    partie 3.PNG

  10. #9
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    Tu peux préciser ce que tu veux faire exactement...
    Commander un moteur pas à pas ou lire un codeur incrémental ?

  11. #10
    P4ul0

    Re : Programmation Flowcode - Codeur incrémental

    Le but de mon projet est de lire deux codeurs incrémentaux afin de mesurer le déplacement d'un robot, équipé de deux moteurs à courant continu.
    Le moteur pas à pas est juste là comme exemple, la partie contrôle des moteurs est déjà terminée.
    En gros il me manque la partie odométrique, pour pouvoir effectuer un déplacement sur une distance précise

  12. #11
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    Pour commencer, tu vas essayer un codeur comme ceci

    Attention le PIC fonctionne très vite, il est capable d'appréhender des changements d'état de l'ordre la µs. C'est quoi ton codeur ? Un simple interrupteur ou un ILS tu n'aurais pas des rebonds ?

    Nom : Image1.png
Affichages : 283
Taille : 5,2 Ko

  13. #12
    P4ul0

    Re : Programmation Flowcode - Codeur incrémental

    Un ILS ?
    Pour l'instant je simule un signal sur RB0 avec un interrupteur, oui... Est-ce que le fait que je ne détecte pas tout les fronts montant peut être dû à cela ?
    Mais par la suite j'envisage de mettre le signal A de mon codeur sur cette broche là (c'est un NEMICON 1024 pts, sa fréquence max est de 150kHz, je n'irais jamais jusque là ^^).
    Merci pour votre aide en tout cas

  14. #13
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    Pour deux interruptions tu peux mettre ou porte OU à la sortie de tes deux codeurs et brancher la sortie sur INT
    ensuite dans la macro d'interruption tu distingues qui à activé l'interruption

    Je te laisse pour ce soir, bon courage.

    Nom : Image4.png
Affichages : 282
Taille : 8,4 Ko

  15. #14
    DAUDET78

    Re : Programmation Flowcode - Codeur incrémental

    Citation Envoyé par cubitus_54 Voir le message
    Pour deux interruptions tu peux mettre ou porte OU ......
    Vous êtes en train de réinventer la poudre pour faire un truc qui ne marche pas !

    Il faut échantillonner (voir mon Tuto) les deux sorties du codeur avec un timer . Et faire une machine d'état . Et alors, peut importe les rebondissements, les changements de sens, C'est le soft qui s'occupe de gérer.

    Si il y a deux codeurs, ..... Il faut échantillonner (voir mon Tuto) les quatre sorties des deux codeurs avec un timer . Et faire une machine d'état .

    Je n'explique pas pour trois codeurs ......
    J'aime pas le Grec

  16. #15
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    P4ul0,

    L'acquisition du comptage de front montant fonctionne très bien, comme tu peux le voir la structure est très simple.

    interruption.png

    J'ai fait l'essai avec deux interruptions, une pour le codeur la seconde pour le temps, toutes les secondes l'afficheur affiche le nombre d'impulsions comptées (avec un petit calcul simple, tu peux même afficher la distance et la vitesse.

    inter2.png

    Au faite.... pourquoi deux codeurs ? Tu cherches à mesurer la distance parcourue par ton robot... à mon avis, un seul codeur peut suffire.

  17. #16
    P4ul0

    Re : Programmation Flowcode - Codeur incrémental

    Bonjour,

    Daudet78 : Faire une machine d'état ? Je suis débutant en programmation (et en électronique en général...).

    cubitus_54 : Est-ce que votre programme prend en compte chaque appui sur le bouton ?
    Pourquoi l'interruption de temps = 125 équivaut à 1 seconde ? On prend la vitesse d'éxécution du PIC avec un certain taux de division ? La broche TMR2 délivre un front montant avec quelle fréquence ?
    J'aimerais avoir un codeur pour chaque roue de mon robot (deux) pour pouvoir faire des manœuvres simplement (par exemple pour tourner à 90° droite : Alimenter moteur gauche dans sens trigonométrique pendant X temps qui correspond à Y implusions et Z centimètres). J'ai une contrainte qui m'est imposée, le robot doit suivre un parcours précis...

    Encore merci pour votre aide, qui m'est précieuse.

  18. #17
    DAUDET78

    Re : Programmation Flowcode - Codeur incrémental

    Citation Envoyé par P4ul0 Voir le message
    Faire une machine d'état ? Je suis débutant en programmation (et en électronique en général...).
    C'est, je pense, bien expliqué dans mon tuto et c'est une méthode classique de programmation (depuis les FPGAs, en passant par les automates ou autres)
    J'aime pas le Grec

  19. #18
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    cubitus_54 : Est-ce que votre programme prend en compte chaque appui sur le bouton ?
    Bien évidement ! il fonctionne nickel

    Pourquoi l'interruption de temps = 125 équivaut à 1 seconde ? On prend la vitesse d'exécution du PIC avec un certain taux de division ? La broche TMR2 délivre un front montant avec quelle fréquence ?
    C'est à adapter en fonction de la configuration de ton PIC,
    Sur mon exemple j'ai utilisé un autre PIC 16F1847 qui fonctionne à 32MHz
    J'ai configuré le timer2 avec un prédiviseur de 16 suivis d'un diviseur par 16 et une valeur de division de 250 (préscaler, postscaler, rollover) ce qui donne 125 interruptions par secondes. (32M /4 /16 /16 /250 = 125Hz)

    OK je vois un peu mieux le projet.
    Je te conseille de réaliser ton circuit sous Proteus si tu l'as.

    Il te reste plus qu'à expérimenter et étendre l'interruption pour les deux codeurs

  20. #19
    P4ul0

    Re : Programmation Flowcode - Codeur incrémental

    Merci pour les programmes Je les ai testés :
    Le premier programme me compte plus d'interruptions que le nombre de fois sur lequel j'appuie sur le bouton (les rebonds ?).
    Sur le deuxième, je n'arrive pas à reproduire la boucle à la fin, enfin surtout ce qu'il y a à l'intérieur...
    image 4 - Copie.png

    Je n'ai malheureusement pas Proteus... Je pense que je vais faire tout ça sur papier ^^

    Je n'ai pas vraiment compris comment différencier les deux signaux A sur une même broche, avec une simple porte OU, dans la macro d'interruption ?
    image 2 - Copie.png
    A quoi correspond exactement la variable "codeur" ?

  21. #20
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    Le programme dans la boucle c'est le programme de pilotage de ton robot, ici je l'ai laissé vide bien évidemment

    Tu as une entrée d’interruption donc le OU permet de générer une interruption pour l'un ou l'autre des codeurs.
    Une fois l'interruption activée tu vas "voir" qui l'a activé...
    Tu pourrais aussi utiliser l'interruption "PORT" ce qui est dommage sur ton PIC c'est que l'interruption PORT n'est pas trop sophistiqué, sur certain pic tu peux gérer les entrées à activer ou non et le type de détection que tu veux.

    Je te laisse un peu chercher et essayer

    Nom : Image7.png
Affichages : 267
Taille : 8,6 Ko

  22. #21
    P4ul0

    Re : Programmation Flowcode - Codeur incrémental

    Merci beaucoup pour votre aide, je comprend mieux maintenant !

    Un problème persiste, impossible d'afficher le nombre de fronts montants (toujours simulés avec un interrupteur sur RB0) avec ce programme :
    Nom : image 5.jpg
Affichages : 241
Taille : 199,9 Ko

    Oui, je pense qu'il est temps que je mette tout ça en forme maintenant, et que je teste tout ça en grandeur nature à la rentrée (aucun moyen de simuler chez moi, les pièces sont au lycée...).

  23. #22
    cubitus_54

    Re : Programmation Flowcode - Codeur incrémental

    Attention,

    L'autorisation des interruptions n'est à faire qu'une fois, ne pas les mettre dans une boucle infinie.

    En simulation c'est un peu long, la seconde est plutôt de l’ordre de 10 à 20 secondes (cela doit aussi dépendre de ton PC)
    Mais ça fonctionne bien.

Discussions similaires

  1. tester un codeur incremental
    Par invite29b1ef79 dans le forum Électronique
    Réponses: 28
    Dernier message: 18/12/2013, 20h14
  2. Codeur incrémental
    Par invitee0ba7c35 dans le forum Électronique
    Réponses: 9
    Dernier message: 16/12/2011, 13h30
  3. Codeur Incrémental
    Par invite4e24a71d dans le forum Électronique
    Réponses: 16
    Dernier message: 27/10/2010, 20h21
  4. Codeur incrémental?
    Par inviteed63aef3 dans le forum Électronique
    Réponses: 1
    Dernier message: 20/04/2007, 20h51
  5. Codeur Incremental
    Par invitef341dab1 dans le forum Électronique
    Réponses: 4
    Dernier message: 26/02/2006, 12h55
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...