发现MPU6050的DMP是如此的占用CPU,看来做四轴不可能用DMP输出欧拉角了

2019-08-13 18:50发布

主控STM32F103C8T6
        while(1)
        {       
                if( TIMIRQCNT > pd1000ms+1000*ITS_PER_MS-1)                // every 1000ms
                {
                        angNum1s=angNum;
                        Num1s=Num;
                        angNum=0;
                        Num=0;
                        pd1000ms=TIMIRQCNT;
                }       
               
                Num++;
                delay_ms(10);
        }
主程序,仿真发现Num1s确实=100,说明运行上面的if语句频率是1s/次
当我去掉delay_ms(10)时,Num1s=1996855;


当我把程序改成如下时
        while(1)
        {       
                if( TIMIRQCNT > pd1000ms+1000*ITS_PER_MS-1)                // every 1000ms
                {
                        angNum1s=angNum;
                        Num1s=Num;
                        angNum=0;
                        Num=0;
                        pd1000ms=TIMIRQCNT;
                }       
               
                if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)                //6050已设置200Hz输出频率
                {
                        MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);
                        angNum++;
                }       
               
                Num++;
        }

仿真发现angNum1s=200,确实符合200Hz的输出频率,但是Num1s却只有1190而已
从不读取角度的1996855变成1190,看来F1运行浮点数真的很慢啊
那F1做飞控怎么做啊啊啊啊啊

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。