搜索
bottom↓
回复: 26

关于ADXL345采集数据 转换 角度

[复制链接]

出0入0汤圆

发表于 2012-6-18 20:17:34 | 显示全部楼层 |阅读模式
//******************ADXL345计算倾斜角度************
void adxl345_angle(void)
{

data_xyz[0]=A_X;  //合成数据   
data_xyz[1]=A_Y;  //合成数据   
data_xyz[2]=A_Z;  //合成数据   

//分别是加速度X,Y,Z的原始数据,10位的
Q=(float)data_xyz[0]*3.9;
T=(float)data_xyz[1]*3.9;
K=(float)data_xyz[2]*3.9;
Q=-Q;

  Roll=(float)(((atan2(K,Q)*180)/3.14159265)+180);    //X轴角度值
  Pitch=(float)(((atan2(K,T)*180)/3.14159265)+180);  //Y轴角度值



最后两行怎么理解 求高人

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-6-18 20:18:03 | 显示全部楼层
别沉了。。。。。。。。。。。

出0入0汤圆

发表于 2012-7-11 19:41:19 | 显示全部楼层
求解 再顶一次

出0入0汤圆

发表于 2012-9-2 22:08:21 | 显示全部楼层
把完整程序发一遍 这样没人看得懂

出0入0汤圆

发表于 2012-9-2 22:16:08 | 显示全部楼层
本帖最后由 john800422 于 2012-9-2 22:19 编辑

计算两轴夹角并将弧度换算成角度

改成以下会比较方便
Roll=(float)((atan2(Q,K)*180)/3.14159265);    //X轴与水平夹角, 单位Deg
Pitch=(float)((atan2(T,K)*180)/3.14159265);  //Y轴与水平夹角, 单位Deg

atan2(Q,K)会回传Radian
Degree = Radian * 180 / PI

故 Roll, Pitch 的单位为 Degree

出0入0汤圆

发表于 2013-4-28 22:50:07 | 显示全部楼层
john800422 发表于 2012-9-2 22:16
计算两轴夹角并将弧度换算成角度

改成以下会比较方便

请教一下,我在其他资料上看到说: Ax和Ay 分别为加速度计的X和Y轴的输出值,g为垂直于水平面的重力加速度。
即加速度输出值 和 就是俯仰角 和横滚角 的正弦值,这样的话读出来的值经过合成后就是俯仰角 和横滚角 的正弦值??是对的吗?那和LZ的运算不太一样,是怎么回事啊?

出0入0汤圆

发表于 2013-4-28 22:50:48 | 显示全部楼层
我测出来的值怎么知道是正确的?

出0入0汤圆

发表于 2013-4-29 03:55:17 | 显示全部楼层
蕾蕾 发表于 2013-4-28 22:50
请教一下,我在其他资料上看到说: Ax和Ay 分别为加速度计的X和Y轴的输出值,g为垂直于水平面的重力加速 ...

不太懂你問的

以下是我的理解

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-4-29 11:10:09 | 显示全部楼层
john800422 发表于 2013-4-29 03:55
不太懂你問的

以下是我的理解

非常谢谢您,我今天早上看到您的回复后,终于弄明白了。不过我还是有些另外的问题,我做得是电子罗盘,使用磁阻传感器HMC5883L和加计ADXL345,现在我要结合他们两个的数据,也就是我的结合公式需要用到俯仰角和翻滚角的cos和sin值,那我可以是cos(pitch)=x/g;但是测出来的x是乘以3.9mg/lsb的值,也就是x的单位是mg,我在求cos的时候,那x需要乘以10的负3次方吗?还有一个问题,那我加计绕Y轴旋转时,此时翻滚角是不是为0 ?

出0入0汤圆

发表于 2013-4-29 11:23:18 | 显示全部楼层
john800422 发表于 2013-4-29 03:55
不太懂你問的

以下是我的理解

我还有一个疑惑,实际情况下,我的加计的X和Y轴都不会说和水平面平行,那我应该怎么算pitch和roll?

出0入0汤圆

发表于 2013-4-29 11:48:40 | 显示全部楼层
蕾蕾 发表于 2013-4-29 11:10
非常谢谢您,我今天早上看到您的回复后,终于弄明白了。不过我还是有些另外的问题,我做得是电子罗盘,使 ...

cos(pitch)=x/g
單位相同, cos(pitch)才會正確

你需要先了解下Pitch, Roll, Yaw的定義
Pitch, Roll, Yaw是定義在載體的坐標系上的
詳細可以看下Rotation matrix的Wiki
http://zh.wikipedia.org/wiki/%E6%97%8B%E8%BD%AC%E7%9F%A9%E9%98%B5

出0入0汤圆

发表于 2013-4-29 12:21:48 | 显示全部楼层
john800422 发表于 2013-4-29 11:48
cos(pitch)=x/g
單位相同, cos(pitch)才會正確

好的,谢谢,那我看看先

出0入0汤圆

发表于 2013-4-29 19:28:20 | 显示全部楼层
LZ,请问一下你要的那个Q=-Q,为什么啊?

出0入0汤圆

发表于 2013-4-29 19:50:14 | 显示全部楼层
楼主,请问一下你这个roll和pitch的计算公式,
Roll=(float)(((atan2(K,Q)*180)/3.14159265)+180);    //X轴角度值
   Pitch=(float)(((atan2(K,T)*180)/3.14159265)+180);  //Y轴角度值
在加速度计与X、Y轴都不平行的时候是否试用?
另外,我看到有些说法是dev=sqrt( x*x+y*y)/(z);     dev=atan(dev)*180/3.1416;
按照这种方法计算的角度与LZ的有什么不一样啊?

出0入0汤圆

发表于 2013-4-29 19:54:32 | 显示全部楼层
john800422 发表于 2013-4-29 11:48
cos(pitch)=x/g
單位相同, cos(pitch)才會正確

您好,又打扰您了,Roll=(float)(((atan2(K,Q)*180)/3.14159265)+180);    //X轴角度值
    Pitch=(float)(((atan2(K,T)*180)/3.14159265)+180);  //Y轴角度值
在加速度计与X、Y轴都不平行的时候是否试用?
另外,我看到有些说法是dev=sqrt( x*x+y*y)/(z);     dev=atan(dev)*180/3.1416;
按照这种方法计算的角度与上面的有什么不一样啊?
我还是想知道加速度计与X、Y轴都不平行的时候,pitch和roll怎样计算,麻烦有公式的话贴出来啊,今天看您介绍的那篇文章,头都大了,就是看不懂那些矩阵,因为是初学者,有劳您指教了

出0入0汤圆

发表于 2013-4-29 21:01:12 | 显示全部楼层
LZ,我用这个pitch和roll的公式计算的时候,我把加速度计水平放置的话,那pitch和roll应该等于0度啊?为什么我的是pitch=266,roll=269

出0入0汤圆

发表于 2013-4-29 21:04:38 | 显示全部楼层
john800422 发表于 2013-4-29 11:48
cos(pitch)=x/g
單位相同, cos(pitch)才會正確

你好,想问一下:加速度计和陀螺仪读出来数据之后转换成加速度和角速度都是乘以它的灵敏度吗?

出0入0汤圆

发表于 2013-4-29 21:21:52 | 显示全部楼层
蕾蕾 发表于 2013-4-29 21:01
LZ,我用这个pitch和roll的公式计算的时候,我把加速度计水平放置的话,那pitch和roll应该等于0度啊?为什 ...

有校正過嗎??

出0入0汤圆

发表于 2013-4-29 21:31:01 | 显示全部楼层
svon 发表于 2013-4-29 21:04
你好,想问一下:加速度计和陀螺仪读出来数据之后转换成加速度和角速度都是乘以它的灵敏度吗? ...

以加速度計為例
Acc = ReadData*(xxg/LSB) = ReadData/(LSB/xxg)

出0入0汤圆

发表于 2013-4-29 22:41:18 | 显示全部楼层
john800422 发表于 2013-4-29 21:31
以加速度計為例
Acc = ReadData*(xxg/LSB) = ReadData/(LSB/xxg)

可是我用LIS3DH这个加速度计读的时候,设置的是量程是2g,然后水平静止状态下读出的Z轴输出是16000多,如果换成灵敏度1mg/digit的话,那岂不是爆了??而这样算:十六位数据,65535多,分正负两部分,除以2,32000多;对应1g正好是一半16000多,看起来是对的(X、Y轴输出的是0左右)...这是为什么呢??是我读出来的数据有问题吗?

出0入0汤圆

发表于 2013-4-29 23:56:21 | 显示全部楼层
svon 发表于 2013-4-29 22:41
可是我用LIS3DH这个加速度计读的时候,设置的是量程是2g,然后水平静止状态下读出的Z轴输出是16000多,如 ...

是正負2g
有號數的

出0入0汤圆

发表于 2013-4-30 22:26:39 | 显示全部楼层
john800422 发表于 2013-4-29 23:56
是正負2g
有號數的

是正负2g,但是16000多乘以1mg/digit的灵敏度还是太大了,我在别的一些帖子上看到的量程+/-2g静止时Z输出的也是16000多,不知道是数据有问题还是...该怎么算呢?

出0入0汤圆

发表于 2013-5-1 01:05:56 | 显示全部楼层
svon 发表于 2013-4-30 22:26
是正负2g,但是16000多乘以1mg/digit的灵敏度还是太大了,我在别的一些帖子上看到的量程+/-2g静止时Z输出 ...


1mg/digit
其中的digit應該是指高12位的
所以對應到16位, 應該是
+-2g    0.0625mg/LSB
+-4g    0.125mg/LSB
+-8g    0.25mg/LSB
+-16g  0.0833mg/LSB

可以自己CHECK一下

出0入0汤圆

发表于 2013-5-1 10:03:06 | 显示全部楼层
john800422 发表于 2013-5-1 01:05
1mg/digit
其中的digit應該是指高12位的
所以對應到16位, 應該是

原来是这样!太谢谢了!

出0入0汤圆

发表于 2013-5-4 20:56:35 | 显示全部楼层
john800422 发表于 2013-5-1 01:05
1mg/digit
其中的digit應該是指高12位的
所以對應到16位, 應該是

关于数据融合部分,其实之前就有在看,不过到现在还是没有整体的概念。可以指教一下该从哪入手,用什么算法,需要什么知识这方面的建议吗?或者推荐一些入门的资料?

出0入0汤圆

发表于 2014-3-17 21:44:37 | 显示全部楼层
蕾蕾 发表于 2013-4-29 21:01
LZ,我用这个pitch和roll的公式计算的时候,我把加速度计水平放置的话,那pitch和roll应该等于0度啊?为什 ...

请问,你现在把hmc5883和adxl345的整合程序写好了吗?

出0入0汤圆

发表于 2014-3-19 09:48:42 | 显示全部楼层
john800422 发表于 2012-9-2 22:16
计算两轴夹角并将弧度换算成角度

改成以下会比较方便

请问大神这种方法是怎么得来的,我一直都米有理解,

本帖子中包含更多资源

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

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 21:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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