hmc5883l中文资料怎样检测灵敏度

如何用HMC5883L测量工频电磁辐射? - 知乎2被浏览190分享邀请回答0添加评论分享收藏感谢收起21ic官方微信-->
关于HMC5883L电子罗盘的一些问题
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
& && &本人最近买了一个HMC5883L电子罗盘模块来玩,把Datasheet看了几遍,大致懂了原理了。也把卖家提供的测试代码看了,修改了一下,(原来的是用1602来显示的,我改为用串口字符形式显示了)。但是出现了数据一直不变的问题,怎么移动模块都是这样。用16进制来显示数据,就会程周期性的变化。
满意回复+20
你用的什么串口软件?有没有可能是软件的问题
从硬件角度来看,
你要保证周围没有铁制器件 包括屏什么的
而且周围的器件也要离开IC 稍远点.
本帖子中包含更多资源
才可以下载或查看,没有帐号?
你用的什么串口软件?有没有可能是软件的问题
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
dirtwillfly 发表于
你用的什么串口软件?有没有可能是软件的问题
就是用STC烧写程序的那个软件,换了一个串口软件还是一样的。
从硬件角度来看,
你要保证周围没有铁制器件 包括屏什么的
而且周围的器件也要离开IC 稍远点.
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
jjjyufan 发表于
从硬件角度来看,
你要保证周围没有铁制器件 包括屏什么的
而且周围的器件也要离开IC 稍远点. ...
好的,谢谢
---------------------
---------------------
如果原来 1602 显示正常的话, 不排除你改的软件的问题
楼主问题解决了没有?
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
dirtwillfly 发表于
楼主问题解决了没有?
还没有的,因为我手头上没有1602,所以想等回到学校再继续弄了,谢谢
Jackson_lv 发表于
还没有的,因为我手头上没有1602,所以想等回到学校再继续弄了,谢谢
不客气。多多交流:handshake
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
dirtwillfly 发表于
不客气。多多交流
:handshake嗯嗯,好的
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
中级技术员, 积分 272, 距离下一级还需 28 积分
dirtwillfly 发表于
不客气。多多交流
我用1602试了是正常工作的,我觉得应该是iic总线和串口之间的问题
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
可以留下个联系 方式 么&&最近 我也在做这个&&有点问题 可以打扰一下?
扫描二维码,随时随地手机跟帖
技术新星奖章
人才类勋章
时间类勋章
晶莹之水滴
发帖类勋章
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
荣誉元老奖章
等级类勋章
您需要登录后才可以回帖
热门推荐 /4如何用HMC5883L测量工频电磁辐射? - 知乎2被浏览190分享邀请回答0添加评论分享收藏感谢收起写回答后使用快捷导航没有帐号?
请完成以下验证码
查看: 5390|回复: 2
圆点博士小四轴飞行器MPU6050和HMC5883L自我测试模式下的数据研究
在线时间50 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 141, 距离下一级还需 59 积分
一粒金砂(中级), 积分 141, 距离下一级还需 59 积分
圆点博士小四轴飞行器MPU6050和HMC5883L自我测试模式下的数据研究:
=======先来看MPU6040数据手册=============================
7.12 Self-Test
Self-test allows for the testing of the mechanical and electrical portions of the sensors. The self-test for each
measurement axis can be activated by controlling the bits of the Gyro and Accel control registers.
When self-test is activated, the electronics cause the sensors to be actuated and produce an output signal.
The output signal is used to observe the self-test response.
The self-test response is defined as follows:
Self-test response = Sensor output with self-test enabled – Sensor output without self-test enabled
The self-test response for each accelerometer axis is defined in the accelerometer specification table
(Section 6.2). Similarly, for the gyro axes, self test allows the proof masses to be moved equivalent to a predefined
Coriolis force, resulting in a change in sensor output. The self-test response for each gyroscope axis
is defined in the gyroscope specification table (Section 6.1).
For further information regarding the Gyro & Accel control registers, please refer to the MPU-6050 Register
Map and Register Descriptions document.
谷歌翻译:
自检允许传感器的机械和电气部分的测试。为每个该自检
测量轴控制的陀螺仪和加速度控制寄存器的位可以被激活。
当自检被激活时,电子导致被致动的传感器,并产生一个输出信号。
的输出信号被用来观察自检响应。
自检响应被定义为如下:
自检响应具有自检功能的传感器的输出 - 传感器的输出未启用自我测试
自检响应被定义为每个加速度计的轴中的加速度计规格表
(6.2节)。类似地,对于陀螺仪轴,自检允许证明群众被移动相当于一个预定义的
科里奥利力,导致在传感器输出的变化。自检响应为每个陀螺仪轴
中定义的陀螺仪规格表(第6.1节)。
的陀螺仪和加速度控制寄存器的详细信息,请参阅MPU-6050的注册
地图和寄存器说明文件。
=======圆点博士小四轴飞行器MPU6050在自我测试模式下的读数=============
4x_mpu6050_with_st.jpg (163.25 KB, 下载次数: 0)
圆点博士小四轴飞行器MPU6050在自我测试模式下的读数
14:39 上传
=======圆点博士小四轴飞行器MPU6050在非自我测试模式下的读数============
4x_mpu6050_no_st.jpg (157.06 KB, 下载次数: 0)
圆点博士小四轴飞行器MPU6050在非自我测试模式下的读数
14:39 上传
======圆点博士小四轴飞行器MPU6050数据计算========================
自检响应 = 具有自我测试功能的传感器的输出 - 未启用自我测试传感器的输出
MPU6050加速度X轴 =604mg-34mg=570mg
MPU6050加速度Y轴 =566mg-33mg =533mg
MPU6050加速度Z轴 =1555mg-958mg=597mg
MPU6050陀螺仪X轴 = 45.2度每秒-1.1度每秒=44.1度每秒
MPU6050陀螺仪Y轴 = -45.5度每秒-(-1.6度每秒) =-43.9度每秒
MPU6050陀螺仪Z轴 = 46.1度每秒-(-1.0度每秒)=47.1度每秒
======查看MPU6050数据手册========================
4x_mpu6050_ds.jpg (62.94 KB, 下载次数: 0)
MPU6050数据手册
14:39 上传
可见上述计算结果完全符合数据手册数据要求。从而验证了圆点博士小四轴飞行器中对MPU6050的软硬件设计
=======我们再来看HMC5883L数据手册=============================
4x_hmc883l_ds.jpg (212.95 KB, 下载次数: 1)
HMC5883L数据手册
14:39 上传
=======对比圆点博士小四轴飞行器HMC5883L在自我测试模式下的数据========
=======HMC5883L数据分析=============================
我们看到HMC5883L数据手册给出来的数值是 X,Y =951 Z=886
圆点博士小四轴飞行器HMC5883L在自我测试模式下的数据:
X=1237, Y=1181, Z=1220, 角度为223
不过MC5883L数据手册也有提到:
使用上节SELF TEST OPERATION(自测操作)所述的方法,用户可校准传感器的灵敏度的比例以使相互匹配。
因为装置放置在正偏置模式(或相对的负偏置模式) 对所有三轴都应用了已知的人造磁场,因而数据输出寄
存器中的ADC 测量结果可被用于传感器的比例校准。
同样的,内置自测试程序可以用来定期地补偿由于温度变化而带来的比例误差。通过将自测试的数据输出与
在已知的温度下得到的数据进行比较,可以找到一个补偿因数。例如,如果室温下自测试数据输出是1130,
而在当前温度下数据输出是1150,那么()的比例因子应该应用于所有当前的磁场读数中。使用
这种方式无须用到温度传感器。
也就是说,不同温度下,这个结果是有偏差的。所以,该数据验证了圆点博士小四轴飞行器中对HMC5883L的软硬件设计
在线时间2 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
自己组装我试了画了5千多,飞了800米不到,就被风吹跑了,至今未归
在线时间163 小时
威望2185分
芯币3212枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 2185, 距离下一级还需 1315 积分
五彩晶圆(初级), 积分 2185, 距离下一级还需 1315 积分
这四轴飞行器要多少钱?
荣誉会员勋章
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWORLD 官方微信
Powered by查看: 11201|回复: 8
HMC5883L转换方向角与简易校准方法
本帖最后由 do335maomao 于
11:24 编辑
5883L_BoB-small.jpg (189.44 KB, 下载次数: 26)
23:03 上传
研究了一晚上稍微有点成果分享下
HMC5883L使用i2c接口,接线很容易
以Arduino Uno为例:
Vcc to 3.3V
GND to GND
基本原理很简单:
方向角其实就是X轴和Y轴读数的反正切
而校准其实就是要排除环境中的磁场对地磁场的干扰
另外别忘了当地的磁偏角
如下代码没有使用专门的传感器库
上电后先进行20秒校准,请把传感器任意乱转,各个方向都要转到
然后就会显示校准值,然后持续显示初始值和方向角
不知道怎么在ide里面用中文写注释,所以就保留英文了
个人测试下来和手机上的指南针相差不超过5度,更精细的校准待研究
刚刚接触Arduino,望高手指教
#include &Wire.h& //I2C Arduino Library
#define address 0x1E //001 C&&1), I2C 7bit address of HMC5883
#define MagnetcDeclination 4.43 //Shanghai
#define CalThreshold 0
int offsetX,offsetY,offsetZ;
void setup()
{
&&//Initialize Serial and I2C communications
&&Serial.begin(9600);
&&Wire.begin();
&&//Put the HMC5883 IC into the correct operating mode
&&Wire.beginTransmission(address); //open communication with HMC5883r
&&Wire.write(0x00); //select configuration register A
&&Wire.write(0x70); //b configuration
&&Wire.endTransmission();
&&
&&Wire.beginTransmission(address);
&&Wire.write(0x02); //select mode register
&&Wire.write(0x00); //set continuous measurement mode:0x00,single-measurement mode:0x01
&&Wire.endTransmission();
&&
&&calibrateMag();
}
void loop()
{
&&int x,y,z; //triple axis data
&&getRawData(&x,&y,&z);
&&
&&//Print out values of each axis
&&Serial.print(&x: &);
&&Serial.print(x);
&&Serial.print(&&&y: &);
&&Serial.print(y);
&&Serial.print(&&&z: &);
&&Serial.print(z);
&&Serial.print(& angle(x,y): &);
&&Serial.println(calculateHeading(&x,&y,&z));
&&delay(250);
}
void getRawData(int* x ,int* y,int* z)
{
&&//Tell the HMC5883L where to begin reading data
&&Wire.beginTransmission(address);
&&Wire.write(0x03); //select register 3, X MSB register
&&Wire.endTransmission();
&&//Read data from each axis, 2 registers per axis
&&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
&&}
}
int calculateHeading(int* x ,int* y,int* z)
{
&&float headingRadians = atan2((double)((*y)-offsetY),(double)((*x)-offsetX));
&&// Correct for when signs are reversed.
&&if(headingRadians & 0)
& & headingRadians += 2*PI;
& &
&&int headingDegrees = headingRadians * 180/M_PI;
&&headingDegrees += MagnetcD //the magnetc-declination angle
&&
&&// Check for wrap due to addition of declination.
&&if(headingDegrees & 360)
& & headingDegrees -= 360;
&&
&&return headingD
}
void calibrateMag()
{
&&int x,y,z; //triple axis data
&&int xMax, xMin, yMax, yMin, zMax, zM
&&//initialize the variables
&&getRawData(&x,&y,&z);&&
&&xMax=xMin=x;
&&yMax=yMin=y;
&&zMax=zMin=z;
&&offsetX = offsetY = offsetZ = 0;
&&
&&Serial.println(&Starting Calibration......&);
&&Serial.println(&Please turn your device around in 20 seconds&);
&&
&&for(int i=0;i&200;i++)
&&{
& & getRawData(&x,&y,&z);
& & //get Max and Min
& & // this routine will capture the max and min values of the mag X, Y, and Z data while the
& & // compass is being rotated 360 degrees through the level plane and the upright plane.
& & // i.e. horizontal and vertical circles.
& & // This function should be invoked while making continuous measurements on the magnetometers
& & if (x & xMax)
& && &xMax =
& & if (x & xMin )
& && &xMin =
& & if(y & yMax )
& && &yMax =
& & if(y & yMin )
& && &yMin =
& & if(z & zMax )
& && &zMax =
& & if(z & zMin )
& && &zMin =
& && &
& & delay(100);
& &
& & if(i%10 == 0)
& & {
& && &Serial.print(xMax);
& && &Serial.print(& &);
& && &Serial.println(xMin);
& & }
&&}
&&//compute offsets
&&if(abs(xMax - xMin) & CalThreshold )
& & offsetX = (xMax + xMin)/2;
&&if(abs(yMax - yMin) & CalThreshold )
& & offsetY = (yMax + yMin)/2;
&&if(abs(zMax - zMin) & CalThreshold )
& & offsetZ = (zMax +zMin)/2;
& &
&&Serial.print(&offsetX:&);
&&Serial.print(&&);
&&Serial.print(offsetX);
&&Serial.print(& offsetY:&);
&&Serial.print(&&);
&&Serial.print(offsetY);
&&Serial.print(& offsetZ:&);
&&Serial.print(&&);
&&Serial.println(offsetZ);
&&
&&delay(5000);&&
}
把冗长的数据手册读完了,有人想看的话,可以把自测试模式,空闲模式等的使用方法也写一下
参考资料:
https://www.sparkfun.com/tutorials/301
(91.42 KB, 下载次数: 263)
23:03 上传
点击文件名下载附件
正在研究这个,谢谢楼主分享!
我用的GY86模块,电子罗盘也是HMC5883L,一直显示I2C通讯失败,但是MPU6050这些I2C都没问题,楼主能点拨一下吗?谢谢
kevinfrankchen 发表于
我用的GY86模块,电子罗盘也是HMC5883L,一直显示I2C通讯失败,但是MPU6050这些I2C都没问题,楼主能点拨一下 ...
gy86上的hmc5883是连在mpu6050的辅助i2c口上的,需要设置mpu6050才能使用罗盘
do335maomao 发表于
gy86上的hmc5883是连在mpu6050的辅助i2c口上的,需要设置mpu6050才能使用罗盘
你好,那你有相关的历程吗?我还以为那个模块坏了,谢谢
kevinfrankchen 发表于
你好,那你有相关的历程吗?我还以为那个模块坏了,谢谢
这个我具体也只是看过数据手册,建议你也看一下
楼主你好,我看到你的calibrateMag()部分代码的时候,看到只打印出xMax和xMin值,请问校准只需要X轴获取最大和最小即可么?
小白不懂,万分感谢
QQ截图45.jpg (18.59 KB, 下载次数: 4)
19:01 上传
请问M_PI是一个什么数??我一直没找到
LZ竟然没用HMC5883L库!
Powered by}

我要回帖

更多关于 hmc5883灵敏度 2高斯 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信