Мда... Нужно было лучше Теорию Автоматического Управления учить
тут интересный материал
http://www.telesys.ru/wwwboards/mcontrol/8...ages/3748.shtmlобъявления
signed int mem_UPR, mem_DAT;float R_E1[3], U_E2[2];
формулы
R_E1[0] = (float) (mem_UPR - mem_DAT);U_E2[0] = C0 * R_E1[0] - C1 * R_E1[1] + C2 * R_E1[2] + U_E2[1];U_E2[1] = U_E2[0];R_E1[2] = R_E1[1];R_E1[1] = R_E1[0];
R_E1 - разность между управляющим напряжением и напряжением обратной связи
U_E2 - управляющее воздействие
C1, C2, C3 из коэффициентов ПИД считаются так.
mem_UPR - измеренное управлющее воздействие в кодах АЦП
mem_DAT - измеренное напряжение обратной связи в кодах АЦП
Эти коды в приниципе надо привести к вольтам, но можно и в коэффициентах учесть.
C0 := Kp + ((Ki * T) / 2 ) + Kd /T;C1 := Kp + (2 * Kd) / T;C2 := Kd / T;
Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная.
Формулы проверенные и рабочие
--------------------
То что приводил я выше взято из документации к логическим контроллерам фирмы siemens simatic s7. В принципе работает, но хочу попробовать новый алгоритм