初级会员
- 积分
- 101
- 金钱
- 101
- 注册时间
- 2015-7-24
- 在线时间
- 11 小时
|
1金钱
问题:1.四轴飞控中 PI参数是依据什么来调整的? 如下:
float Kp = 0.4f; //比例增益
float Ki = 0.001f; //积分增益
2.偏航角在转动之后,会有慢慢变的情况,这是为什么
分享:
1.之前使用的是DMP 发现居然要25mA的电流,无奈辛辛苦苦调好后又只能放弃,但是还是分享一下调试经验
使用方式 :MPU6500 + DMP + I2C
Bug:
1. MPU6500 上拉电阻建议使用4.7K,这样应答时能够降至几十毫伏左右,不要使用10K上拉,否则会出现应答时电平 0.6V
2.I2C通信Bug,在第一次与MPU6500通信时,会出现偶尔的无应答,而且这之后的指令都有应答,比如初始化顺序:
复位 //偶尔无应答
退出睡眠 //100%应答
读取ID //100%应答
.... //其它指令100%应答
这就会导致复位失败,解决方法:在初始化之前加入如下代码:
void MPU_BUG_Deal(void)
{
SysData.MpuErr=1;//应答错误
MPU_IIC_Stop();
while(SysData.MpuErr) //直到无应答错误
{
SysData.MpuErr=0;
MPU_IIC_Start();
MPU_IIC_SendByte((MPU_ADDR<<1)|0);
MPU_IIC_Wait_Ack();
MPU_IIC_Stop();
}
SysData.MpuErr=0;//接下来,就可以随心所欲 读写MPU了 不用担心出现应答错误
}
我猜测估计和MPU6500上电过程有关系
3.在加载DMP固件的时候 会出现固件加载失败的情况:
原因如下:
for (ii = 0; ii < length; ii += this_write) {
this_write = min(LOAD_CHUNK, length - ii);
if (mpu_write_mem(ii, this_write, (unsigned char*)&firmware[ii]))
return -1;
if (mpu_read_mem(ii, this_write, cur))
return -1;
if (memcmp(firmware+ii, cur, this_write))
return -2;
}
在mpu_write_mem之后立马进行读取,如果是像F4这种168M高速芯片就出出错,
修改方法:在mpu_write_mem(ii, this_write, (unsigned char*)&firmware[ii]) 之后加个Delayms(5); 这个时间需要根据你们自己的实际情况
目前调试情况:
由于DMP电流过大,我们现在去掉DMP,但是我们的板子没有画中断引脚,只好使用定时器,固定读取,发现问题如下:
1.使用定时器方式算出的姿态角 和中断算出的姿态角数据差很多,推测是因为定时器方式 读取的数据存在不同步现象,需要采用MPU FIFO方式
2.滤波器的初始化频率必须和采集数据的频率一致
3.陀螺仪零偏校准完成之后,数据才能稳定
4.KP KI参数依据什么来调整
5.偏航角在转动之后,会有慢慢变的情况,这是为什么?
|
|