采用ALS31300和ALS3133霍尔效应集成电路的3D线性或2D角度传感

采用ALS31300和ALS3133霍尔效应集成电路的3D线性或2D角度传感

下载PDF版本

韦德·布辛和罗伯特·贝特,
亚博棋牌游戏Allegro微系统有限责任公司

摘要

本应用说明描述了Allegro MicroSystems公司的ALS31300和ALS313 3D磁性线性霍尔效应传感器集成电路(IC)在3D线性传感和2D角度传感应用中的使用。本申请注释中对ALS31300的引用也适用于ALS31313,但ALS31300采用10触点DFN亚博棋牌游戏封装,而ALS31313采用TSSOP-8封装。亚博尊贵会员

详细示例包括将寄存器内容转换为高斯以用于线性感测,以及组合来自两个轴的数据以计算用于旋转角度感测的角度。其他章节描述了通过I/O接口读取和写入ALS31300上寄存器的过程2C接口,应用程序示意图,以及相关的Arduino示例代码。完整的源代码,包括Arduino.ino草图文件,请参见附录A。Arduino.ino草图文件也可以在Allegro的软件门户。

介绍

ALS31300 3D线性霍尔效应传感器IC为用户提供了准确、低成本的非接触式线性和角度位置传感解决方案。用它的I2ALS31300通过C接口,可以方便地访问单个总线上多个传感器的角度和线性信息(见图1)。

本应用说明中列出的示例使用“Teensy”3.2微控制器(https://www.pjrc.com/teensy/teensy31.html)还有阿杜伊诺(https://www.arduino.cc/)软件环境。虽然本文档的重点是使用Teensy3.2实现,但实践和示例代码直接转换到其他Arduino板。

2C Overview

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

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

下面图1所示的框图说明了I2C总线拓扑。

图1:显示主设备和从设备的I2C总线图
图1:I2显示主设备和从设备的C总线图

Data Transmission

通过I传输数据2C由以下顺序列出的几个步骤组成。

  1. 启动条件:由SDA线的负边缘定义,由主设备启动,而SCL为高。
  2. 地址周期:7位从机地址,加1位表示写(0)或读(1),后跟一个确认位。
  3. 数据周期:读取或写入8位数据,后跟一个确认位。这个循环可以重复多字节的数据传输。写操作的第一个数据字节可以是寄存器地址。有关更多信息,请参阅以下部分。
  4. 停止条件:由SDA线上的正边缘定义,而SCL为高。

除了显示启动或停止条件,SDA must remain stable while the clock signal is high. SDA may only change states while SCL is low. It is acceptable for a Start or Stop condition to occur at any time during the data transfer. The ALS31300 will always respond to a Read or Write request by resetting the data transfer sequence.

时钟信号SCL由主机产生,而SDA线路根据数据传输的方向起输入或开漏输出的作用。I2C总线的时序总结在图2中的时序图中。这些名称的信号引用和定义可以在ALS31300产品介绍。

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

2C Bus Speeds

普通I2C总线速度为100kbps标准模式以及10 kbpslow-speed mode,但也允许任意低的时钟频率。最新修订的I2C协议can主机
更多节点并以更快的速度运行,包括400 kbps快速模式和1 Mbps快速模式增强(Fm+)都由ALS31300支持。请注意,规范概述了额外的3.4 Mbps高速模式ALS31300不支持。

I的实施2C与ALS31300

ALS31300只能作为从I操作2C设备,因此它不能在I设备上启动任何事务2C总线。

ALS31300将始终通过重置数据传输顺序来响应读或写请求。读/写位的状态设置为低(0)表示写入周期,设置为高(1)表示读取周期。主设备监控确认位,以确认从设备(ALS31300)正在响应主设备发送的地址字节。当ALS31300将7位从机地址解码为有效地址时,它会在第九个时钟周期内将SDA拉低。当主设备请求数据写入时,ALS31300在时钟周期内将SDA拉低,跟随数据字节以指示数据已成功接收。在发送地址字节或数据字节之后,主机必须在第九个时钟周期之前释放SDA线路,从而允许进行握手过程。

The default slave address for the ALS31300 is 110xxxx, where the four LSB bits are set by applying different voltages to the address pins ADR0 and ADR1. Both address pins have been set to ground for this demonstration as shown by the schematic in Figure 11. For information on selecting other I2C从机地址,请参阅ALS31300产品介绍. 当两个引脚都接地时,默认I2C从机地址是96。

写入周期概述

ALS31300上访问寄存器的写入周期如下所示。

  1. 主启动条件
  2. Master sends 7-bit slave address and the write bit (0)
  3. 主机等待ALS31300的确认
  4. 主机发送8位寄存器地址
  5. 主机等待ALS31300的确认
  6. 主机发送31:24位数据
  7. 主机等待ALS31300的确认
  8. 主机发送23:16位数据
  9. 主机等待ALS31300的确认
  10. 主机发送15:8位数据
  11. 主机等待ALS31300的确认
  12. 主机发送7:0位数据
  13. 主机等待ALS31300的确认
  14. 主机启动停止条件

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

图3:I2C写时序图
图3:I2C Write Timing Diagram

客户写访问

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

要进入客户访问模式,必须通过I2C接口。The command consists of a serial write operation with the address and data values shown in Table 1. There is no time limit for when the code may be entered. Once the customer access mode is entered, it is not possible to change access modes without powercycling the device.

表1:客户访问代码

访问模式 地址 Data
客户访问 0x35型 0x2C413534

阅读周期概述

ALS31300上访问寄存器的读取周期如下所示。

  1. 主启动条件
  2. Master sends 7-bit slave address and the write bit (0)
  3. 主机等待ALS31300的确认
  4. 主机发送8位寄存器地址
  5. 主机等待ALS31300的确认
  6. 启动一个启动条件。这一次被称为重启条件
  7. 主机发送7位从机地址和读取位(1)
  8. 主机等待ALS31300的确认
  9. 主机接收31:24位数据
  10. 主机向ALS31300发送ACK
  11. 主机接收23:16位的数据
  12. 主机向ALS31300发送ACK
  13. 主机接收15:8位的数据
  14. 主机向ALS31300发送ACK
  15. 主机接收7:0位的数据
  16. 主机发送NACK到ALS31300
  17. 主机启动停止条件

2C read sequence is further illustrated in the timing diagrams below in Figure 4.

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

图4中的时序图显示了正在传输的单个寄存器位置的全部内容(位31:0)。或者,I2C Master may choose to replace the NACK with an ACK instead, which allows the read sequence to continue. This case will result in the transfer of contents (bits 31:24) from the following register, address + 1. The master can then continue acknowledging, or issue the not-acknowledge (NACK) or stop after any byte to stop receiving data.

注意,读取只需要初始寄存器地址,这样可以更快地检索数据。但是,当使用单个读取命令时,这将数据检索限制为顺序寄存器。当主机提供不确认位和停止位时,ALS31300停止发送数据。如果要读取非顺序寄存器,则必须发送单独的读取命令。

2X、Y、Z和温度数据的C读回模式

ALS31300 I2C控制器具有多种模式,方便了重复轮询X、Y、Z和温度数据的过程。这些选项包括单模式、快速环路模式和全环路模式。

单模

A single write or read command to any register—this is the default mode and is best suited for setting fields and reading static registers. If desired, this mode can be used to read X, Y, Z and Temperature data in a typical serial fashion, but fast or full loop read modes are recommended for high-speed data retrieval.

快速循环模式

快速循环模式提供X、Y、Z和温度值的连续读取,但仅限于X、Y、Z的高8位和温度的高6位。此模式旨在成为以截断分辨率为代价从IC读取数据的时间效率高的方法。图5中的流程图描述了快速循环模式。

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

全循环模式

全循环模式提供X、Y、Z和温度数据的连续读取,分辨率为12位。这是推荐的模式,为用户想要一个更高的数据率为X,Y,Z和温度与全分辨率。图6中的流程图描述了全循环模式。

图6:全循环模式
图6:全循环模式

下表2进一步描述了循环模式。

表2:ALS31300循环读取模式

代码(二进制) 模式 说明
00 Single 没有循环。与默认I类似2C。
01 快速循环 十、 Y,Z和温度场
循环。X、Y和Z的最大有效位为8;6
温度的MSB是循环的。
10 全回路 十、 Y,Z和温度场
循环。完整的12位分辨率字段
是循环的。
11 Single 与代码0相同。

要设置读取循环模式,请根据表2将地址0x27处的位3:2设置为所需的代码值。

磁场强度寄存器

图7:DFN封装的磁轴(不按比例)
图7:ALS31300 DFN封装的磁轴(左)
和ALS31313 TSSOP包(右)(不按比例)

磁场强度寄存器包含与ALS31300看到的三个轴中每个轴上的测量磁场成比例的数据。X、Y和Z磁数据的寄存器地址和位字段如表3所示。X、Y和Z轴的方向如图7所示。

必须将每个轴的MSB和LSB串联起来,以解析完整的12位磁场数据。参考附录A,获取各种技术的示例代码,以轮询和连接来自ALS31300的磁数据。

表3:磁场强度寄存器

地址 姓名 说明 R/W公司
0x28型 31:24 X轴MSB 8位信号,与X方向上8位场强成比例。
23:16 Y轴MSBs 8位信号,与Y方向上磁场强度的上8位成比例。
15:8 Z轴MSBs 8位信号与Z方向上磁场强度的上8位成比例。
0x29码 19:16 X轴LSB 4位信号与X方向上较低的4位场强成比例。
15:12 Y轴LSB 4位信号与Y方向上较低的4位场强成比例。
11:8 Z轴LSB 4位信号与Z方向上较低的4位场强成比例。

温度传感器寄存器

ALS31300的温度寄存器如下表5所示。

表4:温度寄存器

地址 姓名 说明 R/W公司
0x28型 5:0 Temperature
最高有效位
6位信号与
温度高6位。
0x29码 5:0 Temperature
最低有效位
6位信号与
降低6位温度。

计算测量场

本例中,ALS31300的满标度范围为500高斯,灵敏度为4 LSB/高斯。

该过程从MSB和LSB寄存器的完整8字节读取开始,以构造一个12位2的补码有符号值。当组合寄存器时,所有数据必须在单个8字节读取中读取,否则结果将是两个独立样本在时间上的组合。12位数据按表5组合。

表5:MSB和LSB组合数据

钻头 11 10 9 8 7 6 5 4 2 1 0
DATA MSB数据 LSB数据

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

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

组合数据{MSB;LSB}=1100_u0110。十进制等效值=–1018,可通过除以设备灵敏度(4 LSB/高斯)转换为高斯。

gauss=–1018 LSB÷4 LSB⁄G=–254gauss

使用两个轴计算角度

外加磁场的角度可以使用ALS31300两轴的磁场数据和四象限反正切函数来计算。在这个例子中,圆盘磁铁是径向磁化的。图8中的图纸显示了与ALS31300的X、Y和Z轴相比,圆盘磁铁及其磁极的参考方向。在左侧方向上,磁铁围绕Z轴旋转,如白色箭头所示,同时使用X和Y感测磁铁。在右侧方向上,磁铁围绕Y轴旋转,同时使用X和Z通道感测。第三个方向可与绕X轴旋转的磁铁一起使用,并使用Y和Z进行感应。

图8:ALS31300的径向磁铁和信号轴
图8:ALS31300(顶部)和ALS31313(底部)的径向磁铁和信号轴

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

表6:四象限弧Tan函数调用

程序 功能 说明
MATLAB软件 atan2(Y,X) 四象限棕褐色-1. 产生弧度。
atan2d(Y,X) 四象限棕褐色-1. 结果以度为单位。
阿杜伊诺 atan2(Y,X) 四象限棕褐色-1.右eturns double.
atan2f(Y,X) 四象限棕褐色-1. 返回浮点值。
C级# Atan2(Y,X) 四象限棕褐色-1.右eturns double.

有关计算XY、XZ和YZ轴组合角度的完整Arduino源代码,请参阅附录A。

转换过程可以概括为3个主要步骤,下面列出了这些步骤,并在图9的范围图中进行了标识。“单一”模式(表2)用于简化此示例。

  1. 读取请求由主机发起。
  2. 从机传输8字节的数据。
  3. 将磁矢量数据转换成角度值。

读取请求(框1)包括对设备的写入,指示将读取哪些寄存器。设备用8个字节的数据(X、Y、Z的8 MSB和6 MSB的温度,然后是X、Y、Z的4 LSB和6 MSB的温度)响应(框2)。

图9:I2C在无循环模式下读取8个数据字节。寄存器0x28和0x29。
图9:I2C在无循环模式下读取8个数据字节。
寄存器0x28和0x29。

角度计算时间

使用ALS31300完成角度计算的总时间取决于具体应用,但主要取决于用户微控制器的处理能力和速度。其他因素包括ALS31300的环路模式(表2)和I2C接口。本文档中的定时示例假设一个运行在72MHz的Teensy3.2微控制器,并配置I2C通信速度为1 MHz(快速模式+)。请注意,Teensy 3.2快速模式+I2C模式在720kHz左右工作。

图9中的示例是从ALS31300读取数据的简单方法,但它不是最快的。在第一次请求之后,可以消除启动读取的开销(图9中的框1)
through the use of loop modes on the ALS31300.

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

图10:I2C在全循环模式下读取8个数据字节。寄存器0x28和0x29。
图10:I2C在全循环模式下读取8个数据字节。
寄存器0x28和0x29。

请注意,框1只出现一次,但比图9中的无循环示例略长。在全循环模式下,读取请求包括对设备的写入,指示将读取哪个寄存器,然后进行读/写以设置全循环模式。有关如何实现无循环、快速循环和全循环读取模式,请参阅附录A中的完整源代码。

框3中的重复暂停显示了Teensy 3.2微控制器执行atan2f(x,y)功能所需的时间。在Teensy 3.2上,72 MHz下atan2f(x,y)函数的平均持续时间为30μs,而8个数据字节的传输时间为120μs。在全循环模式下,使用Teensy 3.2和ALS31300,可以每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 micro上SDA和SCL的引脚位置是用户可选择的,但必须在软件中声明。请参阅附录A中声明SDA和SCL引脚的源代码。

结论

ALS31300是一款多功能、微功耗的3D霍尔效应传感器IC。该IC可用于多轴线性位置或角度位置传感应用,并可配置为在高分辨率(12位)或中分辨率(8位)模式下运行。我亚博尊贵会员2C总线是高度可配置的,可以在1 Mbps到<10 kbps的总线速度下工作,上拉电压范围为1.8到3.3 V。IC还包括一个温度传感器,可以通过I2C接口。

与此应用说明一起使用的Arduino.ino草图文件位于Allegro的软件门户。右egister for the “ALS31300” device to view the source code.

ALS31300数据表可在//www.wangzuanquan.com/en/Products/Magnetic-Linear-And-Angular-Position-Sensor-ICs/Linear-Position-Sensor-ICs/ALS31300.aspx.
ALS31313数据表可在//www.wangzuanquan.com/en/Products/Magnetic-Linear-And-Angular-Position-Sensor-ICs/Linear-Position-Sensor-ICs/ALS31313.aspx.

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

下面的代码片段显示了与此应用程序一起使用的完整Arduino源代码。示例函数包括2C初始化,以单循环、快速循环和全循环模式从ALS31300读取数据,使用I2利用ALS31300的磁场数据计算角度和高斯。

查看示例源代码

完整的.ino Arduino草图可以在Allegro Microsystem的软件门户上的ALS31300设备选项卡下找到。要注册Allegro的软件门户并查看ALS31300源代码,请访问https://registration.allegromicro.com/login。

附录B:小皮诺传单

下面的皮诺特传单船与每个小3.2。PJRS还提供了以下链接:https://www.pjrc.com/teensy/card7a\u rev1.pdf。

图13:TEENSY 3.2的引脚传单
图13:TEENSY 3.2的引脚传单

本文件中包含的信息不构成Allegro就本文件主题向客户作出的任何陈述、保证、保证、担保或诱因。所提供的信息不能保证基于此信息的过程是可靠的,或者Allegro已经探索了所有可能的故障模式。客户有责任对最终产品进行充分的鉴定测试,以确保其可靠并满足所有设计要求。