使用 ALS31300 霍尔效应 IC 进行 3D 线性或 2D 角度感应

使用 ALS31300 霍尔效应 IC 进行 3D 线性或 2D 角度感应

下载 PDF格式版

作者: Wade Bussing 和 Robert Bate
亚博棋牌游戏Allegro微系统有限责任公司

摘要

本应用注释介绍了将 Allegro MicroSystems 的 ALS31300 3D 线性霍尔效应传感器集成电路 (IC) 用于 3D 线性感应和 2D 角度感应应用。详细的示例包括将寄存器内容转换为高斯度量以进行线性感测,并组合来自两个轴的数据以计算旋转角度感测的角度。其他章节通过 I2C 接口、应用程序示意图,以及关联的 Arduino 示例代码说明读取和写入 ALS31300 寄存器的流程。请见附件 A 了解所有源代码,包括 Arduino .ino 草图文件。Arduino .ino 草图文件还在快板软件门户上提供。

简介

ALS31300三维线性霍尔效应传感器 集成电路为用户提供针对非接触式线性和角度位置传感的准确、低成本的解决方案。通过 我2C级接口,铝31300在单一总线上提供来自多个传感器的角度和线性信息(见图 1)。

本应用说明中列出的例子利用 “Teensy” 3.2 微控制器 (https://www.pjrc.com/teensy/teensy31.html) 和 阿杜伊诺(https://www.arduino.cc/) 软件环境。虽然本文件侧重于利用 Teensy 3.2 的实施,但操作方法和示例代码可直接用于其他 Arduino 开发板。

I2C 概览

I2C 总线是同步的双线串行通信协议,提供两到多个设备之间的全双工接口。总线指定两种逻辑信号:

  1. 主设备的串行时钟线 (症状自评量表输出。
  2. 主设备或从设备的串行数据线 (SDA) 输出。

图 1中显示的区块图展示了 我2C级总线拓扑结构。

图 1:I2C总线线图,包含主设备和从设备
图 1:I2C级总线线图,包含主设备和从设备

数据传输

数据在 我2C 上的传输包含以下步骤。

  1. 开始条件:由 SDA公司线的下降沿定义,在 症状自评量表较高时由主设备发起。
  2. 地址循环:7 位从地址,加一个说明写 (0) 或读 (1) 的位,然后是一个应答位。
  3. 数据循环:读取或写入 8位数据,然后是一个应答位。这个循环可以针对多字节数据传输而重复。写的第一个数据字节可能是寄存器地址。请见以下部分了解更多信息。
  4. 停止条件:由 SDA 线的上升沿定义,在 SCL 高电平时发起。

除了指示开始或停止条件之外,SDA公司必须在时钟信号高电平时保持稳定。SDA公司只能在 症状自评量表低电平时改变状态。开始或停止条件可以在数据传输的任何时候发生。铝31300将始终通过重设数据传输序列响应读或写请求。

时钟信号 SCL 由主设备生成,而 SDA 线起到输入或开漏输出的作用,具体视数据传输的方向而定。图 2 所示的时序图说明了 I2C 总线的时序。ALS31300 数据表提供这些名称的信号参考和定义。

图 2:I2C 输入和输出时序图
图 2:I2C 输入和输出时序图

I2C 总线速度

常见的 我2C 总线速度是标准模式100 kbps低速模式10 kbps,但也允许使用其他较低的时钟频率。I2C 协议的近期修订版本可以装载
更多节点,以更高速度运转,包括快速模式400 kbps 和超快模式(Fm+)1 Mbps而这些速度都受到 铝31300支持。请注意,规格说明书还列出了 铝31300不支持的高速模式3.4 Mbps

使用 ALS31300 实施 I2C

ALS31300 仅作为 I2C级从设备运行,因此不能在 我2C级总线上发起任何事务。

铝31300将始终通过重设数据传输序列响应读或写请求。读/写位状态设为低 (0) 则表示写循环,高 (1) 则表示读循环。主设备监测应答位,以确认从设备 (铝(31300)响应主设备发送的地址字节。铝31300将 7位从地址解读为有效时,将通过在第九个时钟循环拉低 SDA公司来应答。主设备请求数据写入时,铝31300在时钟循环期间拉低 SDA公司然后通过一个数据字节表示数据已经成功接收。发送地址字节或数据字节后,主设备必须在第九次时钟循环之前释放 SDA公司线,允许握手过程发生。

铝31300的默认从地址是 110xxxx年四个 LSB公司位通过对地址引脚 ADR0公司和 ADR1公司应用不同电压而设置。在本演示中,两个地址引脚都设为接地,如图 11所示。如需了解选择其他 我2C级从地址的信息,请参阅ALS31300 数据表。两个地址引脚都接地时,默认 I2C级从地址为 96。

写循环概览

铝31300上访问寄存器的写循环如下文所示。

  1. 主设备发起开始条件
  2. 主设备发送 7 位从地址和写位 (0)
  3. 主设备等待 ALS31300 的 ACK
  4. 主设备发送 8 位寄存器地址
  5. 主设备等待 ALS31300 的 ACK
  6. 主设备发送 31:24 位数据
  7. 主设备等待 ALS31300 的 ACK
  8. 主设备发送 23:16 位数据
  9. 主设备等待 ALS31300 的 ACK
  10. 主设备发送 15:8 位数据
  11. 主设备等待 ALS31300 的 ACK
  12. 主设备发送 7:0 位数据
  13. 主设备等待 ALS31300 的 ACK
  14. 主设备发起停止条件

I2C级写序列在下文图 3的时序图中进一步说明。

图 3:I2C 写入时序图
图 3:I2C 写入时序图

客户写入权限

在 ALS31300 中写入任何易失性寄存器或 EEPROM 之前,必须向设备发送存取代码。如果未启用客户存取模式,则不允许对设备写入。这一规则的唯一例外是 SLEEP 位,其可以随意写入,无视存取模式。此外,任何寄存器或 EEPROM 位置都可以随时读取,无视存取模式。

如需进入客户存取模式,必须通过 I2C级接口发送存取命令。该命令包含连续的写入操作,以及地址和数据值,如表 1所示。代码输入的时间无限制。进入客户存取模式后,必须反复开关设备电源才能更改存取模式。

表 1:客户存取代码

存取模式 地址 数据
客户存取 0x24码 0x2C413534

读循环概览

铝31300上访问寄存器的读取循环如下文所示。

  1. 主设备发起开始条件
  2. 主设备发送 7 位从地址和写位 (0)
  3. 主设备等待 ALS31300 的 ACK
  4. 主设备发送 8 位寄存器地址
  5. 主设备等待 ALS31300 的 ACK
  6. 发起开始条件。这次称为重启条件
  7. 主设备发送 7位从地址和读位 (1)
  8. 主设备等待 ALS31300 的 ACK
  9. 主设备接收 31:24 位数据
  10. 主设备发送 ACK 到 ALS31300
  11. 主设备接收 23:16 位数据
  12. 主设备发送 ACK 到 ALS31300
  13. 主设备接收 15:8 位数据
  14. 主设备发送 ACK 到 ALS31300
  15. 主设备接收 7:0 位数据
  16. 主设备发送 纳克到 铝31300
  17. 主设备发起停止条件

I2C级读序列在下文图 4的时序图中进一步说明。

图 4:I2C读取时序图
图 4:I2C 读取时序图

图 4 中的时序图显示传输单个寄存器位置的整个内容(位 31:0)。另外,I2C 主设备还可以选择用 ACK 替换 NACK,这将允许读序列继续。这种情况将导致从以下寄存器(地址 + 1)传输内容(位 31:24)。然后,主设备可以继续应答或发布非应答(NACK)或在任何字节之后停止,以停止接收数据。

请注意,读取仅需要初始寄存器位置,因此可更快进行数据检索。然而,在使用单个读取命令时,这回将数据检索限制于序列寄存器。主设备提供非应答位和停止位时,铝31300停止发送数据。如果要读取非序列寄存器,则必须发送单独的读取命令。

针对 十、 Y、Z和温度数据的 我2C 回读模式

ALS31300Ⅰ2C 控制器有若干模式,可方便地反复轮询 X、Y、Z 和温度数据。这些选项包括单一模式、快速循环模式和完整循环模式。

单一模式

向寄存器发出的单个写或读命令——这是默认模式,最适合设置字段和读取静态寄存器。如有需要,这个模式可以被用于以典型的串行方式读取 十、 Y、Z和温度数据,但如需快速检索数据,建议使用快速循环模式或完整循环模式。

快速循环模式

快速循环可持续读取 X、Y、Z 和温度数据,但限于 X、Y、Z 的前 8 位和温度的前 6 位。这个模式是牺牲截断分辨率而从 IC 高效读取数据的模式。图 5 的流程图说明了快速循环模式。

图 5:快速循环模式
图 5:快速循环模式

完整循环模式

完整循环模式可持续读取12位全分辨率X, Y, Z和温度数据。如用户需要以更快的速度读取全分辨率的 X、Y、Z 和温度数据,则建议使用这个模式。图 6 的流程图说明了完整循环模式。

图 6:完整循环模式
图 6:完整循环模式

表 2 进一步说明了循环模式。

表 2:ALS31300循环读取模式

代码(二进制) 模式 描述
00 无循环。与默认 我2C 类似。
01 快速循环 循环读取 X、Y、Z 和温度字段。
循环读取 X、Y、Z 的 8 MSB,和温度的 6
最高有效位。
10 完整循环 循环读取 X、Y、Z 和温度字段。
循环读取 12位全分辨率字段
11 与代码 0 相同。

如需设置读取循环模式,按照表 2 将地址 0x27 的 3:2 位设为所需代码。

磁场强度寄存器

图 7:DFN公司封装的磁轴(未按比例绘制)
图 7:DFN公司封装的磁轴(未按比例绘制)

磁场强度寄存器包含与 ALS31300 读取的三个轴测得的磁场成比例的数据。X、Y 和 Z 磁力数据的寄存器地址和位字段如表 3 所描述。X、Y 和 Z 轴的方向在图 7 中定义。

每个轴的 MSB 和 LSB 必须连接,以得出完整的 12 位磁场数据。参考附录 A,了解用于轮询并从 ALS31300 关联磁数据的各种技术的示例代码。

表 3:磁场强度寄存器

地址 名称 描述 R/W
0x28型 31:24 X 轴 MSB 8 位信号与前 8 位 X 方向磁场强度成比例。 R
23:16 Y 轴 MSB 8 位信号与前 8 位 Y 方向磁场强度成比例。 R
15:8 Z 轴 MSB 8 位信号与前 8 位 Z 方向磁场强度成比例。 R
0x29码 19:16 X 轴 LSB 4位信号与后 4位 十方向磁场强度成比例。 R
15:12 是的轴 LSB公司 4 位信号与后 4 位 Y 方向磁场强度成比例。 R
11:8 Z 轴 LSB 4 位信号与后 4 位 Z 方向磁场强度成比例。 R

温度传感器寄存器

表 5说明了 铝31300的温度寄存器。

表 4:温度寄存器

地址 名称 描述 R/W
0x28型 5:0 温度
最高有效位
6 位信号与前 6 位温度成比例
R
0x29码 5:0 温度
LSB公司
6位信号与后 6位温度成比例
R

计算测得字段

在这个例子中,铝31300的全量程为 500高斯,灵敏度为 4个LSB/高斯。

首先对 MSB 和 LSB 寄存器进行完整的 8 字节读取,构成 12 位的符号二进制补码值。结合寄存器时,所有数据必须在一次 8 字节读取中读取,否则结果将为两个独立样本的组合。12 位数据按照表 5 合并。

表 5:最高有效位和 LSB公司合并数据

BIT 11 10 9 8 7 6 5 4 3 2 1 0
数据 最高有效位数据 LSB公司数据

假设完整的 8字节读取对单个轴返回以下二进制数据:

最高有效位=1100万欧元
LSB=0110。

合并数据 {最高有效位;LSB}=1100畷0000畷0110等价十进制数 = 1018,除以设备敏感性(4个LSB/高斯)即可转换为高斯值。

高斯=–1018 LSB÷ 4 LSB⁄G=–254高斯

使用两个轴计算角度

外加磁场的角度可以使用 铝31300两个轴的磁性数据和四象限反正切函数计算。在这个例子中,一个盘式磁铁经过径向磁化。图 8中的图纸说明冰球形磁铁及其磁极相对于 铝31300的 十、 是的和 Z轴轴的参考方向。在左边的方向中,磁铁围绕 Z轴轴旋转,如黑色箭头所示,同时通过 十和 是的感测磁力。在右边的方向中,磁铁围绕 是的轴旋转,同时利用 十和 Z轴信道感测。第三个方向可以用于围绕 十轴旋转、利用 是的和 Z轴感测的磁铁。

图 8:ALS31300 的径向磁铁和信号轴
图 8:ALS31300 的径向磁铁和信号轴

标准反正切函数,即 tan()-1,返回从 –90° 到 90° 的角度值。对于这个应用,需要使用四象限反正切函数返回 –180° 到 180° 的角度。此函数还可避免除以 0的问题。表 6列出了四象限反正切函数。

表 6:四象限反正切函数调用

程序 函数 描述
MATLAB软件 atan2(Y,X) 四象限正切-1。得出弧度。
atan2d(Y,X) 四象限正切-1。得出角度。
阿杜伊诺 atan2(Y,X) 四象限正切-1。返回双重
atan2f(Y,X) 四象限正切-1。返回浮动。
C# Atan2(Y,X) 四象限正切-1。返回双重

请参阅附件 A 了解计算 XY、XZ 和 YZ 轴组合角度的所有 Arduino 源代码。

转换过程可以概括为 3个主要步骤,如下所列。图 9的范围图亦有指明。为简化例子,使用“单一模式“(表2)。

  1. 主设备发起读请求。
  2. 从设备传输 8 字节数据。
  3. 磁矢量数据转换为角度值。

读请求(方框 1)包含一次写入,说明将被读取的寄存器。设备返回(方框 2)8 字节数据,(十、 Y、Z的 8毫巴温度的 6兆比特然后是 十、 Y、Z的 4个LSB和温度的 6毫巴)

图 9:非循环模式下的 8数据字节 我2C 读数。寄存器 0x28 和 0x29。
图 9:非循环模式下的 8数据字节 我2C 读数。
寄存器 0x28型和 0x29

角度计算时间

使用 ALS31300 完成角度计算的总时间将视具体应用而变化,但主要由用户的微控制器的处理能力和速度决定。其他因素包括 ALS31300 的循环模式(表 2)和 I2C 接口的通信频率。这个文件中的定时例子假设 Teensy 3.2 微控制器以 72 MHz 的频率运行,且 I2C 通信频率配置为 1 MHz(快速模式 +)。请注意,Teensy 3.2 快速模式 + I2C 模式的运行频率约为 720 kHz。

图 9的例子简单地说明了从 铝31300读取数据的情况,但不是最快的情况。通过在 铝31300上使用循环模式,在第一次请求后,即可消除发起读取(图 9中的方框 1)的内部整理自检。

图 10 中的范围图显示 ALS31300 设置为完整循环模式时的角度转换流。方框 1、2 和 3 仍然与图 9 的相同步骤对应。

图 10:完整循环模式下的 8数据字节 我2C 读数。寄存器 0x28 和 0x29。
图 10:完整循环模式下的 8数据字节 我2C 读数。
寄存器 0x28型和 0x29

请注意,方框 1 仅出现了一次,但略长于图 9 中的无循环模式。在完整循环模式中,读请求包含一次写入,说明将被读取的寄存器,然后包含一次读/写,设置完整循环模式。请参阅附件 A 的完整源代码,了解如何实施无循环、快速循环和完整循环读取模式。

方框 3中的重复暂停显示 微小3.2微控制器运行 atan2f(x,y)函数所花费的时间。频率为 72兆赫的 微小3.2上运行 atan2f(x,y)函数的平均时长是 30μ是的而 8数据字节的传输时间是 120μs使用 微小3.2和 铝31300的完整循环模式,每 150μs就可以计算一个新的角度值。

应用示意图

指图 11 中展示为 ALS31300 使用的应用示意图的图片。

图 11:ALS31300 应用示意图
图 11:ALS31300 应用示意图

Teensy 3.2 微控制器的支持电路如图 12 中的示意图所示。

图 12:Teensy 3.2 应用示意图
图 12:Teensy 3.2 应用示意图

指图 11 和图 12 中标记为 “SDA” 和 “SCL” 的网,说明两个示意图之间的连接。请注意,Teensy 微控制器上的 SDA 和 SCL 管脚位置由用户选择,但必须在软件中声明。指附件 A 中声明 SDA 和 SCL 管脚的源代码。

结论

ALS31300 是高度通用的微功率 3D 霍尔效应传感器 IC。该 IC 可用于多轴线性位置、或角度位置感测应用用,可配置为在高分辨率(12 位)或中等分辨率(8 位)模式下运转。I2C 总线可配置性高,可以在 1 Mbps 到 < 10 kbps 的总线速度下运转,上拉电压范围为 1.8 到 3.3 V。该 IC 还包含可以通过 I2C级接口读取的温度传感器。

与本应用说明一起使用的 阿杜伊诺。阿杜伊诺草图文件在快板软件门户上提供。注册“ALS31300英寸设备以查看源代码。

附件 A:ALS31300 和 Teensy 3.2 的完整 Arduino 源代码

下面的片段显示与本应用一同使用的完整 阿杜伊诺源代码。示例函数包括 我2C 初始化,在单一、快速和完整循环模式下从 ALS31300 读取,使用 I2C级写入数据到 ALS31300型以及使用 铝31300的磁力数据计算角度和高斯值。

查看源代码例子

完整的 Arduino 草图文件在 Allegro Microsystem 的软件门户 ALS31300 设备选项卡下提供。如需注册 Allegro 的软件门户,查看 ALS31300 源代码,请访问https://registration.allegromicro.com/login。

附件 B:很小管脚说明书

下面的管脚说明书与 Teensy 3.2 一起发货。PJRS 还在以下链接提供:https://www.pjrc.com/teensy/card7a_rev1.pdf。

图 13:TEENSY 3.2 管脚说明书
图 13:TEENSY 3.2 管脚说明书

本文中所含的信息不构成 Allegro 就本文主题而对客户做出的任何表示、担保、确保、保证或诱导。本文所提供的信息并不保证基于此信息的流程的可靠性,亦不保证 Allegro 已探究了所有可能出现的故障模式。客户负责对最终产品进行充分的验证测试,以确保该产品是可靠的,并且符合所有设计要求。