查看: 1369|回复: 5

[未解决] 用arduino读取QMC5883L得到的数据不稳定

[复制链接]
  • TA的每日心情
    奋斗
    2019-1-10 20:00
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2018-9-28 11:09 | 显示全部楼层 |阅读模式
    今天淘宝买了一块电子罗盘模块(QMC5883L),按照数据手册进行设置,发现得到的数据不稳定,请教各位大侠,小弟应该进行怎样的修改?
    附上源代码和模块图


    #include <Wire.h>           //使用IIC库
    #define address 0x0D        //QMC5883L的设备地址设置

    void setup(){
      Serial.begin(9600);  //初始化串口和I2C口
      Wire.begin();
    //初始化模块
      Wire.beginTransmission(address);
      Wire.write(0x09); //选择控制寄存器0X09
      Wire.write(0x1D); //设置0x09寄存器为:OSR:512Hz,RNG:+/-8Gauss,ODG:200Hz,MODE:连续工作模式
      Wire.endTransmission();
    }

    void loop(){

      int x,y,z; //triple axis data

      Wire.beginTransmission(address);//读写开始
      Wire.write(0x00); //选择X,Y,Z所在数据储存寄存器
      Wire.endTransmission();

    //读取X、Y、Z三个方向的坐标值
      Wire.requestFrom(address, 6);
      if(6<=Wire.available()){
        x = Wire.read()<<8; //X msb
        x |= Wire.read(); //X lsb
        z = Wire.read()<<8; //Z msb
        z |= Wire.read(); //Z lsb
        y = Wire.read()<<8; //Y msb
        y |= Wire.read(); //Y lsb
      }
    //打印坐标到串口
      Serial.print("x: ");
      Serial.print(x);
      Serial.print("  y: ");
      Serial.print(y);
      Serial.print("  z: ");
      Serial.println(z);
      delay(250);
    }

    QMC5883L.png
    串口输出结果.png
  • TA的每日心情
    奋斗
    2019-1-10 20:00
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-9-28 17:11 | 显示全部楼层
    大佬们在哪里?请求各路大侠指点下

    该用户从未签到

    发表于 2019-3-2 09:29 | 显示全部楼层
    本帖最后由 elongshi 于 2019-3-2 10:26 编辑

    告诉你,的确是不稳定,国产QMC5883纯就是个坑,角度跳动太大了。换了N家的都一样!换成芯片上标的L883就好很多,很稳定!记住进口芯片,只标的是L883!而不是5883!
    另外你读取寄存器XYZ值的循错了,如果是进口芯片HMC5883L,顺序是XZY,而国产的QMC5883L顺序是XYZ,但即便改正了,跳动抖动误差还是太大了。

  • TA的每日心情
    开心
    2015-7-10 09:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-3-15 11:19 | 显示全部楼层
    elongshi 发表于 2019-3-2 09:29
    告诉你,的确是不稳定,国产QMC5883纯就是个坑,角度跳动太大了。换了N家的都一样!换成芯片上标的L883就好 ...

    有推荐的模块吗?角度精确点的
  • TA的每日心情
    开心
    2015-7-10 09:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-3-15 11:22 | 显示全部楼层
    elongshi 发表于 2019-3-2 09:29
    告诉你,的确是不稳定,国产QMC5883纯就是个坑,角度跳动太大了。换了N家的都一样!换成芯片上标的L883就好 ...

    我用的是HMC5883L芯片的GY-271模块,角度飘的厉害,你说的L883没有找到
  • TA的每日心情
    郁闷
    2019-2-22 11:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2019-4-7 10:33 | 显示全部楼层
    我请问下xyz的值怎么转换成东西南北,毕竟是电子罗盘模块。我现在已经找了好多网页都找不到怎么根据xyz来确定方向,
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    LCD1602液晶屏不显示
    LCD1602液晶屏不显示
    Arduino连的LCD1602,程序显示上传成功,但是液晶屏是不显示字符,背景灯亮,是怎么回
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    开贴讲讲NRF24L01P,让你彻底搞懂它的工作原理,持续更...
    开贴讲讲NRF24L01P,让你
    *****************************************更贴码字很多,很容易触发论坛人工审核机
    能够与arduino结合的嵌入式视觉识别模块
    能够与arduino结合的嵌入
    该视觉识别模块是我司于2018年新推出的产品,处理器采用双核MCU,面向创客以及steam教
    无线遥控四个灯泡
    无线遥控四个灯泡
    我有一个遥控器,一个接收板,还有四个灯泡,不知道如何连接在一起,然后控制灯亮
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表