MLX90393

MLX90393 是一款3轴霍尔传感器,能够感知磁场的强度和方向,适合用来实现精确的方向和位置感知。可以通过检测磁场的变化来控制设备的前后、左右移动。

此传感器提供 16 位输出,当 MLX90393 作为总线上的从器件时,将通过 I2C 和 SPI 提供上述数字值。

霍尔传感器工作原理

hrgzyl

MLX90393 传感器可以分离并测量磁场的三个分量:

  • Bx:水平磁场分量,红色箭头。

  • By:垂直磁场分量(与 X 方向垂直的平面分量),蓝色箭头。

  • Bz:垂直于传感器平面的磁场分量,紫色箭头。

应用示例

hryysl

以操纵杆为例:操纵杆可以在水平和垂直方向上移动(X 轴和 Y 轴)。操控杆底部通常会嵌入一个小型磁铁。当操控杆在不同方向上倾斜时,磁铁会随之移动,改变磁场的方向和强度,霍尔传感器会感知这些变化,从而实现位置和角度的检测。

电器属性

2.2V-3.6V 电源,适用于电池供电的应用,低至 1.8V 的 I/O 电压。

引脚说明

yjsm

引脚编号 引脚名称 引脚功能
1 INT 数据准备就绪信号输出引脚,逻辑高有效(DRDY标志)
2 CS 芯片选择引脚,在 SPI 模式下使用;在 I2C 模式下需拉高
3 SCLK SPI 和 I2C 模式下的串行时钟
4, 9, 10, 14, 16 NC -
5 SDA/MOSI SPI 模式下为数据输入引脚,I2C 模式下为数据输入/输出引脚
6 MISO SPI 模式下的数据输出引脚
7 INT/TRIG 触发引脚,可用于启动测量
8 VDDIO 数字供电引脚
11 A1 7 位 I2C 地址的第 1 位 (0 0 0 1 1 A1 A0)
12 A0 7 位 I2C 地址的第 0 位 (0 0 0 1 1 A1 A0)
13 VSS 地(GND)引脚
15 Vdd 电源引脚

轴定义

zdy

示例电路

sldl

I2C 可以在10kHz(低速模式)、100kHz(标准模式)、400kHz(高速模式)之间进行设置;

通常我们通过 INT/TRIG 引脚触发, INT 引脚作为外部中断触发;

通信

I2C地址

MLX90393 系列芯片不同版本的 I2C 地址是不同的,参考如下

I2Cdz

示例代码中有查询 I2C 地址的方法。

SPI

MLX90393 的 SPI 通信时半双工的所以一般不用。

命令列表

我们需要使用一些命令与 MLX90393 进行通信

MLX90393 仅接受特定的命令集。除了复位(Reset)命令外,所有命令都会生成一个状态字节(status byte)可供读取。下表列出了 MLX90393 条件接受的 10 个不同命令。即使命令无效,MLX90393 在 I²C 中始终会对命令进行确认。通过解释关联的状态字节可以验证命令是否被接受。

Command Name(命令名称) Symbol(符号) 编号 CMD1 Byte(命令字节 1) CMD2 Byte(命令字节 2) CMD3 Byte(命令字节 3) CMD4 Byte(命令字节 4)
Start Burst Mode(开始命令模式) SB 1 0001 zyxt N/A N/A N/A
Start Wake-up on Change Mode(开始变化唤醒模式) SW 2 0010 zyxt N/A N/A N/A
Start Single Measurement Mode(开始单次测量模式) SM 3 0011 zyxt N/A N/A N/A
Read Measurement(读取测量值) RM 4 0100 zyxt N/A N/A N/A
Read Register(读取寄存器) RR 5 0101 0abc {A5…A0, 0, 0} N/A N/A
Write Register(写入寄存器) WR 6 0110 0abc D15…D8 D7…D0 {A5…A0, 0, 0}
Exit Mode(退出模式) EX 8 1000 0000 N/A N/A N/A
Memory Recall(内存回调) HR D 1101 0000 N/A N/A N/A
Memory Store(内存存储) HS E 1110 0000 N/A N/A N/A
Reset(复位) RT F 1111 0000 N/A N/A N/A

对于可变内存访问命令(RR/WR)中的 abc 参数,应设置为 0x0,以进行正常的内存读取和写入。

在所有启动模式的命令(SB/SW/SM)中,参数是一个nibble(4位二进制值),用于指定传感器需要执行的测量转换,按照以下顺序定义:「zyxt」
例如,如果只需要在单次测量模式(Single Measurement Mode)中测量 Y轴温度,那么正确的命令字节应为 0x35

传感器芯片上的测量执行顺序是反转的,按照 「TXYZ」 进行测量,因此温度(T)会先被测量,随后依次测量 X、Y 和 Z。

如果发送的「zyxt」 nibble 值全为 0(即 0x00),传感器会使用 RAM 中的 BURST_SEL 配置值,作为替代命令中的空参数。

状态字

状态字节是 MLX90393 响应主机发出的命令而传输的第一个字节。
它由信息位的固定组合组成:

ztz

模式位(MODE bits)

  • 这些位定义了 MLX90393 当前的工作模式。
  • 当发生模式切换时,状态字节会清除先前的模式位。
  • 如果命令被拒绝(例如非法命令),会伴随 ERROR 位被设置。
  • SM_MODE 位可能是由单次测量命令(SM 命令)或通过 TRG 引脚触发时被设置(此时 volatile memory 中启用了 TRG 模式)。

错误位(ERROR bit)

  • 如果命令被拒绝或在存储器中检测到不可修复的错误(ECC_ERROR),则会设置此位。
  • ECC_ERROR 意味着存储器中的单个错误可以被纠正(由 SED 位表示),但两个错误将导致不可修复的 ECC_ERROR。
  • 例如,在突发模式中,RR(读取寄存器)/WR(写入寄存器)命令会被拒绝,而此时 ERROR 位会被设置。
  • DRDY 标志为低时读取数据,ERROR 位可能会被设置,但这并不表示命令被拒绝。

SED 位(单错误检测)

  • 表示在非易失性存储器中检测到单比特错误,但可以被纠正。
  • 该位仅用于提示,对 MLX90393 的操作没有任何影响。

RS 位(复位状态)

  • 当发出复位(RT)命令时,该状态消息会通过设置 RS 位表示复位即将执行。
  • 在复位完成后,RS 位会被清除。

D[1:0] 位(数据计数位)

  • 仅在 RR(读取寄存器)和 RM(读取测量数据)命令中有效,用于指示预期返回的数据量。
  • 数据字节数为 2 * D[1:0] + 2,预期返回的字节数可能是 2、4、6 或 8 字节。
  • 对于没有响应数据的命令,这些位的内容将被忽略。

命令流程

yd

mllc

读取测量值

读取的结果根据 zyxt 的值不同而有所不同。数据以 Status-TXYZ 的顺序返回,跳过设置为零的组件。

dqzlz

示例代码

https://github.com/TooUpper/SensorDrive