极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 32522|回复: 9

关于adxl345的校准

[复制链接]
发表于 2011-12-16 09:58:09 | 显示全部楼层 |阅读模式
刚刚开始接触传感器的使用。请问类似的各种传感器模块,每次上电后都要重新进行校准吗?那校准的流程是怎样的呢?
回复

使用道具 举报

 楼主| 发表于 2011-12-16 18:28:42 | 显示全部楼层
本帖最后由 nomady 于 2011-12-16 18:32 编辑

adxl345已经研究过了,使用偏移寄存器来修正,发上来跟大家分享下。

首先,这个校准的过程是手动的(类似手机上的传感器校准),把模块水平放置(这个水平也只是个大概,如果要求高的话,还需要其他仪器辅助),那么x轴和y轴的度数应该为0g,获取此时的实际x轴和y轴的度数(假设是20和-17)

要注意此时传感器的量程和分辨率,假设此时adxl345是常规量程+-16g,分辨率13位,那么此时度数的系数应该是1g/256 *1000 = 3.9 mg/LSB,从数据手册上可以查到 偏移寄存器的比例因子是 15.6mg/LSB(固定的,与量程无关),那么需要设定的实际偏移值就是 20/4 = 5和-17/4 = 4(15.6/3.9约为4)

然后取两个值的补码,分别为0x05和0xFB,写入对应的偏移寄存器。

这样,每次从传感器读取的数值就自动加上了这个设置的偏移。z轴的偏移值检测方式一样,把z轴水平放置(处于0g场)

对应的参考代码如下:
  1. void setup(){   
  2.     Wire.begin();
  3.     setAccReg(Reg_PWR_CTL,8);
  4.     setAccReg(Reg_OFSX,0x05);    //Reg_OFSX 0x1E
  5.     setAccReg(Reg_OFSY,0xFB);    //Reg_OFSY 0x1F
  6.     setAccReg(Reg_OFSZ,0x07);    //Reg_OFSY 0x20
  7. }

  8. void setAccReg(int reg,byte value){
  9.     setReg(ADXAdress,reg,value);    //ADXAdress = 0xA7>>1
  10. }

  11. void setReg(int device,int reg,byte value){
  12.     Wire.beginTransmission(device);
  13.     Wire.write(reg);
  14.     Wire.write(value);
  15.     Wire.endTransmission();
  16. }
复制代码
需要注意的是:
1、传感器掉电后,设置的偏移值就丢失了,需要在下次上电后重新设置(不过这个偏移值主要跟芯片所处的环境有关,理论上不会经常性的大变化)
2、对于偏移值的测量,可以采用多次测量求平均值的方法
回复 支持 1 反对 0

使用道具 举报

发表于 2011-12-16 13:47:59 | 显示全部楼层
{:soso_e103:} 只知道电子罗盘可以自己校准(自己还没成功,但是有高手会弄)。。。其他传感器。。。我还不会校准
回复 支持 反对

使用道具 举报

发表于 2011-12-16 23:10:51 | 显示全部楼层
可以把校准的参数放到arduino 的EEPROM里面去。
然后每次上电重新调用就行。
由于我们是爱好者级别。
传感器一般情况下并不需要太多地去考虑校准的问题。
并且,现在有很多的传感器(往往是数字式的)它在出厂的时候已经校准好了。
而且输出的数值已经是被校准过了
回复 支持 反对

使用道具 举报

发表于 2011-12-20 11:44:58 | 显示全部楼层
一般会做一个标准的工装,这个工装代表着精度符合你要求的东西,然后通过这个工装去校准传感器。
回复 支持 反对

使用道具 举报

发表于 2014-1-20 11:13:26 | 显示全部楼层
我的ADXL345量程设置的是+-2g, 实验测出的X、Y轴读数是负200左右,Z轴是511。这个偏离值也太大了点,不知道问题出在哪里~
回复 支持 反对

使用道具 举报

发表于 2014-6-20 10:32:52 | 显示全部楼层
nomady 发表于 2011-12-16 18:28
adxl345已经研究过了,使用偏移寄存器来修正,发上来跟大家分享下。

首先,这个校准的过程是手动的(类似 ...

校准是必要的,我的Esplora手柄中的三轴重力加速度,X,Y轴就存在较大的偏移。在控制小车时,只好抬高门槛,造成控制盲区比较大。

前一段时间做电子秤,有一个去皮的功能,就相当于把不同容器皮重的偏移一键去除。如果可以在程序中,可以根据不同环境下的X,Y,Z轴误差直接计算补码设置偏移量。应该是可以实现开机时,把传感器水平静置,然后通过一个按钮切换到校准程序。

回复 支持 反对

使用道具 举报

发表于 2017-9-3 19:14:16 | 显示全部楼层
本帖最后由 v60i 于 2017-9-3 19:15 编辑
nomady 发表于 2011-12-16 18:28
adxl345已经研究过了,使用偏移寄存器来修正,发上来跟大家分享下。

首先,这个校准的过程是手动的(类 ...


请问大大Reg_PWR_CTL 是怎么宣告的?
回复 支持 反对

使用道具 举报

发表于 2018-1-26 11:11:56 | 显示全部楼层
-4补码算错了,取反加1.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2018-1-26 20:34:06 | 显示全部楼层
本帖最后由 a461624201 于 2018-1-26 21:44 编辑

这个是树莓派python I2C 13位,全分辨模式,+-16G范围,x,y输入偏置后,xy轴重力大致正常,但Z轴在芯片朝向上,输出始终为6.34g,调整Z轴偏置 数值,不管怎么调整,只能,芯片面上+4g,下+2g为最小,因为偏置是8位,对5.3g的偏置数值339没法配置,后来直接对z轴的重力结果做-3计算,心里估计这样芯片面上+1g,下-1g,结果似乎各轴重力和倾角开始正常了,图片为芯片有点面向上,即y轴向上,y轴重力为1.116, y轴对z的角度x_roll为72.5度左右(没有严格测量,这个方向只是大概),就是不知道这样直接对z轴重力做减3的做法对不对?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 12:02 , Processed in 0.050777 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表