Gestion d'axes avec PIC en C
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Gestion d'axes avec PIC en C



  1. #1
    inviteee2ce2b6

    Question Gestion d'axes avec PIC en C


    ------

    Bonjour à tous,

    Je cherche à commander 6axes d'un bras robot de manière indépendante pour le moment puis de manière synchronisés(suivi de trajectoire, interpolations, etc…) par l'intermédiaire d'un µContrôleur PIC (16F877 ou 18F252).
    Je programme mes PIC sous mikroC et j'utilise une platine de développement EasyPIC5.

    En guise de présentation, j'explique le contexte :
    Pour info, les axes sont les suivants: rotation horizontale, épaule, coude, poignet, rotation axiale pince, ouverture/fermeture pince.

    Des moteurs pas à pas sont utilisés pour mouvoir les axes.
    La commande des moteurs pas à pas est réalisée à base de L297 et L6203 et nécessite les signaux suivants:
    - ToutOuRien CW/CCW (sens de rotation)
    - TOR HALF/FULL (pas complet/demi-pas)
    - TOR ENABLE
    - Entrée CLK (horloge)
    - TOR RESET
    - TOR CONTROL
    De plus, deux sortie HOME (que je n'utiliserais pas) et SYNC(synchronisation des 6 cartes de commande moteurs) sont disponibles

    ENABLE, HALF/FULL et CONTROL seront gérés par une carte de commande (hors PIC) et RESET ne sera pas utilisé

    Les signaux CW/CCW, CLK seront donc les seuls à être générés par le PIC :
    - CW/CCW étant à 0 ou 1 pour le choix du sens de rotation
    - CLK permettant à chaque front montant de faire avancer le moteur d'un pas.

    Ma problématique :
    Je souhaite commander les six carte de commande moteur par l'intermédiaire d'un seul µC PIC. J'ai donc besoin que mon PIC génère les 6 signaux d'horloge indépendamment et à des fréquences données (0 à 1,5KHz environ).

    Pour un seul moteur, ma méthode fonctionne, mais n'est à mon avis pas la plus adaptée : au passage à 1 d'une entrée commandant un sens de rotation, je mets la sortie CW/CCW à la valeur voulue puis je génère mon horloge et faisant passer à 1 puis 0 puis 1... la sortie reliée à l'horloge :
    Code:
    char CW1;
    void main() {
     if button(!CW1 && PORTA,1,1) then CW1=1 //appuis sur bouton
     if button(PORTA,1,1) then CW1=0 //relâchement bouton
     while(CW1) {
      PORTA=0x01;
      Delay_ms(1);
      PORTA=0x00;
      Delay_ms(1)
     }
    }
    le délai de 1ms entre la mise chaque changement d'état de la sortie CLK me permet de générer théoriquement une fréquence de 500Hz.

    Ma problématique est que je ne sais pas comment faire pour générer plusieurs signaux en parallèle, tout en pouvant garantir la fréquence de ces signaux.

    La seule idée dont je dispose est d'utiliser les sorties PWM (que je ne maitrise pas encore), multiplier le nombre de PICs (un pour deux axes ou un par axe) et utiliser un autre PIC pour synchroniser et commander l'ensemble.


    Si vous avez des pistes à me fournir pour:
    - générer mes signaux horloge (à terme, j'aurais besoin de régler ma fréquence pour obtenir une rampe de montée au démarrage, vitesse maxi constante puis rampe de descente avant l'arrêt)
    - générer plusieurs signaux sans que la génération de l'un soit impactée par celle d'un autre
    - me fournir tout conseil pouvant m'aider.

    Merci d'avance à tous,

    Mikaël.

    -----

  2. #2
    sdec25

    Re : Gestion d'axes avec PIC en C

    Salut.
    à des fréquences données (0 à 1,5KHz environ)
    la plage de données est en échelle log ou linéaire ?
    Un signal de fréquence 0 Hz est assez difficile à réaliser

    Le PIC permet à une fréquence de 4 Mhz d'avoir une PWM à 244 Hz.
    Si tu utilises le PIC à une fréquence plus élevée il faudrait un postscaler (un compteur) après la PWM pour avoir des fréquences plus basses.

    Le problème va être de commander 2 cartes en même temps et avec des vitesses différentes.

    Pour des fréquences de quelques KHz c'est plus simple de faire ça en soft.

  3. #3
    inviteee2ce2b6

    Re : Gestion d'axes avec PIC en C

    Bonjour et merci à toi sdec25 pour ta réponse,

    N'y arrivant pas sur ce point, je me suis plus concentré sur la partie mécanique avant de revenir sur la commande...

    Je vais m'orienter vers des solutions soft et utiliser par exemple le PIC pour commander en tension un oscillateur dont la sortie rebouclera par le PIC pour connaitre le nombre de fronts montants générés.

    Citation Envoyé par sdec25 Voir le message
    Pour des fréquences de quelques KHz c'est plus simple de faire ça en soft.
    Sdec25, quelles solutions peuvent s'offrir à moi dans ce cas ?

    La seule solution que j'ai pu trouver est le VCO (Oscillateur commandé en tension), mais je ne trouve pas d'exemple permettant d'obtenir des fréquences inférieures à qqs Mhz.

  4. #4
    inviteee2ce2b6

    Bras Robot YOUPI_Gestion d'axes avec PIC

    Bonjour à tous,

    Après pas mal de temps d'interruption où je me suis occupé d'autre chose (entre autre mon mariage et mon boulot), je reviens à la charge sur le sujet.

    Mon besoin n'a pas changé, j'ai besoin de générer 6 signaux carrés à partir de PIC (directement ou indirectement).

    Je partirais sur la solution suivante :
    - 1 PIC (à définir) par moteur principaux (les moteurs secondaires ou indépendants du type ouverture pince, rotation poignet et rotation base pourront être sur un seul moteur) soit 4 à 5 PICs pour 6 moteurs
    - 1 PIC pour coordonner tout ça (à terme, je pilotterais un moteur, qui servira de maitre pour les deux autres principaux afin de pouvoir gérer la position)
    - 1 PIC (ou le même ?) pour gérer la connexion (en USB, j'ai déjà un proto) avec le PC et/ou le pupitre de commande avec trois mini-joysticks.

    J'ai besoin de votre avis :
    - Y a-t-il plus simple ?
    - Quels sont les pièges à éviter ?
    - Quel PIC utiliser pour chaque type (je programme en C) ?

    Merci d 'avance de votre aide !

    Mikaël.

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

    Re : Gestion d'axes avec PIC en C

    bonjour,
    si tu prends un petit pic pour chaque pwm (12F683) et que tu donnes la valeur de commande du pwm par un pic maitre qui lorsque tu decides de modfier la valeur d'un moteur (donc d'un des petits pic) ce pic maitre transmet une impulsion au pic a modifier sur sa broche d'interruption afin d'etablir une connection entre les 2 afin de communiquer au pic a modifier la nouvelle valeur de pwm.
    c'est ce que je suis en train de faire pour une autre utilisation .
    des pic esclaves travaille et quand je veux transmettre un parametre le maitre genere une impulsion sur le pic à modifier et transmet les valeurs à modifier .
    si cela peut t'aider ou te donner des idées ?
    bonne journée
    Alain

  7. #6
    farouk77

    Re : Gestion d'axes avec PIC en C

    Bonjour,

    - 1 PIC (à définir) par moteur principaux (les moteurs secondaires ou indépendants du type ouverture pince, rotation poignet et rotation base pourront être sur un seul moteur) soit 4 à 5 PICs pour 6 moteurs
    - 1 PIC pour coordonner tout ça (à terme, je pilotterais un moteur, qui servira de maitre pour les deux autres principaux afin de pouvoir gérer la position)
    - 1 PIC (ou le même ?) pour gérer la connexion (en USB, j'ai déjà un proto) avec le PC et/ou le pupitre de commande avec trois mini-joysticks.
    Utiliser un micro-contrôleur en multitâche ne t'intéresse pas ? avec un exécutif qui coordonnerait des tâches (au lieu d'un pic qui coordonne d'autres pics..) ça me paraît beaucoup plus simple.. non ?

  8. #7
    inviteee2ce2b6

    Wink Re : Gestion d'axes avec PIC en C

    Citation Envoyé par farouk77 Voir le message
    Utiliser un micro-contrôleur en multitâche ne t'intéresse pas ? avec un exécutif qui coordonnerait des tâches (au lieu d'un pic qui coordonne d'autres pics..) ça me paraît beaucoup plus simple.. non ?
    Effectivement, ce serait plus simple, mais je ne sais pas comment faire. En fait, j'ai essayé de commander 2 moteurs avec un seul PIC. Pour générer mes impultions, j'utilisais une interruption timer dont la durée gérait la fréquence. Le problème rencontré était qu'à haute vitesse (~1,2kHz), les interruptions s'entrechoquaient... Même avec un quartz à 40 MHz.

    Mais je n'ai pas pensé utiliser un seul PWM avec des bit de validation de pas pour chaque moteur. As-tu un exemple d'analyse fonctionnelle ou en C (ou autre langage autre que assembleur, que je puisse comprendre) ?

  9. #8
    farouk77

    Re : Gestion d'axes avec PIC en C

    Pour générer mes impultions, j'utilisais une interruption timer dont la durée gérait la fréquence. Le problème rencontré était qu'à haute vitesse (~1,2kHz), les interruptions s'entrechoquaient... Même avec un quartz à 40 MHz.
    non ce n'est pas ça.. le multitâche est un concept de programmation (enfin je ne vois pas d'autres mots en fait, mais il doit sûrement y en avoir ) tu programmes le PIC spécialement afin d'avoir un exécutif et des taches.

    L'exécutif attribuera à chaque tâches (qui sont en faite des fonctions) un laps de temps limité, ce laps de temps étant souvent bas, cela donne l'impression que le pic gère toutes les tâches en simultané, ce qui est très pratique pour des applications du type robotique..

    Je n'ai trouvé comme exemple que ce lien vers un pdf sur google.. C'est un TP qui explique le concept de multitâche et comment programmer un pic pour l'utiliser..

    http://www.technologuepro.com/TP-sys...multitache.pdf

    il y a aussi ce tutorial (qui m'a l'air plus complet..):

    http://franckh.developpez.com/tutoriels/posix/pthreads/

    voila voila, après ça fait plus de 8 mois que je n'en ai pas fait, mes souvenirs commencent à devenir légèrement flou..

  10. #9
    inviteee2ce2b6

    Re : Gestion d'axes avec PIC en C

    Merci à toi Farouk77, je vais étudier tes exemples de près afin de découvrir ce concept de multitache.
    En parallèle, je vais tenter d'améliorer mon idée d'utiliser un timer (le timer0 doit suffire) à une fréquence bien choisie, tout en ayant un bit de validation de passage de pas pour chaque moteur (à chaque interruption de Timer0, je valide ou pas pour chaque moteur s'il doit ou non avancer d'un pas).

    Entre les deux pistes, j'ai du pain sur la planche.

    Mikaël.

Discussions similaires

  1. PIC, gestion de l'heure ?
    Par invite116c4f9b dans le forum Électronique
    Réponses: 16
    Dernier message: 16/12/2008, 21h54
  2. Gestion des interruption avec un PIC
    Par schneiderj dans le forum Électronique
    Réponses: 3
    Dernier message: 08/03/2008, 17h26
  3. Carte d'axes
    Par invite7143b3c2 dans le forum Technologies
    Réponses: 0
    Dernier message: 04/05/2006, 10h34
  4. Gestion d'un afficheur avec un PIC
    Par invitee1ad6ffc dans le forum Électronique
    Réponses: 3
    Dernier message: 08/12/2005, 22h28
  5. PIC: Gestion de chaîne de caractères.
    Par invite4c7a167b dans le forum Électronique
    Réponses: 1
    Dernier message: 24/05/2004, 15h13
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...