Asservissement vitesse sur PIC
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Asservissement vitesse sur PIC



  1. #1
    Magneau

    Smile Asservissement vitesse sur PIC


    ------

    Bonsoir à tous!

    J'ai réalisé un robot suiveur de ligne qui fonctionne, mais j'aimerais augmenter ses performances. Ce robot possède deux roues motorisés et une roue folle.


    Je m'explique :
    Actuellement, le programme que j'ai écrit permet de suivre la ligne au sol suivant les capteurs actifs, c'est à dire que pour chaque capteurs corresponds une vitesse moteur.

    Je m'interesse donc à un asservissement PID numérique en vitesse car l'asservissement de position ne m'interesse pas. En gros, je veux donner une consigne a mon moteur et qu'il la respecte.

    J'ai donc récoltés des informations sur le sujet, monté des codeurs sur chaque roue. Ces codeurs permettent d'avoir 60 impultions pour 1 tour moteur. C'est relativement faible mais pour de l'asservissement en vitesse ca devrais suffire. La sortie des codeurs et relié aux entrées RB4 et RB5 du PIC (16f877a). Je compte alors les fronts que je viens relever toutes les 10 ms via une interruption.
    Vous suivez toujours???

    Mais je suis bloqué a cet endrois, notamment comment calculer les coeffients et comment les implenter.

    Si le pic n'est pas assez puissant j'ai toujours la possibilité d'utiliser un 18F, j'en ai vu un qui possède le même brochage.

    PS : je programme en C et compile avec CCS.

    Merci de votre aide

    -----

  2. #2
    BastienBastien
    Invité

    Re : Asservissement vitesse sur PIC

    Bonjour,

    Et si tu utilisais un module CCP en mode "capture", qui te permettrait de calculer le nombre de "tour de timer" + "partie du tour du timer" que le PIC a fait, entre deux changement de position du codeur -> tu en déduis le temps mis entre deux positions du codeur -> tu en déduis la vitesse.

    Ensuite, fais un schéma bloc, avec ta chaîne directe (moteur), chaîne de retour (unitaire, il me semble mais j'en suis pas sûr) et le soustracteur. N'oublies pas de multiplier le correcteur PID au modèle de ton moteur.

    Ensuite, tu réduis ton schéma bloc jusqu'à obtenir une la fonction de transfert. Puis, tu repasses dans le domaine temporel (Laplace inverse) et tu claques tout ça dans ton programme C. En C, ça doit pouvoir se faire facilement, car tu as sûrement accès au exponentielles, etc.

    Mais ton nouveau problème, maintenant, c'est d'obtenir le modèle de ton moteur. Tu l'as ? C'est un moteur à courant continu et à aimant permanent ? Tu as un oscillo et un GBF ? Dans ce cas, tu peux lui appliquer un échlon (signal carré) d'amplitude je_sais_pas_combien (4V ?), à fréquence assez basse et tu regarde la réponse indicielle à l'oscillo et tu identifies les paramètres.

    Tiens-nous au courant.
    Dernière modification par BastienBastien ; 13/04/2008 à 08h44.

  3. #3
    gcortex

    Re : Asservissement vitesse sur PIC

    P = Kp.err
    I = I + Ki.err
    D = Kd[err1 - err0]

    V = P+I+D


  4. #4
    Magneau

    Re : Asservissement vitesse sur PIC

    Ta méthode pour compter la vitesse est valable, mais limité par le compteur. Et en plus il me faut 2 compteurs, un pour chaque roues. Ou alors je compte un moteur après l'autre.
    Mais il me semblais que pour réaliser un asservissement numérique, il fallait une base de temps fixe. Je me trompe?

    Donc au niveau de mes moteurs, ce sont des moteurs a courant continu 12V capable de tourner a 3000 tr/min. Un réducteur transmet la puissance aux roues qui tournent 5 fois moins vite (600 tr/min au max).

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

    Re : Asservissement vitesse sur PIC

    Bonjour,

    Petite question : tu veux asservir le couple ou la vitesse ? Car si c'est la vitesse, alors il me semble que c'est la TENSION qu'il faut asservir. Demandons à gcortex qui est un expert interplanétère des moteurs.

    Le PIC 16F877, par exemple, possède deux modules CCP, donc pas de problème à ce niveau. Et pour ce qui est des timers, il devrait y avoir moyen de se débrouiller avec 2 des 3 timers disponibles.

    Qu'en penses-tu ?

  7. #6
    BastienBastien
    Invité

    Re : Asservissement vitesse sur PIC

    Re,

    Citation Envoyé par Magneau Voir le message
    Ta méthode pour compter la vitesse est valable, mais limité par le compteur.
    Tu veux dire que le fait qu'à chaque débordement du compteur, la valeur est perdue ? Si c'est ce que tu dit, il y a une solution à ce "problème" : à chaque débordement il y a enclenchement d'une IRQ et dans le traitement de cette IRQ, tu incrémente une variable qui comptabilise le nombre de tour de timer.

  8. #7
    Magneau

    Re : Asservissement vitesse sur PIC

    Citation Envoyé par BastienBastien Voir le message
    Bonjour,

    Petite question : tu veux asservir le couple ou la vitesse ? Car si c'est la vitesse, alors il me semble que c'est la TENSION qu'il faut asservir. Demandons à gcortex qui est un expert interplanétère des moteurs.

    Le PIC 16F877, par exemple, possède deux modules CCP, donc pas de problème à ce niveau. Et pour ce qui est des timers, il devrait y avoir moyen de se débrouiller avec 2 des 3 timers disponibles.

    Qu'en penses-tu ?

    Alors oui c'est un asservissement en vitesse. De ce coté la pas de soucis car je pilote mes moteurs avec une PWM. Mais en fait, j'ai du mal à savoir comment calculer une nouvelle valeur de pwm à chaque itération de l'asservissement.
    En fait ce que j'arrive à faire, c'est à compter le nombre de fronts dans un temps donné (10 ms pour moi) sur chaque moteur.

  9. #8
    BastienBastien
    Invité

    Re : Asservissement vitesse sur PIC

    Re,

    Compter, oui, il le faut, mais il faut bien avoir une idée de "en combien de temps". Donc il faut utiliser le module CCP en mode capture (timer), tu ne crois pas ?

    Bon, course à pied. A tout'.

  10. #9
    Magneau

    Re : Asservissement vitesse sur PIC

    Oui je compte bien durant une periode fixe puisque j'utilise une interruption timer qui viens relever la valeur de mon compteur.

  11. #10
    BastienBastien
    Invité

    Re : Asservissement vitesse sur PIC

    Ah ok !!!! Donc tu as le temps qui sépare deux 'tics' du codeur ?

  12. #11
    Magneau

    Re : Asservissement vitesse sur PIC

    Lol non pas du tout
    On va y arriver!
    En fait je compte le nombre de "tics" durant une periode fixe (10ms) ce qui me donne la vitesse apres calcul.

  13. #12
    BastienBastien
    Invité

    Re : Asservissement vitesse sur PIC

    Ok, mais alors c'est pas forcément très précis...

    Ta vitesse de consigne est variable ou fixe ? Si fixe, alors tu as environ combien de 'tics' par tranche de 10 ms ? Et si elle est variable, tu en as entre combien et combien ?

  14. #13
    Magneau

    Re : Asservissement vitesse sur PIC

    Oui je comfirme que ce n'est pas très précis mais pour un asservissement en vitesse je pense que ca ne gène pas trop. C'est pas comme en odométrie ou il faut une erreur de position la plus faible possible.

    Alors oui ma vitesse de consigne est variable. Mon moteur peut tourner de 0 à 3000 tr/ min. Le PIC voit 60 fronts par tour moteur. Soit 180 000 tic/minutes soit 30 fronts toutes les 10 ms.

    C'est vrai que c'est faible mais j'ai peur qu'en augmentant trop la periode l'asservissement soit trop lent.

    Sinon avec une periode de 80ms ca me donne 240 tics/80 ms. Ca permet d'être plus précis.

  15. #14
    BastienBastien
    Invité

    Re : Asservissement vitesse sur PIC

    Oki,

    Citation Envoyé par Magneau Voir le message
    Mais je suis bloqué a cet endrois, notamment comment calculer les coeffients et comment les implenter.
    Déjà, identifions les coefficients et variables dont tu as besoin :

    Vc : vitesse de consigne. Celle-là, tu la connais
    Vr : vitesse réelle. Celle-ci est également connue

    Ensuite, d'après ce que dit gcortex, il faut :

    Kp
    Kd
    Ki
    err
    err1
    err0

    Je suppose que pour les avoir, il faut que tu modélises ton moteur. Tu as un oscillo et un GBF ? Dans ce cas, tu peux lui appliquer un échlon (signal carré) d'amplitude je_sais_pas_combien (4V ?), à fréquence assez basse et tu regarde la réponse indicielle à l'oscillo et tu identifies les paramètres. C'est ce qui s'appelle, en automatique, de "l'identification".

  16. #15
    Magneau

    Re : Asservissement vitesse sur PIC

    Oui j'ai moyen d'identifier mon moteur mais je voulais savoir si c'etait obligatoire??
    Surtout que j'ai deux moteurs identiques mais il ne tournent pas a la même vitesse pour une consigne donnée (Ce qui est normal).
    Car actuellement je n'ai pas le robot sous la main et je souhaite quand même develloper son asservissement .

  17. #16
    BastienBastien
    Invité

    Re : Asservissement vitesse sur PIC

    Re,

    Je connais la théorie mais je n'ai aucune pratique, alors je ne sais pas s'il y a des valeurs "bateau" que l'on peut prendre dans trop de risque. Pour ça, faudrait demander à un forumeur pro. En espérant que l'un d'eux lisent ce thread...

    Tiens-nous au courant !

Discussions similaires

  1. Asservissement de position d'un moteur par PIC
    Par inviteeaf9391c dans le forum Électronique
    Réponses: 7
    Dernier message: 01/06/2007, 13h37
  2. asservissement PWM par PIC
    Par invite81170861 dans le forum Électronique
    Réponses: 6
    Dernier message: 22/05/2007, 13h06
  3. Asservissement en vitesse sur PIC
    Par Magneau dans le forum Électronique
    Réponses: 1
    Dernier message: 10/05/2007, 22h24
  4. asservissement de vitesse par PIC
    Par invite81170861 dans le forum Électronique
    Réponses: 31
    Dernier message: 06/05/2007, 17h47
  5. asservissement d'un moteur DC par un pic 16f877
    Par invitebe7e2fc2 dans le forum Électronique
    Réponses: 1
    Dernier message: 17/05/2006, 01h33
Découvrez nos comparatifs produits sur l'informatique et les technologies.