Asservissement d´un Servo Via une carte FPGA NI

Pour toutes les questions sur l’asservissement, les systèmes bouclés, les différents correcteurs, les diagrammes de représentation des systèmes : Bode, Nyquist et Black, etc

Modérateur : Modérateur

Clement

Asservissement d´un Servo Via une carte FPGA NI

Message par Clement »

Bonjour,

Etudiant en stage de fin d´etude, j´ai pour objectif de faire une application Labview qui controle l´asservissement d´un servo et de son ampli le tout fonctionnant sur une carte FPGA de National Instrument (donc programmé avec Labview). Il est important de preciser que l´application final devra pouvoir gerer l´asservissement de different ensemble "Servo,boite de vitesse, ampli" moyennant bien entendu different correcteur.
Je tiens a préciser la description des choix technologiques ci dessus sont imposés (bien qu´il ne me semble pas etre la solution idéal)

N´étant pas spécialiste en automatique et totalement novice dans la réalisation de tel correcteur, voila les soucis pour lesquel je requière votre aide:
- Tout d´abord concernant le choix de la méthode de calcul du correcteur PID: En premier lieu je pensais simplement calculer avec Laplace un correcteur et l´implementé dans le FPGA (Méthode Analogique). Après pas mal de recherche sur le sujet j´ai entendu parlé de l´automatique numérique ! Donc étant donné que la correction sera effectué par le FPGA (convertisseur CAN/CNA en entré/sortie) est-il indispensable d´utiliser la transformé en z pour obtenir un correcteur statisfaisant (Méthode Numérique).
-Ma seconde inquiétude est de savoir si une fonction de correction PID est implémentable sur un FPGA (Avec le language Labview FPGA ou bien en VHDL). Comme le VHDL est un langage très bas niveau, un certain nombre de restriction s´applique (par exemple impossible de faire des divisions) J´ai donc peur que cela ne rend le developpement d´une telle fonction extremement difficil, voir impossible (Il se peut aussi que je sois aussi complètement a coté de mes pompes...)

Voila, je vous remercie par avance pour votre aide précieuse, et n´ayant pas trouvé grand chose sur le sujet, je posterai les réponses à ces questions si je les trouve tout seul.

Cheers,
Clement

Clement

Re: Asservissement d´un Servo Via une carte FPGA NI

Message par Clement »

Hello,

C´est encore moi, et je reviens pr me répondre ... peut etre que ca pourra aidé quelqu´un !

En fait la réponse a mes problemes est la suivante : Concernant la Transformé en Z pour le calcule du correcteur, il ne s´agit d´un outil mathematique pour les signaux discret ... la "methode" pour calculer les parametre du PID reste plus ou moins les memes (marge de gains, ...) c´est juste que une fois que tout est bien calculé, c´est 100000 fois plus simple de l´implémenté car il est très simple de passer de la fonction de transfert en Z du correcteur a des équations récurrente ! Je ne vous explique donc pas la simplicité, lorsque l´on a qq equation récurrente, pour programmé le PID sur un support numérique !

A titre informatif, et pour les personnes que souhaiteraient développer une telle fonction sur un FPGA ... n´oublié pas que les calcules décimaux sont interdit sur les FPGA, donc TOUTES vos valeurs de correcteur devront etre converti en entier avec un facteur 1000 par exemple! Bref moi je me suis pas emerdé, j´ai utilisé le VI PID de national qui va sur le FPGA ... easy mais $$$

Voici un lien ou il y a des tonnes de cour complet de A a Z sur l´auto analogique et numerique, avec de super exemple ! : http://www.jelectronique.com/modules/my ... cat-6.html

Bon courage !

clement

Re: Asservissement d´un Servo Via une carte FPGA NI

Message par clement »

J´ai oublier le probleme des divisions sur un FPGA ... la aussi y´a une astuce toute simple !

Si on pense bit et puissance de 2 alors la le FPGA il aime bien ! donc prenons 2^-1 = 0,5 ... voila en multipliant un nombre par une puissance negative on a (ici -1) on a une division ! (ici division par 2) ... et la vous allez me dire : "oui mais bon on peux "divisé" que par des puissances de 2..." et vous avez raison ce peu paraitre restrictif... et la je réponds :
vous pouvez tout a fais trouvé un couple : Multiplicateur, diviseur par puissance de 2 qui vous permettent de diviser par n´importe quel nombre ... cela nécessite juste une petite macro excel, ou un petit calculateur ... voila un petit exemple :

ici X est le nombre que vous voulez multiplier par un facteur < 1 :

0,1 : Y=X*3277*2^-15 => Si X=1 Y=0,1000061... Erreur:6,1e-6
0,007 : Y=X*29360*2^-22 => Si X=1 Y=0,006999... Erreur:3,05e-8
0,001245 : Y=X*20888*2^-24 => Si X=1 Y=0,001245... Erreur:2,18e-8

Question !??!

Tonio

Re: Asservissement d´un Servo Via une carte FPGA NI

Message par Tonio »

Bonjour,

Ton sujet est très intéressant et j'espère que tu a réussi ton stage.
Je m'interesse aussi à faire un corecteur PID via un FPGA mais je ne trouve pas gand chose à ce sujet.
Diffuserai tu ton rapport de stage sur internet ?? ou pourrai -tu me l'envoyer à anth_coens@yahoo.fr stp ?

Bien cordialement.

Romain

Re: Asservissement d´un Servo Via une carte FPGA NI

Message par Romain »

Coucou,

Je suis aussi étudiant en stage de fin d'études et je m'intéresse également à l'implantation d'un correcteur dans un FPGA.
J'ai réalisé une carte permettant de commander un moteur grâce à un FPGA. Le moteur est commandé par un DAC et la boucle de retour est réalisée par un ADC.
La partie automatique pure : détermination des paramètres du correcteur ne me pose pas de soucis.
L'implantation du correcteur dans le FPGA me pose plus de problèmes notamment la mise en œuvre d'équation récurrente :
Par exemple : s(n)=e(n)-e(n-1)
Que devient le paramètre n ? Une détection sur front ?
Il faut utiliser dans un même temps les valeurs de e(n) et de e(n-1) ? Il doit exister une méthode pour réaliser cela de manière optimale ...
Il faut que je regarde l'implémentation de filtre dans un FPGA pour m'inspirer .....

Merci pour votre aide et bonne continuation !

Répondre