level 1
z515776036
楼主
int g_Pc_motor=11,g_Pi_motor=15,g_Pd_motor = 0;
int16 g_motor_plus=0;
int Current_Speed_Err=0; //当前的值
static int Last_Speed_Err=0; //上次的值
static int Pre_Speed_Err=0; //上上次的值
static int err_sum = 0;
static int i =0;
void Motor_plus(int16 next_speed)
{
Pre_Speed_Err = Last_Speed_Err;
Last_Speed_Err = Current_Speed_Err;
Current_Speed_Err = next_speed - g_pacnt_plus;
//err_sum = err_sum + Current_Speed_Err - Err_Array[i];
//Err_Array[i++] = Current_Speed_Err;
//if(i >= 11)
// i = 0;
//err_sum = Update_Array_Sum(Current_Speed_Err,Err_Array);
g_motor_plus = g_motor_plus +
g_Pc_motor * (Current_Speed_Err - Last_Speed_Err) +
(int) g_Pd_motor * (Current_Speed_Err - 2*Last_Speed_Err + Pre_Speed_Err)/20 +
(int)g_Pi_motor * Current_Speed_Err/30;
//g_motor_plus = g_Pc_motor * Current_Speed_Err + g_Pi_motor * err_sum / 4;
if(g_motor_plus > 1200)
g_motor_plus = 1200;
if(g_motor_plus < -1200)
g_motor_plus = -1200;
if(g_pacnt_plus < 10 && stop_flag ==1)
{
g_motor_plus = 0;
g_Pc_motor=0;g_Pi_motor=0;g_Pd_motor = 0;
}
}
int speed_k;
/*int Motor_Countrl(int max_speed)
{
if(stop_flag == 1)
{
speed_k = 0;
g_Pc_motor=5;
g_Pi_motor=4;
//g_motor_plus = 0;
//PTM = 0x20;
}
else if((mid_err > 10) || (mid_err < -10))
{
speed_k = (max_speed + 40);
}
else speed_k = max_speed;
if(0 != renziflag)
{
speed_k = 0;
}
else
PTM = 0x00;
if(1== stop_flag)
{
speed_k = 0;
}
return(speed_k);
} */
int Motor_Countrl_1(int max_speed)
{
if(stop_flag == 1)
{
speed_k = 0;
g_Pc_motor=5;
g_Pi_motor=4;
}
else if((mid_err_err > 10) || (mid_err_err < -10))
{
speed_k = (max_speed - 20);
}
else speed_k = max_speed;
if(1== stop_flag)
{
speed_k = 0;
}
return(speed_k);
}
这段pid程序 是什么类型的pid啊 求高手 好心人解答
2015年04月16日 07点04分
1
int16 g_motor_plus=0;
int Current_Speed_Err=0; //当前的值
static int Last_Speed_Err=0; //上次的值
static int Pre_Speed_Err=0; //上上次的值
static int err_sum = 0;
static int i =0;
void Motor_plus(int16 next_speed)
{
Pre_Speed_Err = Last_Speed_Err;
Last_Speed_Err = Current_Speed_Err;
Current_Speed_Err = next_speed - g_pacnt_plus;
//err_sum = err_sum + Current_Speed_Err - Err_Array[i];
//Err_Array[i++] = Current_Speed_Err;
//if(i >= 11)
// i = 0;
//err_sum = Update_Array_Sum(Current_Speed_Err,Err_Array);
g_motor_plus = g_motor_plus +
g_Pc_motor * (Current_Speed_Err - Last_Speed_Err) +
(int) g_Pd_motor * (Current_Speed_Err - 2*Last_Speed_Err + Pre_Speed_Err)/20 +
(int)g_Pi_motor * Current_Speed_Err/30;
//g_motor_plus = g_Pc_motor * Current_Speed_Err + g_Pi_motor * err_sum / 4;
if(g_motor_plus > 1200)
g_motor_plus = 1200;
if(g_motor_plus < -1200)
g_motor_plus = -1200;
if(g_pacnt_plus < 10 && stop_flag ==1)
{
g_motor_plus = 0;
g_Pc_motor=0;g_Pi_motor=0;g_Pd_motor = 0;
}
}
int speed_k;
/*int Motor_Countrl(int max_speed)
{
if(stop_flag == 1)
{
speed_k = 0;
g_Pc_motor=5;
g_Pi_motor=4;
//g_motor_plus = 0;
//PTM = 0x20;
}
else if((mid_err > 10) || (mid_err < -10))
{
speed_k = (max_speed + 40);
}
else speed_k = max_speed;
if(0 != renziflag)
{
speed_k = 0;
}
else
PTM = 0x00;
if(1== stop_flag)
{
speed_k = 0;
}
return(speed_k);
} */
int Motor_Countrl_1(int max_speed)
{
if(stop_flag == 1)
{
speed_k = 0;
g_Pc_motor=5;
g_Pi_motor=4;
}
else if((mid_err_err > 10) || (mid_err_err < -10))
{
speed_k = (max_speed - 20);
}
else speed_k = max_speed;
if(1== stop_flag)
{
speed_k = 0;
}
return(speed_k);
}
这段pid程序 是什么类型的pid啊 求高手 好心人解答