Petite carte de contrôle du moteur brushless
From Eric
Contents |
Objectif
Piloter un moteur sans balais à courant continu (Brushless DC, BLDC), sans capteur de position (sensorless).
Le montage
Le montage est très simple :
- un moteur brushless,
- 2 double ponts en H L298,
- un ET (74LS08) permettant de "distribuer" le signal PWM,
- un PIC16F628,
- quelques bricoles...
En voici une photo de la première version, avec un moteur issu d'un lecteur iomega :
et voici la deuxième version, avec un moteur de disque dur :
J'utilise des L298 pour ne pas avoir à câbler des ponts en H et bénéficier de la logique d'exclusion mise en œuvre dans le L298. J'aurais pu construire un pont en H à MOSFETs, mais comme le moteur est de faible puissance et qu'il s'agit essentiellement d'expérimenter le côté "sensorless", j'ai fait au plus court.
Principe d'un moteur brushless
Un moteur "brushless" est composé d'un rotor comportant les éléments magnétiques (aimants au néodyme) et d'un stator comportant les bobines. Les bobines sont commandées électroniquement de façon à engendrer la séquence de champs magnétiques ad-hoc.
Pour un moteur à trois phases A, B, C, la séquence de commandes à réaliser est la suivante :
1 : A + | B flottant | C - 2 : A flottant | B + | C - 3 : A - | B + | C flottant 4 : A - | B flottant | C + 5 : A flottant | B - | C + 6 : A + | B - | C flottant
Voila ce que l'on observe à l'oscilloscope :
On constate qu'il existe toujours une phase parmi les 3 qui "flotte", c'est-à-dire qui est non alimentée.
A un instant donné, le sous-ensemble des bobines à commander dépend naturellement de la position du rotor. Deux solutions peuvent être utilisées pour déterminer cette position :
- utiliser des capteurs de position, tels des capteurs optiques ou à effets Hall,
- mesurer la force électromotrice générée dans les bobines.
Nous nous intéressons à la deuxième solution.
L'idée est (dans le principe) assez simple : la position du rotor est déterminée par la mesure de la tension sur la phase flottante.
Sur certain moteurs, le point central (commun) des trois groupes de bobines est accessible : dans ce cas, la mesure de la tension est facile. Dans la plupart des cas, ce point n'est pas accessible et il faut "reconstruire" le point milieu à partir des tensions disponibles. Cela peut se faire en utilisant un pont de trois résistances entre les phases A, B et C.
Une deuxième difficulté apparaît lorsque le moteur est commandé en PWM, car dans ce cas la tension au point commun est très bruitée. Il faut donc la filtrer au moyen d'un filtre passe-bas.
Une troisième difficulté concerne la mesure de la force contre-électromotrice lorsque le moteur tourne lentement (et a fortiori lorsqu'il est à l'arrêt). Le problème concerne notamment le démarrage du moteur, mais dans notre cas où le couple est constant (et faible), on utilise simplement une séquence de commandes adaptée. En effet, et dans une certaine mesure, les moteurs brushless peuvent être contrôlés en boucle ouverte car ils agissent en synchronisme avec la commande.
L'utilisation du PIC 16F628
Le PWM
Le signal PWM est généré de façon autonome par le PIC via le timer 2 et le module CCP (Capture/Compare/PWM). Le signal PWM disponible sur la sortie RB3/CCP and ANDé avec les 3 signaux ENAble destinés aux L298.
L'observation du Zero-Cross event
Contrôle interne
L'observation s'effectue à l'aide de trois comparateurs LM311 câblés ainsi :
(Ce schéma est à répéter 3 fois, une fois par phase.)
La photo suivante montre le signal aux bornes d'une des trois bobines : commandé 2 fois sur 3 et flottant la troisième. Le signal devient flottant lorsqu'on cesse de l'alimenter (ce qui se traduit par un pic lors de la coupure). La tension dépend alors de l'angle de rotation du moteur, ce qui se traduit par une tension croissante en fonction du temps.
Contrôle externe
Le 16F628A ne dispose pas d'entrée ADC, mais il dispose de deux comparateurs qui peuvent être connectés aux broches AN0, AN1, AN2 et AN3. Le chip propose divers schéma de comparaison dont l'un permet la comparaison de l'une quelconque des broches ANi (choisie par configuration) avec une tension de référence VREF générée par le chip.
La tension VREF est configurable :
Références
- Application note AVR444, Sensorless control of 3-phase brushless DC motor
- AN857, Brushless DC Motor Control Made Easy, [1]. ce document d'un quarantaine de page est très détaillé. Il donne notamment les quelques équations à connaître concernant le calcul de la force contre-électromotrice (la BEMF).
- Direct Back EMF Detection Method for Sensorless Brushless DC (BLDC) Motor Drives de Jianwen Shao [2]