Contrôleur brushless: comment ça marche?

Extrait du site http://www.silicium628.fr

Je décris ci-dessous une carte électronique qui me donne satisfaction, sachant que je ne suis plus vraiment débutant en électronique. Ce montage est alimenté par un accu Lithium Polymère. Ces Accus sont extraordinaires de capacité et de légèreté, mais sont réputés dangereux dans des mains peu expertes. Ils peuvent exploser ou prendre feu en cas de court-circuit ou de surcharge.

Donc je montre ici ce que je fais, mais je ne vous encourage pas à en faire autant, c'est vous qui voyez.

Si vous n'avez pas de solides connaissances en électronique et en programmation des microcontroleurs, je vous conseille d'acheter un variateur tout fait, en en trouve à 50 euros (en 2005) à 20 euros (2007), à 14 euros (2011)

Quant-à moi:

  • Je ne vends rien. Pour ceux qui me demandent "combien ça coûte ?" : voyez le prix des composants chez les fournisseurs
  • (tels que "Selectronic" ou "Electronique Diffusion", ou autres... ils ont des sites très pratiques pour cela)
  • Il est hors de question que j'adapte mes réalisations à vos besoins personnels !
  • les réalisations que je publie ici évoluent parfois (trop) lentement, c'est parce que je fais plusieurs choses à la fois.

Pour ceux qui ne sont pas partis, je vous expose la suite:

  • Montage évolutif puisque le PIC16F628 est un uP flash reprogrammable.

Le prototype:

 


Au début il y avait ça ! Le montage en cours de test sur plaque d'essai. A gauche, le micro-récepteur de radiocommande (poids 5g...) On distingue les six transistors MOSFET qui commutent les enroulements du moteur, ainsi que le microcontrôleur qui génère les tensions de commande suivant un timing très précis. Il va sans dire que la version définitive sera réalisée avec des composants CMS ( SMD en Anglais, composants miniatures de montage en surface).

LE MOTEUR

 


Le moteur est un REX 220 FLYWARE
  • type LRK (9 pôles et 12 aimants).
  • conçu pour être alimenté par 2 à 3 éléments LIPO (Lithium-polymère).
  • 1350 rpm/V.
  • 220 milli-ohm.
  • masse 31g.

Les moteurs brushless (sans balais ni charbons) développent un couple important de par leur principe de fonctionnement: le champ tournant créé par les tensions triphasées appliquées aux enroulements doit faire PLUSIEURS TOURS pour que le rotor (cage extérieure portant les aimants) fasse un seul tour (voir plus bas). Cela fait l'effet d'une démultiplication (magnétique), sans réducteur mécanique d'aucune sorte, le résultat étant une vitesse de rotation plus faible et un couple plus important. ( La puissance étant égale au produit du couple par la vitesse angulaire, pour une puissance restituée donnée, la vitesse est inversement proportionnelle au couple et vice versa). Je vous explique cela en détail un peu plus bas...

LE SCHEMA

Remarques:

Rôle des résistances (R11,12,13) de 10k reliant la gate des MOSFETS côté (-) à GND: Les Ports du PIC sont placés en haute impédance lors du reset. Sans ces résistances, lors du reset, les MOSFETS coté (+) et (-) d'une même phase pourraient conduire simultanément provoquant un court circuit sur l'alimentation et leur destruction immédiate.

Rôle des résistances (R34,35,36) de 100 ohm: Le PIC ne supporte pas de débiter sur la charge capacitive que représente la gate des IRF7455 (3,5 nF + l'effet Miller, le double que pour les IRFZ44). En fait, sur charge capacitive, et sans ces résistances, le port concerné configuré en sortie se bloque à GND après une impulsion avortée à peine visible à l'oscillo.

LE FIRMWARE pour le PIC16F628

Tout d'abord voici l'organigramme (définissant la boucle principale seulement) La production et le découpage des signaux de sortie, ainsi que le décodage des signaux de la télécommande et l'interprétation des signaux BEMF se fait par tout un jeu d'interruptions matérielles et logicielles. (Voir le .asm)

Notes:

-T_PPM représente la durée des impulsions PPM (Phase pulse modulation) de la radiocaommande.
-Les notations (N1, N2 etc...) utilisées sur cet organigramme se retrouvent dans le listing en assembleur.

Circuit imprimé de la version de test:

 


J'ai tout implanté sur un circuit simple face ! La version définitive sera en CMS. (Le schéma subira en conséquence des modifications, en particulier les transistors MOSFET seront des IRF7455 au lieu de IRL44)

Voici un prototype DE TEST en composants classiques. Masse 30g. La version définitive sera en CMS devrait faire moins de 10g.

Note: Le schéma a beaucoup évolué depuis cette version, la rendant totalement obsolète. En conséquence ne me demandez pas de vous fournir le typon du circuit imprimé.

Constitution du moteur

  • Le rotor est constitué d'une cloche à la périphérie de laquelle sont collés 12 aimants permanents très puissants.
  • Le stator, qui est fixe, se compose de 9 bobines ne comprenant chacune que quelques spires de fil émaillé. Ces bobines sont reliées en trois ensembles de trois  bobines en séries. Chacun de ces 3 ensembles a donc 2 fils d'alimentations. l'un de ces fils est relié à un point commun non accessible, reste trois fils qui constituent les 3 fils sortant du moteur (Montage en étoile, chaque branche de l'étoile constituée par 3 bobines en série). voir Fig1 ci-dessous.
  • A un instant donné seuls deux de ces trois fils sont reliés par le variateur à l'accu d'alimentation.

Principe de fonctionnement


On a vu plus haut qu'à un instant donné seul deux des trois fils du moteur sont reliés par le variateur à l'accu d'alimentation. Cela se traduit sur la Fig.2 ci-dessus par le fait que le courant entrant par une série de trois bobines produit trois pôles Sud, puis, via le point commun, ressortant par une des deux autres séries de trois bobines, produit trois pôles Nord.
  • En sélectionnant judicieusement dans quel ordre on alimente les branches de l'étoile, on obtient le timing de la Fig2. Les flèches vertes indiquent les courants électriques qui passent pour chacune des six temps. 

  • A un instant donné un seul de ces six courants est présent.

Timing des tensions de commande alimentant les six transistors MOSFET de puissance:

  • La lettre "H" désigne le transistor reliant une phase au +7V (celui du Haut sur le schéma), et la lettre "L" désigne celui du bas sur le schéma, reliant la phase à la masse. Ces transistors, je le rappelle, sont montés en "pont en H" (voir le schéma, transistors IRLZ44)
  • Les chiffres en haut indiquent les six temps.
  • Lorsque le signal en vert est en haut (1 logique), le transistor concerné conduit, sinon il reste bloqué.
  • Ainsi on voit par exemple qu'au temps 4 le transistor H de la phase 1 conduit en même temps que celui L de la phase2.  Il passe alors un courant entrant par le fil de la phase 1 et sortant par le fil de la phase 2.
  • Il y a toujours exactement 2 transistors en conduction, jamais plus, et jamais 2 de la même phase bien sûr ! (sinon court-circuit direct entre le plus et le moins de l'accu, aie, aie, aie, comptez 60 A sur un accu LIPO)

Capteur de position angulaire

 


J'avais placé un capteur à effet Hall UGN 3503 externe POUR LES TESTS. Il "voyait passer" les aimants du rotor. Sa position était ajustable. FINI ! Plus de capteur externe !

La rotation analysée pas à pas

La séquence de photos ci-dessus nous montre le timing du champ tournant et la réponse du moteur:

Entre chaque image le moteur tourne de 10 degrés. Il faut 36 images (dont je ne représente ci-dessous que les 4 premières) pour effectuer un tour mécanique complet.

Faut-il le rappeler ? : les pôles de même signe (Nord-Nord ou Sud- Sud) se repoussent, ceux de signe contraire (Nord- Sud) s'attirent. J'ai représenté les pôles Sud en rouge et les pôles Nord en bleu. Un des aimants est repéré par un "x" jaune afin de mieux visualiser la rotation.

On constate que:

  • l'espacement angulaire des bobines est de 360/9= 40 degrés
  • l'espacement angulaire entre les aimants est de 360/12= 30 degrés
  • à chaque pas, l'aimant suivant (orienté +30 deg) fait face à la bobine suivante (orientée +40 deg) donc le stator tourne de 40-30 = 10 degrés, soit 6 fois moins vite que le champ.
  • un tour moteur (360º mécanique) se décompose électroniquement en 36 phases électriques.
  • la période de récurrence des signaux électriques est de 6 temps. (il y a six états distincts de commutations, puis le cycle reprend à l'identique)
  • A l'issue de ces 6 phases temporelles, le programme retombe dans le même cycle.
  • Lorsque le champ magnétique engendré par les bobines du stator (qui est fixe, au centre du moteur) fait 1 tour(*) (360 degrés soit 36 phases électriques) le rotor (cloche) ne tourne que de 60 degrés: SIX FOIS MOINS VITE.

(*) notion ambiguë ici vu les lignes de forces au formes complexes et mouvantes du champ en question...

C'est simple non ?

En fait pas tant que ça !

Je vous ai en effet expliqué comment le moteur, lorsqu'on lui applique les bons signaux, veut bien se donner la peine de tourner. Oui mais ces signaux, il faut les produire ! Et ça ce n'est pas si simple. Analysons le problème:

Il semblerait qu'il suffise de générer trois signaux rectangulaires déphasés de 120 degrés (2pi/3), un courant triphasé en quelque sorte, (plus exactement des tensions) et l'appliquer au moteur pour que celui-ci se mette à tourner. Hé bien ça ne marche pas ! Imaginez qu'on applique un tel courant triphasé ayant une certaine fréquence, par exemple 60Hz... le moteur au repos ne peux pas se mettre INSTANTANÉMENT à tourner à une dizaine de tours à la seconde, comme ça clac ! On pourrait penser qu'il va se mettre à accélérer progressivement depuis zéro jusqu'à la bonne vitesse correspondant à la fréquence du courant... hé bien justement, les vitesses intermédiaires qu'il devrait prendre ne correspondent PAS à la fréquence du courant ! Et le moteur ne se mettra donc pas à tourner, il entrera en vibration, c'est tout ! (Les moteurs de machines à laver un peu anciennes savaient le faire, mais c'était des moteurs ASYNCHRONES à champ glissant, sans aimants permanents. Les Brushless dont je parle sont plutôt des moteurs SYNCHRONES )

Bon, me direz vous, si le moteur ne s'adapte pas à la fréquence du courant, adaptons la fréquence au moteur . On lui applique d'abord une fréquence nulle... heu c'est quoi une fréquence nulle ? Bon d'accord, disons une fréquence très faible, genre 1 Hz qui le fera vibrer, puis on augmente la fréquence progressivement en laissant le temps au moteur d'accélérer pour suivre docilement cette fréquence. Ce n'est pas une mauvaise idée, il s'agit d'un moteur dit synchrone, ça marche, mais ça pose des problèmes...

En simplifiant un peu, si on augmente le couple (on freine le moteur) une fois la vitesse désirée obtenue, il décrochera brusquement. La vitesse de rotation ne pouvant plus suivre la fréquence d'alimentation, le moteur arrêtera de tourner et se mettra à vibrer à la place, et pourrait même être détruit ! Il faudrait pour éviter le décrochage, soit augmenter l'intensité du courant d'alimentation, soit... diminuer la fréquence. Ce qui est très compliqué à réaliser. Détecter le couple ? comment ? On peut mesurer le courant. Pas simple... Et surtout: si le couple augmente très brusquement, même une fraction de seconde, le moteur décrochera quand même. Et un moteur synchrone décroché ne raccroche pas. Il faut alors détecter le fait qu'il ne tourne plus, et ré-appliquer une fréquence partant de zéro... Sans compter que si le moteur propulse une voiture... elle risque de se vendre très mal.

Mais alors que faire ? le moteur ne s'adapte pas à la fréquence du courant, et il est difficile d'adapter le fréquence au régime du moteur et aux aléas de la tension d'alimentation, du couple etc...

L'IDEE : Et si c'était le moteur qui indiquait au montage électronique ce qui lui convient comme signaux de commande, à tout moment ? V'la que c'est le moteur qui commande au courant maintenant !

Mais réfléchissons un peu à ce qui se passe dans un moteur à courant continu, à collecteur, balais et charbons. C'est la rotation du rotor qui par l'intermédiaire des secteurs (bagues) du collecteur tournant sous les charbons, DECOUPE le courant continu d'alimentation pour en faire, vu des bobines du rotor un courant alternatif exactement adapté à tout moment à la position du rotor dans le champ magnétique des aimants fixes. Et bien sûr, forcément toujours à la bonne fréquence ! Bon, nous on a un moteur brush-less, on ne va quand même pas y rajouter un collecteur et des balais ! Non mais certaines réalisations utilisent trois capteurs magnétiques extérieurs à la cage tournante, qui renseignent l'électronique sur la position du rotor et donc sur les tensions à appliquer. Et ces réalisation se trouvent par exemple sur certains lecteurs de CD... C'est mécaniquement compliqué, fragile (près des parties tournantes du moteur), encombrant, cher...

C'est donc ici que nous retrouvons notre BEMF, la tension induite par les aimants en rotation dans les bobines fixes... et tout à fait exploitable. Le circuit analogique combinatoire (voir le schéma) produit en sortie des trois comparateurs (LM139) trois tensions rectangulaires déphasées de 2pi/3, synchrones non pas avec les tensions d'alimentation, mais avec la vitesse de rotation effective du moteur. Et le microprocesseur PIC16F628 fera commuter les six transistors MOSFET en cadence avec ces tensions au moyen des interruptions logicielles des bits 4 à 7 de son port B. (Il s'agit d'une des sources d'interruptions sur ce microcontrôleur).

La variation de vitesse est obtenue par découpage des signaux de sortie, avec rapport cyclique fonction F(x) des signaux de la télécommande, et en proportion de la période de base du cycle (une "simple" règle de trois, avec division sur 24 bits quand même ). Voir le timing ci-dessous.

Enfin, lors de la phase de démarrage, la mise en service temporaire du Timer2 découpe le signal de sortie avec une fréquence relativement haute, afin de limiter le courant.

Voir le soft minutieusement commenté, je vous dévoile tout et... en français !

Découpage des signaux de sortie afin de faire varier la vitesse:

 


  • T0-T2 = période de base générée par l'interruption portB4-7 (déclenchée par les signaux BEMF ) et comptée par le Timer1 du PIC. 
  • T0-T1=période de conduction.
  • En T1 le module de comparaison du PIC détecte que TMR1H,L = CCPR1H,L (consigne = f(T_PPM)) et provoque le blocage du signal de sortie.
  • de T1 à T2 les MOSFETS ne conduisent pas.

Photos des signaux sur l'oscillo:

 Signaux sur RA0 et RA2 du PIC : deux phases consécutives Manche des gaz au mini.
Signaux sur RA0 et RA2 du PIC : deux phases consécutives Manche des gaz au mini.
Manche des gaz presque au maxi.
Manche des gaz presque au maxi.

Écrire commentaire

Commentaires: 2
  • #1

    Frédéric (dimanche, 29 mai 2022 17:42)

    Merci pour cet article brillant.

  • #2

    jacques (lundi, 05 septembre 2022 16:38)

    bravo !