Comment régler un contrôleur PID sur un processus non linéaire

9

J'ai un processus thermique non linéaire (le rayonnement non linéaire devient de plus en plus présent à mesure que la température augmente) sur lequel j'aimerais régler un contrôleur PID. J'aimerais contrôler la température aussi précisément que possible.

J'ai prévu de diviser la plage de température en N plages pseudo-linéaires (à définir), et pour chacune de ces plages de température: ajuster un modèle de premier ordre à l'aide d'un petit pas de température et calculer les paramètres PID en fonction de ce modèle. Les paramètres PID seraient automatiquement commutés en fonction de la température du processus *.

Mon problème est le suivant: pensez au point de contrôle à 70 ° C par exemple. P watts circulent déjà pour atteindre cette température. J'injecterai du dP watt pour augmenter la température de 1 ° C. Je noterai ensuite la constante de temps et le gain en régime permanent sera de 1 / dP ° C / W. [S'il vous plaît, pouvez-vous prendre un moment pour déterminer si cela est vrai?] Enfin, je réglerai le PID sur cette plante pour obtenir les paramètres de cette plage de température et passer aux autres plages.

Supposons maintenant que le processus atteint 70 ° C. Les nouveaux paramètres sont chargés et le compteur intégral réinitialisé. L'erreur peut être de 1 ° C, mais la puissance requise est bien supérieure à celle pour atteindre 21 ° C, il est certain que le contrôleur exigera moins de P watt. Cela signifie que la température diminuera beaucoup avant que le terme intégral n'exige P watts, et alors seulement le watt supplémentaire dP finira par amener le processus à 71 ° C (et il dépassera certainement). Plus le P est grand par rapport au dP, plus il empire.

Il semble presque que les appareils de chauffage doivent fonctionner avec la somme de la sortie du contrôleur et la puissance requise pour rester à la "température de référence" actuelle (par exemple 70 ° C). Mais les contrôleurs standard n'offrent pas cela, il doit donc y avoir une autre façon.

Qu'est-ce que je rate? Quelle est la bonne façon?

*: C'est effectivement Gain Scheduling .

user42875
la source
1
Le contrôleur PID est généralement destiné aux systèmes linéaires. Il est suffisamment robuste pour contrôler également certains systèmes non linéaires autour d'un point opérationnel "presque linéaire". Si ce n'est pas le cas, différentes techniques peuvent être utilisées pour linéariser la plante contrôlée (recherche de «linéarisation par rétroaction» ou introduction de boucles internes)
Eugene Sh.
Merci pour votre commentaire. C'est ce que j'essaie de réaliser: utiliser un contrôleur PID dans une plage de températures "presque linéaire". J'ai déjà regardé avec ces mots clés mais sans beaucoup de chance.
user42875
1
Au lieu de former plusieurs modèles, pouvez-vous alimenter la valeur d'entrée via une fonction de «linéarisation» avant de la transmettre au contrôleur PID et la former en fonction de cela?
Nick Johnson
1
Votre approche me semble correcte. Vous allez ajuster le gain et la constante de temps en fonction de la température. Vous devrez penser à ce qui se passe aux points de croisement. Avez-vous construit quelque chose qui ne fonctionne pas aussi bien que vous le souhaiteriez? Une boucle de contrôle peut cacher beaucoup de non-linéarité. Et peut-être que vous irez bien sans vous faire de fantaisie.
George Herold
Pourquoi le rayonnement est non linéaire? Si le four fuit la température, la perte de puissance est linéaire Q = mc * delta_T. Si votre système fuit, alors presque toutes les constantes restent, comme le temps mort, le temps de montée, sauf que le gain est diminué. Vous pouvez simplement faire de la variable Kp Kp (T_actual) une fonction linéaire de Kp_initial et Kp_final.
Marko Buršič,

Réponses:

11

Comment régler un contrôleur PID sur un processus non linéaire?

Non. Vous linéarisez le processus, puis faites travailler le contrôleur PID sur les valeurs linéaires.

Par «linéariser le processus», je ne veux pas réellement rendre le processus lui-même linéaire. Cela ne peut généralement pas être fait à cause de la physique. Cependant, vous pouvez mettre quelque chose de non linéaire entre la sortie du contrôleur PID et l'entrée de processus afin que la sortie PID contrôle linéairement le processus du point de vue du contrôleur PID.

Un tel linéariseur n'a pas besoin d'être très précis car il est à l'intérieur de la boucle de rétroaction. Son but est de donner l'apparence d'un gain à peu près constant sur toute la plage dynamique de contrôle. Une manière simple et générale est une fonction de table linéaire par morceaux. 16 ou 32 segments sont généralement suffisants pour tout sauf pour les processus très hautement non linéaires.

Le pire exemple que j'ai rencontré était le contrôle du courant à travers un tube électronique en changeant la force d'entraînement du filament de cathode. La fonction de la température de la cathode au courant du faisceau d'électrons est hautement non linéaire, et le système contrôlant le courant de filament de la cathode était également quelque peu non linéaire. Dans ce cas, il était trop difficile de prédire tout ce gâchis, j'ai donc utilisé une procédure d'étalonnage pendant la production qui a traversé les valeurs de contrôle de l'entraînement du filament, mesuré le courant de faisceau pour chacune, puis calculé une table de recherche à 32 segments à partir de cela. Cela a très bien fonctionné et nous avons pu régler le contrôleur PID de courant de faisceau pour une bonne réponse sur toute la gamme.

Sans fonction de linéarisation devant le processus, vous devez régler le contrôleur PID pour la stabilité au point de gain incrémentiel le plus élevé du processus. Il en résulte alors un comportement très amorti en d'autres points.

Ajoutée

Rien dans votre question mise à jour ne dit pourquoi la méthode ci-dessus n'est pas encore une bonne idée et applicable. Vous dites que vous utilisez un contrôleur analogique. Ma première réaction est "Les années 80 sont révolues depuis longtemps, ne faites pas ça." Cependant, le contrôleur PID et le linéariseur d'usine peuvent être indépendants.

Apparemment, l'entrée de l'usine est la puissance et la sortie la température. Mesurez la température typique en régime permanent à différents niveaux de puissance. À partir de là, vous pouvez calculer la fonction qui convertit la «puissance» linéarisée en entrée de puissance réelle de l'installation. Le contrôleur PID analogique émet vraisemblablement une tension proportionnelle à la puissance. Tout ce que vous avez à faire est d'insérer une boîte noire en ligne avec cette tension qui fait la mesure linéaire en translation du niveau de puissance réel.

Normalement, vous le feriez avec un microcontrôleur doté d'un A / D intégré. La recherche de cette table et l'interpolation linéaire entre les points est triviale. Il produit ensuite le résultat d'une manière qui est finalement convertie en tension. Étant donné que l'installation est lente par rapport à un microcontrôleur, cela pourrait être aussi simple que de filtrer et de tamponner une sortie PWM. Ou vous pouvez piloter un D / A directement, bien que cela ne semble pas nécessaire dans ce cas.

Conformément au thème des années 80 de votre manette, vous pouvez le faire avec un A / D, une mémoire et un D / A pour une sensation rétro.

Dans tous les cas, le contrôleur PID contrôle désormais efficacement une installation linéaire pour autant qu'il le sache, et son réglage sur de bonnes performances devrait être possible.

Il est plus facile d'effectuer une transformation linéaire par morceaux sur l'entrée de l'installation en un seul endroit que de modifier 3 valeurs à l'intérieur du contrôleur PID sur la plage de sortie. Ce dernier est un kludge, tandis que le premier aborde le problème directement. Il est également beaucoup plus facile de mesurer les données de la fonction de linéarisation que de déterminer les gains P, I et D en divers points. Même si vous avez fait cela, vous avez toujours des problèmes transitoires, car les bons gains ne sont pas immédiatement appliqués à la situation. Encore une fois, "la programmation des gains" est un coup de pouce.

Olin Lathrop
la source
Très intéressant, merci d'avoir présenté l'approche du linéarisateur. J'utilise des contrôleurs matériels qui sont directement câblés aux relais, donc malheureusement je dois faire une planification de gain. Mon approche d'identification est-elle correcte? C'est comme si ce n'était pas le cas.
user42875
J'ai modifié ma question pour clarifier mon problème - les deux derniers paragraphes en particulier. (toujours, +1)
user42875
J'ai demandé au fabricant des contrôleurs si je peux insérer une table de recherche avec interpolation linéaire avant la sortie - si cela peut être fait, je vais certainement opter pour cette option même si cela signifie que je devrai oublier le outils de réglage habituels basés sur la fonction de transfert et autres. C'est élégant. S'ils ne le font pas, je devrai faire la planification de gain très fastidieuse, mais apparemment il n'y a rien de mal à mon approche, c'est ce que je voulais vérifier.
user42875
2

N'oubliez pas que lorsque vous linéarisez un modèle, vous supposez effectivement que le modèle non linéaire y = f (x) est remplacé par y = A * (x-x0) + B. Notez que x0 est le point de linéarisation. Lorsque vous introduisez des plages pour x, vous vous retrouvez avec plusieurs A, B et x0. Quoi qu'il en soit, l'entrée de votre contrôleur sera l'erreur par rapport au point de linéarisation actuel. Cependant, vous décalez toujours le signal d'entrée (avec B), donc même si l'erreur est 0 par rapport au point de linéarisation actuel, vous continuerez toujours un signal.

Dans votre exemple, alors, même si l'erreur est de 0 degré (au point de consigne de 70 degrés), le contrôleur restituera toujours une puissance supérieure à 0.

Pål-Kristian Engstad
la source
Thanks. I think you are onto something, but I don't really understand. Grossly said, I'm using basic PID controllers (analog-like), of which I can change the P, I, D terms in function of the temperature. I know that at once settled at 70°C, the power will not be zero even if the error is zero. It's the settling that worries me: I'm basically dropping the controller in at 70°C, and since it's t=0s for it, the integral term will take some time to kick in so I'll have an awful droop. It almost sounds like my method is wrong.
user42875
(The controller will demand very little power at the beginning, below the power required to stay at 70°C)
user42875
J'ai modifié ma question pour clarifier - les deux derniers paragraphes en particulier.
user42875
Il est difficile de donner des conseils sans plus de détails sur votre processus, mais il semble que vous ayez un système assez instable à environ 70 degrés et que autour de cette température, la plupart du contrôle se produit en raison de la compensation intragrale (le I dans le PID)?
Pål-Kristian Engstad du
70 ° C n'est qu'un exemple, j'aurai probablement 6 plages de températures différentes à régler. En gros, je contrôle la température à l'intérieur d'un thermos en chauffant la surface extérieure.
user42875
2

Une approche du contrôle non linéaire avec des contrôleurs PID, une approche qui est largement utilisée dans l'industrie, est appelée «programmation de gain».

Le problème de contrôle non linéaire est décomposé en une série de régions suffisamment linéaires et les paramètres appropriés sont utilisés pour chaque région.

Spehro Pefhany
la source
C'est ce que j'essaie de réaliser, comme on peut le lire dans ma question ("Les paramètres PID seraient automatiquement commutés en fonction de la température du processus *" "*: c'est effectivement un gain de programmation.")
user42875