Артём писал(а):
в фене подсмотри
Посмотрел. У тебя с плавающей точкой расчеты, я так думаю, что две операции деления, к примеру, сразу все ресурсы моего скромного пика отожрут. Я пытаюсь все оставить в целых числах.
Вопросы возникли: а чего ты закомментировал ограничение интегральной составляющей?
Так все же, диффсоставляющая считается от ошибки или от управляющего воздействия?
Вики пишет:
Дифференцирующая составляющая пропорциональна темпу изменения отклонения регулируемой величины и предназначена для противодействия отклонениям от целевого значения, которые прогнозируются в будущем. Отклонения могут быть вызваны внешними возмущениями или запаздыванием воздействия регулятора на систему.
И буквально через три строки формула:
где ясно видно, что расчет от ошибки.
Ладно, ниже есть ссылки, идем по первой и видим:
dTerm = pid->dGain * (position - pid->dState);
pid->dState = position;
Снова управляющий сигнал, а не ошибка.
Ладно смотрим еще ниже на полный код регулятора:
typedef struct
{
double dState; // Last position input
double iState; // Integrator state
double iMax, iMin;
// Maximum and minimum allowable integrator state
double iGain, // integral gain
pGain, // proportional gain
dGain; // derivative gain
} SPid;
double UpdatePID(SPid * pid, double error, double position)
{
double pTerm, dTerm, iTerm;
pTerm = pid->pGain * error; // calculate the proportional term
pid->iState += error; // calculate the integral state with appropriate limiting
if (pid->iState > pid->iMax)
pid->iState = pid->iMax;
else if (pid->iState < pid->iMin)
pid->iState = pid->iMin;
iTerm = pid->iGain * iState; // calculate the integral term
dTerm = pid->dGain * (position - pid->dState);
pid->dState = position;
return (pTerm + iTerm - dTerm);
}
Снова управляющий сигнал, но еще и диффсоставляющую отнимают из управляющего сигнала.
Открываем следующую ссылку с Вики:
...в обратную связь заводится также производная отклонения...
- снова ошибка. И так везде и всюду: в одном месте пишут про ошибку, в другом про управляющий сигнал. А это немножко разное.
Я никогда никаких терморегуляторов не делал, поэтому нахожусь в легком а}{уе, и не понимаю как же правильно на самом деле?!