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

compteur de tour moteur avec un PIC18F452



  1. #1
    jipewily

    compteur de tour moteur avec un PIC18F452

    Bonjour à tous,
    je désire compter la vitesse d'un moteur à l'aide d'un capteur à effet hall.
    J'utilise pour cela l'entrée RA4/TOCKI qui est relié à la sortie du capteur.
    En visualisant le signal du capteur à l'aide d'un oscilloscope j'obtiens une vitesse de 76 tr/mn mais en calculant la différence entre deux valeurs du TIMER0 pendant une durée de 1 minute je trouve une vitesse de 38 tr/mn. Soit la moitier de la valeur attendue.
    Si vous avez déjà été dans cette situation pouvez vous me donné la réponse à mon intérogation ?

    Voilà le programme partiel


    /****************************** ********************/
    //Quartz de 8 Mhz avec activation de la PLL interne
    //Donc fréquence interne de 32 Mhz

    void main(void)
    {

    // Disable_All_Interrupt();
    ADCON1 = 0x45; // Configure 2 entrées analogiques et +Vref relié à RA3 ADFM=0 justification à gauche; Fosc/64 ADCS2=0/
    ADCON0 = 0x81; // ADON=1; ADCS1=1 ADCS0=0
    TRISA = 0x19; // PORTA en entrée bits 0-3 et sortie bits 4-7
    TRISB = 0x00; // PORTB en sortie
    TRISC = 0x04;
    TRISD = 0x01; // PORTD en sortie sauf bit0
    TRISE = 0x02; // PORTD en sortie sauf bit1


    // config du timer0 TMR0
    TMR0H=0x00;
    TMR0L=0x00;
    T0CONbits.T08BIT=0; // Compteur 16 bits
    T0CONbits.T0PS2 = 0; // Prédiviseur= 1/2 période de sortie de 8us
    T0CONbits.T0PS1 = 0;
    T0CONbits.T0PS0 = 0; //
    T0CONbits.T0CS = 1; // Compte les fronts sur l'entrée T0CKI (Hall)
    T0CONbits.T0SE = 1; // compte sur front descendant
    T0CONbits.PSA = 0; // non Passage par le prédiviseur
    T0CONbits.TMR0ON = 1; // active le compteur TMR0
    INTCONbits.GIE=1; // activation des interruptions
    while (1);

    }

    /****************************** ****************************** ****************************** ****
    interruption à chaque dépassement du TIMER1 passage de 0xFFFF à 0 référence de 4,096 ms
    ****************************** ****************************** ****************************** ****/
    void it_timer1_dep (void)
    { PIR1bits.TMR1IF=0; // effacer le drapeau correspondant
    TMR1H=0xEF; // TMR1=0xFFFF - 0x01000
    TMR1L=0xFF;
    compteur_calcul_1mn++;

    if (compteur_calcul_1mn>14648) // fait un calcul toutes les minutes environ
    {
    compteur_calcul_1mn=0;
    tim0_s = TMR0L; // le Timer0 est incréménté à chaque tour du moteur
    tim0_s +=TMR0H*0x100;
    if (tim0_s>tim0_p)
    vit_mot=(tim0_s-tim0_p); // vitesse en tr/mn
    else vit_mot=((0xFFFF-tim0_p)+tim0_s); //cas de dépassement
    tim0_p=tim0_s;
    }


    }
    /****************************** *******************/

    -----


  2. Publicité
  3. #2
    jack12

    Re : compteur de tour moteur avec un PIC18F452

    es ce que tu a fait des teste pour d'autre vitesse et es ce que c'est toujour la moitié?

  4. #3
    jipewily

    Re : compteur de tour moteur avec un PIC18F452

    Oui en effet quelle que sit la vitesse j'obtiens toujours la moitié.
    Je tourne en rond et je n'ai pas encore trouvé la réponse.
    Merci encore avez vous d'autres solutions ?

  5. #4
    jack12

    Re : compteur de tour moteur avec un PIC18F452

    ou configure tu le timer1?

  6. #5
    jipewily

    Re : compteur de tour moteur avec un PIC18F452

    je ne l'avais pas placer la configuration du timer1, mais cette partie fonctionne très bien.
    Voilà à quoi cela ressemble:

    // config du timer1 TMR1
    TMR1H=0xEF; // TMR1=0xFFFF - 0x01000
    TMR1L=0xFF;
    T1CONbits.RD16=0; // mode ecriture en 2 octets L et H
    T1CONbits.T1CKPS1 = 1; // Prédiviseur= 1/8 période de sortie de 8us
    T1CONbits.T1CKPS0 = 1; //
    T1CONbits.T1OSCEN = 0; // désactiver l'oscillateur externe
    T1CONbits.T1SYNC = 1; // Pas de synchro
    T1CONbits.TMR1CS = 0; // Compte les impulsions sur l'horloge interne
    T1CONbits.TMR1ON = 1; // active le compteur TMR1

    //config du Timer1
    IPR1bits.TMR1IP=1; //active la priorité d'interruption
    PIE1bits.TMR1IE=1; // autorisation d'interruption à chaque dépassement du TIMER1

  7. A voir en vidéo sur Futura
  8. #6
    jack12

    Re : compteur de tour moteur avec un PIC18F452

    peut tu ou a tu vérifier que tu a ton interruption toutes les 4 milli secondes.
    dans ton interruption du timer 1 rajoute un LATB0!=LATB0 (par exemple) pour vérifier que tu a bien un signal carré de période 8 ms.
    car j'ai un doute a se niveau là, je pense que tu a plutot 4ms et si c'est le cas alors on a trouver le souci.

  9. Publicité
  10. #7
    jipewily

    Re : compteur de tour moteur avec un PIC18F452

    Je vérifie tout de suite

  11. #8
    jipewily

    Re : compteur de tour moteur avec un PIC18F452

    J'ai rajouté l'instruction suivante: LATC^=0x80;
    J'ai bien un interruption toutes les 4 ms environ car j'obtiens une période de 8ms

Sur le même thème :

Discussions similaires

  1. Probleme avec PIC18f452 et pickit2
    Par McCorwin dans le forum Électronique
    Réponses: 6
    Dernier message: 19/07/2008, 13h46
  2. Compteur de tour pour une course vélo
    Par rvdth dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 12/05/2008, 23h55
  3. fabriquer compteur de tour
    Par phoenix440 dans le forum Électronique
    Réponses: 9
    Dernier message: 02/02/2008, 09h17
  4. compteur de tour avec temps de passage
    Par marti67 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 14/01/2008, 17h17
  5. vous cherchez un pic18f452 avec bootloader ?
    Par tyro dans le forum Électronique
    Réponses: 0
    Dernier message: 27/03/2007, 09h23