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

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

下载PDF版

作者:韦德接吻和罗伯特软化
雷竞技竞猜下载快板微系统公司有限责任公司

摘要

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

简介

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

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

2C概览

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

  1. 主设备的串行时钟线(sci)输出。
  2. 主设备或从设备的串行数据线(SDA)输出。

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

图1:I2C总线线图,包含主设备和从设备
图1:我2C总线线图,包含主设备和从设备

数据传输

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

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

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

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

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

2C总线速度

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

我使用ALS31300实施2C

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

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

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

写循环概览

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

  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. 主设备发起停止条件

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

图3:I2C写入时序图
图3:我2C写入时序图

客户写入权限

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

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

表 1:客户存取代码

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

读循环概览

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

  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. 主设备发送纳到ALS31300
  17. 主设备发起停止条件

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

图4:I2C读取时序图
图4:我2C读取时序图

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

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

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

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

单一模式

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

快速循环模式

快速循环可持续读取X, Y, Z和温度数据,但限于X, Y, Z的前8位和温度的前6位。这个模式是牺牲截断分辨率而从集成电路高效读取数据的模式。图 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将地址0 x27的3:2位设为所需代码。

磁场强度寄存器

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

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

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

表 3:磁场强度寄存器

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

温度传感器寄存器

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

表 4:温度寄存器

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

计算测得字段

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

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

表5:MSB和LSB合并数据

11 10 9 8 7 6 5 4 3. 2 1 0
数据 MSB数据 LSB数据

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

MSB = 1100 _0000
LSB = 0110。

合并数据{MSB;Lsb} = 1100_0000_0110。等价十进制数= 1018,除以设备敏感性(4 LSB /高斯)即可转换为高斯值。

高斯= -1018 LSB ÷ 4 LSB / g = -254高斯

使用两个轴计算角度

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

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

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

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

程序 函数 描述
MATLAB 量化(Y, X) 四象限正切-1。得出弧度。
atan2d (Y, X) 四象限正切-1。得出角度。
ARDUINO 量化(Y, X) 四象限正切-1。返回双重
atan2f (Y, X) 四象限正切-1。返回浮动。
c# 量化(Y, X) 四象限正切-1。返回双重

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

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

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

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

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

角度计算时间

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

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

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

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

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

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

应用示意图

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

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

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

图12:小小的3.2应用示意图
图12:小小的3.2应用示意图

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

结论

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

与本应用说明一起使用的Arduino .ino草图文件在快板软件门户上提供。注册“ALS31300”设备以查看源代码。

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

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

查看源代码例子

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

附件B:很小的管脚说明书

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

图13:小小的3.2管脚说明书
图13:小小的3.2管脚说明书

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