/* *TODO:makePIDparameterstunedautomatically, *1.useCPUburntoproduceopenloopunitstepresponse *2.calculatePIDbasedonZiegler-Nicholsrule * *addaflagfortuningPID
*/ int init_thermal_controller(void)
{
/* init pid params */
p_param.ts = ticktime; /* TODO: get it from TUI tuning tab */
p_param.kp = .36;
p_param.ki = 5.0;
p_param.kd = 0.19;
p_param.t_target = target_temp_user;
return0;
}
void controller_reset(void)
{ /* TODO: relax control data when not over thermal limit */
syslog(LOG_DEBUG, "TC inactive, relax p-state\n");
p_param.y_k = 0.0;
xk_1 = 0.0;
xk_2 = 0.0;
set_ctrl_state(0);
}
/* To be called at time interval Ts. Type C PID controller. *y[k]=y[k-1]-kp*(x[k]-x[k-1])+Ki*Ts*e[k]-Kd*(x[k] *-2*x[k-1]+x[k-2])/Ts *TODO:addlowpassfilterforDterm
*/ #define GUARD_BAND (2) void controller_handler(constdouble xk, double *yk)
{ double ek; double p_term, i_term, d_term;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.