MLX90393 是一款3轴霍尔传感器,能够感知磁场的强度和方向,适合用来实现精确的方向和位置感知。可以通过检测磁场的变化来控制设备的前后、左右移动。
此传感器提供 16 位输出,当 MLX90393 作为总线上的从器件时,将通过 I2C 和 SPI 提供上述数字值。
霍尔传感器工作原理
MLX90393 传感器可以分离并测量磁场的三个分量:
Bx:水平磁场分量,红色箭头。
By:垂直磁场分量(与 X 方向垂直的平面分量),蓝色箭头。
Bz:垂直于传感器平面的磁场分量,紫色箭头。
应用示例
以操纵杆为例:操纵杆可以在水平和垂直方向上移动(X 轴和 Y 轴)。操控杆底部通常会嵌入一个小型磁铁。当操控杆在不同方向上倾斜时,磁铁会随之移动,改变磁场的方向和强度,霍尔传感器会感知这些变化,从而实现位置和角度的检测。
电器属性
2.2V-3.6V 电源,适用于电池供电的应用,低至 1.8V 的 I/O 电压。
引脚说明
引脚编号 | 引脚名称 | 引脚功能 |
---|---|---|
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 | 电源引脚 |
轴定义
示例电路
I2C 可以在10kHz(低速模式)、100kHz(标准模式)、400kHz(高速模式)之间进行设置;
通常我们通过 INT/TRIG 引脚触发, INT 引脚作为外部中断触发;
通信
I2C地址
MLX90393 系列芯片不同版本的 I2C 地址是不同的,参考如下
示例代码中有查询 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 响应主机发出的命令而传输的第一个字节。
它由信息位的固定组合组成:
模式位(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 字节。
- 对于没有响应数据的命令,这些位的内容将被忽略。
命令流程
读取测量值
读取的结果根据 zyxt 的值不同而有所不同。数据以 Status-TXYZ 的顺序返回,跳过设置为零的组件。