PID avec moteur BLDC
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

PID avec moteur BLDC



  1. #1
    benji54

    PID avec moteur BLDC


    ------

    Bonjour à tous,

    me revoila
    J'ai réussi à faire tourner mon moteur BLDC avec mon diver L6234.
    Pour cela je crée 3 signaux analogique (avec des PWMs ) qui sont déphasées:
    Nom : timing_diagram.png
Affichages : 323
Taille : 59,0 Ko
    Les pwms sont crées grace à un tableau de 48 valeurs (correspondants à un sinus):
    int pwmSin[]={511,444,379,315,256,200,150, 106,68,39,17,4,0,4,17,39,68,10 6,150,200,256,315,379,444,511, 578,643,707,767,822,872,916,95 4,983,1005,1018,1022,1018,1005 ,983,954,916,872,822,767,707,6 43,578,511
    };
    Dans mon µC j'ai crée une interruptions toutes les 100ms qui fait
    currentStepA = currentStepA + increment;
    currentStepB = currentStepB + increment;
    currentStepC = currentStepC + increment;
    analogWrite(motorPin1, pwmSin[currentStepA]);
    analogWrite(motorPin2, pwmSin[currentStepB]);
    analogWrite(motorPin3, pwmSin[currentStepC]);

    en gros ca marche bien mon moteur tourne correctement dans un sens et dans l'autre en inversant incrément= 1 ou -1. Mais maintenant je me rend compte que la vitesse de mon moteur correspond à la fréquence de mon intéruption ce qui est assez génant car je souhaite faire un asservissement en position.
    J'ai un accelerometre+gyroscope qui, une fois filtrée me renvoient un angle. En fonction de cet angle je veux faire une régulation PID mais je n'ai aucune idée de comment faire. Avec un moteur CC on peut appliquer une PWM=erreur*KP... mais la comme c'est la fréquence qui gere la vitesse, je suis PERDU


    Merci de votre aide

    -----

  2. #2
    RISC

    Re : PID avec moteur BLDC

    Salut,

    Quel PIC tu utilises (référence précise) ?
    A quelle fréquence fonctionne ton PIC (Fosc ou Fcy) ?
    Le pilotage sinusoidal est généralement destiné à avoir un rendement max et un bruit minimal.
    Quel type de moteur utilises-tu ?
    Pour quel type de pilotage est-il initialement prévu ?

    a+

  3. #3
    benji54

    Re : PID avec moteur BLDC

    Salut RISK
    J'utilise un PSoC (entre le FPGA et un µC) il tourne en 24MHz
    Mon moteur est un moteur de gimbal, c'est un moteur brushless re-bobiner :
    http://www.hobbyking.com/hobbyking/s...the_nex6_.html

    Je souhaite faire une nacelle gyrostabiliser (gimbal), c'est a dire en fonction de l'angle donné par mon capteur, restabiliser la nacelle à l'aide du moteur.

    Merci

  4. #4
    polo974

    Re : PID avec moteur BLDC

    et bien, il faut que tu joues sur ton incrément.

    si ton incrément vaut +/-2, ton moteur tournera 2 fois plus vite
    si ton incrément vaut +/-0.5,ton moteur tournera 2 fois plus lentement.

    et si tu veux travailler en float ou en format fixe (par exemple en 1/256 de la vitesse nominale).
    si tu parts sur un format fixe, tu peux utiliser sur un algo de bresenham généralisé pour incrémenter ta position.

    ensuite, c'est à toi de voir si tu dois/veux faire de l'interpolation entre 2 points de ton sinus.
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    benji54

    Re : PID avec moteur BLDC

    Cool merci pour ta réponse.
    Le mieux ce serait pas que je calcule à chaque passage la valeur du sinus? sachant que c'est cortex M3 ca devrait le faire

  7. #6
    polo974

    Re : PID avec moteur BLDC

    C'est de toute façon, en gros ce que tu vas faire: tu vas intégrer l'angle (dont découleront les 3 sinus) en fonction de la vitesse angulaire (l'incrément).

    ensuite, comment tu fais, c'est selon la puissance de ton processeur...

    (et oups pour la rédaction de ma réponse précédente, c'est un peu très mal rédigé (mais en gros t'as compris, ce qui est le plus important ...))
    Jusqu'ici tout va bien...

  8. #7
    benji54

    Re : PID avec moteur BLDC

    Salut, je reviens ici, mon asservissement est mis en place. maintenant mon moteur est correctment asservi en position mais le mouvement est pas fluide, ca tremple beaucoup, et il y a beaucoup de dépassement. Il faut que je regle mes 3 gains mais à part faire par tatonuement y à t-il un moyen simple de féinir mes correcteur?

    Et sinon, je calcul tout dans un intérruption, qu'elle fréquence d'interruption est la plus adéquate, en test toutes les 100ms et 10ms ca change completement, je dois rechanger mes gains.

    Au finale j'ai beaucoup de variable qui modifie la vitesse et la réponse de mon moteur à ma consigne

  9. #8
    Zenertransil

    Re : PID avec moteur BLDC

    Bonsoir,

    Tu ne devais pas faire une régulation de type PID? En plus du gain, il te faut jouer sur td et ti... C'est l'action dérivée qui, bien réglée, empêche l'overshoot, et permet des corrections dynamiques. L'action intégrale est plutôt adaptée à la suppression de l'erreur statique (mais dans ton cas, comme ça bouge tout le temps...), ou éventuellement à contrebalencer l'action dérivée.

    Il y a plusieurs méthodes pour régler un correcteur PID, personnellement j'ai appris avec la méthode de Broïda et ça marche pas mal du tout... Pour les tremblements, il faudrait savoir si ça vient de l'asservissement ou du contrôle des moteurs directement (séquence d'alimentation)!

  10. #9
    polo974

    Re : PID avec moteur BLDC

    Citation Envoyé par benji54 Voir le message
    ...
    Et sinon, je calcul tout dans un intérruption, qu'elle fréquence d'interruption est la plus adéquate, en test toutes les 100ms et 10ms ca change completement, je dois rechanger mes gains.
    ...
    Comme tu intègres et dérives, le temps d'échantillonnage entre directement en ligne de compte...

    Enfin, comme tu pilotes un moteur synchrone, il faut faire attention à ne pas dépasser son couple de décrochage, donc moment d'inertie, accélération, couple, tout ça...

    sinon, je ne sais ce que ça vaut, mais ça a l’avantage d'exister:
    http://playground.arduino.cc/Code/PIDLibrary
    http://playground.arduino.cc/Code/PIDAutotuneLibrary
    Jusqu'ici tout va bien...

  11. #10
    Zenertransil

    Re : PID avec moteur BLDC

    Citation Envoyé par polo974 Voir le message
    Enfin, comme tu pilotes un moteur synchrone, il faut faire attention à ne pas dépasser son couple de décrochage, donc moment d'inertie, accélération, couple, tout ça...
    Le plus simple, c'est le travail en boucle fermée avec asservissement par codeur absolu (c'est ce que l'auteur veut faire non)? Là, on gère l'angle interne les doigts dans le nez...

  12. #11
    benji54

    Re : PID avec moteur BLDC

    Merci pour la réponse les gars,
    Comme tu intègres et dérives, le temps d'échantillonnage entre directement en ligne de compte...
    justement je viens de me rendre compte d'un truc dans mon code, pour mon PID je fais:
    Code:
    err=consigne-angle;
        
        errDif = err - lastError;
        lastError = err;
        if (err>debIntergr) {
    				integr=0;
    			} else {
    				integr += err;
    			}
        increment=err*Kp + integr * Ki + errDif * Kd ;
        
        if (increment> maxIncr)  
        {increment=maxIncr;
        }
        if (increment< -maxIncr) 
        {increment=-maxIncr;}
    Mais en faite quand je fais
    Code:
    integr += err;
    c'est comme si je simplifiais les calculs sans prendre le temps d'échantillonnage. En vrai je devrais prendre en compte le temps de mon interuption du style 100ms:
    Code:
    integr += err*0,1;
    j'ai raison?
    Dernière modification par benji54 ; 17/06/2014 à 19h23.

  13. #12
    inoxxam

    Re : PID avec moteur BLDC

    Exact, et de manière analogue, le terme dérivé serait plutôt:
    Code:
    errDiff = (err - lastError)/0.1
    L'écriture telle quelle est pratique pour régler ses coefficients théoriquement et pour visualiser ce qu'il se passe. En pratique dans le code on intégrera directement le terme lié à la fréquence d'échantillonnage dans les coefficients, ce qui permet d'économiser en opérations, et donc de perde moins de temps de traitement.

  14. #13
    benji54

    Re : PID avec moteur BLDC

    oui c'est vrai que dis comme çà au final ca ne sert donc à rien, mieux vaut que je l'enleve et que je garde ca dans mon gain Kp Ki et Kd...

    Merci

  15. #14
    inoxxam

    Re : PID avec moteur BLDC

    Citation Envoyé par benji54 Voir le message
    oui c'est vrai que dis comme çà au final ca ne sert donc à rien
    Erreur: ça ne sert pas à rien, ça rend la chose mathématiquement correct, c'est une question d'écriture en fait. Il faut en avoir conscience si tu décides un jour de changer de fréquence d'échantillonnage.

Discussions similaires

  1. démarrage moteur BLDC avec pont triphasé
    Par croazen dans le forum Électronique
    Réponses: 12
    Dernier message: 24/07/2012, 13h43
  2. Isoler électriquement un moteur BLDC
    Par petitnul12 dans le forum Électronique
    Réponses: 16
    Dernier message: 05/06/2012, 10h08
  3. commande moteur BLDC
    Par Rim88 dans le forum Électronique
    Réponses: 0
    Dernier message: 15/03/2012, 11h02
  4. freinage avec un moteur BLDC
    Par invite944402a0 dans le forum Technologies
    Réponses: 1
    Dernier message: 23/10/2011, 20h11
  5. moteur bldc, vitesse selon nb poles ?
    Par invite9657577e dans le forum Technologies
    Réponses: 0
    Dernier message: 23/03/2009, 11h07
Découvrez nos comparatifs produits sur l'informatique et les technologies.