int pid_calc(int tem)
{
char cur_error;
float incpid;
float a,b,c;
// char d_error;
cur_error=250-tem;
a=temp_pid.proportion*cur_error;
// d_error=cur_error-temp_pid.last_error;
temp_pid.sum_error+=cur_error;
temp_pid.sum_error-=temp_pid.old_error;
b=temp_pid.integral*temp_pid.last_error;
c=temp_pid.derivative*temp_pid.pre_error;
incpid=a-b+c;
if(cur_error==temp_pid.last_error && cur_error==temp_pid.pre_error && (temp_pid.sum_error>3 || temp_pid.sum_error<-3))
incpid+=0.25*temp_pid.sum_error;
//incpid=temp_pid.proportion*cur_error-temp_pid.integral*temp_pid.last_error+temp_pid.derivative*temp_pid.pre_error;
// temp_pid.pre_error=temp_pid.last_error;
temp_pid.last_error=cur_error;
temp_pid.pre_error=temp_pid.last_error;
temp_pid.old_error=temp_pid.pre_error;
return (int)incpid;
}
|