MLX90393 3-Axis Magnetic Field Sensor

MLX90393 三轴磁场传感器模块资料

适用于 Arduino / 3D 位置检测 / 角度测量 / 位移传感项目的三轴霍尔传感器资料页。本店这款紫色模块按 3.3V 模块使用,3.3V/SDA/SCL 都不能接 5V。下面依次讲:使用前提醒、引脚、接线、I2C 地址、示例代码、模块损坏原因和万用表排查。

更新于 2026-08-15

模块类型 三轴磁场传感器
主控芯片 Melexis MLX90393
3.3VVDD 2.2~3.6V
3 轴X/Y/Z 磁场
16bit每轴输出

芯片参数来自 Melexis MLX90393 数据手册 Revision 012(2025-11-18),代码 API 对照 Adafruit MLX90393 库 v2.0.5。不同模块引脚顺序可能不同,实际以板子丝印为准。

MLX90393 数字三维霍尔传感器模块

淘宝 SKU:R2303

SKU R2303
进入淘宝购买

Overview

模块介绍

MLX90393 是 Melexis 公司推出的一款三轴霍尔效应磁场传感器芯片,可以同时测量 X、Y、Z 三个方向的磁场强度。它通过 I2C 或 SPI 与单片机通信,每轴输出 16 位分辨率数据,常用于 3D 位置检测、旋转角度测量、线性位移检测、游戏摇杆、无接触旋钮等应用。

三轴同时测量

不同于普通单轴霍尔开关,MLX90393 可以同时读取 X、Y、Z 三轴磁场值(单位 µT),适合 3D 位置和方向检测。

I2C 通信

常见模块使用 I2C 接口。Arduino UNO/Nano 连接 SDA=A4、SCL=A5,默认 I2C 地址为 0x0C。

3.3V 模块,不要接 5V

MLX90393 芯片 VDD 正常工作范围 2.2V~3.6V。本页这款紫色模块按 3.3V 模块使用,3.3V/VCC 脚不能接 5V,SDA/SCL 也不能上拉到 5V。

Before You Start

⚠ 使用前重要提醒

这一段是本页最重要的内容。绝大部分"模块不识别 / 发热 / 换一块又坏"的售后,原因都在下面这 8 条里。

接线通电之前,先看完这 8 条

  1. 本页面这款紫色 MLX90393 模块按 3.3V 模块使用。
  2. MLX90393 芯片正常 VDD 工作范围为 2.2V~3.6V。
  3. 不要把模块 3.3V/VCC 接到 5V。
  4. SDA、SCL 等数字接口同样属于低压 IO,不要外接上拉到 5V。
  5. 如果主控或同一条 I2C 总线上的其他模块带有 5V 上拉,必须先确认电平,必要时使用双向电平转换。
  6. 必须断电接线,确认接线正确以后再上电。
  7. 不建议带电插拔 SDA、SCL、VCC、GND 杜邦线。
  8. 芯片属于静电敏感器件,操作时尽量不要用手直接触摸芯片和金属引脚。
  • 3.3V ONLY
  • 禁止 5V
  • 禁止带电插拔

Quick Start

两分钟跑通

第一次拿到模块,按下面四步走一遍,串口就能刷出三轴读数。

  1. 确认供电脚。模块接 Arduino 的 3.3V 脚,不是 5V。板子上这两个孔挨着,这一步值得多看一眼。
  2. 接四根线,全程断电。3.3V→3.3V、GND→GND、SDA→A4、SCL→A5。接好检查一遍再上电,不要带电一根一根插。
  3. 用本页的示例代码。网上不少 MLX90393 老例程在现在的 Adafruit 库里编译不过,本页这段是实际编译验证过的。串口波特率 115200。
  4. 看现象。串口出现 Found a MLX90393 sensor 就通了。拿块小磁铁靠近,X/Y/Z 三个数明显变化、拿开回到原值,说明模块工作正常——这和我们出厂功能测试看的是同一件事。

没扫到地址的话

先用 I2C Scanner 扫一遍。扫到 0x0C 是默认值;扫到 0x0D~0x0F 说明 A0/A1 被改过;扫到 0x10 以上说明芯片是别的 Ordering Code 版本(见芯片版本说明),把地址传进 sensor.begin_I2C(0x??) 即可,都是正常情况。

更细的电压和电平确认方法,见万用表快速排查。

Pinout

产品实物 / 引脚说明

下表按本款紫色开发板的实物丝印整理。普通 I2C 测试只需要 3.3V、GND、SDA、SCL 四根线,其余引脚可以先不接。

MLX90393 三轴磁场传感器模块实物图,紫色 PCB,两侧丝印 CS/MISO/MOSI/SCLK/3.3V/GND 与 TRIG/INT/SCL/SDA/3.3V/GND,附两条 6P 排针

模块实物。芯片旁边的 X / Y / Z 小图标是三轴方向标记,判断磁铁方向时按它来。板上电源丝印直接写的是 3.3V,不是 VCC——板子自己就告诉你该接 3.3V。
排针是另配的,出厂不焊,需要自己焊上,或者用杜邦线直接接焊盘。

模块两侧各 6 个焊盘,每侧都有自己的 3.3V 和 GND(✓ 实拍确认):

左侧(SPI 那一排)

CS
MISO
MOSI
SCLK
3.3V
GND

右侧(I2C 那一排)

TRIG
INT
SCL
SDA
3.3V
GND
丝印功能普通 I2C 测试
3.3V3.3V 电源必接
GND地必接
SDAI2C 数据必接
SCLI2C 时钟必接
INT数据就绪 / 中断可不接
TRIG外部触发可不接
CSSPI 片选I2C 模式不接
SCLKSPI 时钟I2C 模式不接
MOSISPI 数据输入I2C 模式不接
MISOSPI 数据输出I2C 模式不接

两侧的 3.3V / GND 是不是内部连通?—— 待确认

实拍已经确认两侧各有一组 3.3V 和 GND 丝印,但走线在板子内层/丝印下面,从照片看不出来。在没有从 PCB 实物或原理图确认之前,本页不写死"两侧内部直接相连"。

接线时请只按您实际接的那一侧供电,不要默认另一侧也有电。需要用到两侧时,断电状态下用万用表通断档量一下两侧 3.3V 之间、两侧 GND 之间是否导通,一秒钟的事。

出厂是不焊排针的

从实拍可以看到,模块出厂时是拼板状态、焊盘为镀金过孔,没有焊排针。排针需要客户自己焊,或者用杜邦线/探针直接接触焊盘。

这一点很关键——出厂测试和客户第一次使用之间,中间多了一道「焊接」工序,这也是最容易出问题的一步。详见下面「为什么出厂测试是好的,到客户手里却用不了」。

Wiring

Arduino UNO / Nano 接线

自绘无水印示意图。基础测试先接 3.3V、GND、SDA、SCL 四根线,能扫到 I2C 地址后再跑例程。接线全程断电操作。

MLX90393 三轴磁场传感器模块接 Arduino UNO I2C 接线图

正确接线原则

✔ 推荐

3.3V → 3.3V
GND  → GND
SDA  → SDA
SCL  → SCL

先断电接好 → 检查 → 再通电

✘ 禁止

5V → 模块 3.3V
SDA/SCL 上拉到 5V
带电插拔
VCC/GND 反接
A0/A1 未断开默认 GND
        就直接焊 3.3V
MLX90393 模块Arduino UNO / Nano说明
3.3V3.3V(不是 5V)芯片 VDD 工作范围 2.2V~3.6V,本模块按 3.3V 模块使用。
GNDGND必须共地。
SDAA4 / SDAI2C 数据线。不要另外上拉到 5V。
SCLA5 / SCLI2C 时钟线。不要另外上拉到 5V。
INT / TRIG不接可选的数据就绪 / 外部触发脚,基础测试先不接。
CS / SCLK / MOSI / MISO不接SPI 接口,走 I2C 时不需要。
A0 / A1按模块默认I2C 地址选择脚。默认 A0=GND、A1=GND,地址为 0x0C。

Arduino UNO / Nano 是 5V 单片机,但不代表什么都能直接接

Arduino UNO / Nano 可以使用板上的 3.3V 电源脚给本模块供电,I2C 接线仍然是 SDA → A4/SDA、SCL → A5/SCL。这一点没问题。

但是必须特别注明:不要另外把 SDA/SCL 上拉到 5V。UNO 板本身不带 I2C 上拉电阻,绝大部分情况直接接就行;问题出在总线上的第三方设备——如果 I2C 总线上还连接了其他 5V 设备、传感器扩展板或 I2C 扩展板,它们可能自带上拉到 5V 的电阻,这时整条总线的高电平就是 5V,本模块的 SDA/SCL 会跟着被拉到 5V。

所以:总线上挂了别的东西,先按下面「万用表快速排查」量一下 SDA/SCL 空闲高电平。不确定时建议增加双向 I2C 电平转换(例如 TXS0102 一类的模块,参见本站 TXS0102 电平转换资料页)。

A0 / A1 地址焊盘不要直接点焊 3.3V

当前紫色板 A0、A1 默认通过细铜皮接到 GND,所以默认地址是 0x0C。如果客户没有先切断默认接 GND 的细线,直接把 A0/A1 点焊到 3.3V,会等于把 3.3V 和 GND 短接,模块会短路、发热,甚至损坏。

普通测试建议保持默认地址 0x0C,不要改焊盘。确实要改地址时,必须先确认板上 A0/A1 默认连线,并按焊盘设计先断开 GND 默认连接,再接到 3.3V。

I2C Address

I2C 地址说明

本款模块 A0、A1 默认接 GND,默认 I2C 地址是 0x0C。地址的低 2 位由 A0、A1 引脚电平决定,下表中 0 表示接 GND,1 表示接 VDD。

A1 电平A0 电平I2C 地址(7-bit)备注
0 (GND)0 (GND)0x0C默认出厂地址,最常见
0 (GND)1 (VDD)0x0D
1 (VDD)0 (GND)0x0E
1 (VDD)1 (VDD)0x0F

如果扫不到 I2C 地址,先用 Arduino I2C Scanner 排查接线。Adafruit 库默认使用 MLX90393_DEFAULT_ADDR(0x0C),如果模块地址不同需要在代码里修改。

芯片版本说明:不是所有 MLX90393 都在 0x0C~0x0F

MLX90393 的 7 位 I2C 地址里,高 5 位由芯片出厂的 Ordering Code(订购代码)决定,只有低 2 位是 A0/A1 引脚控制的。Melexis 数据手册 Revision 012 的「I2C address ordering codes」表列出了这些版本:

订购代码EE_I2C_ADDR[4:0]可能的 7 位 I2C 地址
MLX90393xLW-ABA-011-RE0x030x0C, 0x0D, 0x0E, 0x0F
MLX90393xLW-ABA-012-RE0x040x10, 0x11, 0x12, 0x13
MLX90393xLW-ABA-013-RE0x050x14, 0x15, 0x16, 0x17
MLX90393xLW-ABA-014-RE0x060x18, 0x19, 0x1A, 0x1B
MLX90393xLQ-ABA-011-RE(UTDFN 封装)0x040x10

这张表怎么用

不要把"所有 MLX90393 永远都是 0x0C~0x0F"当成绝对结论。客户手里如果是别处买的板子,或者芯片版本不同,扫出 0x18 一类的地址也是正常的,不是坏件。

所以:优先以本款模块实际芯片版本和 I2C Scanner 扫描结果为准。扫到什么地址,就把示例代码里的 sensor.begin_I2C(0x0C) 改成什么地址。

本店这款紫色模块出厂配的是 ABA-011 版本(0x0C~0x0F),A0/A1 默认接 GND,所以接线部分写默认地址 0x0C。芯片具体订购代码以来料批次为准,⚠ 待与来料实物再核对一次。

改地址前必须先断开默认 GND

A0/A1 默认是接 GND 的,不是悬空焊盘。不要在没切断默认 GND 连线的情况下,直接把 A0/A1 点焊到 3.3V。这样会造成 3.3V 与 GND 短路。

Library

Arduino 库安装

本页代码使用 Adafruit 官方的 Adafruit MLX90393 库。装库之前请先把上面的接线检查一遍。

  1. 打开 Arduino IDE → 工具 → 管理库…(库管理器)。
  2. 搜索 Adafruit MLX90393,选 Adafruit 出的那个,点安装。本页代码按 v2.0.5 校对。
  3. IDE 会提示一起安装依赖库,选「Install all」全部装上:Adafruit BusIO、Adafruit Unified Sensor、Adafruit SSD1306(最后一个是库里 OLED 例程用的,装上不影响)。
  4. 装完可以先打开官方例程看一眼:文件 → 示例 → Adafruit MLX90393 → basicdemo。本页下面的代码就是在这个例程基础上加了中文注释和接线说明。
  5. 选好开发板和串口,上传后打开串口监视器,波特率设为 115200。

Arduino Examples

已验证的 Arduino 示例代码

读取三轴磁场数据并通过串口输出。这段代码已用 arduino-cli 对 Arduino UNO 实际编译通过(Adafruit MLX90393 库 v2.0.5),不是照着记忆写的。

接线:3.3V→3.3V、GND→GND、SDA→A4、SCL→A5。断电接好再上电。

串口:打开串口监视器,波特率设为 115200。

默认地址:库里的宏是 MLX90393_DEFAULT_ADDR,值为 0x0C。begin_I2C() 不传参数时就用它。模块地址不同时,改成 sensor.begin_I2C(0x0D) 这样传入即可。

分辨率要按 X/Y/Z 三个轴分别设置,库里没有一次设置三轴的写法,也没有 MLX90393_RES_19_0 这个枚举。可用的只有 MLX90393_RES_16 / _17 / _18 / _19。

验证状态:✓ 已实际编译通过 —— arduino-cli compile --fqbn arduino:avr:uno,库版本 v2.0.5,占用 Flash 10682 字节(33%)、RAM 1260 字节(61%),UNO 装得下。串口实测读数待本店实物补测后回填。

/// MLX90393 三轴磁场传感器 Arduino I2C 示例
/// 依据 Adafruit MLX90393 库 v2.0.5 官方例程 basicdemo 校对
///
/// 接线(本模块是 3.3V 模块,不要接 5V):
///   模块 3.3V → Arduino 3.3V     模块 GND → Arduino GND
///   模块 SDA  → A4 / SDA         模块 SCL → A5 / SCL
/// 断电接好线,检查无误后再上电。

#include <Adafruit_MLX90393.h>

Adafruit_MLX90393 sensor = Adafruit_MLX90393();

void setup() {
  Serial.begin(115200);
  while (!Serial) { delay(10); }   // 等待 USB 串口就绪

  Serial.println("Starting MLX90393 Demo");

  // 不传参数时使用库里的默认地址 MLX90393_DEFAULT_ADDR = 0x0C
  // 如果 I2C Scanner 扫到的是别的地址,改成 sensor.begin_I2C(0x0D) 这样传入
  if (!sensor.begin_I2C()) {
    Serial.println("No sensor found ... check your wiring?");
    while (1) { delay(10); }
  }
  Serial.println("Found a MLX90393 sensor");

  // 增益:可选 MLX90393_GAIN_1X / 1_33X / 1_67X / 2X / 2_5X / 3X / 4X / 5X
  sensor.setGain(MLX90393_GAIN_1X);

  // 分辨率必须按 X / Y / Z 三个轴分别设置
  // 可选枚举只有 MLX90393_RES_16 / _17 / _18 / _19(库里没有 RES_19_0 这种写法)
  sensor.setResolution(MLX90393_X, MLX90393_RES_17);
  sensor.setResolution(MLX90393_Y, MLX90393_RES_17);
  sensor.setResolution(MLX90393_Z, MLX90393_RES_16);

  // 过采样:MLX90393_OSR_0 ~ MLX90393_OSR_3,数值越大越慢越稳
  sensor.setOversampling(MLX90393_OSR_3);

  // 数字滤波:MLX90393_FILTER_0 ~ MLX90393_FILTER_7,数值越大越平滑
  sensor.setFilter(MLX90393_FILTER_5);
}

void loop() {
  float x, y, z;

  // 注意:readData 的三个参数是指针,必须写 &x, &y, &z
  if (sensor.readData(&x, &y, &z)) {
    Serial.print("X: "); Serial.print(x, 4); Serial.print(" uT\t");
    Serial.print("Y: "); Serial.print(y, 4); Serial.print(" uT\t");
    Serial.print("Z: "); Serial.print(z, 4); Serial.println(" uT");
  } else {
    Serial.println("Unable to read XYZ data from the sensor.");
  }

  delay(500);
}

Expected Output

正常运行结果说明

上传成功以后,串口监视器(115200)应该是下面这个样子。对不上就往下看排查段。

Starting MLX90393 Demo
Found a MLX90393 sensor
X: -12.6120 uT	Y: 30.4920 uT	Z: -41.4400 uT
X: -12.4560 uT	Y: 30.3360 uT	Z: -41.2840 uT
X: -12.7680 uT	Y: 30.6480 uT	Z: -41.5960 uT

(上面是示意格式,具体数值每个人都不一样,取决于您所在位置的地磁方向和模块摆放角度,不是故障。)

怎么算"通了"

看到 Found a MLX90393 sensor,说明 I2C 已经通了,地址也对。这一行没出来就是接线或地址问题,不用往下调参数。

数值大概什么范围

屋里没有磁铁时,三轴读数一般是几十 µT 量级(地球磁场大约 25~65 µT)。数字有小幅跳动是正常的。

最简单的验证动作

拿一块小磁铁慢慢靠近传感器,X/Y/Z 三个数应该明显变化,拿开后回到原来的水平。会变就说明模块是好的。

Factory vs. Customer

出厂是怎么测的

这是我们被问得最多的一句话。答案不是"运气不好",而是出厂测试环境和客户的桌面环境,中间隔着五道工序。下面先讲我们怎么测,再讲中间差了什么。

我们出厂是怎么测的

MLX90393 模块出厂 I2C 测试实拍:探针治具压在模块焊盘上,I2C 测试器显示 OK

出厂测试实拍:探针治具压在模块焊盘上,I2C 测试器扫到芯片就显示 OK 并累加计数(图中 T:8 是已测通过的片数);扫不到就显示「未接 / NO RESPONSE / CHECK MODULE」,这一片会被挑出来。这是第一步(I2C 扫描),确认芯片活着、地址对、焊接通;扫过之后还有第二步功能测试,见下。

  • 模块还在拼板上,没有分板、没有焊排针。
  • 用探针(顶针)治具直接压在 3.3V、GND、SDA、SCL 四个焊盘上,压一下测一片。
  • 治具电源是固定的 3.3V,I2C 测试器本身也是 3.3V 电平,没有 5V 出现的可能。
  • 全程压接、不焊接、不带电插拔,探针一抬就断开。
  • 能扫到 I2C 地址才算 OK,扫不到当场挑出来。

第二步:功能测试——真的读三轴磁场,不只是扫地址

扫到地址只能说明芯片活着。所以还有第二步:用 ESP32 + 2.8 寸屏做的测试器把三轴磁场值和合成磁场 |B| 直接显示出来,再拿磁铁靠近看数值跟不跟着变。

MLX90393 出厂功能测试:静止状态读数 X -8.10 Y -25.80 Z 11.37,合成磁场 29.34 µT

静止(只有地磁场):found OK,I2C 0x0C,
X -8.10 / Y -25.80 / Z 11.37,|B| = 29.34 µT

MLX90393 出厂功能测试:磁铁靠近后读数变为 X 19.05 Y -466.80 Z 484.97,合成磁场 673.39 µT

磁铁靠近:X 19.05 / Y -466.80 / Z 484.97,
|B| = 673.39 µT——三轴跟着磁铁明显变化

出厂功能测试实录(24 秒,无声)。磁铁由远及近,X/Y/Z 三轴和合成磁场 |B| 连续跟着变,磁铁贴近时 |B| 超过 1400 µT,拿开回落到地磁场量级。这段是判断模块好坏最直观的依据。

上面两张图说明了两件事:

  • 静止读数落在地磁场量级。地球磁场大约 25~65 µT,测出来 29.34 µT 正好在范围内——说明磁场前端工作正常、量程和换算都对,不是随便返回一个数。
  • 磁铁靠近,三轴跟着变,|B| 从 29 µT 涨到 673 µT。这证明三个轴都真的在感应磁场,不是某一轴死了或者读数卡住。

✔ 出厂逐片测过的

  • 芯片是活的,I2C 能被点名
  • I2C 地址正确(0x0C)
  • 四个焊盘焊接良好,不短路
  • 三轴磁场读数正常,静止值落在地磁场量级
  • 磁铁靠近数值跟随变化,三个轴都在工作

✘ 出厂测试不覆盖的

  • 全温度范围(-20~85 °C)的精度
  • 长时间连续工作的稳定性
  • SPI 接口(出厂只走 I2C)
  • 逐片标定精度(这是 Melexis 晶圆级出厂指标)

也就是说:「能用、读数对」这一层是逐片测过的;更细的精度指标属于芯片本身的出厂标定,模块这一层不复测。

所以准确的说法是:出厂那次测试把「供电、电平、接触」三个变量锁死了,并且确认了芯片能读出正确的三轴磁场。客户桌面上恰恰相反——这三个变量全是打开的。

客户自己复现这个测试只要一分钟

跑本页的示例代码,串口能刷出三轴读数、静止时 X/Y/Z 平方和开根号在 25~65 µT 附近,拿块小磁铁靠近看数值明显变化、拿开回到原值——看到这个现象,就和我们出厂那一步测的是同一件事,模块是好的。

出厂测试器的固件,开源给你用

上面那台测试器不是什么专用设备,就是一块 ESP32-2432S028R(2.8 寸黄屏 / CYD)加我们自己写的固件。固件源码打包放在下面,客户可以直接拿去自测——烧进去、接四根线,屏幕上就有三轴读数,不用写一行代码。

MLX90393 三轴磁场测试器固件(PlatformIO 工程) 含 src/main.cpp、platformio.ini(屏幕参数已写进 build_flags,不用改 TFT_eSPI 的 User_Setup.h)、中文 README.md(接线、正常现象、故障判断)。4 KB。
下载源码包
MLX90393 模块ESP32-2432S028R(黄屏)说明
3.3V3.3V接板上丝印「温度和湿度接口」那排排针(CN1)
GNDGND
SDAIO27
SCLIO22

代码里有两个坑值得一提,都写在注释里了:① MLX90393 刚上电首帧 I2C 偶发不稳,所以 begin_I2C() 做了 5 次重试——一次失败就报错的写法会把好模块误判成坏的;② CYD 这块屏按 ST7789 初始化后颜色会反相,必须显式 tft.invertDisplay(false)。

黄屏本身的资料看这里:ESP32 2.8 寸黄屏;想要一台通用的 I2C 扫描器,看 黄屏 I2C 测试器。

中间差了哪五道

环节我们出厂时客户拿到后风险
1. 焊接 不焊,探针压焊盘 要自己焊排针 烙铁高温、烙铁漏电、焊锡连锡、虚焊、焊台没接地带静电
2. 供电 治具固定 3.3V 自己插 Arduino 排母 插到 5V 上——3.3V 和 5V 两个孔挨着,是最高频的一种错
3. I2C 电平 测试器就是 3.3V 接自己的总线 总线上别的 5V 模块自带上拉,把 SDA/SCL 拉到 5V
4. 上电顺序 压接,一次成型 一根一根插杜邦线 带电插拔:传感器还没供电,SDA/SCL 已经有高电平,电流从数字口倒灌
5. 静电与搬运 整版、拿板边、当场测完入袋 拆袋、掰板、上手摸芯片 人体静电(ESD)、掰板应力、金属焊盘被反复摸

退回来的板子里,大多数其实是好的

在真正电气损坏之前,先排除下面三种"模块其实是好的"的情况。按我们的售后经验,大部分退回来的板子属于这一类。

① 代码不对,不是模块不对

常见:从旧教程复制的代码
      根本编译不过

网上不少 MLX90393 例程用的是老写法,比如一次性设置三轴分辨率的 setResolution(MLX90393_RES_19_0)、默认地址宏写成 MLX90393_I2CADDR_DEFAULT、或者 readData(x, y, z) 不加取地址符。这三种在现在的 Adafruit 库里都不存在,编译时会直接报 was not declared in this scope 和 no matching function(我们实际编译验证过),跟模块好坏没有任何关系。请直接用本页的示例代码,那段是编译通过的。

② 地址不是 0x0C

扫到 0x0D / 0x18 …
不是坏件

MLX90393 的 I2C 地址高 5 位由芯片出厂版本决定。扫到别的地址属于正常,把地址传进 begin_I2C() 就能用。详见芯片版本说明。

③ 焊点没连上,不是芯片的事

虚焊 / 连锡 / 排针没焊透

出厂是探针直接压焊盘,接触一定是好的;客户焊上排针以后,接触靠的是焊点。虚焊会表现成"时好时坏、动一下就断",很像模块坏了。断电用万用表通断档量一下排针针脚到板上焊盘是否导通,一量就知道。

什么情况才需要返修

排除上面三种以后,如果还是不识别,那就要按电气损坏来查了。原因基本逃不出下面这一节的四条——接 5V、SDA/SCL 被拉到 5V、带电插拔、静电。

一句话总结

出厂那一刻模块是好的,这一点由探针测试保证。之后它要经历焊接、接线、上电三关,这三关全部由 3.3V 这个前提兜着。只要 3.3V 这个前提被破坏(电源插到 5V、总线被 5V 上拉、带电插拔),模块就会在客户手里坏——而且往往是第一次上电那几秒就已经坏了,客户看到的现象只是"一拿到就不能用"。

  • 先看代码
  • 再看电压
  • 最后才怀疑板子

Failure Causes

必须避开的四种接法

MLX90393 不是"很容易坏"的芯片,它是低压器件 + 静电敏感器件。只要电压和操作方式对,正常使用不会坏。下面这四条是实际会造成损坏的风险点,按发生频率排序。

1. 电源接到 5V

MLX90393 VDD 正常范围 2.2~3.6V,绝对最大值为 4V(数据手册 Revision 012 表 5 Absolute Maximum Ratings:VDD_MAX = −0.3 ~ 4 V)。手册原文写明:超过绝对最大额定值可能造成永久性损坏("Exceeding the absolute maximum ratings may cause permanent damage.")。

5V 已经超过 4V 这个绝对最大值。所以本款模块的 3.3V 引脚禁止接 Arduino 5V。

2. SDA / SCL 被上拉到 5V

即使模块供电已经是 3.3V,也不能忽略 SDA、SCL 电平。MLX90393 的数字 IO 工作在独立的 VDD_IO 电源域,数字接口电压不能简单认为"5V 兼容"。手册表 5 给出的是 VDD_IO_MAX = −0.3 ~ min(4, VDD+0.3) V——也就是说 IO 的上限跟着 VDD 走,VDD 是 3.3V 时 IO 绝对最大只到 3.6V 左右,离 5V 差得很远。

如果其他模块、主控扩展板或者外部上拉电阻把 SDA/SCL 拉到 5V,存在损坏风险。

普通测试建议

  • 模块供电:3.3V
  • SDA/SCL 上拉:3.3V
  • 不确定总线电平时,先用万用表测量 SDA/SCL 空闲高电平

如果测到接近 5V,先断电排查,不要继续测试。

3. 带电插拔

主控已经通电时,不要一根一根插 VCC、GND、SDA、SCL。

推荐操作顺序

主控断电 → 完成全部接线 → 检查 → 再通电

尤其不要出现传感器还没供电、但 SDA/SCL 已经有高电平的情况——这时电流会从数字口倒灌进芯片,是最容易出隐性损伤的一种接法。这也是"接了几次以后模块时好时坏"的常见来源。

4. 静电 ESD

MLX90393 属于静电敏感半导体器件。数据手册第 20 节 ESD Precautions 原文就一句话:半导体产品对静电放电敏感,操作时始终要遵守防静电控制流程。

Melexis 数据手册给出的 ESD 测试等级包括:

项目测试标准等级
ESDHBM(人体模型)AEC-Q100-0022.5 kV
ESDCDM(器件充电模型,QFN)AEC-Q100-011-B750 V

这里说明这是器件的标准 ESD 测试指标,不代表可以随意进行静电接触测试。这两个数字是芯片出厂做认证时按标准波形打的,跟日常生活中随手一摸的静电不是一回事,不能当成"能扛 2.5kV 静电"来用。

实际操作建议

  • 批量焊接或测试时使用防静电措施(防静电手环、防静电台垫)
  • 拿板前先释放人体静电(先摸一下接地的金属物件)
  • 尽量拿 PCB 边缘
  • 不要反复用手摸芯片、SDA/SCL 等金属焊盘
  • 暂时不用的模块放入防静电袋

附:芯片手册的 I2C 推荐应用电路

Melexis 数据手册 Revision 012 第 17 节「Recommended Application Diagram」的 I2C 推荐应用电路中:

项目手册推荐值
SDA 上拉上拉到 VDDIO
SCL 上拉上拉到 VDDIO
上拉电阻 R1 / R210 kΩ
VDD 去耦电容 C10.1 µF
VDDIO 去耦电容 C20.1 µF
手册标注的 VDDIO 范围1.71 V ~ VDD

这张表最重要的一行

上拉目标是 VDDIO,不是 5V。手册自己把 VDDIO 的上限写成 VDD——VDD 最高才 3.6V,所以从芯片设计的角度,SDA/SCL 就没有 5V 这个选项。

说明:这是芯片级推荐应用电路说明,不要因此擅自修改当前产品 PCB 参数,只作为技术说明。本模块 PCB 上实际用的上拉电阻阻值、是否有去耦电容,待确认——没有从实物或原理图量过之前,本页不写死。

Diagnosis

万用表怎么量

模块出现"不识别、偶尔正常、换一块又坏"的情况时,按下面顺序走一遍。顺序不要跳,第 1 步必须先断电。

  1. 先全部断电。主控、模块、外接电源都断开。
  2. 检查 VCC 是否误接 5V。顺着红线看到底是插在 Arduino 的 3.3V 还是 5V 上。
  3. 检查 VCC/GND 是否反接。对着板子丝印再核一遍,不要凭杜邦线颜色判断。
  4. 检查 A0/A1 是否因为改地址造成 3.3V 和 GND 短路。万用表通断档,量 3.3V 脚对 GND 脚,正常情况下不应该直接导通(不应该一直响)。
  5. 正确接好后上电,测模块电源,应约为 3.3V。黑表笔搭模块 GND,红表笔搭模块 3.3V 脚。
  6. 测 SDA 对 GND 的空闲高电平。(空闲=程序没在跑 I2C 通信的时候)
  7. 测 SCL 对 GND 的空闲高电平。
  8. SDA/SCL 如果接近 5V,立即断电,检查总线上的 5V 上拉——通常来自另一块 5V 模块或 I2C 扩展板。
  9. 电平正确后再运行 I2C Scanner。

关于"电阻多少算坏"

本页不给「VCC-GND 电阻低于多少欧就是坏」的固定判断值。这个数字受板上电容、芯片内部结构、万用表档位影响,不同表测出来都不一样,按一个死数字判断很容易冤枉好板子。

如果需要判断短路,正确做法是:断电情况下,将故障板与一块确认正常的板进行阻值对比。两块板量出来差不多,就不是短路;故障板明显低很多(比如正常板几百 kΩ、故障板只有几欧),才有短路嫌疑。

FAQ

使用答疑

串口一直显示 "No sensor found ... check your wiring?" 怎么办?

这一句是没找到芯片,属于接线或地址问题,不用先去调增益滤波那些参数。按顺序查:

  1. 供电:芯片工作电压 2.2V~3.6V,确认接的是 3.3V 而非 5V。上电后用万用表量一下模块 3.3V 对 GND,应该约 3.3V。
  2. 接线:SDA→A4、SCL→A5、GND 共地,杜邦线是不是松了、母头是不是没插到底。
  3. 地址:用 I2C Scanner 扫一下,看扫到的是不是 0x0C。扫到 0x0D/0x0E/0x0F 说明 A0/A1 被改过;扫到 0x10 以上说明芯片是别的 Ordering Code 版本(见上面「芯片版本说明」),把地址传进 sensor.begin_I2C(0x??) 即可。
  4. 什么都扫不到:整条总线都没响应,重点查 GND 有没有共地,以及 SDA/SCL 有没有接反。
读数全是 0 或者数值跳来跳去?

先拿一块小磁铁靠近传感器,看数值有没有变化。如果完全无变化,检查 I2C 通信是否正常。如果数值抖动大,检查周围是否有电机、继电器、开关电源等强干扰源,并尝试调低增益或增加滤波。

客户改 A0/A1 地址后模块短路怎么办?

先断电。当前模块 A0/A1 默认通过细铜皮接 GND,如果没有先切断默认 GND 连接,直接点焊 3.3V 就会短路。请检查 A0/A1 焊盘是否把 3.3V 和 GND 连在一起,普通测试建议恢复默认地址 0x0C。

能不能用这个模块检测磁铁位置或角度?

可以。MLX90393 输出三轴磁场值(单位 µT),通过数学换算可以得到磁铁的相对位置或角度。但具体算法(如 atan2、三角定位)需要客户自行实现,不同磁铁和安装方式结果不同,这方面属于应用开发而非模块故障。

5V Arduino 能直接接吗?

不能把模块的 3.3V/VCC 接到 5V。本页这款紫色模块按 3.3V 模块使用。Arduino UNO/Nano 板上都有 3.3V 输出脚,用板上的 3.3V 脚给模块供电即可,I2C 还是接 A4/A5。

另外提醒一句:SDA/SCL 也不要另外上拉到 5V。如果同一条 I2C 总线上还挂了其他 5V 设备或扩展板,请先按上面「万用表快速排查」量一下 SDA/SCL 的空闲高电平,接近 5V 就要加双向电平转换。

模块通电后明显发热怎么办?

正常 MLX90393 属于低功耗器件(手册标称工作电流是 µA 到 mA 量级),不应该出现明显烫手。摸上去明显发热就说明有地方接错了,请按下面顺序处理:

  1. 立即断电。
  2. 检查是不是把 3.3V 接到了 5V。
  3. 检查电源是否反接(VCC 和 GND 接反)。
  4. 检查 A0/A1 修改地址时是否把 3.3V 和 GND 短接。
  5. 检查焊锡、杜邦线是否短路(虚焊连锡、金属针脚碰在一起)。
  6. 排除接线问题以后仍发热,不要继续反复通电,直接联系客服。

不要"多通电一会看看"。发热状态下每多通一次电,损伤都在加深,本来还能救的板子会彻底报废。

用手摸模块会不会把 MLX90393 弄坏?

正常拿 PCB 边缘通常不代表一定会损坏,但 MLX90393 属于 ESD 静电敏感半导体。

人在干燥环境、衣物摩擦、塑料桌椅等情况下可能积累静电,所以不建议反复直接触摸芯片和接口焊盘。批量测试、维修和焊接时建议做好防静电措施(防静电手环、防静电台垫、模块放防静电袋)。

拿强磁铁靠近会不会把芯片烧坏?

要分清两件事:磁场饱和和芯片电气烧坏,这是两回事,不要混为一谈。

强磁场可能使测量进入饱和区,造成读数到顶或失真——就是数字冲到某个值就不动了,或者数值变得不合理。这属于测量范围的问题,把磁铁拿开一般读数就恢复正常。

MLX90393 不同 Option Code 的磁饱和特性不同:手册 Revision 012 给出的磁饱和起始点(BSAT)是 50 mT(选项代码 -011 / -012 / -013 / -014,标准 IMC)和 25 mT(选项代码 -111,薄 IMC)。

所以这里只说明现象,不自行写超出数据手册的"最大安全磁铁强度"。需要测大磁场的客户,请按实际磁铁做测试确认。

SPI 和 I2C 怎么选择?

MLX90393 同时支持 I2C 和 SPI,本款板子把 CS、SCLK、MOSI、MISO 都引出来了。普通测试用 I2C 就行,只要 3.3V、GND、SDA、SCL 四根线。如果 I2C 扫不到地址,检查模块是否被接成了 SPI 模式(CS 被拉低)。

Support

需要技术支持时,把这几项一起发来

复制下面这段填一下发给客服,我们一次就能定位,不用来回问。

【MLX90393 技术支持】
主控型号:            (如 Arduino UNO / ESP32 / STM32)
供电接的是:          □ 3.3V   □ 5V
I2C Scanner 扫到的地址:
串口显示的内容:
用的是哪份代码:      □ 本页示例   □ 其他(请说明)
接线照片:            (请附一张能看清四根线的照片)

References

官方资料链接

只放公开可访问链接和官方库入口,不放客户截图、订单信息或聊天隐私。

Datasheet

Melexis MLX90393 Datasheet
Revision 012 – November 18, 2025

本页所有芯片参数(VDD 范围、绝对最大值、ESD 等级、I2C 地址订购代码、推荐应用电路、磁饱和起始点)都来自这一版手册。

打开 Melexis 官网

GitHub

Adafruit MLX90393 Arduino Library(v2.0.5)

Adafruit 官方 Arduino 库,包含 I2C 和 SPI 基础读取例程 basicdemo,可通过 Arduino IDE 库管理器安装。本页代码按这个库校对。

查看 GitHub

Guide

Adafruit MLX90393 学习指南

包含模块介绍、接线说明、Arduino 和 CircuitPython 代码示例、量程和分辨率配置说明。

打开指南

本页信息来源

  • 芯片参数(可放心引用):VDD 2.2~3.6V、绝对最大值 VDD 4V / VDD_IO min(4, VDD+0.3)V、ESD HBM 2.5kV、ESD CDM 750V、I2C 地址订购代码表、推荐应用电路 10kΩ 上拉与 0.1µF 去耦、磁饱和起始点 50mT / 25mT —— 全部逐条取自 Melexis MLX90393 Datasheet Revision 012(2025-11-18) 原文。
  • 代码(✓ 已编译验证):函数名、参数形式和枚举取值逐条对照 Adafruit MLX90393 Arduino Library v2.0.5 的 Adafruit_MLX90393.h 与 examples/basicdemo,并用 arduino-cli compile --fqbn arduino:avr:uno 实际编译通过。代码本身未在本店实物上跑过串口输出,读数部分标注为待实测回填。
  • 模块信息(本店实物):丝印引脚表、A0/A1 默认接 GND、默认地址 0x0C,按本款紫色模块实物整理。
  • 出厂测试(实拍照片/视频确认,✓ 实测):拼板未分板、未焊排针,探针治具压 3.3V/GND/SDA/SCL 四个焊盘。分两步:① I2C 扫描确认地址 0x0C;② 功能测试读三轴磁场——静止 X -8.10 / Y -25.80 / Z 11.37,|B| 29.34 µT,磁铁靠近变为 X 19.05 / Y -466.80 / Z 484.97,|B| 673.39 µT。页面上两张读数实拍即出自该测试。未覆盖:全温度范围精度、长期稳定性、SPI 接口、逐片标定精度。
  • ⚠ 待确认项:① 出厂芯片的具体 Ordering Code(本页按 ABA-011 写,需与来料批次核对);② 板子两侧 3.3V/GND 是否内部连通;③ 板上 I2C 上拉电阻实际阻值、是否有去耦电容;④ 示例代码的实机串口输出。以上四项在拿实物量过之前,本页不写死结论。