Table of Contents

Moteur DC

Necessary knowledge: [HW] Motor Module, [AVR] Digital Inputs/Outputs, [LIB] Motors, [LIB] Delay

Connaissances nécessaires: [HW] motor, [AVR] Entrées/sorties numériques, [LIB] motor, [LIB] delay

Théorie

Moteur à courant continu

Les moteurs DC avec des aimants permanents sont très courants dans différentes applications, avec de petites dimensions, lorsqu’on recherche beaucoup de puissance à bas prix. A cause de leur vitesse assez importante, ils sont utilisés dans plusieurs sortes de transmission (pour obtenir beaucoup de couple avec peu de vitesse).

Le graph parfait de la relation entre la vitesse (V), le courant (I), la puissance (P), le rendement (η) et le couple (T) d’un moteur DC.

Les moteurs DC à aimant permanent sont d’une fabrication assez simple et les commander est assez élémentaire. Bien que les contrôler soit assez simple, leur vitesse n’est pas déterminée précisément par le signal de contrôle parce qu’il dépend de nombreux autres facteurs, dont le couple appliqué sur l’arbre et le courant d’alimentation. La relation entre le couple et la vitesse d’un moteur DC parfait est linéaire, ce qui signifie que : plus grand est l’effort sur l’arbre, plus petite est la vitesse de l’arbre et plus grand est le courant dans la bobine.

Les moteurs DC utilisent la tension DC et ne nécessitent pas de contrôle électronique supplémentaire puisque toutes les communications nécessaires sont faites dans le moteur. Lorsque le moteur fonctionne, deux broches statiques glissent dans le commutateur de rotation et garde la tension dans la bobine. La direction de la rotation du moteur est déterminée par la polarité du courant appliqué. Si le moteur ne doit tourner que dans une seule direction, alors le courant peut passer à travers un relai ou tout autre connexion simple. Si le moteur doit tourner dans plusieurs directions, on utilisera un circuit électronique appelé H-bridge (ou “demi-pont”) .

Principe de fonctionnement du H-bridge utilisé avec les interrupteurs.

Dans le H-bridge il y a quatre transistors (ou quatre groupes) qui dirigent le courant pour faire tourner le moteur. Le schéma électrique du H-bridge ressemble à la lettre H et c’est pourquoi on le nomme ainsi. La particularité du H-bridge est la possibilité d’appliquer plusieurs directions de polarité au moteur. L’illustration montre le schéma principal d’un H-bridge avec l’exemple d’interrupteurs. Si deux interrupteurs en diagonale sont fermés, le moteur démarre. La direction de la rotation dépend de laquelle des deux diagonales est fermée. Dans les vrais H-bridge les interrupteurs sont remplacés par des transistors qui sont selectionnés en fonction du courant du moteur et de la tension.

En plus de changer la direction de la rotation, le H-bridge permet de modifier la vitesse de rotation. Pour ce faire, les transistors doivent être ouvert et fermés constamment en utilisant la modulation de la largeur de l’impulsion (PWM), ainsi l’énergie totale fournie au moteur est quelquepart entre le moteur éteint et le moteur fonctionnant à pleine puissance. Le temps d’ouverture dans toutes les périodes du PWM est appelé cycle de service, donné en pourcent. 0% signifie que le transistor est constamment fermé – ce n’est pas du courant conducteur. 100% signifie que le transistor est constamment fermé ainsi le courant conducteur. La fréquence du PWM doit être assez élevée afin d’éviter les vibrations dans l’arbre du moteur. A petites fréquences le moteur produit du bruit, on utilise alors le plus fréquemment une fréquence de modulation de 20 kHz. D’autre part le rendement du H-bridge n’est pas très bon à hautes fréquences. Les vibrations de l’arbre du moteur sont réduites par l’inertie du rotor et l’induction des bobines.

Pour les courants peu conducteurs, il existe des H-bridges intégrés. Pour les courants spéciaux plus importants, on utilise les MOSFET-s. Le H-bridge avec d’autres composants est appelé contrôleur du moteur ou driver. Le driver du moteur DC du Home Lab L293D inclus deux H-bridges intégrés et un circuit de diodes. Le moteur est contrôlé avec trois signaux numériques dont l’un d’entre eux est le signal d’activation de l’opération enable alors que les deux autres déterminent l’état des transistors du H-bridge. L’ouverture simultanés des deux transistors verticaux ne doit jamais se produire, cela provoquerait un court circuit de la source d‘alimentation. Cela signifie que le driver est conçu comme étant infaillible et la seule option qui peut être choisie est quel transistor (inférieur ou supérieur) d’un côté du H-bridge est ouvert. En d’autres mots, on sélectionne la polarité en utilisant deux signaux pilotant qui s’appliquent aux deux extrémités de la bobine du moteur.

Note: ne pas confondre les signaux RC PWM et les signaux classiques PWM.

Pratique

La carte des moteurs du Home Lab permet de connecter quatre moteurs DC. Les schémas et instructions de connexion sont dans le chapitre “Motors module”. Fondamentalement, pour chacun des moteurs on trouve un H-bridge correspondant avec deux broches de sortie numérique du micro contrôleur, parce que la broche enable est constamment en position haute. Si plusieurs broches de contrôle ont la même valeur, soit le moteur s’arrète s’il est différent soit il tourne dans le sens correspondant. L’état du H-bridge fonctionne selon la table suivante :

Input A Input B Output A Output B Result
0 0 - - Le moteur s’arrête
1 1 + + Le moteur s’arrête
1 0 + - Le moteur tourne dans la direction 1
0 1 - + Le moteur tourne dans la direction 2

Les moteurs DC peuvent être contrôlés en influençant directement les broches de commande du micro contrôleur correspondantes aux broches en entrée. On trouve dans la librairie du Home Lab les fonctions simplifiées qui servent à la commande du moteur :

//
// The setup of the pins of the DC motor controller.
//
static pin dcmotor_pins[4][2] =
{
	{ PIN(B, 7), PIN(B, 4) },
	{ PIN(D, 1), PIN(D, 0) },
	{ PIN(D, 7), PIN(D, 6) },
	{ PIN(D, 5), PIN(D, 4) }
};
 
//
// Allowing the control of the chosen DC motor.
//
void dcmotor_init(unsigned char index)
{	
	pin_setup_output(dcmotor_pins[index][0]);
	pin_setup_output(dcmotor_pins[index][1]);
}
 
//
// Determining the operation and the direction of the chosen DC motor.
//
void dcmotor_drive(unsigned char index, signed char direction)
{	
	pin_set_to(dcmotor_pins[index][0], direction < 0);			
	pin_set_to(dcmotor_pins[index][1], direction > 0);
}

Grâce à la liste dcmotor_pins dans la librairie, on défini les broches de contrôle des quatre motor-controller. Avant de contrôler les moteurs, on doit appeler la fonction dcmotor_init avec le nombre de motor-controller (0 – 3). On doit définir les broches comme des sorties. Le contrôle du moteur est géré par la fonction dcmotor_drive, en utilisant le paramètre de direction négatif pour donner au moteur un mouvement de rotation dans l’une des directions sachant que l’autre direction utilise le paramètre positif et 0 pour arrêter le moteur.

Le programme suivant est un exemple qui permet de contrôler les deux premiers moteurs DC en inversant de direction de rotation toutes les secondes. La vitesse pourrait être modifiée en contrôlant l’une des broches par la modulant par un signal PWM.

//
// Testing program of the DC motor of the motor's module of the home-lab.
//
#include <homelab/module/motors.h>
#include <homelab/delay.h>
 
//
// Main program
//
int main(void)
{
	// Variable of direction
	signed char direction = 1;
 
	// Setup of motors no 1 and 2.
	dcmotor_init(0);
	dcmotor_init(1);
 
	// Endless loop
	while (true)
	{
		// One motor revolves in one direction and the other one to other direction.
		dcmotor_drive(0, -direction);
		dcmotor_drive(1, +direction);
 
		// Break for 1 second.
		sw_delay_ms(1000);
 
		// Turning the direction.
		direction = -direction;
	}
}