Servomoteur, Pic et C18
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Servomoteur, Pic et C18



  1. #1
    hoffmann

    Smile Servomoteur, Pic et C18


    ------

    Bonjour,
    Je viens de commander un servomoteur :
    http://www.sparkfun.com/commerce/pro...oducts_id=9347

    Afin de l'utiliser je dois générer une PWM sur son entrée et celui si ce déplacera jusqu'à l'angle adéquat (déplacement horaire et antihoraire).

    J'utilise C18 et un pic 18F448, un quartz a 4MHz.
    J'ai choisi une fréquence 50hz et aimerai avoir une PWM a l'état haut durant 2ms. (me confirmez vous que ces valeurs sont plausible?)

    Je regarde sur la datasheet de C18, mais je butte avec leur explication...
    void OpenPWM1 ( char period)
    period
    Can be any value from 0x00 to 0xff. This value determines the PWM
    frequency by using the following formula:
    PWM period =[(period ) + 1] x 4 x TOSC x TMR2 prescaler
    apres remise en forme et avec Tosc = 250ns
    le paramètre de la fonction :

    period = 20ms ÷ (4 X 250ns) - 1
    period = 19 999

    Sauf que la Datasheet explique que perdio varie entre 0x00 et 0xFF (255)
    Je pense soit avoir un problème d'unité (non précisé dans datasheet), et aussi sûrement un problème de prescaler que j'ai considéré = 1 (jamais touché)

    Pouvez-vous me confirmer ces points ?


    Pour le rapport cyclique... je nage dans les unités...

    The value of dutycycle can be any 10-bit number. Only the lower
    10-bits of dutycycle are written into the duty cycle registers. The duty
    cycle, or more specifically the high time of the PWM waveform, can be
    calculated from the following formula:
    PWM x Duty cycle = (DCx<9:0>) x TOSC
    where DCx<9:0> is the 10-bit value specified in the call to this function.
    Tosc doit etre exprimé en secondes ?
    PWM ? en secondes aussi ?
    Duty cycle = % ou le high time of the PWM waveform?


    Un grand merci déjà de m'avoir lu !

    En prenant des valeurs un peu au hasard...
    Le servomoteur tourne... toujours dans le même sens (j'aimerai bien qu'il change aussi)...
    Malheureusement je n'ai pas d'oscilloscope, ça aurait été très très utile...

    Bonne bonne soirée

    -----
    Hoffmann

  2. #2
    sdec25

    Re : Servomoteur, Pic et C18

    Salut,
    Je pense soit avoir un problème d'unité (non précisé dans datasheet), et aussi sûrement un problème de prescaler que j'ai considéré = 1 (jamais touché)
    Pas de problème d'unité puisque, comme tu l'as bien compris, c'est TOSC qui donne l'unité (ou 4xTOSC = 1µs que l'on prend comme base de temps).

    Les figures 15-3 et 15-4 p.130 de la datasheet expliquent le fonctionnement de la PWM. Il y a 3 paramètres :
    • le prescaler
    • le duty cycle (registre CCPR1)
    • la période (registre PR2)

    Le duty cycle n'est pas exprimé en % mais en unités de timer car il est comparé à la valeur du timer 2.

    Comme le timer 2 est un timer de seulement 8 bits, il ne peut pas atteindre la valeur 19999. Il faut donc jouer sur le prescaler. Avec un prescaler de 16 le timer sera 16 fois plus lent mais c'est encore trop rapide pour toi : 256 * 16 * 1µs = 4096µs minimum pour la période.
    La seule solution est donc de faire une PWM logicielle si tu ne veux pas diminuer la fréquence du PIC.
    Dernière modification par sdec25 ; 06/11/2009 à 21h43.

  3. #3
    hoffmann

    Re : Servomoteur, Pic et C18

    Je n'ai pas d'oscilloscope pour le vérifier, pouvez-vous m'aider sur ces questions :

    - Si j'ai un Quartz de 4MHz :
    Tosc = 1÷ 4MHz
    OU
    Tosc = 1÷ 1MHz

    ?

    - La fréquence de la PWM est de 50Hz strictement ou peut importe ? (j'ai du mal a trouver cet infos sur le net)


    Merci d'avance
    Je m'y replonge demain
    Hoffmann

  4. #4
    sdec25

    Re : Servomoteur, Pic et C18

    Citation Envoyé par hoffmann Voir le message
    - Si j'ai un Quartz de 4MHz :
    Tosc = 1÷ 4MHz
    OU
    Tosc = 1÷ 1MHz

    ?
    Tosc = période de l'oscillateur
    Fosc = fréquence de l'oscillateur
    Tosc = 1/Fosc

    donc Tosc = 1/4Mhz = 250ns
    Mais la base de temps du PIC, utilisée pour pratiquement tout (instructions et timers) est de 4*Tosc (1µs). Avec un oscillateur de 4 Mhz c'est pratique puisque les timers sont en µs.

    - La fréquence de la PWM est de 50Hz strictement ou peut importe ? (j'ai du mal a trouver cet infos sur le net)
    J'en sais rien. Ce n'est pas écrit dans la doc de ton servo ? Tu peux essayer avec plusieurs fréquences.

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

    Re : Servomoteur, Pic et C18

    Bonjour,
    J'ai deux trois fois tester avec une PWM hardware, je n'ai pas réussi... J'attends l'oscillo.

    J'ai testé avec une PWM logicielle, et cela fonctionne très bien !
    Je posterai le code sur mon site prochainement...

    Merci pour ton aide.


    J'ai découvert aussi que le modèle de servo acheté effectuait un asservissement non pas sur l'angle mais sur la vitesse de rotation.
    0->1,5ms : sens antihoraire
    1,5->xxms : sens horaire
    Hoffmann

  7. #6
    sdec25

    Re : Servomoteur, Pic et C18

    Tu as bien mis le prescaler à 16 avec la période à 255 et le duty cycle à 127 ? Ça te génère une PWM de période 4 ms ce qui devrait convenir à ton utilisation.

  8. #7
    RISC

    Re : Servomoteur, Pic et C18

    Salut,

    Citation Envoyé par sdec25 Voir le message
    Tosc = période de l'oscillateur
    Fosc = fréquence de l'oscillateur
    Tosc = 1/Fosc

    donc Tosc = 1/4Mhz = 250ns
    Mais la base de temps du PIC, utilisée pour pratiquement tout (instructions et timers) est de 4*Tosc (1µs).
    Ce n'est pas vraiment cela...

    Il ne faut pas confondre Fosc et Fcycle (ou Tosc et Tcycle).
    Fosc est la fréquence d'oscillation
    Fcycle est la fréquence cycle (la fréquence d'exécution des instructions).

    Pour les 8 bits on a toujours :
    Fcycle = Fosc / 4 (ou Tcycle = 4 * Tosc)

    Avec un quartz à 4MHz (en supposant que tu n'as pas utilisé la PLL interne), on a donc :
    Fosc = 4MHz et Fcycle = 4MHz / 4 = 1MIPS
    ou encore :
    Tosc = 1 / Fosc = 250ns et donc Tcycle = 4 * Tosc = 4 * 250ns = 1us

    Si tu utilises la PLL interne des PIC18, tu peux multiplier par 4 la fréquence. Donc avec un quartz à 4 MHz tu aurais Fosc = 4MHz * 4 = 16MHz (et donc Fcycle = 4 MIPS).

    a+

Discussions similaires

  1. PIC 18 : 2 niveaux d'interruption en C18
    Par vadom35 dans le forum Électronique
    Réponses: 0
    Dernier message: 09/04/2009, 08h16
  2. MPLAB C18 pic 18F4550
    Par invited5e93be9 dans le forum Électronique
    Réponses: 7
    Dernier message: 05/04/2009, 20h13
  3. [HELP!]PIC sous C18
    Par invite0cf437d8 dans le forum Électronique
    Réponses: 3
    Dernier message: 15/04/2007, 16h19
  4. Pic & servomoteur
    Par invite3341af8e dans le forum Électronique
    Réponses: 7
    Dernier message: 17/02/2007, 21h44
  5. PIC et servomoteur
    Par inviteab233b68 dans le forum Électronique
    Réponses: 6
    Dernier message: 06/05/2003, 08h03
Découvrez nos comparatifs produits sur l'informatique et les technologies.