introduction
Tout d'abord, nous devons examiner ce qu'est exactement cette chose appelée réponse impulsionnelle d'un système et ce que cela signifie. Il s'agit d'un concept abstrait qui nécessite un peu de réflexion pour être visualisé. Je ne vais pas me lancer dans des mathématiques rigoureuses. Mon point est d'essayer de donner une certaine intuition de ce qu'est cette chose, ce qui conduit ensuite à la façon dont vous pouvez l'utiliser.
Exemple de problème de contrôle
Imaginez que vous disposiez d'une grosse résistance de puissance grasse avec un capteur de température monté dessus. Tout démarre à température ambiante. Lorsque vous allumez l'appareil, vous savez que la température au niveau du capteur augmentera et se stabilisera éventuellement, mais l'équation exacte serait très difficile à prévoir. Disons que le système a une constante de temps d'environ 1 minute, bien que la "constante de temps" ne soit pas complètement applicable car la température n'augmente pas dans une belle exponentielle comme elle le ferait dans un système à un seul pôle, et donc une seule constante de temps . Disons que vous voulez contrôler la température avec précision, la faire passer à un nouveau niveau et y rester régulièrement beaucoup plus rapidement que ce qu'elle ferait si vous allumiez simplement au niveau de puissance approprié et attendiez.
Fondamentalement, vous avez un problème de système de contrôle. La réponse en boucle ouverte est raisonnablement reproductible et il y a quelque part une équation qui la modélise assez bien, mais le problème est qu'il y a trop d'ignorances pour que vous dériviez cette équation.
Contrôle PID
Un moyen classique de résoudre ce problème est d'utiliser un contrôleur PID. À l'époque du pléistocène, alors que cela devait être fait dans l'électronique analogique, les gens sont devenus intelligents et ont trouvé un schéma qui fonctionnait bien avec les capacités analogiques à portée de main. Ce schéma était appelé "PID", pour Proportionnel , Intégral et Dérivé .
Terme P
Vous commencez par mesurer l'erreur. Il s'agit simplement de la réponse mesurée du système (la température signalée par le capteur dans notre cas) moins l'entrée de commande (le réglage de température souhaité). Habituellement, ceux-ci peuvent être arrangés pour être disponibles sous forme de signaux de tension, donc trouver l'erreur n'était qu'une différence analogique, ce qui est assez facile. Vous pourriez penser que c'est facile. Tout ce que vous avez à faire est de piloter la résistance avec une puissance plus élevée, plus l'erreur est élevée. Cela tentera automatiquement de le rendre plus chaud lorsqu'il fait trop froid et plus froid lorsqu'il fait trop chaud. Cela fonctionne, sortof. Notez que ce schéma nécessite une erreur pour provoquer une sortie de contrôle non nulle (puissance entraînant la résistance). En fait, cela signifie que plus la puissance nécessaire est élevée, plus l'erreur est importante, car c'est le seul moyen d'obtenir la puissance élevée. Maintenant, vous pourriez dire que tout ce que vous avez à faire est d'augmenter le gain pour que l'erreur soit acceptable même à une puissance élevée. Après tout, c'est à peu près la base de l'utilisation des amplis-op dans de nombreux circuits. Vous avez raison, mais le monde réel ne vous laissera généralement pas vous en tirer. Cela peut fonctionner pour certains systèmes de contrôle simples, mais quand il y a toutes sortes de rides subtiles dans la réponse et quand cela peut prendre un temps considérable, vous vous retrouvez avec quelque chose qui oscille lorsque le gain est trop élevé. Autrement dit, le système devient instable. mais quand il y a toutes sortes de rides subtiles dans la réponse et quand cela peut prendre un temps considérable, vous vous retrouvez avec quelque chose qui oscille lorsque le gain est trop élevé. Autrement dit, le système devient instable. mais quand il y a toutes sortes de rides subtiles dans la réponse et quand cela peut prendre un temps considérable, vous vous retrouvez avec quelque chose qui oscille lorsque le gain est trop élevé. Autrement dit, le système devient instable.
Ce que j'ai décrit ci-dessus était la partie P (promotionnelle) du PID. Tout comme vous pouvez rendre la sortie proportionnelle au signal d'erreur, vous pouvez également ajouter des termes proportionnels à la dérivée temporelle et intégrale de l'erreur. Chacun de ces signaux P, I et D a son propre gain séparé avant d'être additionné pour produire le signal de sortie de commande.
Je terme
Le terme I permet d'annuler l'erreur au fil du temps. Tant qu'il y a une erreur positive, le terme I continuera à s'accumuler, augmentant éventuellement la sortie de contrôle au point où l'erreur globale disparaît. Dans notre exemple, si la température est constamment basse, cela augmentera constamment la puissance dans la résistance jusqu'à ce que la température de sortie ne soit finalement plus basse. J'espère que vous pouvez voir que cela peut devenir instable encore plus rapidement qu'un simple terme P élevé. Le terme IA en lui-même peut facilement provoquer des dépassements, qui deviennent facilement des oscillations.
Terme D
Le terme D est parfois omis. L'utilisation de base du terme D est d'ajouter un peu de stabilité pour que les termes P et I soient plus agressifs. Le terme D dit essentiellement que si je me dirige déjà dans la bonne direction, arrêtez-vous un peu sur le gaz car ce que j'ai maintenant semble nous y conduire .
Tuning PID
Les bases du contrôle PID sont assez simples, mais obtenir les termes P, I et D juste n'est pas le cas. Cela se fait généralement avec beaucoup d'expérimentation et de réglages. Le but ultime est d'obtenir un système global où la sortie répond aussi rapidement que possible mais sans dépassement excessif ni sonnerie, et bien sûr, elle doit être stable (ne pas commencer à osciller d'elle-même). Il y a eu de nombreux livres écrits sur le contrôle PID, comment ajouter de petites rides aux équations, mais surtout comment les "régler". Le réglage fait référence à la détermination des gains optimaux P, I et D.
Les systèmes de contrôle PID fonctionnent, et il y a certainement beaucoup de connaissances et d'astuces pour les faire fonctionner correctement. Cependant, le contrôle PID n'est pas la seule bonne réponse pour un système de contrôle. Les gens semblent avoir oublié pourquoi le PID a été choisi en premier lieu, qui avait plus à voir avec les contraintes de l'électronique analogique qu'avec une sorte de schéma de contrôle optimal universel. Malheureusement, trop d'ingénieurs assimilent aujourd'hui «système de contrôle» avec PID, qui n'est rien de plus qu'une réaction de réflexe de genou à petite pensée. Cela ne rend pas le contrôle PID incorrect dans le monde d'aujourd'hui, mais seulement l'une des nombreuses façons d'attaquer un problème de contrôle.
Au-delà du PID
Aujourd'hui, un système de contrôle en boucle fermée pour quelque chose comme l'exemple de température serait fait dans un microcontrôleur. Celles-ci peuvent faire bien plus que simplement prendre la dérivée et l'intégrale d'une valeur d'erreur. Dans un processeur, vous pouvez effectuer des divisions, des racines carrées, conserver un historique des valeurs récentes et bien plus encore. De nombreux schémas de contrôle autres que PID sont possibles.
Réponse impulsive
Alors oubliez les limites de l'électronique analogique et reculez et réfléchissez à la façon dont nous pourrions contrôler un système en revenant aux premiers principes. Et si pour chaque petit morceau de sortie de contrôle, nous savions ce que le système ferait. La sortie de contrôle continue n'est alors que la somme de beaucoup de petits morceaux. Puisque nous savons quel est le résultat de chaque pièce, nous pouvons savoir quel est le résultat de tout historique antérieur des sorties de contrôle. Notez maintenant qu'un "petit morceau" de la sortie de contrôle correspond bien au contrôle numérique. Vous allez calculer ce que devrait être la sortie de contrôle et la définir, puis revenir en arrière et mesurer à nouveau les entrées, calculer la nouvelle sortie de contrôle à partir de celles-ci et la définir à nouveau, etc. Vous exécutez l'algorithme de contrôle en boucle, et il mesure les entrées et définit la sortie de contrôle à nouveau à chaque itération de boucle. Les entrées sont "échantillonnées" à des moments discrets, et la sortie est également réglée sur de nouvelles valeurs à un intervalle fixe. Tant que vous pouvez le faire assez rapidement, vous pouvez penser que cela se produit dans un processus continu. Dans le cas d'un chauffage par résistance qui prend normalement quelques minutes à s'installer, il est certain que plusieurs fois par seconde sont tellement plus rapides que le système répond intrinsèquement de manière significative que la mise à jour de la sortie à 4 Hz par exemple semblera continue pour le système. C'est exactement la même chose que la musique enregistrée numériquement qui modifie réellement la valeur de sortie par étapes discrètes dans la gamme 40-50 kHz et qui est si rapide que nos oreilles ne peuvent pas l'entendre et ça sonne continu comme l'original. vous pouvez penser à ce qui se passe dans un processus continu. Dans le cas d'un chauffage par résistance qui prend normalement quelques minutes à s'installer, il est certain que plusieurs fois par seconde sont tellement plus rapides que le système répond intrinsèquement de manière significative que la mise à jour de la sortie à 4 Hz par exemple semblera continue pour le système. C'est exactement la même chose que la musique enregistrée numériquement qui modifie réellement la valeur de sortie par étapes discrètes dans la gamme 40-50 kHz et qui est si rapide que nos oreilles ne peuvent pas l'entendre et ça sonne continu comme l'original. vous pouvez penser à ce qui se passe dans un processus continu. Dans le cas d'un chauffage par résistance qui prend normalement quelques minutes à s'installer, il est certain que plusieurs fois par seconde sont tellement plus rapides que le système répond intrinsèquement de manière significative que la mise à jour de la sortie à 4 Hz par exemple semblera continue pour le système. C'est exactement la même chose que la musique enregistrée numériquement qui modifie réellement la valeur de sortie par étapes discrètes dans la gamme 40-50 kHz et qui est si rapide que nos oreilles ne peuvent pas l'entendre et ça sonne continu comme l'original. il est certain que plusieurs fois par seconde sont tellement plus rapides que le système répond de manière significative de manière significative que la mise à jour de la sortie à 4 Hz par exemple semblera continue pour le système. C'est exactement la même chose que la musique enregistrée numériquement qui modifie réellement la valeur de sortie par étapes discrètes dans la gamme 40-50 kHz et qui est si rapide que nos oreilles ne peuvent pas l'entendre et ça sonne continu comme l'original. il est certain que plusieurs fois par seconde sont tellement plus rapides que le système répond de manière significative de manière significative que la mise à jour de la sortie à 4 Hz par exemple semblera continue pour le système. C'est exactement la même chose que la musique enregistrée numériquement qui modifie réellement la valeur de sortie par étapes discrètes dans la gamme 40-50 kHz et qui est si rapide que nos oreilles ne peuvent pas l'entendre et ça sonne continu comme l'original.
Alors, que pourrions-nous faire si nous avions cette façon magique de savoir ce que le système fera au fil du temps en raison d'un échantillon de sortie de contrôle? Étant donné que la réponse de contrôle réelle n'est qu'une séquence d'échantillons, nous pouvons additionner la réponse de tous les échantillons et savoir quelle sera la réponse système résultante. En d'autres termes, nous pouvons prédire la réponse du système pour toute forme d'onde de réponse de commande arbitraire.
C'est cool, mais simplement prédire la réponse du système ne résout pas le problème. Cependant, et voici le moment aha, vous pouvez retourner cela et trouver la sortie de contrôle qu'il aurait fallu pour obtenir la réponse souhaitée du système. Notez que cela résout exactement le problème de contrôle, mais seulement si nous pouvons en quelque sorte connaître la réponse du système à un seul échantillon de sortie de contrôle arbitraire.
Donc, vous pensez probablement, c'est facile, donnez-lui simplement une impulsion importante et voyez ce qu'il fait. Oui, cela fonctionnerait en théorie, mais en pratique, cela ne fonctionne généralement pas. C'est parce que tout échantillon de contrôle, même grand, est si petit dans le schéma global des choses que le système a à peine une réponse mesurable. Et rappelez-vous que chaque échantillon de contrôle doit être petit dans l'ordre des choses afin que la séquence d'échantillons de contrôle soit continue pour le système. Ce n'est donc pas que cette idée ne fonctionnera pas, mais qu'en pratique la réponse du système est si petite qu'elle est enterrée dans le bruit de mesure. Dans l'exemple de résistance, frapper la résistance avec 100 W pendant 100 ms ne provoquera pas suffisamment de changement de température pour mesurer.
Réponse par étapes
Mais il y a encore un moyen. Bien que l'introduction d'un seul échantillon de contrôle dans le système nous ait donné directement sa réponse à des échantillons individuels, nous pouvons toujours l'inférer en mettant une séquence connue et contrôlée de réponses de contrôle dans le système et en mesurant sa réponse à ceux-ci. Habituellement, cela se fait en mettant une étape de contrôlein. Ce que nous voulons vraiment, c'est la réponse à un petit coup, mais la réponse à une seule étape n'est que l'intégrale de cela. Dans l'exemple de la résistance, nous pouvons nous assurer que tout est stable à 0 W, puis allumez soudainement l'alimentation et mettez 10 W dans la résistance. Cela entraînera éventuellement un changement de température bien mesurable sur la sortie. La dérivée de celle-ci avec la bonne mise à l'échelle nous indique la réponse à un échantillon de contrôle individuel, même si nous ne pouvions pas mesurer cela directement.
Donc, pour résumer, nous pouvons mettre une entrée de contrôle d'étape dans un système inconnu et mesurer la sortie résultante. C'est ce qu'on appelle la réponse par étapes . Ensuite, nous prenons la dérivée temporelle de cela, qui est appelée la réponse impulsionnelle . La sortie du système résultant de n'importe quel échantillon d'entrée de contrôle est simplement la réponse impulsionnelle adaptée à la force de cet échantillon de contrôle. La réponse du système à toute une histoire d'échantillons de contrôle est un tas de réponses d'impulsion additionnées, mises à l'échelle et asymétriques dans le temps pour chaque entrée de contrôle. Cette dernière opération revient souvent et porte le nom spécial de convolution .
Contrôle de convolution
Alors maintenant, vous devriez être en mesure d'imaginer que pour tout ensemble souhaité de sorties système, vous pouvez trouver la séquence des entrées de contrôle pour provoquer cette sortie. Cependant, il y a un piège. Si vous devenez trop agressif avec ce que vous voulez du système, les entrées de commande pour y parvenir nécessiteront des valeurs élevées et basses non médiévales. Fondamentalement, plus vous vous attendez à ce que le système réponde, plus les valeurs de contrôle doivent être grandes, dans les deux sens. Dans l'exemple de la résistance, vous pouvez mathématiquement dire que vous voulez qu'elle passe immédiatement à une nouvelle température, mais cela nécessiterait un signal de commande infini. Plus vous permettez à la température de revenir à la nouvelle valeur, plus la puissance maximale dont vous avez besoin pour pouvoir vider la résistance est faible. Une autre ride est que la puissance dans la résistance devra parfois aussi baisser. Vous pouvez'
Une façon de résoudre ce problème consiste pour le système de contrôle à filtrer passe-bas l'entrée de contrôle utilisateur avant de l'utiliser en interne. Les utilisateurs de figure font ce que les utilisateurs veulent faire. Laissez-les claquer l'entrée rapidement. En interne, vous filtrez le filtre passe-bas pour le lisser et le ralentir au plus rapide que vous savez que vous pouvez réaliser étant donné la puissance maximale et minimale que vous pouvez mettre dans la résistance.
Exemple du monde réel
Voici un exemple partiel utilisant des données du monde réel. Cela provient d'un système embarqué dans un produit réel qui, entre autres, doit contrôler quelques dizaines de réchauffeurs pour maintenir divers réservoirs chimiques à des températures spécifiques. Dans ce cas, le client a choisi de faire un contrôle PID (c'est ce avec quoi il s'est senti à l'aise), mais le système lui-même existe toujours et peut être mesuré. Voici les données brutes de la conduite d'un des réchauffeurs avec une entrée pas à pas. Le temps d'itération de la boucle était de 500 ms, ce qui est clairement un temps très court étant donné que le système se stabilise visiblement sur ce graphique à l'échelle après 2 heures.
Dans ce cas, vous pouvez voir que le chauffage a été entraîné avec un pas d'environ 0,35 de taille (la valeur "Out"). Mettre une étape complète de 1,0 pendant longtemps aurait entraîné une température trop élevée. Le décalage initial peut être supprimé et le résultat mis à l'échelle pour tenir compte du petit pas d'entrée pour déduire la réponse du pas unitaire:
À partir de cela, vous penseriez qu'il suffirait de soustraire les valeurs de réponse d'étape successives pour obtenir la réponse d'impulsion. C'est correct en théorie, mais en pratique, vous obtenez principalement le bruit de mesure et de quantification puisque le système change si peu en 500 ms:
Notez également la petite échelle des valeurs. La réponse impulsionnelle est représentée par une échelle de 10 6 .
Des variations clairement importantes entre des lectures individuelles ou même quelques lectures ne sont que du bruit, nous pouvons donc filtrer le filtre passe-bas pour nous débarrasser des hautes fréquences (le bruit aléatoire), ce qui, nous l'espérons, nous permet de voir la réponse sous-jacente plus lente. Voici une tentative:
C'est mieux et montre qu'il y a vraiment des données significatives à avoir, mais toujours trop de bruit. Voici un résultat plus utile obtenu avec un filtrage passe-bas plus important des données d'impulsion brutes:
C'est quelque chose avec lequel nous pouvons réellement travailler. Le bruit restant est faible par rapport au signal global, il ne devrait donc pas gêner. Le signal semble toujours être là à peu près intact. Une façon de voir cela est de remarquer que le pic de 240 est à peu près juste à partir d'une vérification visuelle rapide et d'un filtre oculaire filtrant l'intrigue précédente.
Alors maintenant, arrêtez-vous et réfléchissez à ce que signifie réellement cette réponse impulsionnelle. Tout d'abord, notez qu'il est affiché fois 1M, donc le pic est vraiment 0,000240 à pleine échelle. Cela signifie qu'en théorie, si le système était piloté avec une seule impulsion pleine échelle pour l'un des intervalles de temps de 500 ms seulement, ce serait la température résultante par rapport à elle qui aurait été laissée seule. La contribution d'une période de 500 ms est très faible, comme cela a du sens intuitivement. C'est aussi pourquoi la mesure directe de la réponse impulsionnelle ne fonctionne pas, car 0,000240 de pleine échelle (environ 1 partie sur 4000) est inférieur à notre niveau de bruit.
Maintenant, vous pouvez facilement calculer la réponse du système pour tout signal d'entrée de commande. Pour chaque échantillon de sortie de contrôle de 500 ms, ajoutez l'une de ces réponses impulsionnelles mises à l'échelle en fonction de la taille de cet échantillon de contrôle. Le temps 0 de cette contribution de réponse impulsionnelle au signal final de sortie du système est au moment de son échantillon de contrôle. Par conséquent, le signal de sortie du système est une succession de ces réponses impulsionnelles décalées de 500 ms les unes des autres, chacune étant mise à l'échelle au niveau de l'échantillon de contrôle à ce moment.
La réponse du système est la convolution de l'entrée de commande avec cette réponse impulsionnelle, calculée chaque échantillon de commande, qui est toutes les 500 ms dans cet exemple. Pour créer un système de contrôle à partir de cela, vous le travaillez à l'envers pour déterminer l'entrée de contrôle qui se traduit par la sortie du système souhaitée.
Cette réponse impulsionnelle est toujours très utile même si vous voulez faire un contrôleur PID classique. Le réglage d'un contrôleur PID demande beaucoup d'expérimentation. Chaque itération prendrait une heure ou deux sur le système réel, ce qui rendrait le réglage itératif très très lent. Avec la réponse impulsionnelle, vous pouvez simuler la réponse du système sur un ordinateur en une fraction de seconde. Vous pouvez maintenant essayer de nouvelles valeurs PID aussi rapidement que vous pouvez les modifier et ne pas avoir à attendre une heure ou deux pour que le système réel vous montre sa réponse. Les valeurs finales doivent bien sûr toujours être vérifiées sur le système réel, mais la plupart du travail peut être effectué par simulation en une fraction du temps. C'est ce que je voulais dire par "Vous pouvez l'utiliser comme base de simulation pour trouver les paramètres du contrôle PID à l'ancienne" dans le passage que vous avez cité dans votre question.