#include "pid.h" PID pid; extern u16 pidcalcms; void PIDParament_Init() // { pid.set = 180; pid.currpwm= 0; pid.pwm_cycle= 90; // // pid.pid_P=8; // pid.pid_I=4; // pid.pid_D=5; pid.calc_cycle=90; pid.Td= 0.3; // 2000 pid.Ti= 0; // 4000 pid.Kp= 10; //20; // 5 pid.Tsam=50; pid.Sen_max = 10; } /* void pid_calc() //pid?? { //int dk; short PID_out; if(pidcalcmspid.pwm_cycle) //1000 //1s??PWM?? { pid.currpwm=pid.pwm_cycle; //????????1000??????? } if(pid.currpwm<=0) //??????0??0??(????) { pid.currpwm=0;// } //PID???? pidcalcms=0; } */ void pid_calc() //pid?? { float dk1;float dk2; float t1,t2,t3; //short PID_out; if(pidcalcmspid.pwm_cycle + 3) { pid.currpwm=pid.pwm_cycle; } //printf("Dout: %f t1 : %f %f %f\r\n",pid.Dout,t1,pid.En,dk1); if(pid.currpwm<0) { pid.currpwm=0; } pid.En_2=pid.En_1; pid.En_1=pid.En; pidcalcms=0; } u8 pid_our_control( u16 currentTemp ) { int pwm; if(pidcalcms pid.Sen_max ) { pid.Sen = pid.Sen_max; } else if ( pid.Sen < pid.Sen_min) { pid.Sen = pid.Sen_min; } pid.currpwm = pid.Kp * pid.En + pid.Ti * pid.Sen + pid.Td * ( pid.En - pid.last_En ); if( pid.currpwm > pid.pwm_cycle ) { pid.currpwm = pid.pwm_cycle; } else if ( pid.currpwm < 0 ) { pid.currpwm = 0 ; } pid.last_En = pid.En; } return pid.currpwm; }