Auteur Sujet: Mesure EMF ?  (Lu 12043 fois)

savignyexpress

  • Invité
Mesure EMF ?
« le: juin 16, 2016, 10:10:18 am »
Bonjour,

Je souhaite réaliser une alimentation PWM pour commander les moteurs du système Magnorail (www.magnorail.com) sur mon nouveau projet de réseau N.

J'aimerais de plus mettre en place une régulation de vitesse en mesurant la force contre électro-motrice (EMF) du moteur. Je me souviens avoir vu des schémas pour l'amplification de cette tension lorsque le moteur n'est pas alimenté, mais je ne sais plus où. De même pour les algorithmes de régulation, probablement de type PID.

Avez-vous des liens / infos sur ce sujet ?

Merci d'avance pour vos contributions.
Meilleures salutations.

Marc-Henri

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2889
  • 100% Arduino et N
    • Voir le profil
Re : Mesure EMF ?
« Réponse #1 le: juin 16, 2016, 11:51:04 pm »
Bonjour Marc-Henri,

Petite recherche dans mon Mac et j'ai trouvé ce site de l'AMFN : http://amfn.chez.com/alim.htm avec un asservissement par la FCEM d'un moteur.

Mais, sur ce sujet, je te recommande surtout Jean-Luc et son ami Pierre qui ont développé des cartes tractions basées sur ce principe. Les détails devraient être ici si je ne me trompe pas : http://modelleisenbahn.triskell.org/spip.php?rubrique18.

Apparemment tu connaissais ce site.

Bien amicalement
Dominique
« Modifié: juin 16, 2016, 11:53:02 pm par Dominique »
Cordialement,
Dominique

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Mesure EMF ?
« Réponse #2 le: juin 17, 2016, 06:43:42 am »
Bonjour Marc-Henri

Je peux te proposer un schéma pour mesurer la FCEM (je poste ca dans la journée). Il est opérationnel et utilisé. Je t'explique le principe également dans la journée (là il faut que j'emmène ma fille passer le bac de français  :P)
Cordialement

savignyexpress

  • Invité
Re : Mesure EMF ?
« Réponse #3 le: juin 17, 2016, 07:28:10 am »
Bonjour Dominique et Jean-Luc,

Merci beaucoup pour vos réponses... Pas de précipitation, le bac de français a la priorité...  :)

Je connaissais déjà l'excellent site de l'AMFN et le schéma qu'ils proposent, mais c'est une solution 100% analogique alors que je recherche plutôt un étage d'entrée pour le convertisseur AD d'un microcontrôleur.

Comme autre alternative je pense aussi à installer un décodeur DCC fixe et à lui envoyer des ordres avec un microcontrôleur fonctionnant comme une centrale dédiée pour bénéficier de la régulation de charge par mesure EMF du décodeur.

Bonne fin de semaine à tous et meilleures salutations.

Marc-Henri

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Mesure EMF ?
« Réponse #4 le: juin 17, 2016, 09:26:49 am »
Voici les schémas :

http://locoduino.org/pic/AlimentationTraction.pdf

La page qui t'intéresse est la page 3. TRACTION et GND_TRACTION sont aux bornes du moteur via un relai DPDT qui joue le rôle d'inverseur.

Concernant l'alimentation qui est sur le site de l'AMFN, ils ne sont pas arrivés à régler le gain intégral et sont restés sur une commande proportionnelle. Je pense donc que leur logiciel est faux et je pense également savoir pourquoi.

Le principe est de mesurer la FCEM et d'asservir la PWM de manière à ce que la mesure soit égal à la consigne. Si on ne connait pas grand chose en automatique (ce qui est toujours mon cas mais je me soigne :) ), on va raisonner de la manière suivante :
- j'applique une PWM -> le moteur tourne à une certaine vitesse
- je coupe la PWM et je mesure la FCEM (le moteur continuant à tourner sur son énergie cinétique)
- je calcule l'erreur : E = consigne - mesure (en signé bien sûr)
- j'ajoute E x gain (constante) à la PWM

Par conséquent, si E est négatif (le moteur tourne trop vite) on diminue la PWM et si E est positif (le moteur tourne trop lentement), on augmente la PWM.

En faisant ça, on n'a pas fait une commande proportionnelle intégrale on a fait une intégrale tout court et une intégrale tout court est molle : la commande suit la consigne mollement. Si on augmente le gain pour que ça soit moins mou, ça devient instable : ça pompe autour de de E = 0. Je pense que c'est ce qu'a fait l'AFMN (avec un gain pas trop fort) car ça explique qu'en ajoutant une intégrale en plus, ça génère en plus de l'instabilité et qu'ils n'aient pas pu mettre au point leur régulateur.

Donc :

Commande proportionnelle

C'est contre-intuitif mais très simple : PWM = gain x erreur

- quand la vitesse est stable, l'erreur n'est pas nulle. En effet, une erreur nulle engendre une commande nulle et le moteur s'arrête.
- donc on a ce que l'on appelle un écart statique : la PWM calculée est telle que l'erreur mesurée x gain donne la PWM calculée. la FCEM de consigne n'est jamais atteinte.
- si on veut réduire l'écart statique on augmente le gain mais si le gain est trop élevé, la commande est instable.

Commande proportionnelle intégrale

Pour annuler l'écart statique, on ajoute une composante intégrale que l'on calcule en faisant :

integrale = integrale + erreur

on a maintenant 2 gains : le gain proportionnel, GP et le gain intégral GI.On calcule la PWM en faisant :

PWM = GP x erreur + GI x integrale

La partie proportionnelle, GP x erreur, est grande si le moteur produit une FCEM éloignée de sa FCEM de consigne, elle donne donc de la pêche. Lorsque l'erreur diminue, c'est GI x integrale qui prend le relai. Lorsque la FCEM de consigne est atteinte, l'erreur est nulle et le moteur ne tourne que grace à GI x integrale

Donc la partie proportionnelle fait que la commande n'est pas molle et la partie intégrale supprime l'écart statique.

En pratique pour régler GP et GI, on commence avec GI à 0. On règle GP puis on augmente GI jusqu'à ce que ça devienne instable. On diminue alors GI jusqu'à avoir le comportement voulu.

En pratique, il faut également s'assurer que la commande ne dépasse pas les valeurs min et max de la PWM. J'ai également borné l'intégrale de manière à ce que GI x intégrale donne la valeur max de la PWM. Inutile de laisser l'intégrale s'envoler si la locomotive est bloquée par un faux contact.

Commande proportionnelle intégrale dérivée

Le problème de l'intégrale est que l'erreur s'accumulant, lorsqu'on dépasse la consigne, il faut un certain temps pour faire passer l'intégral en négatif. L'évolution est lente. L'idée est donc de mesurer deux erreurs successives et de faire la différence (dérivée). Si cette différence est importante cela signifie que l'on se rapproche vite de la FCEM de consigne et que (du fait du PI) on en était loin donc on aide a aller vite vers FCEM de consigne. Si la différence est faible ça signifie qu'on est au voisinage donc on aide moins. Ça donc donc de la pêche tout en générant de la stabilité.

Evidemment ces 3 régulations influent les unes sur les autres et c'est un peu compliqué d'appréhender le tout.

Je n'ai pas mis en œuvre la dérivée pour l'instant.

Un très bon article que j'ai trouvé : http://www.ferdinandpiette.com/blog/2011/08/implementer-un-pid-sans-faire-de-calculs/
Un bémol, vers la fin on trouve : « L'erreur statique, c'est l'erreur finale une fois que le système est stabilité. Cette erreur doit être nulle. Pour diminuer l'erreur statique, il faut augmenter Kp et Ki. ». Certes mais si Ki est > 0, l'erreur statique est nulle (au bout d'un certain temps).

Mon code de test est ici : https://git.framasoft.org/locoduino.org/AlimentationTraction/tree/master

Quelques remarques :

La FCEM est mesurée toutes les 10ms

Lorsque l'on coupe la PWM pour mesurer la FCEM, il faut attendre que le courant cesse de circuler dans la diode roue libre. Ce temps dépend de l'inductance du moteur. Sur mes tests, j'avais mis 400µs après mesure à l'oscilloscope sur quelques locomotives.

La FCEM est très bruitée, je fais donc 6 mesures que je trie. Je moyenne les 4 du milieu. Voir https://git.framasoft.org/locoduino.org/AlimentationTraction/blob/master/MesureFCEM.cpp
Cordialement

savignyexpress

  • Invité
Re : Mesure EMF ?
« Réponse #5 le: juin 21, 2016, 05:02:00 pm »
Un tout grand merci Jean-Luc pour le schéma ainsi que pour ces explications très détaillées.

Sur le schéma, j'ai vu que tu as un IC pour produire du -12 V pour alimenter l'ampli-op chargé d'amplifier la tension mesurée aux bornes du moteur. Je pense qu'alimenter l'ampli-op en mono tension ne serait pas possible car il faudrait alors pouvoir découpler la tension mesurée à l'aide d'un condensateur. Mais il n'est pas certain que cette tension fluctue suffisamment pour traverser un condensateur.

Si j'ai bien compris, tu as implanté un amplificateur différentiel pour les mesures de tension (vitesse) et courant. Les diodes servent à écrêter si nécessaire pour protéger les entrées du microcontrôleur mais quels rôles jouent les condensateurs C4 et C12 ?

Bonne suite et meilleures salutations.

Marc-Henri
« Modifié: juin 22, 2016, 07:31:43 am par Marc-Henri »