iic jy901 单片机_JY-901模块数据解算方法

JY-901模块数据解算方法

JY901模块是一款高精度的姿态测量模块,能够测量被测物体的姿态角度,以欧拉角或者四元素的方式输出。

模块的数据采用16进制的方式进行传输,这种方式的优点是效率高,可以用很少的字节传输需要的数据,比如一个数据1.523,如果用16进制方式传送的话,2个字节就够了,而用ascii码的话,需要5个字节,在需要大量数据传输的时候就比较浪费有限的带宽了。而16进制数据的缺点呢,就是可读性不强,不像Ascii码那样,直接就能读出数据了。

16进制数据传输的原理是这样的,先要确定数据的表示范围,然后是每个数据可用的字节数。比如角度的数据,每个角度的数据范围是±180度,而2个字节16进制数的表示范围是-32767~32768之间,那么我们就把±180的数据映射到±32768之间。假设原理的数据是x,变换以后的数据是y,那么y=x/180*32768。2个字节能表示的最小精度是1/32768*180=0.0055°,这对于角度的精度来说也够用了。

下面具体讲解析的方法。

先通过串口调试助手看模块的原始数据,注意要选择好正确的波特率,并且将模块的显示模式勾选为16进制方式。如下图

1.png (69.7 KB, 下载次数: 8)

2016-7-20 09:07 上传

如果能看到这种以55 51 或者55 52打头的数据,就说明接收到正确的数据了。

以加速度为例,加速度的数据是55 51 开头的数据包,比如上图圈选出来的数据是55 51 78 FD 4E 03 85 F8 FC 0E F3,根据厂家的说明文档,协议的规定是这样的

5.png (248.89 KB, 下载次数: 9)

2016-7-20 09:07 上传

那么上述数据中,78 FD就是Ax的数据,4E 03就是Ay的数据,85 F8就是Az的数据 FC 0E是温度的数据, F3是校验和。以Ax的数据为例,AxL是78,AxH是FD,那么完整的16进制数据是FD78,转换我们需要使用到Windows的计算器。打开计算器以后,点击这里的标准

2.png (13.1 KB, 下载次数: 10)

2016-7-20 09:07 上传

然后选择程序员,计算器进入程序员模式,再点击Hex,进入16进制模式。

3.png (15.3 KB, 下载次数: 8)

2016-7-20 09:07 上传

接着就可以输入数据了,输入FD78,注意这里的WORD模式要调成WORD,这里是定义使用的字节数,如果选择错误将不能获得正确的结果

4.png (10.41 KB, 下载次数: 9)

2016-7-20 09:07 上传

可以看到转换出来的结果是-648,然

后根据说明书给出的公司计算,得到Ax = -648/32768*16g=-0.316g。至此数据解析就完成了,同理可以算出Ay,Az和温度的数据。

如果使用单片机去解析数据,那么一定要注意数据的强制转换,先将高字节强制转换为有符号的short类型,然后再左移8位,然后再与低字节或,这样才能得到有正负符号的数据。

比如已经将找好包头的数据放置到ucRxBuffer这个数组里面了,然后就可以用下面的方法进行转换。

Ax = (((short)ucRxBuffer[3]<<8)|ucRxBuffer[2])/32768.0*16.0;

或者使用结构体内存拷贝的方法:

先定义一个加速度包的结构体

struct SAcc

{

short a[3];

short T;

};

再定义一个结构体对象

struct SAcc               stcAcc;

再用内存拷贝将数据从ucRxBuffer[2]的地址拷贝到结构体中即可。

memcpy(&stcAcc,&ucRxBuffer[2],8);

这样得到的数据是具有符号的-32767~32768之间的数据,如果还需要将数据映射到加速度的量程范围

A[0]=  stcAcc.a[0]/32768.0*16.0;

这样就获得了正确的加速度值。

同理可以获得角速度与角度数值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值