PIC 18f1230 et période PWM
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

PIC 18f1230 et période PWM



  1. #1
    invite0155ce91

    PIC 18f1230 et période PWM


    ------

    Bonjour à tous,

    Pour un projet personnel, j'ai à commander un servomoteur et un MCC chacun à partir de signaux PWM générés par un pic 18F1230.
    En effet, je veux controler la vitesse et le sens de rotation du MCC grâce à un pont en H.
    Un servomoteur ne se commande généralement qu'avec une période d'environ 50Hz et c'est mon cas.
    Quant au MCC, il me semble qu'un signal d'1kHz MINIMUM est nécessaire pour le contrôler, mais je n'ai pas pu faire les tests, n'ayant pas encore reçu le moteur.
    Mon problème est le suivant : ce pic possède 6 sortie PWM, c'est bien. Mais le gros problème c'est que la période configurée est la même pour toutes les sorties PWM.
    J'ai donc une solution qui me vient tout de suite en tête qui est de générer moi même un signal PWM en sortie analogique, à partir du timer0 du pic pour contrôler le servo, et utiliser un signal PWM dédié, pour le MCC.
    Une autre solution serait de commander un nouveau pic, mais trop onéreuse pour si peu.

    Je voulais savoir si je ne faisais pas fausse route, s'il n'y avait pas quelque chose qui m'échappait dans la doc.

    Merci d'avance pour vos réponses.

    François

    -----

  2. #2
    jls28

    Re : PIC 18f1230 et période PWM

    Salut,

    Je crois qu'effectivement,
    à 50Hz, en utilisant un timer, un interruption,
    c'est très faisable de générer soit même une
    sortie PWM.

  3. #3
    invite0155ce91

    Re : PIC 18f1230 et période PWM

    Bon après différents essais, voilà le problème : j'ai tenté avec un quartz de 10MHz + PLL (donc 40MHz) de générer un signal PWM de période 50Hz avec interruption sur le timer0. Petite précision, je suis sous MPLAB X en XC8.

    Au début, je voulais une interruption toutes les 4us (250kHz). En effet, cela m'aurait permis de contrôler le servomoteur avec une précision de 250 pas.

    Je rappelle que pour contrôler un servomoteur il faut une période de 20ms (50Hz) et une largeur d'impulsion variant de 1ms à 2ms (respectivement un angle de 0° à 180°).

    Seulement impossible d'avoir une telle précision avec mon pic.

    Je détaille : j'ai initialisé le timer0 sans prescaler, donc FOSC/4 = 10MHz, à 8bits, et j'ai préchargé le registre TMR0 à 216 dans l'interruption.

    Ce qui signifie qu'une interruption est générée tous les 40 incréments de TMR0. On a donc une interruption de fréquence 10MHz / 40 = 250kHz.

    Dans cette interruption je fais le nécessaire pour générer un signal PWM sur une sortie analogique avec deux compteurs, un pour la largeur d'impulsion et l'autre pour la période.

    En thérorie, c'est tout va bien.

    Seulement en pratique, ça ne va pas du tout. Après différents tests et debug, je remarque que, le temps que le pic entre dans l'interruption et exécute le code, TMR0 compte beaucoup trop rapidement et crée un dépassement et donc un retard.

    Après ça, j'ai essayé différentes valeurs de prescaler et de préchargement de TMR0 en étant moins gourmand, jusqu'à avoir une précision de seulement 50 pas (interruption de 50kHz) au lieu de 250 à la base. Mais le résultat n'est jamais bon. J'ai l'impression qu'une telle précision n'est pas envisageable avec mon pic, ce qui me semble bizarre d'ailleurs.

    Pouvez-vous me confirmez ça ?

    Si c'est le cas, je ne vois pas d'autres choix que de commander un nouveau pic. D'ailleurs savez-vous s'il existe un pic 18F avec au minimum deux sorties PWM, ayant chacune une période configurable différente ?

    Merci d'avance.

    François

    ps : pour les intéressés, je n'aurais mon code disponible que ce soir

  4. #4
    paulfjujo

    Re : PIC 18f1230 et période PWM

    bonjour,


    Pourquoi mobiliser tant de ressource (IT chaque 4µS) pour commander une impulsion toutes les 20mS
    si dans ton main programme tu n'as pas trop de contrainte et le temps de gaspiller 2mS toutes les 20mS
    il vaudrait mieux generer une interrupt toutes les 20mSec
    et dans cette interrupt generer dans une boucle la pulse de 1 à 2mS
    simplement via comptage de cycles processor.

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

    Re : PIC 18f1230 et période PWM

    ou Armer la pulse (pulse=1) par l'interrupt 20mS (ex timer1)
    dans cette interrupt armer un autre timer (ex Timer0) pour definirt la duree 1 à 2mS
    puis dans l'interrupt Timer0 desarmer la pulse (pulse=0)
    et desarmer l'interrupt Timer0
    qui ne sera réarmé qu'apres 20mS !

  7. #6
    mp3dux

    Re : PIC 18f1230 et période PWM

    Bonjour, ton pic possède 3 générateurs de périodes PWM indépendants, chacune étant relié à 2 sorties PWM ...

    Donc tu as de quoi faire.
    Si nous faisions tout ce que nous sommes capables de faire, nous en serions abasourdis. T.E

  8. #7
    invite0155ce91

    Re : PIC 18f1230 et période PWM

    Paulfjujo => merci ! effectivement je n'avais bêtement pas pensé à cette solution


    mp3dux => malheureusement il n'y a qu'un seul registre période pour les 6 modules PWM

    Mon problème est le suivant : ce pic possède 6 sortie PWM, c'est bien. Mais le gros problème c'est que la période configurée est la même pour toutes les sorties PWM.

  9. #8
    mp3dux

    Re : PIC 18f1230 et période PWM

    En effet les générateurs ne s'occupent que des rapports cycliques , pas de la fréquence, et tu as besoin d'au moins 2 fréquences distinctes..
    Si nous faisions tout ce que nous sommes capables de faire, nous en serions abasourdis. T.E

  10. #9
    invite0155ce91

    Re : PIC 18f1230 et période PWM

    Exactement, d'où mon souhait de générer moi-même un signal PWM sur sortie analogique

  11. #10
    invite0155ce91

    Re : PIC 18f1230 et période PWM

    J'ai trouvé une solution encore plus économe n'utilisant qu'un seul timer, pour ceux qui tomberaient sur ce topic, ça rejoint la solution de Paulfjujo :

    j'active l'interruption de période sur le timer0, dans cette interruption je pré-charge le timer0 et je mets la sortie à 1, de façon à avoir mon impulsion variant de 1 à 2ms.
    À la prochaine interruption, correspondant à la durée de l'impulsion, je mets la sortie à 0, et je pré-charge la timer0 à 20ms moins la durée de l'impulsion soit 20ms - 1 à 2ms.
    Ce qui me donne la deuxième interruption correspondant à la période.
    Voilà j'espère avoir été clair.

    Bonne journée,

    François

Discussions similaires

  1. Periode radioactive et période ?
    Par invite5dcd7bce dans le forum Physique
    Réponses: 2
    Dernier message: 20/10/2011, 16h23
  2. Période
    Par invitee9380279 dans le forum Mathématiques du collège et du lycée
    Réponses: 11
    Dernier message: 07/08/2008, 15h01
  3. Periode
    Par invite33670690 dans le forum Physique
    Réponses: 4
    Dernier message: 17/05/2007, 12h15
  4. Période de rotation = période de révolution
    Par invite2405ba88 dans le forum Archives
    Réponses: 3
    Dernier message: 04/02/2006, 17h20
  5. Pseudo période, période propre
    Par invite8241b23e dans le forum Physique
    Réponses: 5
    Dernier message: 12/05/2005, 17h43
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...