Nie rozumiem integralnej części regulatora PID. Załóżmy ten pseudokod z Wikipedii:
previous_error = 0
integral = 0
start:
error = setpoint - measured_value
integral = integral + error*dt
derivative = (error - previous_error)/dt
output = Kp*error + Ki*integral + Kd*derivative
previous_error = error
wait(dt)
goto start
Na początku całka jest zerowana. A potem w pętli z czasem integruje błąd. Kiedy dokonam (dodatniej) zmiany wartości zadanej, błąd stanie się dodatni, a całka „zje” wartości w czasie (od początku). Ale nie rozumiem, że gdy błąd ustabilizuje się ponownie do zera, integralna część nadal będzie miała pewną wartość (zintegrowane błędy w czasie) i nadal przyczyni się do wartości wyjściowej sterownika, ale nie powinna, ponieważ jeśli błąd wynosi zero, wyjście PID powinno również wynosić zero, prawda?
Czy ktoś może mi to wytłumaczyć?
Wyobraź sobie, że ustawiłeś kontroler PID na swoim ramieniu, abyś mógł trzymać przed sobą filiżankę kawy.
Wygląda na to, że część kodu, na którym utknąłeś, polega na tym, że system musi w jakiś sposób zmierzyć ciężar kawy, a jednym ze sposobów jest nagromadzenie błędu pozycji w czasie. Większość regulatorów PID ma dodatkowy termin określający rozsądne ograniczenie wielkości, jaką może stanowić integralny element.
źródło
Oto wideo, które daje „intuicyjne” zrozumienie pętli PID. Zawiera wyjaśnienie terminu integralnego, a także pojęcia proporcjonalnego i pochodnego.
https://www.youtube.com/watch?v=l03SioQ9ySg
Kolejny film wyjaśniający matematykę i pokazujący, jak uzyskać kod z ogólnej formuły.
https://www.youtube.com/watch?v=sDd4VOpOnnA
źródło