使用ALS31300和ALS31313霍尔效应ic进行3D线性或2D角度传感

使用ALS31300和ALS31313霍尔效应ic进行3D线性或2D角度传感

下载版本

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

摘要

本应用说明描述了Allegro MicroSystems公司的ALS31300和ALS31313 3D磁线性霍尔效应传感器集成电路(ICs)在3D线性传感和2D角度传感应用中的使用。亚博棋牌游戏亚博尊贵会员ALS31300整个应用说明的参考也适用于ALS31313,除了ALS31300在一个10-接触DFN包中提供,而且ALS31313在一个TSSOP-8包中提供。

详细的例子包括将寄存器内容转换为高斯用于线性传感,并结合两个轴的数据来计算旋转角度传感的角度。其他部分描述了通过I读取和写入ALS31300寄存器的过程2C接口、应用程序原理图和相关的Arduino示例代码。完整的源代码见附录A,包括一个Arduino .ino草图文件。Arduino .ino草图文件也可以在快板的软件门户。

介绍

ALS31300 3D线性霍尔效应传感器IC为用户提供了精确、低成本的非接触线性和角位置传感解决方案。与我2C接口,ALS31300提供方便的访问角度和线性信息,从多个传感器在单一总线(见图1)。

本应用笔记所列的例子使用“Teensy”3.2微控制器(https://www.pjrc.com/teensy/teensy31.html)及Arduino (https://www.arduino.cc/)软件环境。虽然本文档的重点是使用Teensy 3.2实现,实践和示例代码直接转换到其他Arduino板。

2C概述

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

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

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

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

数据传输

通过I2C语言由以下顺序列出的几个步骤组成。

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

除了指示启动或停止条件外,SDA必须在时钟信号高时保持稳定。SDA只能在SCL较低时改变状态。在数据传输期间的任何时候发生启动或停止条件是可以接受的。ALS31300总是通过重置数据传输序列来响应读或写请求。

时钟信号SCL由主控机产生,而SDA线根据数据传输的方向作为输入或漏极输出。I2C总线的时序图如图2所示。这些名称的信号引用和定义可以在ALS31300数据表。

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

2C总线速度

普通的我2C总线速度为100 kbps标准模式还有10kbps低速模式,但也允许任意低的时钟频率。最近修订的I2C协议可以主机
更多的节点以更快的速度运行,包括400kbps快速模式和1 Mbps的快速模式+(Fm+),这些都是由ALS31300支持。请注意,规范概述了额外的3.4 Mbps高速模式ALS31300不支持的。

实现我的2C与ALS31300

ALS31300只能作为Slave I操作2因此,它不能在I上发起任何事务2C总线。

ALS31300总是通过重置数据传输序列来响应读或写请求。读/写位的状态设置为低(0)表示写周期,设置为高(1)表示读周期。主设备监视一个确认位,以确认从设备(ALS31300)正在响应由主设备发送的地址字节。当ALS31300将7位Slave地址解码为有效时,它通过在第9个时钟周期中拉低SDA来响应。当主服务器请求写数据时,ALS31300在时钟周期内将SDA拉低,紧跟在数据字节之后,表明数据已经成功接收。在发送一个地址字节或数据字节后,主机必须在第9个时钟周期之前释放SDA行,允许握手过程发生。

ALS31300的默认从地址为110xxxx,通过对地址引脚ADR0和ADR1施加不同的电压来设置四个LSB位。如图11中的原理图所示,两个地址引脚都被设置为接地。有关选择其他I的资料2C Slave地址,参见ALS31300数据表.两个引脚都接地,默认I2C从地址为96。

写循环概述

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

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

我的2下面的时序图进一步说明了C的写入序列。

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

客户写访问

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

要进入客户访问模式,必须通过I发送访问命令2C接口。该命令由一个串行写操作组成,地址和数据值如表1所示。输入代码没有时间限制。一旦进入客户接入模式,就不可能在不重新充电的情况下更改接入模式。

表1:客户访问代码

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

读周期概述

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

  1. Master启动启动条件
  2. 主发送7位从地址和写位(0)
  3. Master等待来自ALS31300的ACK
  4. Master发送8位寄存器地址
  5. Master等待来自ALS31300的ACK
  6. 启动启动条件。这一次它被称为重启条件
  7. 主发送7位从地址和读位(1)
  8. Master等待来自ALS31300的ACK
  9. Master接收31:24位的数据
  10. Master发送ACK给ALS31300
  11. Master接收23:16位的数据
  12. Master发送ACK给ALS31300
  13. Master接收15:8位的数据
  14. Master发送ACK给ALS31300
  15. Master接收7:0位的数据
  16. Master发送NACK给ALS31300
  17. Master启动停止条件

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

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

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

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

2C Readback mode for X, Y, Z and Temperature Data

ALS31300我2C控制器有多种模式,方便反复轮询X、Y、Z和温度数据的处理。这些选项包括单环模式,快环模式和全环模式。

单一的模式

对任何寄存器执行一个写或读命令——这是默认模式,最适合设置字段和读取静态寄存器。如果需要,可以使用这种模式以典型的串行方式读取X、Y、Z和Temperature数据,但对于高速数据检索,推荐使用快速或全循环读取模式。

快速循环模式

快速循环模式可连续读取X, Y, Z和温度值,但仅限于X, Y, Z的上8位和温度的上6位。这种模式是一种从IC读取数据的省时方式,但代价是截断分辨率。图5中的流程图描述了快速循环模式。

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

完整的循环模式

全循环模式提供连续读取X, Y, Z和温度数据全,12位分辨率。对于希望在X、Y、Z和Temperature的全分辨率下获得更高的数据速率的用户,这是推荐的模式。图6中的流程图描述了全循环模式。

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

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

表2:ALS31300循环读模式

代码(二进制) 模式 描述
00 没有循环。类似于Default I2C。
01 快速循环 X, Y, Z和温度场为
毛圈。X、Y、Z各8个MSBs;6
温度的MSBs是循环的。
10 完整的循环 X, Y, Z和温度场为
毛圈。完整的12位分辨率字段
毛圈。
11 与代码0相同。

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

磁场强度记录器

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

如ALS31300所见,磁场强度寄存器包含的数据与三个轴上的测量磁场成正比。表3描述了X、Y和Z磁数据的寄存器地址和位域。X、Y和Z轴的方向定义在图7中。

每个轴的msb和lsb必须连接起来才能解析完整的12位磁场数据。请参阅附录A,以了解从ALS31300轮询和连接磁数据的各种技术的示例代码。

表3:磁场强度寄存器

地址 的名字 描述 R / W
0 x28 31:24 X轴位元 8位信号与X方向场强的上8位成比例。 R
23:16 Y轴位元 8位信号与Y方向场强上8位成比例。 R
很高 Z轴位元 8位信号与Z方向上8位场强成比例。 R
0 x29 19:16 X轴lsb 4位信号与X方向上较低4位场强成比例。 R
十五12 Y轴lsb 4位信号与Y方向上较低4位场强成比例。 R
十一8 Z轴lsb 4位信号与Z方向上较低的场强4位成比例。 R

温度传感器寄存器

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

表4:温度寄存器

地址 的名字 描述 R / W
0 x28 5:0 温度
最高有效位
6位信号成比例
温度在6比特以上。
R
0 x29 5:0 温度
lsb
6位信号成比例
降低6比特的温度。
R

计算测量领域

对于这个例子,ALS31300的全量程是500高斯,给出了4 LSB/高斯的灵敏度。

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

表5:MSB和LSB组合数据

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

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

MSB = 1100 _0000
LSB = 0110。

组合数据{MSB;LSB} = 1100 _0000_0110。十进制的等效值= -1018,可以通过除以器件灵敏度(4lsb /gauss)转换为高斯。

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

用两轴计算角度

利用ALS31300的两轴磁数据和四象限弧切函数可以计算出施加磁场的角度。对于这个例子,圆盘磁铁是按直径磁化的。图8的图纸显示冰球磁铁的参考方向和他们的极点比较的X, Y,和Z轴的ALS31300。左方向为磁铁绕Z轴旋转(如白色箭头所示),用X和Y进行感应。右方向为磁铁绕Y轴旋转,用X和Z通道进行感应。第三方向可以使用一个围绕X轴旋转的磁铁和Y和Z感应。

图8:ALS31300的直径磁铁和信号轴
图8:ALS31300(上)和ALS31313(下)的直径磁铁和信号轴

标准正切函数,即tan()-1,返回的角度值范围从-90°到90°。对于这个应用程序,使用四象限arctan函数返回一个从-180°到180°的角度是很重要的。这个函数还避免了除0的问题。表6列出了四象限相切函数。

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

程序 函数 描述
MATLAB 量化(Y, X) 4象限谭-1.导致弧度。
atan2d (Y, X) 4象限谭-1.导致度。
ARDUINO 量化(Y, X) 4象限谭-1.返回两倍。
atan2f (Y, X) 4象限谭-1.返回浮点数。
c# 量化(Y, X) 4象限谭-1.返回两倍。

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

转换过程可以总结为3个主要步骤,如下所示,并在图9的范围图中标识。使用“Single”模式(表2)来简化这个示例。

  1. 读请求由主服务器发起。
  2. 从Slave传输8字节的数据。
  3. 将磁矢量数据转换为角度值。

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

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

角的计算时间

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

图9中的示例是一种从ALS31300读取数据的简单方法,但它不是最快的。在第一次请求之后,可以消除初始化读的开销(图9中的框1)
通过在ALS31300上使用环路模式。

图10中的示波器图显示了在全回路模式下设置ALS31300时的角度转换流。方框1、2和3仍然对应于图9中的相同步骤。

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

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

方框3中的重复暂停显示了Teensy 3.2微控制器执行atan2f(x,y)功能所需的时间。atan2f(x,y)函数在Teensy 3.2上72 MHz的平均持续时间为30 μs,而8个数据字节的传输时间为120 μs。使用Teensy 3.2和ALS31300在全环模式下,每150 μs可以计算一个新的角度值。

应用程序示意图

参考图11中的图像,该图像显示了整个文档中用于ALS31300的应用程序原理图。

图11:ALS31300应用原理图
图11:ALS31300应用原理图

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

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

参考图11和图12中标有“SDA”和“SCL”的网,表示这两个原理图之间的连接。注意,SDA和SCL在微处理器上的引脚位置是用户可选择的,但必须在软件中声明。请参阅附录A中声明SDA和SCL引脚的源代码。

结论

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

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

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

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

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

查看示例源代码

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

附录b:微小的pinout传单

下面的pinout传单与每Teensy 3.2船。它也可以从PJRS的以下链接获得:https://www.pjrc.com/teensy/card7a_rev1.pdf。

图13:TEENSY 3.2的Pinout传单
图13:TEENSY 3.2的Pinout传单

本文件所包含的信息不构成Allegro就本文件标的向客户作出的任何陈述、保证、保证或诱惑。所提供的信息不能保证基于这些信息的流程是可靠的,也不能保证Allegro已经探索了所有可能的故障模式。客户有责任对最终产品进行充分的合格测试,以确保其可靠并满足所有设计要求。