采用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概述

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

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

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

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

数据传输

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

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

除了表示开始或停止条件外,SDA必须保持稳定,而时钟信号很高。SDA可能只在SCL低时更改状态。在数据传输期间的任何时间发生开始或停止条件是可以接受的。ALS31300将始终通过重置数据传输序列来响应读取或写入请求。

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

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

2C总线速度

普通I2C总线速度为100kbps标准模式以及10 kbps低速模式,但也允许任意低的时钟频率。最新修订的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线路,从而允许进行握手过程。

ALS31300的默认从站地址为110xxxx,其中通过将不同的电压应用于地址引脚ADR0和ADR1来设置四个LSB位。如图11中的示意图所示,已将两个地址引脚设置为地面,如图11所示。有关选择其他I的信息2C从机地址,请参阅ALS31300产品介绍. 当两个引脚都接地时,默认I2C从机地址是96。

写入周期概述

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

  1. 主启动条件
  2. 主站发送7位从地址和写入位(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写时序图

客户写访问

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

要进入客户访问模式,必须通过I2C接口。该命令包括串行写入操作,其中包含表1中所示的地址和数据值。可以输入代码时的时间限制。输入客户访问模式后,不可能在没有电源的情况下更改访问模式。

表1:客户访问代码

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

阅读周期概述

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

  1. 主启动条件
  2. 主站发送7位从地址和写入位(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读取序列在图4中的下面的时序图中进一步示出。

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

图4中的时序图显示了正在传输的单个寄存器位置的全部内容(位31:0)。或者,I2C主站可以选择用ACK替换NACK,允许读取序列继续。这种情况将导致从以下寄存器中传输内容(比特31:24),地址+ 1。然后,主站可以继续确认,或者在任何字节之后发出NOT-ACKNOWLEDGE(NACK)或停止以停止接收数据。

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

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

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

单模

对任何寄存器的单个写入或读取命令 - 这是默认模式,最适合设置字段和读取静态寄存器。如果需要,该模式可用于以典型的串行方式读取X,Y,Z和温度数据,但建议快速或全循环读取模式以用于高速数据检索。

快速循环模式

快速循环模式提供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 没有循环。与默认I类似2C。
01 快速循环 十、 Y,Z和温度场
循环。X、Y和Z的最大有效位为8;6
温度的MSB是循环的。
10 全回路 十、 Y,Z和温度场
循环。完整的12位分辨率字段
是循环的。
11 与代码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 温度
最高有效位
6位信号与
温度高6位。
0x29码 5:0 温度
最低有效位
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
数据 MSB数据 LSB数据

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

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

组合数据{MSB;LSB}=1100_u0110。十进制等效值=–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(顶部)和ALS31313(底部)的径向磁铁和信号轴

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

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

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

有关计算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)
通过在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的软件门户。注册“ALS31300”设备以查看源代码。

ALS31300数据表可在//www.wasanxing.com/en/Products/Magnetic-Linear-And-Angular-Position-Sensor-ICs/Linear-Position-Sensor-ICs/ALS31300.aspx.
ALS31313数据表可在//www.wasanxing.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已经探索了所有可能的故障模式。客户有责任对最终产品进行充分的鉴定测试,以确保其可靠并满足所有设计要求。