qmc5883l读取的数据范围不正确,请教原因

2019-07-21 00:19发布

qmc5883l的初始化OK,设为200hz输出,void qmc5883l_init(void)
{

        qmc5883l_write_byte(QMC5883L_ADDRESS,0X09, 0x0d);//0x05);//0X0D);
        qmc5883l_write_byte(QMC5883L_ADDRESS, 0X0B, 0X01);
        qmc5883l_write_byte(QMC5883L_ADDRESS, 0X20, 0X40);
        qmc5883l_write_byte(QMC5883L_ADDRESS, 0X21, 0X01);


}

void qmc5883l_get_mag(u8 *pbuf)
{
      u8 ucStatus;
      qmc5883l_read_byte(QMC5883L_ADDRESS,0x06,&ucStatus);      
      if(ucStatus & 0x01)
      {
              qmc5883l_read_reg_multi(0x00, pbuf, 6);
              wmagx = ((u16)pbuf[1] << 8) +  pbuf[0];
              wmagy = ((u16)pbuf[3] << 8) +  pbuf[2];
              wmagz = ((u16)pbuf[5] << 8) +  pbuf[4];
      }
}
读取出来的原始数据范围是在 wmagx 在 -7300 ~ 3000 之间,和资料上-32768 ~ 32768之间不符,请教下是什么原因造成的呀
而且变化的数值和转动的角度不是线性的,在某个方向时变化时,变化角度很小,但是数值变化大,在另一个方向时变化,数值变化又很小。真是搞不明白了,就几个寄存器,还有什么地方存在问题。
特来论坛请教,请搞过的大神帮忙指导一下,非常感谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
z00j00l00
1楼-- · 2019-07-21 04:45
int x,y,z,angle,temp;               
QMC5883_Read(BUF);
                x=BUF[1] << 8 | BUF[0];
                y=BUF[3] << 8 | BUF[2];
                z=BUF[5] << 8 | BUF[4];
               
                if(x>0x7fff)x-=0xffff;          
                if(y>0x7fff)y-=0xffff;
                if(z>0x7fff)z-=0xffff;       
               
                angle= (atan2((double)y,(double)x) * (180 / 3.14159265) + 180); // angle in degrees
                printf("anglexy = %d ",angle);
                angle= (atan2((double)z,(double)x) * (180 / 3.14159265) + 180); // angle in degrees
                printf("anglexz = %d ",angle);
                angle= (atan2((double)z,(double)y) * (180 / 3.14159265) + 180); // angle in degrees
                printf("angleyz = %d ",angle);
试试参考这个

一周热门 更多>