ST意法半导体
直播中

李俊

8年用户 1399经验值
私信 关注
[问答]

如何正确地将原始数据格式转换为加速度计/陀螺仪的本机单位?

嗨,对于这可能是一个非常基本的问题提前道歉。我是一名临床生理学家,试图对这个单元进行编程,以记录对运动障碍患者的实验。
我已经使用一些简单的 matlab 命令通过 BLE 协议连接到设备以连接到 WeSU 特征 + 服务。这是我所在的位置:
%%%
device = ble('WeSU')
chr =特征(设备,“00000000-0001-11E1-9AB4-0002A5D5C51B”,“00E00000-0001-11E1-AC36-0002A5D5C51B”)
X = 读取(字符);
ACC = typecast(uint8(X([2:3])),'uint16');
%%%
在哪里
X = [ 192 3 65 0 9 0 237 3 19 0 15 0 156 255 233 255 207 254 241 1]
我知道我正在尝试转换为本机单位,但我对数据表的了解还不足以让我继续前进!“ACC...”行是我的猜测,但没有成功。
(A) 我是否订阅了正确的特征?
(B) 如何正确地将原始数据格式转换为加速度计/陀螺仪的本机单位?
任何帮助(或指向过去讨论的指针)将不胜感激!


回帖(1)

李娟

2022-12-23 14:31:13
仅供遇到此问题的其他人使用——我有一个解决方案:
(1) 连接设备及设置特性:


  • WESU = ble("WeSu");
  • chr = characteristic(WESU,"00000000-0001-11E1-9AB4-0002A5D5C51B","00E00000-0001-11E1-AC36-0002A5D5C51B");


我们正在连接“00E00000-0001-11E1-AC36-0002A5D5C51B”特性,它是运动传感器的集合。它遵循这种形式:

(2)读入数据:


  • X = read(chr)';
  • % where:
  • X' =     [73     4   246   255   156     3   182     1   214   255   136     1    18   254    30     0   201   254   194     1]

(3) 如上图所示,我们需要访问加速度计的字节 2-7,并将 MATLAB 读入的原生无符号 8 位整数(“unit8”)转换为带符号的 16 位整数(“int16”):


  • XYZ = double(typecast(uint8(X(3:8)),'int16'));

(4) 最后,按照上面 Eleon 评论中有用的公式转换为工程单位:


  • XYZ = (XYZ.*61)/1000;

你可以看到下面的输出:
举报

更多回帖

发帖
×
20
完善资料,
赚取积分