J'ai vu de nombreux articles PID, tels que celui-ci , utiliser une transformation Z de l'équation PID générique pour dériver une équation de différence folle qui peut ensuite être implémentée dans un logiciel (ou dans ce cas un FPGA). Ma question est, quel est l'avantage d'une telle implémentation par rapport au PID traditionnel et beaucoup plus intuitif sans doctoratmise en œuvre de type? La seconde semble plus facile à comprendre et à mettre en œuvre. Le terme P est une multiplication droite, l'intégrale utilise une somme cumulée et la dérivée est estimée en soustrayant l'échantillon précédent de l'échantillon actuel. Si vous devez ajouter une fonctionnalité telle que la protection intégrale de liquidation, il s'agit d'une algèbre simple. Essayer d'ajouter la protection Integral Windup ou d'autres fonctionnalités à un algorithme de type différence, tel que lié ci-dessus, semble être beaucoup plus compliqué. Y a-t-il une raison d'utiliser une telle implémentation, à part le type "Je suis un mauvais cul qui aime faire des transformations Z pour le plaisir" qui va avec?
EDIT: Le PID sans article PHD que j'ai lié est un exemple de la mise en œuvre plus simple qui utilise une somme cumulée pour le terme intégral et la différence entre des échantillons consécutifs pour le terme dérivé. Il peut être implémenté avec des mathématiques à virgule fixe de manière déterministe et peut inclure des informations de constante de temps en temps réel dans le calcul, si vous le souhaitez. Je cherche essentiellement un avantage pratique à la méthode de transformation Z. Je ne vois pas comment cela pourrait être plus rapide ou utiliser moins de ressources. Au lieu de conserver une somme cumulée de l'intégrale, la méthode Z semble utiliser la sortie précédente et soustraire les composants P et D précédents (pour arriver à la somme intégrale par calcul). Donc, à moins que quelqu'un puisse signaler quelque chose qui me manque, j'accepterai le commentaire d'AngryEE selon lequel ils sont essentiellement les mêmes.
MODIFICATION FINALE: Merci pour les réponses. Je pense que j'ai appris un peu sur chacun, mais au final, je pense que Angry a raison en ce sens que c'est juste une question de préférence. Les deux formes:
e(k-2)=e(k-1),
ou
évaluera essentiellement la même chose. Certains mentionnent que le premier peut être implémenté dans un DSP ou un FPGA plus rapidement, mais je ne l'achète pas. L'un ou l'autre pourrait être vectorisé. Le premier nécessite deux opérations post, le second nécessite une opération pré et une opération post, il semble donc égaliser. Le premier nécessite également 1 multiplication supplémentaire dans le calcul réel.
Réponses:
Vous êtes embrouillé par toute la fantaisie de la transformée en Z. Les deux approches sont fondamentalement les mêmes - l'approche PID sans PHD a juste moins d'indices. Ils remplissent la même fonction de base et utilisent les mêmes mathématiques de base.
La seule différence majeure entre les deux que je peux voir est que le PID sans PHD ne prend pas en compte le temps d'échantillonnage. Pour faire tout ce qui pourrait être instable, le temps d'échantillonnage est une considération très importante. L'avantage de l'approche de transformation Z dans ce cas est que vous ne pouvez pas l'utiliser sans prendre en compte le temps d'échantillonnage - cela vous oblige à montrer votre travail et vous aide à concevoir un système plus stable.
Il semble également que l'étude de cas que vous avez trouvée mettant en œuvre l'approche de la transformée en Z ait été conçue pour être hautement déterministe. Cela explique leur utilisation des FPGA - les calculs prendront toujours le même temps. Le PID sans mise en œuvre de PHD n'est décidément pas déterministe. L'utilisation de doubles comme variables au lieu d'une implémentation à virgule fixe est sûre de provoquer un comportement non déterministe sur tout microcontrôleur sans unité à virgule flottante (et probablement sur les uC avec un FPU également). L'étude de cas travaille sur un tout autre niveau de complexité par rapport à l'approche PID sans PHD.
Donc, fondamentalement, l'approche mathématique et de contrôle est la même, mais l'approche étude de cas / transformation en Z est plus rigoureuse et théoriquement fondée. L'approche PID sans PHD ne fonctionnera que pour des systèmes très simples, non critiques en temps et relativement stables.
la source
La méthode de transformation en Z de la conception du contrôleur PID donnera finalement une implémentation beaucoup plus efficace. Ceci est essentiel si vous concevez le plus petit FPGA / DSP / microcontrôleur pour votre application.
Le "PID sans PHD" mentionné est probablement l'approche la plus simple pour implémenter un contrôle PID dans un logiciel, mais il devient lourd à des taux d'échantillonnage plus élevés.
De plus, la transformée en Z se prête mieux à la conception dans un domaine discret (numérique). La méthode de conception traditionnelle (transformée de Laplace) est plus pour le temps continu. Il existe plusieurs façons de convertir entre les deux (maintien de l'ordre zéro, interpolation linéaire, placement des pôles, bilinéaire / Tustin), chacune est dotée de ses avantages et inconvénients en termes de stabilité et de réponse du système. Il est généralement plus facile de faire la conception entière dans le domaine discret.
Pour faire court, si vous utilisez un système relativement "lent" (tous les principaux comportements se produisent de manière significative sous une fréquence de 100 kHz environ), la première conception est probablement très bien. Vous pouvez l'implémenter sur un microcontrôleur ou un PC et en finir avec lui. Au fur et à mesure que les systèmes s'accélèrent, vous devrez peut-être utiliser la méthode de transformation en Z pour obtenir les vitesses dont vous avez besoin (l'article mentionne 9,5 MHz, en supposant que vous disposez d'A / D et de DAC qui peuvent suivre).
la source
Voici l'affaire, selon mon expérience:
sum
") séparé dans sa propre variable d'état. Cette variable d'état a un sens. La première implémentation conserve la variable d'état en tant qu'historique de l'erreur; cela a un sens, mais il fournit moins de perspicacité à mon avis.Enfin, il y a d'autres problèmes impliquant la non-linéarité ou l'analyse qui vous font souvent choisir une implémentation plutôt qu'une autre (pour moi, c'est toujours l'approche classique pour les contrôleurs, pour les filtres FIR, c'est la transformée en Z, et pour les filtres IIR à 1 ou 2 pôles, c'est généralement le approche classique):
Pour les contrôleurs, je garde toujours un intégrateur comme variable d'état, plutôt que des échantillons d'erreur passés. La raison en est que les vrais systèmes nécessitent souvent un anti-enroulement où vous devez empêcher l'intégrale de devenir trop positive ou trop négative. (Et si vous implémentez en virgule fixe, vous devez le faire de toute façon, car la condition enveloppante lorsque vous frappez le débordement affectera le comportement de votre boucle de contrôle)
Pour la même raison, je calcule également toujours l'intégrateur de manière référencée en sortie: par exemple
sum += Ki*error; out = stuff + sum
plutôt quesum += error; out = stuff + Ki*sum
. Avec la deuxième approche, si vous modifiez le gain Ki, cela modifie l'effet de l'intégrateur sur la sortie de haut en bas, ce qui n'est probablement pas ce que vous voulez, et la limite change en fonction du gain. Si vous multipliez l'erreur par Ki avant l'intégration, vos unités de l'intégrateur sont les mêmes que les unités de la sortie de la boucle de contrôle, et cela a une signification physique plus évidente.(mise à jour: j'ai écrit une entrée de blog sur ce sujet plus en détail.)
la source
Modifier :
L'utilisation de la transformation Z facilite la combinaison et la simplification des systèmes LTI pour l' analyse . Par exemple, une série en cascade de k systèmes LTI avec les fonctions de transfert H1, H2, ..., Hk se combinera comme un simple produit
H = H1*H2*...*Hk
. En outre, la fonction de transfert d'une boucle de rétroaction négative estT = G/(1 + G*H)
, où H est sur le chemin de rétroaction. Une fois que vous disposez d'une fonction de transfert globale, vous pouvez analyser la stabilité (emplacement des pôles) et les performances (transitoires, erreur d'état stable), en ajoutant des filtres et des commentaires supplémentaires pour optimiser la conception.Pour les sous-systèmes d'ordre supérieur, vous pouvez partitionner la fonction système et l'implémenter comme une série de biquades en cascade (c'est-à-dire par des paires de zéros et de pôles, tels que des conjugués complexes ou des racines répétées), ce qui diminue l'instabilité causée par la quantification. Un biquad de forme canonique:
la source
La partie difficile à propos d'un contrôleur PID n'est pas le code lui-même. Les problèmes surviennent lorsque vous essayez d'optimiser le contrôleur. Bien sûr, vous pouvez faire des essais et des erreurs et obtenir un contrôleur assez décent, mais certains systèmes sont beaucoup trop complexes pour qu'une méthode d'essai et d'erreur soit facile à exécuter. Ces mêmes systèmes ont tendance à être ceux qui ont besoin d'un très bon contrôleur au lieu d'un simple décent. Dans ce cas, la transformée en Z est beaucoup plus facile à analyser.
Une autre chose à penser est la stabilité d'un système. Vous avez peut-être affaire à un système qui est assez difficile à devenir instable, ou même s'il le fait, cela ne fait rien de mal. Mais il existe de nombreux systèmes qui peuvent avoir des résultats catastrophiques si le contrôleur le rend instable. La transformée en Z est un autre endroit où il est beaucoup plus facile d'identifier s'il y aura des problèmes.
Et 1 note finale. Lors de l'analyse d'un système dans son ensemble, vous devrez obtenir des équations pour tous les composants de votre système. Bien sûr, vous pouvez l'obtenir à partir du PID sans doctorat, mais si vous avez déjà travaillé avec lui dans la méthode de transformation en Z, il y a beaucoup moins de travail de va-et-vient que vous devez faire.
Maintenant, comme préférence personnelle, j'utilise toujours la méthode PID sans PhD. C'est juste parce que j'utilise simplement des micro-contrôleurs avec des systèmes qui ne dépendent pas vraiment du contrôleur.
la source
Il y a plusieurs points pour lesquels la forme de transformation en Z a une utilité plus élevée.
Demandez à toute personne faisant la promotion de l'approche basée sur le temps / simple / sans PHD de définir le terme Kd. Ils sont susceptibles de répondre «zéro» et ils sont susceptibles de dire que D est instable (sans filtre passe-bas). Avant d’apprendre comment tout cela s’organise, j’aurais dit et fait de telles choses.
Le réglage de Kd est difficile dans le domaine temporel. Lorsque vous pouvez voir la fonction de transfert (la transformée en Z du sous-système PID), vous pouvez facilement voir à quel point elle est stable. Vous pouvez également facilement voir comment le terme D affecte le contrôleur par rapport aux autres paramètres. Si votre paramètre Kd contribue à 0,00001 aux coefficients du polynôme z mais que votre terme Ki met 10,5, alors votre terme D est trop petit pour avoir un effet réel sur le système. Vous pouvez également voir l'équilibre entre les termes Kp & Ki.
Les DSP sont conçus pour calculer des équations aux différences finies (FDE). Ils ont des op-codes qui multiplieront un coefficient, additionneront à un accumulateur et décaleront une valeur dans un tampon en un cycle d'instruction. Cela exploite la nature parallèle des FDE. Si la machine n'a pas ce code d'opération ... ce n'est pas un DSP. Les PowerPC embarqués (MPC) ont un périphérique dédié au calcul des FDE (ils l'appellent l'unité de décimation). Les DSP sont conçus pour calculer les FDE car il est trivial de transformer une fonction de transfert en FDE. La plage dynamique de 16 bits n'est pas tout à fait suffisante pour quantifier facilement les coefficients. Beaucoup de premiers DSP avaient en fait des mots 24 bits pour cette raison (je crois que les mots 32 bits sont courants aujourd'hui.)
IIRC, la soi-disant transformée bilinéaire prend une fonction de transfert (une transformée z d'un contrôleur de domaine temporel) et la transforme en un FDE. Prouver qu'il est «difficile», l'utiliser pour obtenir un résultat est trivial - vous avez juste besoin de la forme développée (multipliez tout) et les coefficients polynomiaux sont les coefficients FDE.
Un contrôleur PI n'est pas une excellente approche - une meilleure approche consiste à créer un modèle de comportement de votre système et à utiliser le PID pour la correction des erreurs. Le modèle doit être simple et basé sur la physique de base de ce que vous faites. Il s'agit de la rétroaction dans le bloc de contrôle. Un bloc PID corrige ensuite l'erreur en utilisant la rétroaction du système sous contrôle.
Si vous utilisez des valeurs normalisées, [-1 .. 1] ou [0 ... 1], pour le point de consigne (référence), la rétroaction et la rétroaction, vous pouvez implémenter un algorithme 2 pôles 2 zéro dans assemblage DSP optimisé et vous pouvez l'utiliser pour implémenter n'importe quel filtre de deuxième ordre qui comprend le PID et le filtre passe-bas (ou passe-haut) le plus basique. C'est pourquoi les DSP ont des op-codes qui supposent des valeurs normalisées, par exemple un qui produira une estimation de l'inverse-carré pour la plage (0..1] Vous pouvez mettre deux filtres 2p2z en série et créer un filtre 4p4z, cela permet vous pour exploiter votre code DSP 2p2z pour, par exemple, implémenter un filtre Butterworth passe-bas à 4 pressions.
La plupart des implémentations dans le domaine temporel incorporent le terme dt dans les paramètres PID (Kp / Ki / Kd). La plupart des implémentations de domaine z ne le font pas. dt est placé dans les équations qui prennent Kp, Ki et Kd et les transforment en coefficients [] & b [] afin que votre étalonnage (réglage) du contrôleur PID soit maintenant indépendant de la vitesse de contrôle. Vous pouvez le faire fonctionner dix fois plus vite, lancer les calculs a [] et b [] et le contrôleur PID aura des performances cohérentes.
Un résultat naturel de l'utilisation de FDE est que l'algorithme est implicitement "sans problème". Vous pouvez modifier les gains (Kp / Ki / Kd) à la volée pendant l'exécution et cela se comporte bien - selon la mise en œuvre du domaine temporel, cela peut être mauvais.
Beaucoup d'efforts sont généralement consacrés aux contrôleurs PID du domaine temporel pour empêcher la liquidation intégrale. Il y a une astuce simple avec la forme FDE qui fait que le PID se comporte bien, vous pouvez bloquer sa valeur dans le tampon d'historique. Je n'ai pas fait le calcul pour voir comment cela affecte le comportement du filtre (en ce qui concerne les paramètres Kp / Ki / Kd), mais le résultat empirique est qu'il est «lisse». Cela exploite la nature «sans pépin» du formulaire FDE. Un modèle de rétroaction contribue à empêcher la liquidation intégrale et l'utilisation du terme D permet d'équilibrer le terme I. Le PID ne fonctionne vraiment pas comme prévu avec un gain D. (Les points de consigne d'orientation sont une autre caractéristique clé pour éviter une remontée excessive.)
Enfin, les transformées en Z sont un sujet de premier cycle et non un «doctorat». Vous devriez avoir tout appris à leur sujet dans l'analyse complexe. C'est là que vous allez à l'université, l'instructeur que vous avez et l'effort que vous déployez pour apprendre les mathématiques et apprendre à utiliser les outils disponibles peut faire une différence significative dans votre capacité à travailler dans l'industrie. (Mon cours d'analyse complexe était horrible.)
L'outil de facto de l'industrie est Simulink (qui n'a pas de système d'algèbre informatique, CAS, vous avez donc besoin d'un autre outil pour lancer des équations générales). MathCAD ou wxMaxima sont des solveurs symboliques que vous pouvez utiliser sur un PC et j'ai appris à le faire à l'aide d'une calculatrice TI-92. Je pense que la TI-89 a également un système CAS.
Vous pouvez rechercher des équations de domaine z ou de domaine laplace sur wikipedia pour les filtres PID et passe-bas. Il y a une étape ici que je ne bloque pas, je crois que vous avez besoin de la forme à domaine temporel discret du contrôleur PID, puis que vous devez en prendre la transformation z La transformée de Laplace devrait être très similaire à la transformée z et est donnée comme PID {s} = Kp + Ki / s + Kd · s Je pense que la transformée z rendrait mieux compte des Dt dans les équations suivantes. Dt est delta-t [ime], j'utilise Dt pour ne pas confondre cette constante avec une dérivée 'dt'.
Et voici le FDE 2p2z:
Les DSP n'avaient généralement qu'un multiplier et ajouter (pas un multiplier et soustraire), vous pouvez donc voir la négation roulée dans les coefficients a []. Ajoutez plus de b pour plus de pôles, ajoutez plus de a pour plus de zéro.
la source
Il est préférable d'utiliser la méthode de transformation Z en général, car ce faisant, vous conservez le comportement exact du système analogique équivalent. Il existe des méthodes de réglage bien connues, comme Ziegler-Nichols, qui fonctionnent dans le domaine analogique tout comme publiées. Si vous utilisez la méthode de transformation Z, vous avez une attente mathématique rigoureuse que votre contrôleur résultant fera la même chose pour les mêmes valeurs des gains P, I et D, qu'il le fera dans le domaine analogique, compte tenu de ces gains. De plus, vous pouvez dessiner un locus racine discret pour le système et prédire la stabilité pour un ensemble donné de gains, ce qui ne peut pas être fait si vous créez un contrôleur ad hoc directement dans le code.
la source