QMC5883L 坐标系Z轴是垂直于芯片平面向下(芯片朝上时指向地面)还是垂直于芯片平面向上(芯片朝上时指向天空)
先说规则:磁力线与坐标轴方向相同为正值,磁力线与坐标轴方向相反为负值。
根据 QMC5883L 的官方数据手册(以QST QMC5883L数据手册为例),其坐标系定义如下:
✅ 官方定义
QMC5883L 的 Z 轴正方向定义为:
垂直于芯片平面向上(芯片朝上时指向天空)
图示说明
当芯片文字面朝上水平放置时:
┌───────────────┐
│ │
│ QMC5883L │ ← 芯片文字面(朝上)
│ │
└───────────────┘
↑ Z-axis (+)
│
指向天空
物理验证(北半球)
地球磁场方向:北半球磁场线斜向下指向地面
传感器方向:
Z轴正方向指向天空
磁场实际方向指向地面
输出结果:
// 北半球典型读数
int z = compass.getZ(); // 输出负值(如 -450 mG)
因为磁场方向与Z轴正方向相反,所以输出负值
关键数据手册截图
在QMC5883L数据手册的"Coordinate System"部分明确说明:
"The positive Z-axis is directed outward from the top side of the package"
(正Z轴方向从芯片封装顶部向外延伸 → 指向天空)
实测验证代码
#include <QMC5883LCompass.h>QMC5883LCompass compass;void setup() {Serial.begin(9600);compass.init();// 设置传感器方向(芯片朝上)compass.setOrientation(0); // 0 = 默认方向
}void loop() {compass.read();int x = compass.getX();int y = compass.getY();int z = compass.getZ(); // 重点观测值Serial.print("Z: ");Serial.print(z);// 北半球正常判断if(z < 0) {Serial.println(" (正常:芯片朝上,Z指向天空)");} else {Serial.println(" (异常:可能芯片倒置或未校准)");}delay(1000);
}
不同安装方向的Z值符号
安装方向 | Z轴物理方向 | 北半球输出 | 原因 |
---|---|---|---|
芯片朝上 | 指向天空 | 负值 | 磁场向下,与Z轴反向 |
芯片朝下 | 指向地面 | 正值 | 磁场向下,与Z轴同向 |
垂直安装 | 水平方向 | ≈0 | 主要感应水平分量 |
常见误解澄清
为什么很多项目显示正值?
开发者常在软件层对Z值取反:
z = -raw_z,
开发者可能在软件层对原始值取反(z = -raw_z;
),使“向下为正”更符合北半球磁力线朝地面这种物理直觉;
库函数可能自动转换(如QMC5883LCompass库默认不转换)
// 获取真实物理方向(北半球)
int raw_z = compass.getZ(); // 原始值(通常为负)
float true_z = -raw_z; // 转换为向下为正的值// 计算总磁场强度(需统一方向)
float B = sqrt(x*x + y*y + true_z*true_z);
📌 最佳实践:
在代码注释中明确说明坐标系定义,并在数据处理时保持方向一致性:
*"QMC5883L Z-axis: positive = upward, convert to downward-positive for physics calculations"*