Asservissement d'une pompe

Bonjour
Mon projet consiste à asservir un débit en utilisant comme actionneur une pompe à commande MLI.
Mon problème est que ma pompe est un système non linéaire [speed=f(pwm)].
Est ce que je peut faire dans ce cas l’asservissement(PID)?
Merci

Bonjour,

Tu connais la fonction f ?

Plus ou moins !!

Classeur1.xlsx (10.3 KB)

C'est pas dramatique. Normalement un PID est suffisamment robuste pour vivre avec ça.
Au pire, tu peux inverser la non-linéarité, à condition qu'elle soit reproductible, mais personnellement je ne le ferais pas. En tout cas pas dans un premier temps.

Le but d'une régulation PID c'est justement quand on a pas f : on rentre une consigne, le système prend la mesure de sortie, calcul l'écart avec la consigne, ajuste les variables d'entrée, refait une mesure, calcul l'écart avec la consigne, ajuste les variables d'entrée et ainsi de suite ...

Oui, enfin, si f était furieusement non-linéaire (ce qui n'est pas le cas ici), le PID aurait des limites. Ou alors il faudrait faire varier les gains en fonction du point de fonctionnement.

C'est un asservissement, justement c'est fait pour quand ça ne correspond à rien, sinon on applique "bêtement" y=f(x) et on a pas besoin de PID. C'est quand on a pas f qu'on installe une boucle d'asservissement, ce qui permet d'obtenir, s'il est bien configuré, une régulation de consigne parfaite quel que soit la situation et les perturbations

Non, s'il y a quelque chose de très non-linéaire dans le système, le PID ne fonctionnera pas. Le PID ne sert pas à compenser les non-linéarités, il sert à compenser la méconnaissance d'un système linéaire.

Alors mettant nous d’accord sur un point, mon systéme n’est pas parfaitement linéaire par conséquence je ne peut pas appliquer les notions de l’automatique linéaire comme par exemple identification de mon systéme en boucle ouvert ou fermé (méthode de BROIDA,STREJC…),ça c’est sure,et dans ce cas je suis obligé à lacher cette partie dans mon projet.
Passant maitenant au probléme de l’asservissement à travers le PID, la question qui se pose maitenent est comment je peut choisir les consatantes du PID sachant que je n’est aucune connaissance à priori(pas de modélisation automatique du systéme),dans ce cas aussi je suis obligé à lacher l’étude automatique je doit juste concevoir un PID de constantes variable sans dire l’influence des variations des kp,ki,kd sur la stabilité dépassement,temps de réponce…
Passant maitenant au probléme de grande non linéarité voici quelques exemples de non linéarité et discutons le cas du seuil(voir image attaché):
Supposant que la consigne est 5 et le mesure part de zéros le PID compare et établit une commande( qui débute à 100% pwm pour l’actionneur),par la suite l’erreur diminue=> une nouvelle commande(par exemple à 90%) ainsi de suite,arrivant maitenent au point que j’ai encerclé et supposant que le PID à fait une comparaison et à établit une commande de 50% et l’erreur est 2, maintenant arrivant au probléme, le PID va donner une nouvelle commande en fonction de cette erreur supposant que c’est 40% par contre l’erreur ne vas pas dimunier puisque on est dand le palier de stabilité(le % pwm consigne dimunie sans que la vitesse de la pompe dimunie)::::::::ET VOILA mon GROS PROBLéme.
Quelq’un sait est ce que en fin de conte la mesure va t’elle rejoindre la consigne?
Si c’est oui c’est sure qu’il aura un petit retard de temps par rapport comme c’est si mon systéme été linéaire??
Et si c’est simplement un simple retard je peut attaquer le projet mais je ne vais pas faire la modélisation automatique puisque ça va faussé…

Je ne comprends pas: ton système est non-linéaire comme la courbe que tu as montrée précédemment ou bien il y a un seuil ?
Si c'est comme la courbe, c'est pas bien méchant, tu peux considérer qu'il est linéaire et l'asservissement rattrapera cette approximation.

Désolé,
J’ai pas bien préciser en effet ma pompe commence son seuil à vitesse nulle dés que le % PWM tombe en dessous de 20%…
Et dans ce cas je pense q’il faut asservir des débit> entre 1et 4.8 L/MIN??
Je vait faire aussi un asservissement de pression et de niveau je doit m’assurer que quelque soit les consignes la pompe ne doit pas tomber dans la zone de seuil, il faut ouvrir bien précisement la vanne de perturbation je pense que c’est la seule solution.

Tu pourras quand même asservir un débit nul (ou inférieur à 1) sans te poser de question. La zone de seuil se retrouve également sur les moteurs à courant continu (typiquement, en dessous de 10-20% de PWM ils ne tournent pas) et il est malgré tout possible d'asservir leur vitesse dans la zone de seuil. C'est le PID qui fera en sorte de sortir un PWM supérieur à 15% (dans ton cas).
Tu peux cependant redresser un peu cette non-linéarité en rajoutant systématiquement disons 10% à ta commande mais ça ne devrait pas être utile. Tu pourras essayer avec et sans.
Pour le débit max en revanche tu ne pourras pas dépasser 4.8 l/min.

Ca n'a aucun rapport, mais juste par curiosité: tu ne fais donc pas l'asservissement sur l'Arduino mais sur le PC avec Labview si j'ai bien compris. Tu utilises l'interface Labview Arduino ? Il y a une raison particulière pour laquelle tu ne fais pas l'asservissement directement sur l'Arduino ?

C'est le cahier des charges qui exige que la consigne doit étre introduite par LABVIEW, tant mieux pour moi LABVIEW est un environnement de pogrammation graphique, au contraire de l'ARDUINO NANO V3 ATmega328 qui nécessite une bonee connaisannce en C, pourtant il fallait écrire quelque programme sur ARDUINO (sortir un pwm proportionnelle à une entreé tension délivreé par le pid sur un pin de fréquence 490 hz et non 1000 car létallonage de la pompe à été faite sur 490 hz, j'ai essayeé d'avoir une courbe linéaire de la pompe en variant la fréquence je n'ai pas réussu à trouver le code qui change la fréquence de l'arduino et méme en utilisant un GBF de fréquence variable pas de linéarité pou plusieurs autre fréquence testé).
L'arduino dans mon projet se n'est qu'une simple interface(mais li n'ya pas de reconnaissance entre l'ARDUINO NANO V3 ATmega328 et LABVIEW, au contraire des autres ARDUINO).
J'ai vérifier ce que vous m'avez à propos de """"La zone de seuil se retrouve également sur les moteurs à courant continu (typiquement, en dessous de 10-20% de PWM ils ne tournent pas) et il est malgré tout possible d'asservir leur vitesse dans la zone de seuil"""",et vous avez trés bien raison.
Merci vous m'avez bien rassuré par vous éclairsissement, et merci pour votre suivie avec détaille,espérant dans la pratique que le banc tourne.
Derniére question pensez vous que je réussirai à ajsteé les paramétre du PID par BROIDA,STREJC... étant donné que le systéme n'est pas parfaitement linéaire.

hmayda:
Derniére question pensez vous que je réussirai à ajsteé les paramétre du PID par BROIDA,STREJC... étant donné que le systéme n'est pas parfaitement linéaire.

A priori oui. De toute façon, vu la piètre qualité des méthodes de réglage de PID classiques, la non-linéarité ne risque pas de beaucoup empirer les choses.
Y a-t-il un point de fonctionnement (un débit) qui sera privilégié (par exemple: 3 l/min, au hasard) ? Si oui, c'est sur ce point qu'il faudra faire le réglage fin du PID (et l'identification du système). Le réglage sera moins bon sur les autres points de fonctionnement (à cause de la non-linéarité) mais c'est pas grave car l'asservissement passera dessus de façon transitoire.

Je vais faire cette partie juste pour enrichir le rapport de mon projet,je fixerais une position bien determiné de la vanne de perturbation, je choisirais un bon point de fonctionnement,j'applique les méthodes d'identification,et puis je peut dire que c'est plus ou moins valable pour les autres points de fonctionnements.
Merci bien pour vous :slight_smile: