角度&角速度对应PWM调试问题
static unsigned int Kangle=58000;static unsigned int Kangledot=0;
static unsigned int PWM;
void PWM_calculate()
{
PWM=6500+(unsigned int)(Kangle*angle*3)+(int)(Kangledot*angle_dot);
if(angle_flag==0) //angle_flag为MMA7455.c里面的一全局变量 标志车是往前倒还是往后倒
{
Car_con(PWM,PWM,0101); //往后倒
}
if(angle_flag==1)
{
Car_con(PWM,PWM,0110);//往前倒
}
}
angle_flag是读取加速度传感器时判断符号的标记位。
********************************************************************/
static unsigned char angle_flag=1; //正角度负角度标志
float Get_Angle()
{
unsigned char Angle8;
reg_MMA(1,ZOUT8,0,&Angle8);
Angle8=Angle8-5;
angle_flag=1; //负角度
if(Angle8>127){angle_flag=0;Angle8=256- Angle8;} //负角度
return(float)(asin(Angle8*0.007874)); //(1/127=0.007874)
}
/***********************************************************
float Get_Gyro()
{
/*************************
读取 陀螺仪 Z轴
有符号整形
**************************/
uint gyro_L,gyro_H;
int gyro_temp;
gyro_H = Single_ReadL3G4200D(OUT_X_H);
gyro_L = Single_ReadL3G4200D(OUT_X_L);//从读Z轴的值改为读X轴的值
gyro_temp = (gyro_H<<8 | gyro_L);
return ((gyro_temp - 60)*0.000152); //去除偏移量 计算角速度 8.75mdps/lsb*3.14/180
}
控制器是MSP430f149,卡尔曼滤波是抄论坛上的。
小车现在平衡点立不住,而且发现当车体向后倾斜,车轮会过渡一段时间才向后加速,而向前倾斜则车轮立即响应,将陀螺仪的数据取反,现象也相反。猜想是不是陀螺仪数据正负输出数据不线性,但串口波形显示陀螺仪数据正常。
将卡尔曼滤波器输入的陀螺仪数据改为0.0,角度值和滤波前的角度值吻合。
之前问题,卡尔曼滤波不正常,测试发现角度读取的数据处理时,反正弦函数的输入不能大于1
再感谢下皮哥的上位机软件
问题找到了,是在角度值读取时的符号判断,使得 Get_Angle()返回的值都为正值。 平衡车资料能发一下吗 墨水 发表于 2013-4-12 17:54 static/image/common/back.gif
平衡车资料能发一下吗
论坛上资料好多,我主要是看高手们的帖子。。。 顶!!! {:smile:}mark..... 顶一顶,看一看!!! 哥们,能发我一份采集数据的上位机么?谢啦 824789851@qq.com putin168 发表于 2013-5-16 10:27
哥们,能发我一份采集数据的上位机么?谢啦
不能输出角速度吗?
页:
[1]