阿发 发表于 2013-4-12 11:13:37

角度&角速度对应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,角度值和滤波前的角度值吻合。

阿发 发表于 2013-4-12 11:19:28

之前问题,卡尔曼滤波不正常,测试发现角度读取的数据处理时,反正弦函数的输入不能大于1
再感谢下皮哥的上位机软件

阿发 发表于 2013-4-12 14:31:09

问题找到了,是在角度值读取时的符号判断,使得 Get_Angle()返回的值都为正值。

墨水 发表于 2013-4-12 17:54:18

平衡车资料能发一下吗

阿发 发表于 2013-4-12 22:24:33

墨水 发表于 2013-4-12 17:54 static/image/common/back.gif
平衡车资料能发一下吗

论坛上资料好多,我主要是看高手们的帖子。。。

lunhuiliudao 发表于 2013-4-14 13:08:03

顶!!!

szblue 发表于 2013-4-14 14:45:52

{:smile:}mark.....

一棵葱 发表于 2013-5-15 16:19:48

顶一顶,看一看!!!

putin168 发表于 2013-5-16 10:27:47

哥们,能发我一份采集数据的上位机么?谢啦 824789851@qq.com

头上两只角 发表于 2014-7-31 15:29:41

putin168 发表于 2013-5-16 10:27
哥们,能发我一份采集数据的上位机么?谢啦

不能输出角速度吗?
页: [1]
查看完整版本: 角度&角速度对应PWM调试问题