OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 31088|回复: 15

ADXL345校准问题

[复制链接]

16

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-10-13
在线时间
13 小时
发表于 2013-3-29 11:18:51 | 显示全部楼层 |阅读模式
问一下,在ADXL345校准程序中,
void ADXL345_AUTO_Adjust(char *xval,char *yval,char *zval)
{
short tx,ty,tz;
u8 i;
short offx=0,offy=0,offz=0;
ADXL345_WR_Reg(POWER_CTL,0x00);   //先进入休眠模式.
delay_ms(100);
ADXL345_WR_Reg(DATA_FORMAT,0X2B); //低电平中断输出,13位全分辨率,输出数据右对齐,16g量程 
ADXL345_WR_Reg(BW_RATE,0x0A); //数据输出速度为100Hz
ADXL345_WR_Reg(POWER_CTL,0x28);   //链接使能,测量模式
ADXL345_WR_Reg(INT_ENABLE,0x00); //不使用中断  

ADXL345_WR_Reg(OFSX,0x00);
ADXL345_WR_Reg(OFSY,0x00);
ADXL345_WR_Reg(OFSZ,0x00);
delay_ms(12);
for(i=0;i<10;i++)
{
ADXL345_RD_Avval(&tx,&ty,&tz);
offx+=tx;
offy+=ty;
offz+=tz;
}
offx/=10;
offy/=10;
offz/=10;
*xval=-offx/4;
*yval=-offy/4;
*zval=-(offz-256)/4;  
  ADXL345_WR_Reg(OFSX,*xval);
ADXL345_WR_Reg(OFSY,*yval);
ADXL345_WR_Reg(OFSZ,*zval);
}
红色突出部分是什么意思???特别是zval???
It?never?rains?but?it?pours!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2013-3-29 11:39:53 | 显示全部楼层
原来所谓自动校准是这样的啊。

看程序应该是起的滤波、缓慢收敛的作用,防止一步到位导致的震荡。每次使偏置减少到75%,所以这个函数应该调用n次才能得到较好的结果的的,调用10次就可以缩小到5%的误差。
zval应该是使G的值向256收敛。
业余程序玩家。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-29 12:24:01 | 显示全部楼层
回复【楼主位】风眠慕天:
---------------------------------
看ADXL345的数据手册,里面有详细介绍。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2013-7-18
在线时间
0 小时
发表于 2013-8-3 22:50:10 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
ADXL345的数据手册关于寄存器0x2D—POWER_CTL(读/写)中有以下文字:



休眠位 
休眠位设置为0 ,将器件置于普通工作模式,设置为1 ,置于休眠模式。

那你的例程中在ADXL345校准程序中,
void ADXL345_AUTO_Adjust(char *xval,char *yval,char *zval)
{
short tx,ty,tz;
u8 i;
short offx=0,offy=0,offz=0;
ADXL345_WR_Reg(POWER_CTL,0x00);     //先进入休眠模式.*****************************这句是不是错误了呢???
delay_ms(100);
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-3 22:57:31 | 显示全部楼层
回复【4楼】freeben09:
---------------------------------
为什么呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2013-7-18
在线时间
0 小时
发表于 2013-8-3 23:18:47 | 显示全部楼层
ADXL345_WR_Reg(POWER_CTL,0x40);     这样子才是吧  ?因为我买的是mini版 没有实际检测过 也不知道对不对
回复 支持 反对

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2013-7-18
在线时间
0 小时
发表于 2013-8-4 09:12:06 | 显示全部楼层


回复【5楼】正点原子:
---------------------------------

*xval=-offx/4;
*yval=-offy/4;
*zval=-(offz-256)/4;   
这三个语句我也不是很清楚用法。  其中除于4这个操作我已经明白了,  然后根据ADXL345手册中上图看到的内容,    存入的值是这些偏移值的补码,   但程序中求得的ADXL345_RD_Avval(&tx,&ty,&tz);  都是十六位的short类型的,    所以offx offy offz都是short类型的,  同样   *xval *yal *zval都是short类型  怎么存储到一个字节的空间也就是偏移寄存器中呢???      

而且我不明白这个求补码的操作  这里是怎么实现的??




回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-4 11:06:16 | 显示全部楼层
回复【6楼】freeben09:
---------------------------------
这里备注有误,呵呵,则句话的目的是清掉PWR_CTL寄存器原来的设置.
 同样   *xval *yal *zval都是short类型,此话有误.*xval *yal *zval都是char型数据!
关于补码的知识,你可以百度下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2013-7-18
在线时间
0 小时
发表于 2013-8-4 16:34:11 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
确实是char类型的 我搞错了这个地方!但是 也就是说前面的步骤*xval=-offx/4;  这些offx offy offz却是short类型啊 ,是不是会出问题呢?还是强制转换不会导致问题?    
补码我上网查了下  已经搞懂了  举例子
-2补码   1000 0010  补码为FE: 1111 1101+1=1111 1110  FE
3补码     0000 0011 正数补码即本身0x03!!
-3补码   1000 0011  补码为FD    1111 1100+1=1111 1101  FD
但这个跟你程序中的offz-256还是不明白,为什么单单Z轴这样子操作,是与我们芯片摆放的位置,就是重力轴所在轴才这样子操作么 ????? 能帮帮我理解下么  求救!!! 同时这个负号我应该理解为什么呢?是理解为便宜的意思不?
   
*xval=-offx/4;
*yval=-offy/4;
*zval=-(offz-256)/4;
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-4 18:20:48 | 显示全部楼层
回复【9楼】freeben09:
---------------------------------
offz-256是改变Z轴方向罢了.
如果不减去256,那么得到静止的时候Z轴数据是最大值,X,Y都是接近0,而Z轴是接近255
减去256就相当于调转Z轴了,得到静止时:X,Y,Z都是接近0的读数.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2013-7-18
在线时间
0 小时
发表于 2013-8-4 19:59:01 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
谢谢 感动啊   !!!
回复 支持 反对

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2012-2-26
在线时间
0 小时
发表于 2014-6-27 10:38:43 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
请问原子哥,我用ADXL345在接近静止状态下运动时,输出的角度是稳定的,但是将它往一个方向直线来回快速运动时,输出都会有角度的?应该是没有角度才是,求解,谢谢。
他山之石,可以攻玉.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-27 23:12:44 | 显示全部楼层
可能是抖动引起的,变化范围应该不大吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2014-8-30 19:26:03 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
那前面的负号是干什么用的!!!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-31 01:46:42 | 显示全部楼层
回复【14楼】FantaSy_:
---------------------------------
代表方向。
+G,还是-G。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-5-3
在线时间
0 小时
发表于 2015-5-3 09:05:08 | 显示全部楼层
为什么要进入休眠模式呢?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 02:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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