You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ADXL345原始加速度值转m/s²:Zephyr代码公式疑问解析

ADXL345 ±16G量程下加速度转换:手动计算与Zephyr代码差异解析

为什么Zephyr代码里要除以32?

ADXL345在±16G量程下,10位分辨率对应的满量程范围是32G(从-16G到+16G),总共有2^10=1024个LSB。因此每个LSB对应的加速度值是:

32G / 1024 = 0.03125G/LSB = 31.25mg/LSB

这里的0.03125是1/32的精确值,也就是说1G = 32 LSB。Zephyr代码的转换逻辑是先把采样值(LSB单位)转成G值,再乘以标准重力加速度的微m/s²数值(SENSOR_G=9806650LL,对应9.80665m/s²),公式拆解后就是:

加速度(微m/s²) = 采样值 × (9806650 微m/s²/G) × (1G/32 LSB) = 采样值 × 9806650 / 32

除以32本质是利用1G与LSB的精确对应关系,用整数运算实现高效转换——这在嵌入式系统中能避免浮点数计算带来的性能开销。

手动计算与Zephyr代码的精度差异

你的手动计算和Zephyr逻辑的误差来自两个近似值的使用:

  1. LSB换算值:你用了文档标注的31.2mg/LSB,而芯片实际精确值是31.25mg/LSB(由32G/1024LSB推导得出);
  2. 标准重力加速度:你用了近似值9.81m/s²,Zephyr则采用更精确的9.80665m/s²(对应9806650LL微m/s²)。

以采样值36为例:

  • 手动计算结果:36×31.2mg=1123.2mg=1.1232G ×9.81=11.0186 m/s²
  • Zephyr代码计算结果:36×9806650/32=11032481.25微m/s²=11.0325 m/s²

两者的绝对误差约为0.0139m/s²,相对误差约0.126%,误差完全来自上述两个近似值的偏差。

总结

Zephyr的转换公式是基于ADXL345±16G量程下的精确LSB对应关系设计的,用整数运算保证嵌入式系统的执行效率;你的手动计算因使用了文档近似的LSB值和简化的重力加速度,结果存在微小偏差。如果要和Zephyr结果完全对齐,手动计算时应采用31.25mg/LSB和9.80665m/s²的精确值。

内容的提问来源于stack exchange,提问作者bielu000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:15:56