Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

PWM et pic16f876



  1. #1
    prince02

    PWM et pic16f876


    ------

    Bjr a tous

    Pour un projet , je vais devoir utiliser un inclinometre du type adxl 213AE qui sort un signal PWM

    Ce signal devra etre traité par un Pic 16f876 (4Mhz)

    Ma question est : comment procedé sur le soft du programme afin de mesurer le rapport cyclique du signal PWM

    Quelles entrées sont a utilisées pour la mesures

    Si quelqu'un a deja fait ce genre de montage , j'aimerai qu'il me donne des conseils

    Des exemples de programme sont les bien venu ( en language Assembleur S.V.P)

    Pour info ce capteur a 2 axes , donc 2 signaux PWM

    -----

  2. Publicité
  3. #2
    carcan

    Re : PWM et pic16f876

    Hello !

    je pense que le plus simple est de filtrer ton signal pwm avec un circuit RC et d'utiliser 2 entrées analogiques de ton pic.

    A+
    Laurent

  4. #3
    prince02

    Re : PWM et pic16f876

    slt
    Oui je suis d'accord , mais dans ce cas on peut generer des erreurs , et pour mon projet je ne peux pas me le permettre

  5. #4
    carcan

    Re : PWM et pic16f876

    Hello !

    rien ne t'empèche de calibrer ton système.
    Soit tu le calibre avec un signal pwm précis (si tu n'as pas le matériel tu te fais un générateur pwm programmable avec un pic en utilisant les timers), soit tu calibres ta chaine complète.

    A+
    Laurent

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

    Re : PWM et pic16f876

    Re Carcan

    N'y a-t-il pas un moyen de mesurer precisement le rapport cyclique avec le Pic ?

  8. #6
    invite03481543

    Re : PWM et pic16f876

    Bonjour,

    si il y a plusieurs façons, la première à regarder c'est d'utiliser un timer en compteur et de comparer le résultat en utilisant le module de Comparaison (module CCPx), il y a un peu de gymnastique à faire avec les interruptions mais rien de bien méchant.

    L'idée de carcan est bien aussi, il te faut un AOP pour bien isoler la source de la mesure A/D, et comme tu ne donnes pas la précision recherchée ainsi que la plage à acquérir cela reste une bonne idée.

  9. Publicité
  10. #7
    prince02

    Re : PWM et pic16f876

    bjr hulk28

    aurais-tu un exemple en language assembleur

    merci d'avance

  11. #8
    invite03481543

    Re : PWM et pic16f876

    Il y a bien longtemps que je ne programme plus en assembleur, sauf cas particuliers.

    tu ne donnes pas la précision recherchée ainsi que la plage à acquérir
    En C je peux y regarder si tu me donnes les éléments.
    @+

  12. #9
    prince02

    Re : PWM et pic16f876

    re hulk

    c'est un pic 16f876
    4 MHhz
    adxl213 : http://www.datasheetcatalog.org/data...cio3ard3fy.pdf

    il me faut une precision de l'orde du 1/2 degres ( je pense)

    c'est pour la mise en defaut d'un porte-bobine sur une rotative Helio (imprimerie) : taille bobine 3m de largeur , poids max 5 tonnes, diametre 1.2 metres

    Donc pour eviter de tordre la table elevatrice ( si un embrayage lache d'un cote la table continu de monter jusqu'en butée haut de l'autre cote) , nous voulons mettre des inclinometres (1 par coté)

    c'est pourquoi il nous faut un systeme sensible , ensuite a l'aide du pic , je pourrais regler l'hysteresis a un seuil voulu ( defini sur le terrain)

    merci de votre aide

  13. #10
    carcan

    Re : PWM et pic16f876

    Re !

    il y a un truc que je ne pige pas ... tu as besoin de mesurer l'inclinaison et tu viens avec des accéléromètres ??? Peux-tu nous donner des détails sur le principe de ta mesure.

    A+
    Laurent

  14. #11
    prince02

    Re : PWM et pic16f876

    J'ai trouve sur le site suivant
    http://arn.gui.free.fr/assiette.htm

    qu'il mesurait l'inclinaison avec un ADXL250 mais probleme de bruit sortie de l'amplification

    du coup il a choisit un ADXL 202AE sortie PWM

    En vu des photos , il mesure bien des inclinaisons

    moi j'ai choisi ADXL213 qui sort uniquement en sortie PWM

    a+
    prince02

    ps : merci a tous pour votre aide

  15. #12
    prince02

    Re : PWM et pic16f876

    Re

    Est ce que quelqu'un as une solution a mon sujet?

    Je suis preneur a toutes vos idées

    a+
    Prince02

  16. Publicité
  17. #13
    prince02

    Re : PWM et pic16f876

    Hulk 28

    as-tu trouvé qqchose

    a+
    prince02

  18. #14
    invite03481543

    Re : PWM et pic16f876

    Ben, c'est surtout que je ne suis pas en vacances moi, donc il va falloir être un peu patient.

  19. #15
    prince02

    Re : PWM et pic16f876

    Re

    Hulk 28, j'attends que tu m'envoyes qqchose, pour pouvoir m'aider

    Merci d'avance

    Ps : Je ne suis egalement pas en vacance !

  20. #16
    invite03481543

    Re : PWM et pic16f876

    Bon voilà un début, je n'ai pas testé.
    J'ai pris une période de capteur de 50Hz pour le signal PWM.
    Avec ça tu peux déjà tester ton capteur, il vaut mieux commencer par injecter un signal de 50Hz (avec un géné ou un 555 en Astable) et faire varier le rapport cyclique pour valider les routines.

    Code:
    /******************************************************************************/
    /*   HULK28 pour le forum                                                     */
    /*   mesure et affichage d'un rapport cyclique capturé par le module CCP1     */
    /*   microcontroleur P16f877A , Quartz -> 10MHz                               */
    /*   Compilateur: MikroC 8.2                                                  */
    /*   Le 03/03/2009                                                            */
    /*   Fréquence fixe à 50Hz, rapport cyclique variable de 0 à 100%            */
    /******************************************************************************/
    
    #define     PERIODE     50000  // exprimé en temps local -> 20000µs/0,4µs
    
    /******************************************************************************/
    /*                    Déclaration des variables globales                      */
    /******************************************************************************/
    
    volatile unsigned int largeur_impulsion, Debut_Capture, Fin_Capture;
    
    /******************************************************************************/
    /*                    Déclaration des textes                                  */
    /******************************************************************************/
    
    char *text_LCD0 = "Mesures PWM v1.0";
    char *text_LCD1 = "Tps impuls.:";
    char *text_LCD2 = "Duty Cycle:"
     
    /******************************************************************************/
    /*                      Gestion des interruptions                             */
    /******************************************************************************/
    void interrupt()
          {
          if(PIR1.F2 == 1) // interruption détectée (évènement de capture)
            {
            TMR0 =
            PIR1.F2 = 0;        // on réinitialise le flag d'interruption
            if(CCP1CON.F0 == 1) // si un front montant est détecté
              {
              Debut_Capture = CCPR1L| CCPR1H << 8; 
              CCP1CON.F0 = 0; // on restaure le flag
              }
    
            else if(CCP1CON.F0 == 0) // si un front descendant est détecté
                   {
                   Fin_Capture = CCPR1L | CCPR1H << 8; // temps de départ
                                                       // de l'évènement à mesurer
                   affiche_resultat = 1;  // variable lançant la routine d'affichage
    
                   CCP1CON.F0 = 1; // On remet le bit en position
                                   // d'attente d'évènement
                   }
    
            }
          }
    
    /*************************** Fin interruptions ********************************/
    
    
    /******************************************************************************/
    /*                     Initialisation du PIC                                  */
    /******************************************************************************/
    void init_pic()
    { 
        CMCON  = 0x07;  // Comparateurs OFF
        PORTA  = 0;
        PORTB  = 0;
        PORTD  = 0;
        TRISA  = 0;
        TRISB  = 0;
        TRISD  = 0;
    
        OPTION_REG = 0b0000011; 
        PIE1 = 0b00000100;     // CCP1IE activé
        T1CON = 0b00000001;    // Timer1 activé
        CCP1CON = 0b00000101;  // mode Capture sur front montant
        INTCON = 0b11100000;   // GIE, PEIE et T0IE activé
    
        Lcd_Init(&PORTB);      // config LCD 4 bits sur portB
        // D7 -> PORTB.F7
        // D6 -> PORTB.F6
        // D5 -> PORTB.F5
        // D4 -> PORTB.F4
        // E  -> PORTB.F3
        // RS -> PORTB.F2
        // RW -> PORTB.F0
    }
    
    /******************************************************************************/
    /*                         Programme principal                                */
    /******************************************************************************/
    
    void main() 
    { 
       init_pic();
       
       Lcd_Cmd(LCD_CLEAR);       // commande d'éffacement
       LCD_Cmd(LCD_CURSOR_OFF);  // curseur OFF
       LCD_Out(1,3,text_LCD0);   // message d'accueil
    
       delay_ms(1500);
       Lcd_Cmd(LCD_CLEAR);
    
       while(1) 
       {
    
       if(affiche_resultat == 1)
         {
         INTCON.F7 = 0; // On interdit les interruptions le temps de faire le calcul
         Resultat  = ((Fin_Capture - Debut_Capture) * 4) / 10 ; // largeur d'impulsion en µs
         Pourcentage = (Resultat / PERIODE) * 100;
         INTCON.F7 = 1; // on réactive les interruptions
         affiche_resultat = 0;
         InttoStr(Resultat,aff_duree); // conversion d'un entier en chaine de caractères
         InttoStr(Pourcentage,aff_pourcentage);
         LCD_Out(1,13,aff_duree);
         LCD_Out_Cp("µs");
         LCD_Out(2, 12,aff_pourcentage);
         LCD_Out_Cp("%");
         affiche_resultat = 0;
         }
    
       }// fin while()
    }
    Avec ça tu devrais pouvoir avancer, dès que j'aurai un peu de temps j'enrichirai le programme.
    @+
    Dernière modification par HULK28 ; 03/03/2009 à 16h00.

  21. #17
    prince02

    Smile Re : PWM et pic16f876

    Slt Hulk28

    Je te remercie pour ton aide

    Je vais éplucher ton programme pour pouvoir le modifier si nécessaire

    Comme tu me le dis , si tu as un complément de programme , je suis preneur.

    Merci a toi
    a+
    Prince02

  22. #18
    Qristoff
    Animateur Électronique

    Re : PWM et pic16f876

    Salut,
    Il existe aussi des inclinometres...peut être mieux dédiés à ton application.
    http://www.signalquest.com/sq-si.htm

  23. Publicité
  24. #19
    prince02

    Re : PWM et pic16f876

    Slt Qristoff

    C'est vrai qu'il existe des inclinomètres tout fait ou mieux adapté, car nous utilisons déjà des inclinomètres du type Sensorex 2 axes (PU env 1700€) pour la même fonction
    Etant donné que nous avons 3 machines a équipé, a raison de 2 par machine , le calcul est vite fait

    C'est pourquoi , je m'interesse à la façon d'en réaliser à moindre coût, et de plus vraiment plus personnel

    Pour ce qui est du capteur , j'ai choisi celui là car plusieurs "petits génies" on déjà utilisé différents capteurs de cette gamme (donc possibilité d'avoir des info !)

    Merci quand même de ton post , je garde ta référence sous le coude

    a+
    Prince02

  25. #20
    prince02

    Re : PWM et pic16f876

    re Hulk 28

    Encore merci pour tes info

    Mais petit soucis , je programme en assembleur et non en C !

    Du coup, apres survol de ton listing , ta programmation parait plus simple a la compréhension ( par rapport a l'assembleur). Donc je me suis dit pourquoi pas apprendre le C (j'ai bien appris l'assembleur seul !!)

    Donc si tu avais quelques lien interessants : Apprentissage du C pour pic (hormis les recherches classiques sur Google) , cela m'interresse

    a+
    Prince02

Discussions similaires

  1. Calcul PWM Period / PWM Duty Cycle
    Par Paintitblack dans le forum Électronique
    Réponses: 14
    Dernier message: 02/12/2010, 20h34
  2. Programmation pic16f876
    Par clbri dans le forum Électronique
    Réponses: 0
    Dernier message: 09/02/2009, 01h39
  3. pb CAN du PIC16f876
    Par maxisteack1983 dans le forum Électronique
    Réponses: 11
    Dernier message: 11/05/2008, 21h16
  4. Pic16f876
    Par smartise73 dans le forum Électronique
    Réponses: 1
    Dernier message: 02/05/2006, 17h48
  5. PIC16F876
    Par Blacky dans le forum Électronique
    Réponses: 1
    Dernier message: 04/02/2004, 12h56
Découvrez nos comparatifs produits sur l'informatique et les technologies.