Мисля, че има самoнастройващ се PID.
1. Няма да мустигне паметта за толкоз код
2. Самия процес на адаптация на ПИД-а изисква системата да работи, т.е. да е в движение
Теория на ПИД-а:
Имаш входна стойност (примерно в диапазона 0-1000)
Имаш желана стойност (0-1000)
Имаш изходна стойност (0-1000)
Съвсем примерно искаш температурата да ти е 200 градуса (или поската на движение да е 200 градуса). Имаш последни 4 измерени данни 150, 180, 200, 210.
Пропорционалния коефициент е отклонението на последното измерване спрямо заданието. Т.е. ще е 200 - 210 = -10.
Интегралния коефициент ще е 200 - ((150+180+200+210) /4) или +15
Диференциалния коефициент ще е (150-210)/4 или -15
Какво казват тези числа:
Пропорционалния казва "вече си прехвърлил заданието, ще трябва да намалиш изходната стойност".
Интегралния казва "да, ама през последните 4 измервания в 3 от случаите си бил под заданието, така че ще трябва да увеличиш изхода, за да достигнеш заданието по-бързо"
Диференциалния казва "скоростта на нарастването ти е голяма, ще трябва да намалиш изхода, за да не прескочиш заданието.
Всеки от тези 3 коефициента се умножава по един свой си множител (Кп, Ки, Кд), който определя колко "важен" е дадения коефцициент. Точно намирането на тези множители е "адаптацията" на контролера, и зависи изключително от инертността на системата която се управлява.
Ако имаш само пропроционален коефициент, то или ще достигаш заданието бавно (малък множител), или ще го прескачаш и системата ще осцилира (в твоя случай ще се движи на зиг-заг известно време)(голям множител).
Добавянето на интегрален коефициент помага при голямо отклонение от заданието, т.е. системата много по-бързо ще се стреми към заданието, а също така и ще хваща дребни отклонения при малък пропорционален коефицинет. Също така и ще елиминира грешки в измерването, породени от самия уред, ще действа като един вид филтър. Огромния недостатък е, че при голям множител осцилацията неконтролируемо се увеличава.
Диференцилания коефициент работи в общия случай наобратно на предните два. Когато пропроционалния и интегралния крещят "ДАВАЙ, ДАВЙ НАГОРЕ!!!", то диференциалния се влияе от скоростта на нарастване а не от абсолютна стойност на отклонението, и се явява спирачка на стремежите да се достигне бързо (и вследствие на това да се прескочи неконтролируемо) заданието.
Ако и трите множителя в примера са 1, то на изхода ще получиш 200 + (-10 +15 -15) или 190. Т.е. системата ще усети че е прекалила, че тенденцията е към още по-голямо о*иране и ще започне да се връща.