algo de regulation

algo de regulation - Algo - Programmation

Marsh Posté le 28-01-2004 à 18:57:30    

est ce que quelqu'un aurai des algos ou exemple de code (C) pour des regulations type PID.. j'ai ressorti mes vieux cours mais franchement j'y comprend plus grd chose un petit algo m'aiderai bien :-p ou un line avec plein d'explication la desus chui preneur... voir mes des cours en pdf ;-) j'en demande trop .. oups

Reply

Marsh Posté le 28-01-2004 à 18:57:30   

Reply

Marsh Posté le 28-01-2004 à 19:02:40    

got a écrit :

est ce que quelqu'un aurai des algos ou exemple de code (C) pour des regulations type PID.. j'ai ressorti mes vieux cours mais franchement j'y comprend plus grd chose un petit algo m'aiderai bien :-p ou un line avec plein d'explication la desus chui preneur... voir mes des cours en pdf ;-) j'en demande trop .. oups  

asservissement peut-être non ? car faire du PID sur un point fixe, c'est un peu un char pour tuer une mouche (l'erreur de trainage, ou la réponse impulsionnelle c'est pas des notions super utiles).


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-01-2004 à 19:15:43    

oui oui c de l'asservissement sur de la temperature et de la pression..
reponse impulsionelle ça me rappel quelque chsoe par contre jamais entendu aprler d'erreur de trainage...!?)

Reply

Marsh Posté le 28-01-2004 à 20:07:18    

bon, je la fait courte.
On a un système d'asservissement, une commande, un capteur et le système à asservir.
Le principe c'est de faire la différence entre la commande (ce qu'on voudrait que le système fasse) et la mesure du capteur (ce qu'il fait réellement).
 
on a donc :

Code :
  1. ...................e....................................s
  2. commande ----------->asservissement -----> système réel --->
  3. ..............^..........................................|
  4. ..............|..........................................|
  5. ..............\----------------capteur-------------------/


donc ce qu'on voudrait c'est que la différence commande-capteur (ici e, l'erreur du système) soit toujour nulle (on suppose le capteur parfait).
 
on va donc envoyer au système un signal qui dépend de l'erreur.
 
Le plus simple : on envoie au système un signal proportionnel (d'où le P) à l'erreur, plus l'erreur est grande et plus on vas envoyer d'énergie au système pour qu'il compense son erreur, puis, quand l'erreur est faible, ça donne peu d'énergie, pour pas "dépasser" la commande (faire des zig-zag).
ça marche bien en théorie, mais en pratique, quand l'erreur est faible, et que la commande ne bouge pas, on va garder cette petite erreur pendant longtemps.
 
Alors on ajoute un coefficient Intégral.
Ainsi, si on a une commande qui ne bouge pas et une petite erreur qui reste depuis quelques temps (erreur statique), le système va avoir tendance à la rattraper au cours du temps car l'intégrale de l'erreur va augmenter.
 
 
Mais si la commande varie ? bah avec notre intégrale de l'erreur, on tient compte du passé, hors le monde change, et on a toujours un train de retard (erreur de trainage, on fait monter la commande régulièrement, et on regarde de combien le système la suit). Hors on peut prévoir l'avenir, il existe plusiseurs méthode, mais la plus simple est le coefficient dérivé.
On ajoute au système, un coefficient dépendant de la dérivée de l'erreur. Si la commande varie, la dérivée de l'erreur va devenir grande (car le système ne réagit pas tout de suite) et va prendre plus d'importance que la partie intégrale (qui à court terme ne bouge que peu) et compenser ainsi le retard que nous fait prendre la partie intégrale.
 
Donc suivant ce qui se passe en commande, le coefficient intégral ou dérivatif prend de l'importance relative, le niveau absolut étant le coefficient proportionnel.
 
le schéma de l'asservissement devient :

Code :
  1. erreur----------------------->P------++-----> système réel
  2. .......||............................^^
  3. .......||............................||
  4. .......|\---->intégration---->I------/|
  5. .......\----->dérivation----->D-------/


 
Bien entendu, la vraie bataille consiste à choisir P, I et D, mais c'est une autre histoire.


Message édité par nraynaud le 28-01-2004 à 20:10:45

---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-01-2004 à 22:01:04    

merci bcp ça c le rpincipe en gros je le connais j'ai aussi plein de savante equation que j'ai ressorti de mes vieux court plein de poussiere .. le pb c que je suis pas assez fort en math pour sirtir de ces equations un algo informatique quelconque...  
 
Merci pour ce rafraichissement tous de meme ;-)

Reply

Marsh Posté le 28-01-2004 à 23:56:50    

pour faire le programme, c'est simple, tu as une grosse fonction d'asservissement qui prend en entrée une erreur (donc commande - capteur) et qui renvoie une valeur qui sera l'énergie à fournir au système.
 
 
la fonction en question sera appellée à chaque tic de l'horloge.
Elle stocke en statique (d'un appel sur l'autre) la valeur précédente de l'erreur (disons eprec) et la valeur du compteur d'intégration (disons iprec) ; initialisées toutes les 2 à 0 au premier tour.
 
la fonction à cette tronche (non testée) :

Code :
  1. double nextVal(double error) {
  2.   static double eprec = 0;
  3.   static double iprec = 0;
  4.   double deriv = (error - eprec) / deltaT;
  5.   double integrale = (error - eprec) * deltaT + iprec;
  6. //deltaT est le temps écoulé depuis le dernier appel de cette fonction
  7.   double result = P * error + I * integrale + D * deriv;
  8.   eprec = error;
  9.   iprec = integrale;
  10.   return reult;
  11. }


(attention que l'intégration est naïve et que la formulation de Kahan serait plus intelligente voir http://forum.hardware.fr/hardwaref [...] 9128-1.htm )
à noter que cette formulation permet d'avoir une horloge irrégulière, deltaT étant différent à chaque appel.
 
edit : oublié de faire tourner eprec et iprec.


Message édité par nraynaud le 29-01-2004 à 01:23:44

---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 29-01-2004 à 08:27:43    

merci

Reply

Marsh Posté le 29-01-2004 à 08:34:23    

delta T est le temps entre chaque appel de la fonction?

Reply

Marsh Posté le 29-01-2004 à 11:08:52    

got a écrit :

delta T est le temps entre chaque appel de la fonction?

oui, si ton horloge est régulière, c'est la période de l'horloge, sinon, c'est simplement le temps depuis le dernier appel. Cette dernière formulation est plus souple, il y a des cas (en particulier en informatique de bureau) où on ne peut pas savoir à l'avance quand un bout de code sera exécuté.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 29-01-2004 à 22:52:38    

oki merci...

Reply

Marsh Posté le 29-01-2004 à 22:52:38   

Reply

Marsh Posté le 15-03-2004 à 11:56:05    

g rien compris a ces explications je cherche justement des cours pas trop dur sur la regulation PID je doit presenter des produits a mon taf le mois prochain et je ne sais pas a koi correspond ce type de régulation ...
si quelqun a un bon lien parceke avec google je ne trouve rien ou rien a mon niveau (bep electrotech et cet année 1ere bac pro energetique ).

Reply

Marsh Posté le 15-03-2004 à 12:10:43    

nraynaud>  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed