gd32f303的芯片,写寻迹小车,当转速给1000还有2000的时候小车可以正常循迹,但是当转速到3000的时候,无论如何改动pid的三个参数都无法使之循迹,好像是电感突然不检测了,卡死了。这是为什么?
#include "main.h"
#include "headfile.h"
typedef struct
{
float kp;
float ki;
float kd;
float er;
float erl;
float ers;
float erd;
}tpid;
tpid speed;
void inint()
{
speed.kp=200;
speed.ki=0.2;
speed.kd=0.2;
speed.er=0;
speed.erl=0;
speed.ers=0;
speed.erd=0;
}
float ut(tpid *pid ,float er)
{
pid->er=er;
pid->erd=(pid->er)-(pid->erl);
pid->ers+=pid->er;
float ut=(pid->er*pid->kp)+(pid->ers*pid->ki)+(pid->erd*pid->kd);
pid->erl=pid->er;
return ut;
}
int main(void)
{
car_init();
inint();
oled_init();
oled_display_on();
unsigned int adc_value[5];
unsigned int d=1;
while(1)
{
adc_value[1] = adc_get(ADC0, ADC_CH_11);
adc_value[3] = adc_get(ADC0, ADC_CH_13);
int a=(adc_value[1]-adc_value[3]);
if(a<0)
{
a=-a;
d=0;
}
else
{
d=1;
}
float b=(&speed,a);
if(d)
{
motor_forward(left, 5000-b);
motor_forward(right, 5000+b);
}
else
{
motor_forward(left, 5000+b);
motor_forward(right, 5000-b);
}
oled_show_number(48,2,a,7,16);
}
}