Page d'accueil

 

Robot télécommandé

 

III) La commande du moteur à courant continu : MCC

 

La commande du moteur à courant continu va être effectuée par PWM, et la partie étage de puissance au moyen d'un pont en H avec un circuit intégré du type L298N.

Le gros avantage d'utiliser un pont en H est de pouvoir faire tourner le moteur dans les 2 sens. (Avant/Arrière)

Principe du pont en H :

Voici comment se présente un pont en H, et comment on relie nos signaux de PWM :

 

Le principe est relativement simple :

Lorsque l'on a PWM à 1 : Les transistors Q1 et Q4 conduisent, alors que Q2 et Q3 sont bloqués. Ainsi, le courant se forme dans le sens suivant, et le moteur tourne dans le sens directe :

 

Si maintenant on a PWM à 0 : Q1 et Q4 sont bloqués, et Q2 et Q3 conduisent. Ainsi, le courant circule dans l'autre sens, et le moteur tourne cette fois-ci dans le sens inverse :

 

Ainsi, si on applique un signal PWM très rapide pour le moteur (de l'ordre de 10 KHz), alors celui ci n'aura pas le temps de réagire aux changements de sens du courant. Ainsi, le moteur à courant continu verra la tension moyenne du signal qui lui est appliqué à ses bornes.

Cela signifie que pour que le moteur soit arrêté, il faut un rapport cyclique de 50%.

 

Réalisation du signal PWM :

Voici le code C permettant de réaliser un signal PWM variable en fonction d'un potentiomètre :

// RA0=AN0 : entrée : Acquisition potentiomètre

// Définition des sous programmes

void init_ES(void);
void init_CAN(void);
void init_PWM(void);
void init_Timer2(void);

// Définition des variables

char vitesse;

// Programme principal

void main(void)
{

INTCON=0; // Pas d'interruptions
init_ES();
init_CAN();
init_Timer2();
init_PWM();

while(1)

{
ADCON0|=5; // Lance la conversion de AN0
while(((ADCON0)&(4))==1); // Attente fin de conversion
vitesse=ADRESH; // Résultat de la conversion dans vitesse
CCPR1L=vitesse; // Rapport cyclique = vitesse
}

}

// Initialisation des Entrées/Sorties

void init_ES(void)
{


TRISA=0xFF; // RA0=AN0
TRISC=0; // Configure RC2=CCP1


}

// initialisation CAN voie 0 AN0
void init_CAN(void)
{


ADCON0=1; // AN0
ADCON1=0; // Résultat sur 10 bits de poids forts

}

// Initialisation de la fonction PWM pour le MCC
void init_PWM(void)
{


CCP1CON=12; //Mode PWM
CCPR1L=100; //Rapport cyclique au départ

}

// Initialisation du Timer 2
void init_Timer2(void)
{


T2CON=4; //Démarre timer2
PR2=200; //Période compteur = environ 5KHz avec quartz=4MHz

}

 

 

Voici les résultats :

PWM permettant de faire tourner le moteur dans le sens inverse plus ou moin rapidement suivant le potentiomètre :

Doucement
A fond

PWM permettant d'arrêter le moteur (= sans toucher le potentiomètre de la télécommande) :

PWM permettant de faire tourner le moteur dans le sens directe plus ou moin rapidement suivant le potentiomètre :

Doucement
A fond

 

Il ne reste plus qu'à appliquer ces signaux sur le pont en H pour voir le moteur s'executer en fonction des différentes valeurs du potentiomètre.