初级会员
- 积分
- 142
- 金钱
- 142
- 注册时间
- 2017-3-23
- 在线时间
- 30 小时
|
2金钱
相关的PID 调节程序如下。其中黑体的gyro[0]是x轴角速度,后边注释说乘上0.0153转换单位为度/每秒
可我查相关资料mpu6050读到的数据除以16.40就可以得到角速度,单位为度每秒,也就是乘上1/16.40=0.06098,而不是0.0153。这么算有木有问题?
还有,如何最方便找到mpu静止水平时的gyrox也就是x轴角速度?我用oled测试过他的数据非常不稳定,不容易确定一个小范围的值。
/*************PID控制调节******************************/
/******************************************************
Function: void PID_balance(float vertical)
Description:通过运算得到合适的PWM值
Input: vertical:小车垂直于桌面时得到的角度,用于垂直校准
Output: PWM_L、PWM_L,通过计算得到合适的PWM值
******************************************************/
void PID_balance(float vertical)
{
static s16 needAngle;
err = Roll - vertical; //得到实际偏差角度
needAngle = err + speedNeedAngle; //需要小车保持的角度
err = needAngle - vertical; //得到实际偏差角度
PWM = - err * pidValue[0] //角度
- (gyro[0]-GYRO_X_ADJUST)*0.0153 * pidValue[1] * 0.1 //角速度 静止初始化时 gyrox=11 *0.0153将单位换算为(°/s)
- position_dot_filter * pidValue[2] * 0.1 //单位时间脉冲个数,看做速度
- position * pidValue[3] * 0.0001; //运行距离 *0.0001是为了是PID参数为整数
PWM_L = PWM + turnNeed ;
PWM_R = PWM - turnNeed ;
}
有大神的话帮忙把这个pid调节的程序分析一下,嘿嘿,最近在学校准备参加电子科技竞赛,好多东西都不是很明白。
|
|