返回信息流[color=#000000]现在源代码经过简单的修改之后只能原地静止平衡,往前走的话走一小段就会倒 怎么改能让他往前走而且还平衡呢 求给点提示
[color=#FAEBD7]void Moto_Balance_PID_Ctrl( )
{
float KP = 10 ;
float KI = 0 ;
float KD = 0.5 ;
const int16_t MOTO_THRESHOLD = 600 ; // PWM = 18KHz
static float angle_D = 0 ;
static float angle_D_last = 0 ;
float ctrl ;
float angle_diff = 0 ;
int16_t dir ;
int16_t PWM ;
angle_diff = angle_diff+5+g_mpu9250.Angle_Complement_1st ;
ctrl = g_mpu9250.Angle_Complement_1st * KP
+ angle_diff * KI
+ g_mpu9250.gyro_scale_y * KD ;
if ( ctrl > 0 )
{
dir = 1; // backward
}
else
{
dir = 0 ; // forward
}
PWM = abs( (int)ctrl ) + MOTO_THRESHOLD ;
if (PWM > 650 ) PWM = 650;
g_moto_ctrl.right_pwm = PWM ;
left_forward( 10 );
right_forward( 10 );
if ( dir == 0 )
{
left_forward( PWM+50 );
right_forward( PWM+50 );
}
else
{
left_backward( PWM );
right_backward( PWM );
}
}
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #16652同步于 2018/9/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
电子工艺实习平衡车求给点提示
mahuangxu
2018/9/6镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
有挺多种原因的,最常见的是直立环不够硬,给点扰动就纠正不回来,当然就倒了。也有可能是车上有高频震动,导致程序根本不知道自己已经快倾斜了。
另外,你代码里积分项的变量,也应该和微分项一样,声明成static或者直接弄成全局,否则积分项就没意义了。for循环了100次来计算ctrl似乎是多余的,只计算一次就够了