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 PIC16F628.
- quelques bricoles
La voila :
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 oeuvre 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 magéntiques (aimants au néodyme) et d'un stator comportant les bobines. Les bobines sont commandées électroniquement de façon à engendrer le champ magnétique ad-hoc.
En voici un schéma extrait de la note d'application AN857 de Microchip (voir références).
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
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 losqu'il est à l'arrêt). Le problème concerne notamment le démarrage du moteur.
Dans notre cas, nous allons simplement utiliser une séquence de démarrage suffisamment lente. 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 (si le couple et la vitesse de rotation sont faibles).
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
Le 16F628A ne dispose pas d'entrée ADC, mais il dispose de deux comparateurs qui peuvent être connectés sur les broches AN0, AN1, AN2 et AN3. Le chip propose divers schéma de comparaison dont l'un permet la comparaison de l'un 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]