三轴同时测量
不同于普通单轴霍尔开关,MLX90393 可以同时读取 X、Y、Z 三轴磁场值(单位 µT),适合 3D 位置和方向检测。
MLX90393 3-Axis Magnetic Field Sensor
适用于 Arduino / 3D 位置检测 / 角度测量 / 位移传感项目的三轴霍尔传感器资料页。本店这款紫色模块按 3.3V 模块使用,3.3V/SDA/SCL 都不能接 5V。下面依次讲:使用前提醒、引脚、接线、I2C 地址、示例代码、模块损坏原因和万用表排查。
更新于 2026-08-15
芯片参数来自 Melexis MLX90393 数据手册 Revision 012(2025-11-18),代码 API 对照 Adafruit MLX90393 库 v2.0.5。不同模块引脚顺序可能不同,实际以板子丝印为准。
淘宝 SKU:R2303
Overview
MLX90393 是 Melexis 公司推出的一款三轴霍尔效应磁场传感器芯片,可以同时测量 X、Y、Z 三个方向的磁场强度。它通过 I2C 或 SPI 与单片机通信,每轴输出 16 位分辨率数据,常用于 3D 位置检测、旋转角度测量、线性位移检测、游戏摇杆、无接触旋钮等应用。
不同于普通单轴霍尔开关,MLX90393 可以同时读取 X、Y、Z 三轴磁场值(单位 µT),适合 3D 位置和方向检测。
常见模块使用 I2C 接口。Arduino UNO/Nano 连接 SDA=A4、SCL=A5,默认 I2C 地址为 0x0C。
MLX90393 芯片 VDD 正常工作范围 2.2V~3.6V。本页这款紫色模块按 3.3V 模块使用,3.3V/VCC 脚不能接 5V,SDA/SCL 也不能上拉到 5V。
Before You Start
这一段是本页最重要的内容。绝大部分"模块不识别 / 发热 / 换一块又坏"的售后,原因都在下面这 8 条里。
Quick Start
第一次拿到模块,按下面四步走一遍,串口就能刷出三轴读数。
3.3V→3.3V、GND→GND、SDA→A4、SCL→A5。接好检查一遍再上电,不要带电一根一根插。115200。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 四根线,其余引脚可以先不接。
模块实物。芯片旁边的 X / Y / Z 小图标是三轴方向标记,判断磁铁方向时按它来。板上电源丝印直接写的是 3.3V,不是 VCC——板子自己就告诉你该接 3.3V。
排针是另配的,出厂不焊,需要自己焊上,或者用杜邦线直接接焊盘。
模块两侧各 6 个焊盘,每侧都有自己的 3.3V 和 GND(✓ 实拍确认):
CS MISO MOSI SCLK 3.3V GND
TRIG INT SCL SDA 3.3V GND
| 丝印 | 功能 | 普通 I2C 测试 |
|---|---|---|
3.3V | 3.3V 电源 | 必接 |
GND | 地 | 必接 |
SDA | I2C 数据 | 必接 |
SCL | I2C 时钟 | 必接 |
INT | 数据就绪 / 中断 | 可不接 |
TRIG | 外部触发 | 可不接 |
CS | SPI 片选 | I2C 模式不接 |
SCLK | SPI 时钟 | I2C 模式不接 |
MOSI | SPI 数据输入 | I2C 模式不接 |
MISO | SPI 数据输出 | I2C 模式不接 |
实拍已经确认两侧各有一组 3.3V 和 GND 丝印,但走线在板子内层/丝印下面,从照片看不出来。在没有从 PCB 实物或原理图确认之前,本页不写死"两侧内部直接相连"。
接线时请只按您实际接的那一侧供电,不要默认另一侧也有电。需要用到两侧时,断电状态下用万用表通断档量一下两侧 3.3V 之间、两侧 GND 之间是否导通,一秒钟的事。
从实拍可以看到,模块出厂时是拼板状态、焊盘为镀金过孔,没有焊排针。排针需要客户自己焊,或者用杜邦线/探针直接接触焊盘。
这一点很关键——出厂测试和客户第一次使用之间,中间多了一道「焊接」工序,这也是最容易出问题的一步。详见下面「为什么出厂测试是好的,到客户手里却用不了」。
Wiring
自绘无水印示意图。基础测试先接 3.3V、GND、SDA、SCL 四根线,能扫到 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.3V | 3.3V(不是 5V) | 芯片 VDD 工作范围 2.2V~3.6V,本模块按 3.3V 模块使用。 |
| GND | GND | 必须共地。 |
| SDA | A4 / SDA | I2C 数据线。不要另外上拉到 5V。 |
| SCL | A5 / SCL | I2C 时钟线。不要另外上拉到 5V。 |
| INT / TRIG | 不接 | 可选的数据就绪 / 外部触发脚,基础测试先不接。 |
| CS / SCLK / MOSI / MISO | 不接 | SPI 接口,走 I2C 时不需要。 |
| A0 / A1 | 按模块默认 | I2C 地址选择脚。默认 A0=GND、A1=GND,地址为 0x0C。 |
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 默认通过细铜皮接到 GND,所以默认地址是 0x0C。如果客户没有先切断默认接 GND 的细线,直接把 A0/A1 点焊到 3.3V,会等于把 3.3V 和 GND 短接,模块会短路、发热,甚至损坏。
普通测试建议保持默认地址 0x0C,不要改焊盘。确实要改地址时,必须先确认板上 A0/A1 默认连线,并按焊盘设计先断开 GND 默认连接,再接到 3.3V。
I2C Address
本款模块 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 的 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-RE | 0x03 | 0x0C, 0x0D, 0x0E, 0x0F |
| MLX90393xLW-ABA-012-RE | 0x04 | 0x10, 0x11, 0x12, 0x13 |
| MLX90393xLW-ABA-013-RE | 0x05 | 0x14, 0x15, 0x16, 0x17 |
| MLX90393xLW-ABA-014-RE | 0x06 | 0x18, 0x19, 0x1A, 0x1B |
| MLX90393xLQ-ABA-011-RE(UTDFN 封装) | 0x04 | 0x10 |
不要把"所有 MLX90393 永远都是 0x0C~0x0F"当成绝对结论。客户手里如果是别处买的板子,或者芯片版本不同,扫出 0x18 一类的地址也是正常的,不是坏件。
所以:优先以本款模块实际芯片版本和 I2C Scanner 扫描结果为准。扫到什么地址,就把示例代码里的 sensor.begin_I2C(0x0C) 改成什么地址。
本店这款紫色模块出厂配的是 ABA-011 版本(0x0C~0x0F),A0/A1 默认接 GND,所以接线部分写默认地址 0x0C。芯片具体订购代码以来料批次为准,⚠ 待与来料实物再核对一次。
A0/A1 默认是接 GND 的,不是悬空焊盘。不要在没切断默认 GND 连线的情况下,直接把 A0/A1 点焊到 3.3V。这样会造成 3.3V 与 GND 短路。
Library
本页代码使用 Adafruit 官方的 Adafruit MLX90393 库。装库之前请先把上面的接线检查一遍。
Adafruit MLX90393,选 Adafruit 出的那个,点安装。本页代码按 v2.0.5 校对。Adafruit BusIO、Adafruit Unified Sensor、Adafruit SSD1306(最后一个是库里 OLED 例程用的,装上不影响)。Arduino Examples
读取三轴磁场数据并通过串口输出。这段代码已用 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
这是我们被问得最多的一句话。答案不是"运气不好",而是出厂测试环境和客户的桌面环境,中间隔着五道工序。下面先讲我们怎么测,再讲中间差了什么。
出厂测试实拍:探针治具压在模块焊盘上,I2C 测试器扫到芯片就显示 OK 并累加计数(图中 T:8 是已测通过的片数);扫不到就显示「未接 / NO RESPONSE / CHECK MODULE」,这一片会被挑出来。这是第一步(I2C 扫描),确认芯片活着、地址对、焊接通;扫过之后还有第二步功能测试,见下。
扫到地址只能说明芯片活着。所以还有第二步:用 ESP32 + 2.8 寸屏做的测试器把三轴磁场值和合成磁场 |B| 直接显示出来,再拿磁铁靠近看数值跟不跟着变。
静止(只有地磁场):found OK,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——三轴跟着磁铁明显变化
出厂功能测试实录(24 秒,无声)。磁铁由远及近,X/Y/Z 三轴和合成磁场 |B| 连续跟着变,磁铁贴近时 |B| 超过 1400 µT,拿开回落到地磁场量级。这段是判断模块好坏最直观的依据。
上面两张图说明了两件事:
29.34 µT 正好在范围内——说明磁场前端工作正常、量程和换算都对,不是随便返回一个数。也就是说:「能用、读数对」这一层是逐片测过的;更细的精度指标属于芯片本身的出厂标定,模块这一层不复测。
所以准确的说法是:出厂那次测试把「供电、电平、接触」三个变量锁死了,并且确认了芯片能读出正确的三轴磁场。客户桌面上恰恰相反——这三个变量全是打开的。
跑本页的示例代码,串口能刷出三轴读数、静止时 X/Y/Z 平方和开根号在 25~65 µT 附近,拿块小磁铁靠近看数值明显变化、拿开回到原值——看到这个现象,就和我们出厂那一步测的是同一件事,模块是好的。
上面那台测试器不是什么专用设备,就是一块 ESP32-2432S028R(2.8 寸黄屏 / CYD)加我们自己写的固件。固件源码打包放在下面,客户可以直接拿去自测——烧进去、接四根线,屏幕上就有三轴读数,不用写一行代码。
src/main.cpp、platformio.ini(屏幕参数已写进 build_flags,不用改 TFT_eSPI 的 User_Setup.h)、中文 README.md(接线、正常现象、故障判断)。4 KB。
| MLX90393 模块 | ESP32-2432S028R(黄屏) | 说明 |
|---|---|---|
| 3.3V | 3.3V | 接板上丝印「温度和湿度接口」那排排针(CN1) |
| GND | GND | |
| SDA | IO27 | |
| SCL | IO22 |
代码里有两个坑值得一提,都写在注释里了:① 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(我们实际编译验证过),跟模块好坏没有任何关系。请直接用本页的示例代码,那段是编译通过的。
扫到 0x0D / 0x18 … 不是坏件
MLX90393 的 I2C 地址高 5 位由芯片出厂版本决定。扫到别的地址属于正常,把地址传进 begin_I2C() 就能用。详见芯片版本说明。
虚焊 / 连锡 / 排针没焊透
出厂是探针直接压焊盘,接触一定是好的;客户焊上排针以后,接触靠的是焊点。虚焊会表现成"时好时坏、动一下就断",很像模块坏了。断电用万用表通断档量一下排针针脚到板上焊盘是否导通,一量就知道。
排除上面三种以后,如果还是不识别,那就要按电气损坏来查了。原因基本逃不出下面这一节的四条——接 5V、SDA/SCL 被拉到 5V、带电插拔、静电。
出厂那一刻模块是好的,这一点由探针测试保证。之后它要经历焊接、接线、上电三关,这三关全部由 3.3V 这个前提兜着。只要 3.3V 这个前提被破坏(电源插到 5V、总线被 5V 上拉、带电插拔),模块就会在客户手里坏——而且往往是第一次上电那几秒就已经坏了,客户看到的现象只是"一拿到就不能用"。
Failure Causes
MLX90393 不是"很容易坏"的芯片,它是低压器件 + 静电敏感器件。只要电压和操作方式对,正常使用不会坏。下面这四条是实际会造成损坏的风险点,按发生频率排序。
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。
即使模块供电已经是 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,存在损坏风险。
如果测到接近 5V,先断电排查,不要继续测试。
主控已经通电时,不要一根一根插 VCC、GND、SDA、SCL。
主控断电 → 完成全部接线 → 检查 → 再通电
尤其不要出现传感器还没供电、但 SDA/SCL 已经有高电平的情况——这时电流会从数字口倒灌进芯片,是最容易出隐性损伤的一种接法。这也是"接了几次以后模块时好时坏"的常见来源。
MLX90393 属于静电敏感半导体器件。数据手册第 20 节 ESD Precautions 原文就一句话:半导体产品对静电放电敏感,操作时始终要遵守防静电控制流程。
Melexis 数据手册给出的 ESD 测试等级包括:
| 项目 | 测试标准 | 等级 |
|---|---|---|
| ESDHBM(人体模型) | AEC-Q100-002 | 2.5 kV |
| ESDCDM(器件充电模型,QFN) | AEC-Q100-011-B | 750 V |
这里说明这是器件的标准 ESD 测试指标,不代表可以随意进行静电接触测试。这两个数字是芯片出厂做认证时按标准波形打的,跟日常生活中随手一摸的静电不是一回事,不能当成"能扛 2.5kV 静电"来用。
Melexis 数据手册 Revision 012 第 17 节「Recommended Application Diagram」的 I2C 推荐应用电路中:
| 项目 | 手册推荐值 |
|---|---|
| SDA 上拉 | 上拉到 VDDIO |
| SCL 上拉 | 上拉到 VDDIO |
| 上拉电阻 R1 / R2 | 10 kΩ |
| VDD 去耦电容 C1 | 0.1 µF |
| VDDIO 去耦电容 C2 | 0.1 µF |
| 手册标注的 VDDIO 范围 | 1.71 V ~ VDD |
上拉目标是 VDDIO,不是 5V。手册自己把 VDDIO 的上限写成 VDD——VDD 最高才 3.6V,所以从芯片设计的角度,SDA/SCL 就没有 5V 这个选项。
说明:这是芯片级推荐应用电路说明,不要因此擅自修改当前产品 PCB 参数,只作为技术说明。本模块 PCB 上实际用的上拉电阻阻值、是否有去耦电容,待确认——没有从实物或原理图量过之前,本页不写死。
Diagnosis
模块出现"不识别、偶尔正常、换一块又坏"的情况时,按下面顺序走一遍。顺序不要跳,第 1 步必须先断电。
本页不给「VCC-GND 电阻低于多少欧就是坏」的固定判断值。这个数字受板上电容、芯片内部结构、万用表档位影响,不同表测出来都不一样,按一个死数字判断很容易冤枉好板子。
如果需要判断短路,正确做法是:断电情况下,将故障板与一块确认正常的板进行阻值对比。两块板量出来差不多,就不是短路;故障板明显低很多(比如正常板几百 kΩ、故障板只有几欧),才有短路嫌疑。
FAQ
这一句是没找到芯片,属于接线或地址问题,不用先去调增益滤波那些参数。按顺序查:
sensor.begin_I2C(0x??) 即可。先拿一块小磁铁靠近传感器,看数值有没有变化。如果完全无变化,检查 I2C 通信是否正常。如果数值抖动大,检查周围是否有电机、继电器、开关电源等强干扰源,并尝试调低增益或增加滤波。
先断电。当前模块 A0/A1 默认通过细铜皮接 GND,如果没有先切断默认 GND 连接,直接点焊 3.3V 就会短路。请检查 A0/A1 焊盘是否把 3.3V 和 GND 连在一起,普通测试建议恢复默认地址 0x0C。
可以。MLX90393 输出三轴磁场值(单位 µT),通过数学换算可以得到磁铁的相对位置或角度。但具体算法(如 atan2、三角定位)需要客户自行实现,不同磁铁和安装方式结果不同,这方面属于应用开发而非模块故障。
不能把模块的 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 量级),不应该出现明显烫手。摸上去明显发热就说明有地方接错了,请按下面顺序处理:
不要"多通电一会看看"。发热状态下每多通一次电,损伤都在加深,本来还能救的板子会彻底报废。
正常拿 PCB 边缘通常不代表一定会损坏,但 MLX90393 属于 ESD 静电敏感半导体。
人在干燥环境、衣物摩擦、塑料桌椅等情况下可能积累静电,所以不建议反复直接触摸芯片和接口焊盘。批量测试、维修和焊接时建议做好防静电措施(防静电手环、防静电台垫、模块放防静电袋)。
要分清两件事:磁场饱和和芯片电气烧坏,这是两回事,不要混为一谈。
强磁场可能使测量进入饱和区,造成读数到顶或失真——就是数字冲到某个值就不动了,或者数值变得不合理。这属于测量范围的问题,把磁铁拿开一般读数就恢复正常。
MLX90393 不同 Option Code 的磁饱和特性不同:手册 Revision 012 给出的磁饱和起始点(BSAT)是 50 mT(选项代码 -011 / -012 / -013 / -014,标准 IMC)和 25 mT(选项代码 -111,薄 IMC)。
所以这里只说明现象,不自行写超出数据手册的"最大安全磁铁强度"。需要测大磁场的客户,请按实际磁铁做测试确认。
MLX90393 同时支持 I2C 和 SPI,本款板子把 CS、SCLK、MOSI、MISO 都引出来了。普通测试用 I2C 就行,只要 3.3V、GND、SDA、SCL 四根线。如果 I2C 扫不到地址,检查模块是否被接成了 SPI 模式(CS 被拉低)。
Support
复制下面这段填一下发给客服,我们一次就能定位,不用来回问。
References
只放公开可访问链接和官方库入口,不放客户截图、订单信息或聊天隐私。
Datasheet
本页所有芯片参数(VDD 范围、绝对最大值、ESD 等级、I2C 地址订购代码、推荐应用电路、磁饱和起始点)都来自这一版手册。
打开 Melexis 官网GitHub
Adafruit 官方 Arduino 库,包含 I2C 和 SPI 基础读取例程 basicdemo,可通过 Arduino IDE 库管理器安装。本页代码按这个库校对。
Guide
包含模块介绍、接线说明、Arduino 和 CircuitPython 代码示例、量程和分辨率配置说明。
打开指南本站
同类三轴磁场传感器和排查工具,可以对比选型。
Arduino I2C ScannerAdafruit_MLX90393.h 与 examples/basicdemo,并用 arduino-cli compile --fqbn arduino:avr:uno 实际编译通过。代码本身未在本店实物上跑过串口输出,读数部分标注为待实测回填。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 接口、逐片标定精度。