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;
}
es ce que tu a fait des teste pour d'autre vitesse et es ce que c'est toujour la moitié?
28/10/2008 - 14h44
jipewily
Date d'inscription
septembre 2008
Messages
9
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 ?
28/10/2008 - 14h54
jack12
Date d'inscription
octobre 2008
Messages
77
Re : compteur de tour moteur avec un PIC18F452
ou configure tu le timer1?
28/10/2008 - 15h01
jipewily
Date d'inscription
septembre 2008
Messages
9
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
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.
28/10/2008 - 15h14
jipewily
Date d'inscription
septembre 2008
Messages
9
Re : compteur de tour moteur avec un PIC18F452
Je vérifie tout de suite
28/10/2008 - 15h51
jipewily
Date d'inscription
septembre 2008
Messages
9
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