Commande de moteurs synchrones à aimants permanents avec observateur de couple de charge

Les systèmes de commande pour moteurs synchrones à aimants permanents (PMSM) rencontrent une difficulté courante : les fluctuations de vitesse induites par des variations de charge. Les approches par réaction classiques présentent des retards de compensation. L'intégration d'un observateur de couple de charge permet une détection proactive et une correction anticipée des perturbations.

Considérons une application industrielle : un bras robotisé dans une cellule d'assemblage saisit un composant, engendrant une augmentation de charge de 20 N·m. Sans observateur, le régulateur doit détecter l'écart de vitesse avant d'agir. L'observateur, en revanche, identifie instantanément la variation de couple en traitant celui-ci comme une variable d'état étendue au sein d'un modèle dynamique.

Une réalisation simplifiée de l'observateur de Luenberger est présentée ci-dessous :


import numpy as np

class EstimateurCouple:
    def __init__(self, inertie_totale, coefficient_amortissement, periode_echantillonnage):
        self.inertie = inertie_totale
        self.amortissement = coefficient_amortissement
        self.dt = periode_echantillonnage
        self.x_estime = np.array([0.0, 0.0])  # [vitesse_estimee, couple_charge_estime]
        
    def actualiser(self, iq_mesure, omega_mesure):
        # Matrices du système
        A_mat = np.array([
            [-self.amortissement / self.inertie, -1.0 / self.inertie],
            [0.0, 0.0]
        ])
        B_vec = np.array([1.5 * iq_mesure / self.inertie, 0.0])
        L_gains = np.array([[55.0], [110.0]])
        
        # Étape de prédiction
        dx = A_mat @ self.x_estime + B_vec
        x_pred = self.x_estime + dx * self.dt
        
        # Étape de correction
        residu = omega_mesure - x_pred[0]
        self.x_estime = x_pred + L_gains * residu * self.dt
        
        return self.x_estime[1]

La conception des gains dans la matrice L détermine la performance. Le gain supérieur (55) influence la convergence de l'estimation de vitesse, tandis que le gain inférieur (110) module l'estimation du couple. En pratique, il est recommandé d'ajuster ces paramètres lors d'un fonctionnement à vide pour minimiser les oscillations de l'estimateur autour de zéro.

La valeur estimée du couple sert ensuite à générer une action de précommande dans la boucle de courant :


// Compensation par précommande (langage C)
float calcul_precommande(float couple_estime) {
    const float facteur_couple = 1.18;
    const float marge_securite = 0.82;
    return (couple_estime * marge_securite) / facteur_couple;
}

void regul_courant() {
    float iq_consigne = sortie_PID() + calcul_precommande(couple_charge);
    appliquer_courant_q(iq_consigne);
}

Le facteur d'atténuation (0.82) est une constante empirique visant à éviter une surcompensation lors des transitoires. Des essais montrent que son annulation peut provoquer des emballements de vitesse lors de décharges brusques, en raison des interactions dynamiques entre l'observateur et le système mécanique.

Les résultats expérimentaux comparatifs illustrent l'efficacité : pour une charge de 5 N·m appliquée brusquement, le système sans précommande présente une chute de vitesse de 300 tr/min avec un temps de rétablissement de 2 s. Le système équipé de l'observateur mainitent la chute sous 50 tr/min et stabilise la vitesse en 0.3 s. Dans des applications cycliques comme le moulage par injection, l'observateur anticipe les motifs de charge, réduisant les ondulations à ±1% de la consigne.

L'observateur peut néanmoins rencontrer des limitations face à des perturbations haute fréquence. Un exemple typique concerne les vibrations de couple à 10 kHz dues à un défaut de couplage, interprétées à tort comme des variations de charge. L'insertion d'un filtre passe-bas du second ordre en cascade, avec une fréquence de coupure réglée à un cinquième de la bande passante du système, résout ce problème de robustesse.

Étiquettes: PMSM torque observer Luenberger observer feedforward control state estimation

Publié le 22 juin à 17h34