Commande servomoteur
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Commande servomoteur



  1. #1
    invite52a78f30

    Commande servomoteur


    ------

    Bonjour,

    Je suis entrain de construire un petit robot autonome. Je viens de rencontrer ma premiere difficulté, la commande des servo (utilisé comme propulseur). Les servo sont modifié pour une rotation de 360°.

    J'utilise MikroC ainsi que l'EasyPic4 pour la programmation de mon 16F877A.
    D'après ce que j'ai lu sur le net , il faut que je génère des signaux PWM sur le port RC1 ou RC2, ayant une période de 20us. Ainsi je pourrais jouer sur le rapport de cycle pour créé des impulsion de 2ms(marche avant) ou 1ms(AR).

    Plus facile à dire qu'à faire.. Comment puis-je créé un signal pwm de 20us à l'aide de mon PIC cadencé a 8Mhz par exemple ? (parait qu'il faut utiliser les timer et prescaler...)
    Je sais qu'il existe des bibliothèques (pwm_init1() , pwm_start() ) dans MikroC mais je ne sais pas comment et quand les utilisers.

    Quelqu'un ne pourrait pas me taper un petit bout de code permettant de faire de la pwm et en me disant comment faire varier le rapport de cycle ?

    Merci d'avance,
    Quicky !

    -----

  2. #2
    alainav1

    Re : Commande servomoteur

    bonjour,
    tu peux mettre à 1 la sortie
    tu temporise pendant X µs (X etant compris entre 1000 et 2000 suivant la position )
    puis tu met à la sortie à 0
    tu temporise pendant environ 18ms
    ce code est à repeter tout le temps que tu veux positionner ton servo

    en basic c'est par exemple
    for i=1 to 1000
    sortie=1
    waitµs 1500
    sortie=0
    waitms 18
    next i
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  3. #3
    invite52a78f30

    Re : Commande servomoteur

    Je viens de compile run petit Code en C que je viens d'injecter dans mon PIC.

    Ma Led C2 de ma carteEasyPic4 clignote bien et j'ai bien 5V sur C0.
    Mais lorsque je branche mon servo sur l'easyPic , rien ne se passe, il ne tourne pas Need help !

    Code:
    void main(){
    TRISC=0;
    PORTC.F0=1;
    PORTC.F4=0;
          do{
            PORTC.F2=1;
            Delay_ms(2);
            PORTC.F2=0;
            Delay_ms(18);
          }while(1);
    }
    Merci d'avance !

  4. #4
    alainav1

    Re : Commande servomoteur

    bonjour,
    la valeur c'est entre 1 et 2 ms peut etre es tu en butté ?
    peut etre
    Delay_µs(1500); (pour 1,5 mS)
    remplace 18ms par 19 ou 20
    cordialement
    peux tu regarder à l'oscllo je signal sortant du pic
    l'alimentation du servo délivre telle assez d'intensité?
    cordialement
    alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

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

    Re : Commande servomoteur

    Le problème venait bien de l'alimentation qui ne délivrait pas assez de courant !
    Merci pour tes réponses !

  7. #6
    invite52a78f30

    Re : Commande servomoteur

    J'ai encore parler trop vite ... Rien ne va

    J'aurais encore besoin de vos conseil !


    1)Le code que j'utilise ne sert a rien je pense , je peux brancher mon servo sur n'importe qu'elle sortie de mon pic et il tourne en continu (car servo modifié). En modifiant dans mon code le temps de 1ms à 2ms ca ne change rien , le moteur tourne tjs dans le même sens et à la même vitesse. Je peux mettre mon fil blanc de commande sur n'importe qu'elle pin (0V ou +5V) le moteur tourne tjs ...

    Code:
    void main(){
    TRISC=0;
    PORTC.F2=1;
    PORTC.F4=0;
          do{
            PORTC.F0=1;
            Delay_ms(1);
            PORTC.F0=0;
            Delay_ms(19);
          }while(1);
    }
    Quel est mon problème ? servo mal modifié (j'ai supprimé la butée et soudé au potentiomètre 2 résistance montée en pont diviseur) ? Quelque chose de fondamental m'échappe ?

    2) Le moteur commence a tourner a partir du moment ou j'appuie sur mon pack de 4 pile (1,5V)... Quand je relâche la pression le moteur s'arrête de tourner ! Pourtant j'ai tjs bien 5,8V en sortie de mon pack quand le moteur ne tourne pas (et donc quand je n'appuie pas sur le pack). Je ne comprends pas ce qu'il se passe
    (Le pack n'est pas artisanal)

    Help !!

    Merci d'avance
    Quicky

  8. #7
    alainav1

    Re : Commande servomoteur

    Bonjour,
    si c'est un servo modifier pour tourner en continu il n'y aucune chance pour qu'il s'arrete puis que le potentiometre n'est plus efficace .
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  9. #8
    invite2d9e7c03

    Re : Commande servomoteur

    salut,
    Citation Envoyé par Qweaky Voir le message
    En modifiant dans mon code le temps de 1ms à 2ms ca ne change rien , le moteur tourne tjs dans le même sens et à la même vitesse. Je peux mettre mon fil blanc de commande sur n'importe qu'elle pin (0V ou +5V) le moteur tourne tjs ...
    il faut d'abord comprendre le principe de l'asservissement en position du servo

    modifier un servo c'est lui faire croire qu'il est toujours en milieu donc il n'atteint jamais son but et il continue à tourner

    donc comme t'as dit alain c'est trés logique le comportement de ton servo

    pour plus de details:

    http://fribotte.free.fr/bdtech/pic/servoCC.html

    Merci les fribottes

    @+

  10. #9
    invite52a78f30

    Re : Commande servomoteur

    il n'y a alors aucun moyen de le controler ce servo modifié ? l'arrêter, inverser son sens de rotation ?

  11. #10
    alainav1

    Re : Commande servomoteur

    bonjour,
    pour moi non ,il fonctionne comme un moteur de faible vitesse mais avec un couple important ,mais ce n'est que mon avis
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  12. #11
    invite2d9e7c03

    Re : Commande servomoteur

    Salut,
    Citation Envoyé par Qweaky Voir le message
    il n'y a alors aucun moyen de le controler ce servo modifié ? l'arrêter, inverser son sens de rotation ?
    le contrôler en position -> non
    inverser le sens de rotation -> oui
    l'arrêter-> oui

    Mais il y a encore une autre possibilité dont j'ai découvert par hasard: En fait lorsque le servo(non modifié) s'approche de son but il réduit la vitesse ( mais attention la variation de la vitesse en fonction de l'écart angulaire n'est pas linéaire ) j'ai pu exploiter cette propriété pour les servos modifiées pour faire varier la vitesse.

    PS: J'ai essayé ca avec un futaba S3003 je ne sais pas si c'est valable aux autres modèles ( tout dépend de l'électronique de l'asservissement)
    @+

Discussions similaires

  1. commande d'un servomoteur (utilisation d'un temporisateur)
    Par extra93 dans le forum Électronique
    Réponses: 3
    Dernier message: 28/04/2008, 08h47
  2. inverseur de commande de servomoteur
    Par invite58538aa7 dans le forum Électronique
    Réponses: 0
    Dernier message: 22/01/2008, 14h50
  3. commande servomoteur
    Par invite1469c576 dans le forum Électronique
    Réponses: 5
    Dernier message: 31/10/2007, 19h59
  4. commande d'un servomoteur par fonction astable
    Par invite04918547 dans le forum Électronique
    Réponses: 1
    Dernier message: 18/03/2007, 22h35
  5. Commande ServoMoteur
    Par invited27cbfe1 dans le forum Électronique
    Réponses: 3
    Dernier message: 30/01/2007, 21h49
Découvrez nos comparatifs produits sur l'informatique et les technologies.