Commander 6 servo moteur pilotés par une communication RS485 (port uart) sur pic !
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Commander 6 servo moteur pilotés par une communication RS485 (port uart) sur pic !



  1. #1
    vinowan

    Commander 6 servo moteur pilotés par une communication RS485 (port uart) sur pic !


    ------

    Bonjour,

    Comme écrit dans le titre, j'aimerais piloter 6 servo moteur via un pic (18F46K22 mais ca peux changer)

    ce pic recevra des ordres d'une autre cpu (ou pc pourquoi pas pour les test ?) via son port uart utiliser en RS485 à 9600 baude, cette partie communication entre pic et autre cpu ne pause pas de problème.
    attention que cette communication va créer des interruptions en émission et en réception des bytes des tram envoyée et recues.
    j'utilise aussi le timer 0 pour cadencer le programme à 10ms (calcul du delay entre fin réception tram et début envoie réponse)

    le problème c'est de piloter les 6 servos.

    pour l'instant je vais me contenter d'un seul servo mais j'essaye de garder en tête les 5 autres (1 chose à la fois)

    j'ai tout d'abord essayer d'utiliser un interupt 16bit TMR1 toute les 30µs qui inc une variable qui jusque Ton met la pinne à 1 et puis à 0

    cela marchait pas trop mal mais quand la communication UART arrive, une sorte d'offset provoquer par les intéruption de l'uart fait faire des petit raté au servo.

    j'ai aussi essayer (pour diminuer le nombre d'interupt TMR1) de chargé le timer1 de façon différente pour Ton et puis Toff comme ceci:
    pinne à 1 et chargement Ton
    interupt TMR1 : pinne à 0 et chargement Toff
    interupt TMR1 : pinne à 1 et chargement Toff
    ...
    cela fonctionne mieux mais toujours sensible à l'offset provoqué par les interruption de l'uart et en plus de temps en temps aussi par le timer 0

    je voulais rendre l'interupt TMR1 prioritaire mais là j'ai lu a plusieurs endroit qu'il est impossible d’interrompre une procédure ISR par une autre de priorité supérieure, donc j'abandonne aussi cette piste pour l'instant.

    je cherche donc pour l'instant à utiliser un pwm qui lui restara constant quelque soit le timing des interupt, le probleme est que la fréquence de 50hz est tres lente pour le pic et sauf erreur dans mes calcul je devrai diminuer la fréquence du pic à 1Mhz pour avoir une periode de 16ms et il semble que le reglage à 9600 baude soit encore tout juste possible.

    je vais tester cela desuite.

    mais avez vous des commantaire sur mes essai, des suggestion, des corrections ou même d'autre idées ?

    merci d'avance pour votre aide.

    -----

  2. #2
    pilatomic

    Re : commander 6 servo moteur piloter par une communication RS485 (port uart) sur pic

    En quoi consiste ton interruption qui gère la réception / émission sur l'uart ? Si elle est trop longue, essaye de la réduire au maximum, par exemple en n'effectuant que la copie des octets reçus dans l'interruption, et le reste du traitement dans le main.

    Sinon, passe sur un PIC qui possède 6 modules CCP, donc capable de générer 6 signaux PWM. Il y a ensuite une astuce qui permet d'utiliser ces générateurs PWM pour piloter des servos, en utilisant extrêmement peu de temps CPU, qui consiste à laisser le duty cycle à 0 pendant 20 ms, puis ensuite au maximum pendant 1 ms, puis ensuite variable pour piloter tes servos. J'ai utilisé cette méthode pour piloter très précisément 2 servos, et elle s'est averée extrêmement précise, malgré que mon PIC gérait une liaison SPI en même temps.

  3. #3
    vinowan

    Re : commander 6 servo moteur piloter par une communication RS485 (port uart) sur pic

    Merci pour l'aide,

    j'utilise donc le pic avec une fréquence Fosc de 1Mhz, ce qui permet d'utiliser un PWM de 16.3 ms, je gère ensuite le duty cycle pour varier Ton de 0.5ms à 2.5ms (+ ou moins selon la tolerence en fin de course des servos).
    plus qu'a tester l'uart en 9600 baude.

    en tout cas les interupts ne gêne plus, je pense être sur la bonne voie (enfin j’espère).

    par contre je ne comprend pas à quoi sert le fait de faire une duty cycle de 20ms à 0% et ensuite 1ms à 1% ?? ça fait juste u signal de 20ms bas et puis 1ms haut.

    Pilatomic, peux tu expliquer un peux plus stp.

  4. #4
    pilatomic

    Re : commander 6 servo moteur piloter par une communication RS485 (port uart) sur pic

    Avec un PWM à une fréquence de 16.3 ms, générer les impulsions nécessaires pour le servo ( entre 1 ms et 2 ms ) ne permet d'obtenir que 15 positions de servo, ce qui est peu. Je ferais plutôt fonctionner le PWm avec une période de 1 ms : pendant 18 périodes tu laisses le duty cycle à 0. Puis pendant 1 période du le met à fond ( durée de 1ms, doit la longueur minimum des impulsions interprétables par le servo). Pendant la période suivante, tu peux le faire varier de 0 au maximum, ce qui correspond à 256 positions possibles. Tu obtient alors des impulsions variant de 1ms à 2ms, répétées toutes les 20ms.

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

    Re : Commander 6 servo moteur pilotés par une communication RS485 (port uart) sur pic !

    voila,

    j'ai fait le test en suivant l'idée de pilatomic (merci d'ailleur pour cette idée),

    mais j'ai une plage utile du servo de 0,7ms à 2.5ms donc j'ai reglé la periode du pwm sur 2.5ms,
    j'ai autorisé l'interupt d'overflow TMR2IE = 1 qui correspond au calcul de la frequence du PWM (donc la periode) afin de faire 7 x duty cycle à 0 et puis un duty cycle de 0,7ms à 2.5 ms (duty cycle 100%) ce qui me donne 445 valeur de réglage pour 180° donc une precision de + ou - 0,4°

    j'ai pu ainsi augmenter la frequence du pic de 1Mhz à 4Mhz, ce qui pose moins de probleme de réactivité au interupt de l'uart qui était plus que limite.

    je vais maintenant implémenter les autre PWM du pic18F46K22

    je n'ai pas encore été voir sur le site de microchip mais existe t'il un pic 18F pin compatible si possible qui aie 6 sortie PWM ?
    le pic18F46K22 en a 5 mais je ne suis pas sur de pouvoir les utiliser les 5 à la fois en PWM standard ?

    encore merci pour l'aide.

Discussions similaires

  1. communication PIC 18F2550 et PC par le port USB aidez moi SVP
    Par invite08063aee dans le forum Électronique
    Réponses: 3
    Dernier message: 29/04/2012, 22h13
  2. communication PIC 18F2550 et PC par le port USB aidez moi SVP
    Par invite08063aee dans le forum Électronique
    Réponses: 2
    Dernier message: 24/04/2012, 22h32
  3. Communication RS485 PC to PIC
    Par Electro_Max dans le forum Électronique
    Réponses: 9
    Dernier message: 14/12/2011, 17h24
  4. Commander un moteur de puissance avec une électronique de servo
    Par invitee17aeca5 dans le forum Électronique
    Réponses: 12
    Dernier message: 13/08/2009, 21h08
  5. commander un moteur par un pic 16f876
    Par invitefd6065bd dans le forum Électronique
    Réponses: 17
    Dernier message: 10/05/2009, 20h32
Découvrez nos comparatifs produits sur l'informatique et les technologies.