Questions moteur brushless et commande par ESC

G

gégé62

Compagnon
Bonjour,
J'ai en vue de construire un petit banc de test pour petits moteurs, et notamment les brushless.
Je ferai sans doute un fil dédié à cela, car il y comportera des aspects multiples, mécanique, mesure de couple et de vitesse etc. Le but est de mesurer les caractéristiques d'un moteur, en relevant couple/vitesse/tension/intensité.
Aujourd'hui, je cherche plutot un coup de main pour faire simplement tourner un brusless avec un ESC à partir d'arduino UNO et surtout comprendre comment cela fonctionne, au niveau de l'ESC.

J'ai acheté un ESC et un moteur, je mets les types en photo. L'ESC sera commandée par un arduino UNO, la puissance sera donnée par une batterie Li-ion composée d'éléments 18650 série-parallèle, je déterminerai le nombre avec des essais.

Mais ne connaissant rien (ou peu) aux ESC, je pensais qu'il fallait leur donner une tension hachée en PWM comme si on alimentait un moteur CC. Or, apparemment d'après ce que je trouve sur le net, ce n'est pas ça du tout, le système se comporte comme un servo, on lui donne un signal en créneau, dont la durée à l'état HIGH détermine la puissance de sortie, 1 ms étant le mini et 2 ms étant le maxi. Apparemment on y met quand même un PWM, mais sa fréquence ne joue pas, seule compte la durée du HIGH. C'est un peu déroutant.
Il y aurait aussi une phase de calibrage de l'ESC (apprentissage ?), à faire uniquement avec le 5 Volt de commande, avant d'y mettre la tension avec la batterie de puissance.

De plus, les sketches que je trouve utilisent la librairie servo.h, et c'est complètement obscur pour moi. Recopier bêtement un sketch sans savoir comment ça fonctionne, ça ne me va pas....je préfèrerais faire des essais en imposant les durées avec delayMicros(), déjà pour voir....

Merci à ceux qui voudront bien me mettre sur la voie, dans un premier temps, je voudrais déjà alimenter mon moteur avec l'ESC en lui faisant faire simplement un démarrage, une montée en vitesse, et une descente, à vide, et en limitant la tension bien en dessous du maxi, je pense rester à 2s (donc dans les 7 V, le moteur accepte le double).



 
R

Rom'

Compagnon
Ca se pilote exactement comme un servo en effet, il y a des tonnes et des tonnes d'infos sur le net, je pense que ca ne servirait pas à grand chose de tout réécrire ici,
Il y a une phase d'apprentissage pour que l'esc mémorise le mini moteur arreté et le maxi, qui peuvent différer un peu selon les systèmes et d'autres paramètres.
 
P

petit_lulu

Compagnon
le pilotage d'un servo c'est des impulsions de 1 a 2 ms toutes les 20ms (environ), rien d'extraordinaire.
au demarrage de l'arduino, on place le port de commande en sortie et a 0

1-ensuite un delais de 20ms (ton " delayMicros() " avec 20000 si en µs a priori)
2-ensuite on passe la sortie a 1
3-puis encore un delais de ... (1500µs pour etre a moitier vitesse par exemple)
4-on repasse la sortie a 0 et on retourne en 1

rien d'extraordinaire pour toi gege
mis a part que l'arduino est completement pris par cette tache et ne peut rien faire d'autre sinon c'est gestion des impulsions avec les interuptions et un timer mais ... c'est une autre histoire.

je suis en plein dedans mais je suis sur des pic et en assembleur donc c'est pas pour arduino
 
G

gégé62

Compagnon
Merci pour les réponses.
Donc si j'ai bien compris la fréquence n'a pas d'importance, ça représenterait la fréquence de rafraichissement du réglage. En travaillant à 50 Hz on redonne l'info toutes les 20 ms. Si ce n'est que ça OK j'ai bien compris.
J'ai pas mal travaillé avec les timers et interrupts récemment, justement pour faire tourner un brushless avec arduino (+ driver de puissance) donc pas de souci pour faire un PWM à ma sauce.

Pour l'apprentissage je vais essayer de faire "bêtement" ce que j'ai lu, mais je ne sais pas si tous les ESC sont pareils à ce niveau. Je ne pilote pas de drone ni hélico, c'est juste des essais de moteur, j'espère seulement que je ne peux pas abîmer l'ESC avec des mauvaises manip....
Cet apprentissage doit être fait chaque fois qu'on veut remettre sous tension ?

Les Pic j'ai pas fait, un jour peut-être....et l'assembleur c'est pas pour moi !

Pour tout dire j'ai reçu le moteur et l'ESC mais j'ai du commander des embouts pour raccorder les fils, il y a du délai et au début ce sera avec des dominos et faible intensité (c'est à dire si je ne me trompe faible tension et pas trop de couple résistant).

Pareil pour la batterie, je vais déjà bricoler un assemblage 2s2p en 18650, il ne faudra pas trop d'ampères...
 
P

petit_lulu

Compagnon
en effet, la frequence n'a pas (trop) d'importance mais on doit etre vers les 50Hz.
dans les pic il y a du pwm mais on ne peut pas descendre la frequence a 50Hz donc on doit le faire en logiciel.
par exemple avec avec un timer qui deborde toutes les 10µs et qui "lance" une interuptions.
ensuite on incremente un compteur (en logiciel) et selon la valeur on met un 1 ou 0 sur la sortie par exemple.
avec 10µs d'interuption on a un pas de 1%.
la largeur de l'impulsion (entre 1ms et 2ms) est de 1ms soit divise par 10µs, ca donne un rapport de 100 donc 1% pour chaque pas.
il faut juste que ce compteur logiciel soit de 0 a 2000 (en 16bits par exemple) pour faire 20ms au total
a l'initialisation du processeur, on met 0 dans le compteur logiciel et on parametre un timer pour des interuptions toutes les 10µs.
V est la valeur de l'impulsion a envoyer au servo (entre 0 et 100)

quand on est dans la boucle d'interuption:
1-calcul de V+100
2-comparaison de cette valeur avec la valeur du compteur logiciel
3-si (compteur logiciel<V+100) alors sortie a 1 sinon sortie a 0
4-incrementation du compteur logiciel de 1
5-test si le compteur est egale a 2000 si oui, on le repasse a 0
6-sortie de la routine d'interuption

si V est egale a 0 alors la sortie est a 1 tant que le compteur logiciel est entre 0 et 100 (100*10µs=1ms) puis ensuite a 0 pour 19ms (1900*10µs)

si V est egale a 50 le seuil est a 150 soit 1.5ms a 1 et si c'est 100 alors le seuil est a 200 soit 2ms.
soit des impulsions a 1 entre 1 et 2ms.

pour la comparaison il faut faire rapide pour ne pas "trainer" dans la boucle d'interuption avec des calculs sur des valeur a 16bits.
selon comment est generer le code assembleur pour arduino, ca peut prendre du temps pour les calculs, a voir avec les specialistes arduino...

par exemple pour faire le calcul de V+100 donc le resultat entre 100 et 200, avec 1 octet et je pense 1 cycle du µC (je ne connais pas arduino)
on compare cette valeur a celle de l'octet "bas" du compteur logiciel (qui est en 16bits), je suppose en 1 cycle...
ensuite on test si l'octet "haut" est a 0 ou non (1 cycle ?) et selon le resultat de ces 2 operation "simple" on sais si le compteur logiciel (16bits) est inferieur/superieur a la valeur (1 octet) et ca prend 3 ou 4 cycles seulement.

pour incrementer le compteur logiciel c'est un peut pareil, si le compilateur arduino calcul les valeurs en 16 bits ca va etre plus long je pense donc:
1-on met le bit de debordement des calculs a 0 (arduino doit en avoir 1 normalement)
2-on incremente l'octet bas
3-si le bit de debordement est a 1, on incremente l'octet haut

attention, sur les pic l'instruction "incremente" ne gere pas le bit de debordement donc on fait une "addition" avec 1 qui elle gere ce bit.
voir avec arduino si c'est pas la meme chose...

bon amusement.
 
P

petit_lulu

Compagnon
petit oublis:
quand on change la valeur de V, attention a la faire quand la sortie est a 0 selement.
sinon ca peut faire une double impulsion au moment du changement...
 
S

speedjf37

Compagnon
Bonjour,

C'est plutôt délicat avec un ESC.
Il faut connaître le mode de paramétrage et arriver à le gérer.
Certains sont en mode avion , voiture ,bateau uniquement.
D'autres peuvent avoir accélération , freinage etc.

J'ai abandonné , je vais essayer un driver d'un autre type pour une mini broche.



Jf
 
R

Roland DENIS

Compagnon
Hello je bricole aussi moteur brushless de velo ou autre perceuse ventilateur mais , l ' ECS ???? ces abréviations je ne connais pas j'ignore ce que cela représente est un contrôleur ?? un variateur ?? ou un chmilblic. Désolé mais ??
 
S

stef1204

Compagnon

Un ESC change le courant continu en 3 phases.

 
M

mvt

Compagnon
Bonjour,

ESC = Electronic Speed Control autrement dit, un contrôleur électronique de vitesse (moteur)
Je suis Gégé, c'est intéressant.
 
R

Roland DENIS

Compagnon
Bref c'est tout simplement un ""contrôleur""
 
G

gégé62

Compagnon
Merci pour vos réponses, je vais cogiter cela.

Bref c'est tout simplement un ""contrôleur""
oui mais en plus de fournir le triphasé, il intègre (en principe je pense) beaucoup de fonctions genre protection surintensité, surchauffe etc....mais surtout (sauf erreur grossière de ma part) grâce à un microcontroleur, il est capable de gérer le démarrage du moteur en mode accélération faible (sinon le moteur synchrone décroche) puis la marche "normale" en exploitant la fcem de la bobine libre (il y en a toujours une) de façon à calculer la position du rotor, et de là envoyer les bonnes impulsions sur les bonnes bobines.

voilà ce qui est écrit sur la page où j'ai acheté le mien: (désolé c'est un peu long....) bonne soirée
.....................
Les ESC de la série YPG offrent non seulement d'excellentes performances pour les hélicoptères, mais ils sont également bien adaptés à une utilisation à voilure fixe avec une multitude de fonctionnalités programmables.Tous les ESC YPG peuvent être programmés via une carte de programmation en option ou par des entrées de bâton d'émetteur.

Fonctionnalités:
• Puissant BEC de
commutation 5,5 V / 6A
• Carte de programmation en option pour une configuration pratique
• La résolution de l'accélérateur offre une linéarité de premier ordre et très précise
• Mode de démarrage réglable super fluide
• Mode régime constant (mode régulateur)
• Frein F3A réglable.
• Frein EMF normal réglable en 3 étapes
• Haute capacité anti-interférence
• Protection de coupure basse tension avec réglage automatique pour NiCd / NiMH / Li-Ion / LiPo / LiFePO4
• Option de coupure Soft à basse tension, ralentit progressivement le régime du moteur plutôt que l'arrêt brutal (LVC)
• La coupure basse tension peut être désactivée
• Tension / cellule de coupure variable
• Le circuit de roue libre Active permet une capacité de «charge partielle» illimitée
• Affichage d’état LED
• Synchronisation du moteur réglable de 0 ° à 30 °
• Protection contre la rotation bloquée (détecte un moteur bloqué et arrête la rotation du moteur)
• Moteur inversant depuis ESC (pas besoin de changer les fils ESC / moteur)
• Protection contre la surchauffe et alarme de surcharge
• Circuit anti-étincelles: réduit les étincelles de connexion (pour HV ESC)
• Le signal d'accélérateur perd sa protection. Si le signal est perdu pendant 3 secondes, l'alimentation sera automatiquement coupée.
• Mise sous tension sûre. (Le moteur ne démarre pas tant que l'accélérateur n'est pas ramené à la position la plus basse)

Spécification:
Courant maximum de cont: 45A
Max Burst Current: 55A pendant 10 secondes
Tension d'entrée: 2-6 cellules li-XX ou 6-16 batterie Ni-MH / Ni-Cd
PWM: 8 ~ 16 KHz
Max RPM: 240000 tr / min pour moteur sans balais à 2 pôles
Taille du PCB: 50x30mm
Poids: 63g (y compris les fils)Emballage inclus:1 * ESC sans balais YPG
 
R

Rom'

Compagnon
Oui c'est ce qu 'on appelle des ESC sensorless, c'est comme ca pour la plupart, quelques couples esc/moteurs fonctionnent avec des capteurs hall comme sur le schema de @stef1204 , ce sont des ESC sensored. Mais ca reste marginal en modelisme.
 
S

speedjf37

Compagnon
Bref c'est tout simplement un ""contrôleur""

Bonjour,

Presque mais dédié au modélisme car pilotable uniquement par des impulsions de largeur variable type servo.

Il y a une fonction BEC pour alimenter une électronique en 5V.

Certains sont dédiés à un mode (avion , bateau , voiture) , un ou deux sens de rotation , freinage , roue libre , pente accélération etc.

Le paramétrage quand il est accessible se gère avec des (trains d') impulsions à l'initialisation (alimentation).

Cordialement JF
 
G

gégé62

Compagnon
quand on change la valeur de V, attention a la faire quand la sortie est a 0 seulement.

toujours @petit_lulu pour ton post #5
Je pense avoir compris dans les grandes lignes.
Si "le PWM à 50Hz" est donné par un timer, soit 1 signal en dent de scie de période ajustée à 20 ms, et si on veut disposer de 100 incréments dans le segment compris entre 1 et 2 ms, soit 100 points par ms, il faut générer les interruptions avec une finesse d'au moins 2000 points, donc justifie de compter avec timer 16 bit.

Arduino a deux timers 8 bit et 1 timer 16 bit, et l'horloge de base est à 16 MHz.

J'ai plus de mal avec les paragraphes suivants, les octets "haut" et bas etc...Je pense qu'il s'agit des octets de poids fort ou faible dans la variable de 16bit. Je vais devoir y passer un peu de temps, au moins.
Je sais que je vais choquer les puristes, mais peut-être que ça marcherait en appelant delayMicros() pendant la durée voulue pour l'état 1 ? c'est pas très beau mais beaucoup plus simple pour moi....

Pour tester les brushless j'utilise ceci:
intéressant....si j'ai bien compris, c'est une commande manuelle de puissance, qui envoie donc la fameuse impulsion toutes les 20ms vers l'ESC. Et pas cher, à partir de 1.79€ !
une question: l'entrée In sert à quoi, puisque la puissance semble réglée simplement par la position du potard ?
 
G

gégé62

Compagnon
Pourquoi ne pas utiliser une lib ?
je suis fâché avec les libs.... . J'en utilise, bien sûr mais souvent, comme c'est le cas ici avec servo.h, je ne comprends pas du tout comment ça fonctionne dedans, et ça me gêne. Quand je vais voir dans les fichiers servo.h ou servo.ccp, je pige que couic. Je trouve aussi que les exemples sont insuffisants, en tous cas pour moi. Je ne sais utiliser une lib que à partir d'un sketch tout fait trouvé sur le net, où je n'ai plus qu'à modifier quelques paramètres, mais sans trop comprendre. Je pense que je devrais potasser un cours sur les librairies, car c'est une vraie lacune chez moi.
 
S

speedjf37

Compagnon
. Quand je vais voir dans les fichiers servo.h ou servo.ccp, je pige que couic.

Il n'y a pas forcement besoin de comprendre tout le code pour utiliser une LIB ( c'est l'avantage).

La LIB utilise les timers et les interruptions de façon transparente pour l'utilisateur.

Elle est aussi multiplateforme donc le code est valable pour un Arduino Uno , Mega2560 , DUE etc.

Le seul inconvénient c'est quand on utilise plusieurs LIB qui utilisent les mêmes ressources et que le partage est délicat voir impossible !

Avec ceci extrait de "servo.h" tu as tout ce qu'il faut::

En principe chaque lib est livrée avec des exemples !

exemple Knob:

JF
 
G

gégé62

Compagnon
merci, je vais faire un effort....
(sans blague !)
 
P

petit_lulu

Compagnon
En effet, c'est bien l'octet de poid fort pour le "haut" et poids faible pour "bas"
Pour le timer, tu dois le régler pour avoir une interruption toutes les 10 micro secondes donc à mon avis un timer 8 bits doit être suffisant...
Désolé pour la réponse un peut courte mais je suis en déplacement 3 jours et avec le tel c'est pas top pour écrire...
 
G

gégé62

Compagnon
Bonjour,
Tu vas trouver ton bonheur ici
je viens seulement de voir que c'était un lien.... Super tuto, merci !

"knob" c'est un potard en GB ?
je crois que je vais d'abord essayer ça, plus simple....j'espère réussir par la suite la méthode plus "hard" @petit_lulu .....
 
G

gégé62

Compagnon
voici un petit exemple de code
merci @Globule Mou , c'est le type de sketch que j'ai fait pour faire tourner mon petit brushless. J'ai du potasser les timers et interruptions pendant au moins deux mois, mais ça m'a permis de démystifier cette partie de programmation. La différence c'est que je ne passais pas par un ESC mais un simple driver (enfin deux, pour avoir 3 phases), qui était suffisant pour ce moteur très peu puissant. Je fonctionnais donc en pur moteur synchrone, avec fréquence imposée par arduino, qui donnait directement le PWM pour le moteur, et non pas celui à 1000 Hz pour la commande de l'ESC.
Ça fonctionnait si l'accélération est très douce (et le moteur tournait à vide). La limite en vitesse c'est lorsque OCRA devient petit, chaque décrémentation devient relativement trop brutale. Par exemple si OCRA vaut 20 et qu'on passe à 19, ça fait brutalement 5% de vitesse en plus et le moteur décroche. Pour améliorer, j'ai fait des "sauts" de prescaler, quand OCRA devient par exemple égal à 50, je le mets égal à 200 et je multiplie par 4 la fréquence en mettant un prescaler 4 fois inférieur. C'est du sport mais ça marche. C'était juste pour apprendre et pour amusement.
Maintenant je passe par l'ESC et j'utilise la librairie servo comme ça a été indique ici plus haut. Je pense que la librairie fait à peu près la même chose que ton programme ?
Ton sketch est très utile pour qui découvre et veut comprendre ce type d'application, et il est bien commenté.

Pour l'instant je fais tourner mon moteur au doigt et à l'oeil avec un potard sur une entrée analogique arduino et sortie comme il faut vers l'ESC créneau de 1 à 2 ms à 1000 Hz. Quand on sait, tout parait simple.....
Par prudence je suis resté sur un montage 2s (2 simples 18650 en série). Je suis en train d'ajouter une mesure d'intensité (sur l'alim ESC) avec un module ACS712. D'ailleurs je ne sais pas l'intensité permise par ces accus. Je suppose que la limite c'est quand la tension aux bornes diminue, mais de combien ????

Ensuite j'ajouterai mesure de vitesse et de couple moteur, c'est un peu plus de boulot.....
 
M

midodiy

Compagnon
créneau de 1 à 2 ms à 1000 Hz
C'est pas à 50hz?
je ne sais pas l'intensité permise par ces accus. Je suppose que la limite c'est quand la tension aux bornes diminue, mais de combien ????
Plus on tire de courant, plus la tension de l'element diminue à cause de sa resistance interne...la tension baisse, le bms surveille... si la tension inferieure à 3.2V, le bms coupe donc un element meme bien chargé ne va pas pouvoir fournir le courant important vu que l'element va passer instantanement de 4.2 à 3.2V...
 

Sujets similaires

M
Réponses
20
Affichages
2 849
Monsieur Lesto
M
B
Réponses
11
Affichages
1 244
joshuan76
J
Réponses
14
Affichages
1 149
zeppelin54
N
Réponses
15
Affichages
933
Doctor_itchy
D
C
Réponses
3
Affichages
1 104
christian pavese
C
V
Réponses
11
Affichages
809
cr-_-
C
K
Réponses
18
Affichages
6 852
kikivalsky
K
Réponses
116
Affichages
7 756
W