Partout où je regarde, que ce soit un PID, une piste, un contrôle du décalage ou toute autre chose, il y a des schémas Simulink avec des fonctions de transfert. Tout cela est intéressant pour la simulation de la réponse système, mais je dois actuellement implémenter un contrôle PID avec un terme dérivé filtré dans un dispositif médical strictement certifié, contrôlé par une puce avec un code C ++ le contrôlant.
Maintenant, si nous prenons le contrôleur PID dans son domaine de fréquence comme
$$ C (s) = k_ \ mathrm {P} + \ frac {k_ \ mathrm {I}} {s} + k_ \ mathrm {D} s = \ frac {s (s)} {e (s)} , $$
nous pouvons mettre en œuvre que
$$ y (t) = k_ \ mathrm {P} e (t) + k_ \ mathrm {I} \ int_ {0} ^ {t} e (\ tau) d {e} (t), \ quadro (0) = 0, $$
que nous pouvons écrire en pseudo-code comme
integral += error*dt
derivative = (error - prevError) / dt
y = kp*error + ki*integral + kd*derivative
prevError = error
Cependant, maintenant nous prenons le contrôle PID filtré comme
$$ C (s) = k_ \ mathrm {P} + \ frac {k_ \ mathrm {I}} {s} + k_ \ mathrm {D} \ frac {sN} {s + N} $$
Le mieux que je puisse penser est de créer inverse Laplace
$$ y (t) = k_ \ mathrm {P} e (t) + k_ \ mathrm {I} \ int_ {0} ^ {t} e (\ tau) d \ tau + k_ \ mathrm {D} \ left (N \ delta (t) - N ^ 2e ^ {- Nt} \ droite) e (t), \ quad (0) = 0, $$
mais qu'est-ce que cela représente vraiment? Intégrer via $ dt $ est une chose, mais tout ce que je peux voir dans le $ e ^ {- Nt} $, c’est le fait qu’après quelques secondes, peu importe ce que je ferai, j’aurai juste une autre constante proportionnelle. Devrais-je réinitialiser l'heure à un moment donné? Et nous n'avons même pas encore écrit cela en C ++.
Quelle est la bonne approche?