Victor_P. писал(а):Я "борюсь" с интегральной составляющей немного иным методом,- я ее начинаю считать только в диапазоне, где пропорциональная составляющая меньше за максимальное значение ШИМ, т.е. за несколько градусов до уставки.
Это примерно тоже что у меня.
При отклонении от уставки больше зоны пропорциональности 100% мощности обеспечивает пропорциональная составляющая и накопленную ошибку я обнуляю.
Примерно так:
Код: Выделить всё
total_err += err;
int_part = K_int * total_err;
PID_out = K_prop * (err + K_diff * (err_LPF - previous_err));
if (PID_out > 1023) {PID_out = 1023; total_err = 0;}
else if (K_int != 0)
{
PID_out_temp = PID_out;
PID_out += int_part;
if (PID_out > 1023)
{
PID_out = 1023;
total_err = (1023 - PID_out_temp) / K_int;
}
if (PID_out < -100) total_err = 0;
}
if (PID_out < 0) PID_out = 0;

.