Hello,
J'ai un soucis avec mon code car je ne parviens pas à rentrer dans l'interruption qui permet de générer la rotation de mon moteur à plein régime
En résumé un codeur incrémentale envoie 4000 pulses PWM par tour complet (360°) sur le pic 18F4455 je dois donc compter ces pulses afin de faire déplacer une butée sur un rail à l'aide de ce moteur.
pour ce faire j'utilise le timer 2 pour le PWM sur un quartz externe 4MGHz ensuite j'utilise le timer 0 en mode compteur 16 bits pour compter une valeur max de 65535 pulses ce qui me permet de faire un peu plus de 16 tours de périmètre 9.42cm soit une distance de 1m50.
Pour les rampes d'accélérations et de décélérations, j'utilise une variable 8 bit qui s'incrémente ou se décrémente de 1 à 254 valeurs.
Puis pour le compteur de pulses une variable 16 bits.
le code:
void Interrupt()
{
TMR0L = 0xFF;
TMR0H = 0xFF; // Pré-charge le registre timer 0 sur 16 bits
if (edge==1) // si le pic détecte un front positif sur le signal du codeur
{
moteur = 1; // mise en route moteur
accélère = 1; // while (compte!=254) {compte++;}
if (compte_pulses==20000) // si le compteur de pulses a permis au moteur de faire 5 tours
{
flag de débordement = 1; // comme son nom l'indique le flag de débordement passe à 1 et ainsi arrête le compteur de pulses
}
else
{
flag = 0; // le flag reste à 0
compte_pulses++; // le compteur s'incrémente jusqu'à atteindre cette valeur
}
}
}
Voilà si quelqu'un a une petite idée de ce qui ne va pas ce serait sympa merci
-----