中级会员
- 积分
- 343
- 威望
- 219
- 贡献
- 80
- 兑换币
- 0
- 注册时间
- 2012-2-15
- 在线时间
- 22 小时
- 毕业学校
- 长安大学
|
思路用的是官方2.0版本。下面是角度计算函数;
void AngleCalculate(void)
{
float fDeltaValue,Az,Gyro;
g_fGravityAngle=(Acc_Z_7260-Acc_Z_Zero)*1.*180/(Acc_Z_Max-Acc_Z_Min);
OutData[0]=g_fGravityAngle*30; //上位机输出用
Gyro=(GYRO_VAL_en03-Gyro_Zero);
OutData[2]=Gyro*3; //上位机输出用
g_fGyroscopeAngleSpeed=Gyro*0.3882;
g_fCarAngle=g_fGyroscopeAngleIntegral;
fDeltaValue=(g_fGravityAngle-g_fCarAngle)/3;
g_fGyroscopeAngleIntegral+=(g_fGyroscopeAngleSpeed+fDeltaValue)*0.005;
OutData[1]=(g_fGyroscopeAngleIntegral-setnum[10])*30; //上位机输出用
}
初始化时 给g_fGyroscopeAngleIntegral 赋初值0;
用上位机看图像如下。
红色:加速度计检测到的角度。
黄色:拟合后的角度
蓝色:陀螺仪检测到的角速度
紫色:给电机供电的电压。
调试参数时,在Angle_Control_I=0情况下:Angle_Control_P给很小,直接倒下。给很大,震荡的很厉害。选定一个值后,静止放手,车向前倾角2-3°角,很奇怪的是此时电机没反应,没有驱动力,车有自由倒下的趋势,之后电机开始供电。此时若P选的大,车向前转的很快,马上车向后倾后直接倒下。若P选的小,车一边向前运动,一边向前倒,电机给的力不足以使车回正。最后放置电感的横梁与地接触,车推着横梁往前走。若P选的适中,车同样一边向前运动一边向前倒,只是倒的时间慢一点。
在车一边往前走一边往前倒的情况下,猜测加上Angle_Contro_I之后应该会好些。I选的小时,没什么反应,I选的大时,车无法静止,在原点剧烈抖动后倒下。I适中时,车同样是先向前倒一定角度后,电机才开始起作用。
通过上位机检测到的给电机供电电压图(紫色)可知,其跟随拟合后的角度(黄色)很好,原则上是不会出现滞后的现象,可是调试过程中这个先倒下一定角度电机开始反应的现象一直存在。请问吉他手老师这是怎么回事。
角速度和角度信号检测电路采用官网2.0版本的电路,如下图。
静止时检测到陀螺仪零点输出电压为2.42V,AD通道的转换精度为12位。按理来说,AD口检测到的数值应为2.42/3.3*4096=3003左右。实际上检测到的数值2000左右。即2.42/5*4096约等于2000;这是怎么回事。陀螺仪零点值是不太高?
希望卓晴老师和各位牛人给出指导,跪谢。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|