初级会员

- 积分
- 157
- 金钱
- 157
- 注册时间
- 2019-12-27
- 在线时间
- 40 小时
|
20金钱
我用F1的板子,按位置PID算法给电机PWM,我只调了P的值,但是总是出现等幅振荡,电机一直在抖,请问是哪里错了呢
int Position_PID(u16 Encoder,u16 Target)
{
int err,pwm;
static int integral_Err,last_Err;
err = Encoder - Target;
integral_Err += err;
pwm = Position_KP * err + Position_KI * integral_Err + Position_KD * (err - last_Err);
last_Err = err;
if(pwm>7200) pwm = 7200;
if(pwm<-7200)pwm = -7200;
return pwm;
}
主函数就只有这个在循环
SET_MOTOR1_PWM(Position_PID(Read_Encoder(),aim));
Test_Send_User(Read_Encoder(),aim);
|
-
后面一直等幅振荡
最佳答案
查看完整内容[请看2#楼]
除非误差是0 但不可能调得这么精确。 正误差 冲过去 变负误差 拉回来 一直循环这个过程。 可以做一点模糊 if(err
|