03-14-2018 03:11 AM
C'est vrais que j'aurais du vous proposer un VI plus propre, mais j'ai rapidement fait celui-ci en rassemblant les parties nécessaires au la compréhension du problème uniquement. Et elles n'étaient pas toujours toutes dans les mêmes boucles donc quand j'ai fait la rassemblement c'est devenu un peu bordélique!
En fait le problème est que mon régulateur PI conserve en mémoire ses actions, par exemple, si son action intégrale à l'exécution d'avant étant de 30 Nm, j'aurai toujours mon action intégrale de 30 à l’exécution suivante. Mon moteur va donc accélérer et dépasser largement son SetPoint le temps que l'action intégrale diminue (je dois encore travailler à l'optimisation du régulateur). Je vais continuer a débugger en tentant de voir ou il serait susceptible de stocker ces variables d'une exécution à l'autre.
03-14-2018 03:33 AM
" mon régulateur PI conserve en mémoire ses actions "
- qu'appelles-tu exactement "mon régulateur PI" ? ...s'agit-il de ton sous-VI "PI_Regulator_SubVI.vi" ?
- qu'appelles-tu exactement "ses actions" ? s'agit-il des valeurs de sorties "Prop.action" et "Integ.action" ?
Ton sous-VI "PI_Regulator_SubVI.vi" ne comporte qu'une boîte de calcul ... et rien qui puisse "mémoriser" quoi que ce soit en mémoire d'une itération à l'autre, pas de shift-register, pas de feedback node, donc aucune rétroaction. Si ses valeurs de sorties "Prop.action" et "Integ.action" ont les mêmes valeurs entre deux itérations c'est que ce sous-VI s'est exécuté avec les mêmes valeurs d'entrée. Au passage, quelle est l'utilité de la While dans ce sous-VI (dont le terminal stop est à true?)
- également, pourquoi utiliser une "timed loop" et pas une simple While cadencée.
03-14-2018 06:07 AM
- qu'appelles-tu exactement "mon régulateur PI" ? ...s'agit-il de ton sous-VI "PI_Regulator_SubVI.vi" ?
Oui, je parle bien du sous-vi.
- qu'appelles-tu exactement "ses actions" ? s'agit-il des valeurs de sorties "Prop.action" et "Integ.action" ?
La sortie du régulateur est le MV (Manipulated Value) et résulte de la somme des actions intégrales et proportionnelles. C'est MV qui dicte de la commande de couple à envoyer.
- également, pourquoi utiliser une "timed loop" et pas une simple While cadencée.
J'ai choisi une "timed loop" dans le but de pouvoir gérer les priorités entre mes différentes boucles.
Le calcul de l'action intégrale se fait en sommant les erreurs précédentes (E=SP-PV). Je crois que mon problème vient de là, le sub-vi doit reprendre l'ensemble des erreurs précédentes et non simplement celle de l'exécution en cour.