3D用ALS31300和ALS31313霍尔效应IC的3D线性或2D角度感应

3D用ALS31300和ALS31313霍尔效应IC的3D线性或2D角度感应

下载版本

由Wade Bussing和Robert Bate,
亚博棋牌游戏快板微系统公司有限责任公司

摘要

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

详细示例包括将寄存器内容转换为高斯进行线性传感,并将来自两个轴的数据组合以计算旋转角度感测的角度。其他部分描述了通过i的读取和写入寄存器的过程2C接口,应用程序原理图和关联的Arduino示例代码。有关完整源代码的附录A,包括Arduino .INO草图文件。还可以使用Arduino .ino素描文件快板的软件门户。

介绍

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

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

2C概述

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

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

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

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

数据传输

数据传输到i上2C由下面序列中概述的几个步骤组成。

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

除了表示启动或停止条件外,SDA必须在时钟信号高时保持稳定。SDA只有在SCL较低时才可能改变状态。在数据传输期间的任何时候出现“开始”或“停止”条件都是可以接受的。ALS31300将始终通过重置数据传输序列来响应读取或写入请求。

时钟信号SCL由主设备生成,而SDA线根据数据传输的方向,SDA线用作输入或开漏输出。I2C总线的定时总结在图2中的时序图中。可以在这些名称的信号引用和定义中找到ALS31300数据表。

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

2C总线速度

普通的我2C总线速度为100 kbps标准模式还有10kbps低速模式,但也允许任意低时钟频率。最近的修订我2C协议可以托管
更多节点并以更快的速度运行,包括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,其中四个LSB位通过对地址引脚ADR0和ADR1施加不同的电压来设置。如图11中的原理图所示,两个地址引脚都被设置为接地。有关选择其他I2C从服务器地址,请参考ALS31300数据表.两个引脚都接地后,默认的I2C Slave地址为96。

写循环概述

访问ALS31300上寄存器的写周期概述如下。

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

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

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

客户写访问

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

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

表1:客户访问代码

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

读周期概述

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

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

2下面的图4中的时序图进一步说明了C的读取序列。

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

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

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

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

Als31300 I.2C控制器具有多种模式,可以在方便的方便地轮询X,Y,Z和温度数据的过程。这些选项包括单模,快循环模式和全循环模式。

单一的模式

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

快循环模式

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

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

全循环模式

全循环模式提供完整,12位分辨率的X,Y,Z和温度数据的连续读取。这是建议的用户,用于X,Y,Z和温度的更高数据速率,具有全分辨率。图6中的流程图描绘了全循环模式。

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

下面在表2中进一步描述循环模式。

表2:ALS31300循环读取模式

代码(二进制) 模式 描述
00 没有循环。类似于默认的i2C。
01. 快循环 x,y,z和温度场是
毛圈。8 MSBs for x,y和z;6
MSB用于温度循环。
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和lbs必须连接以解析完整的12位磁场数据。请参阅附录A,以查看和连接ALS31300中的磁数据的各种技术的示例代码。

表3:磁场强度寄存器

地址 比特 名称 描述 R / W.
0x28 31:24 X轴位元 8位信号与X方向上的场强的上8位成比例。 R
23:16 Y轴MSBS. 8位信号与y方向上的现场强度的上部8位成比例。 R
很高 Z轴位元 8位信号与Z方向上的上8位场强成正比。 R
0x29. 19:16 X轴lsb 4位信号与X方向下的低4位比例。 R
15:12 Y轴LSBS. 4位信号与Y方向上较低的4位场强成比例。 R
11:8 Z轴LSBS. 4位信号与Z方向上的低4位比例。 R

温度传感器寄存器

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

表4:温度寄存器

地址 比特 名称 描述 R / W.
0x28 5:0 温度
最高有效位
6位信号与
高温的6位。
R
0x29. 5:0 温度
lsb
6位信号与
低6位温度。
R

计算测量领域

对于该示例,ALS31300的全尺度范围为500高斯,具有4 LSB / GAUS的灵敏度。

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

表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,可以通过除以器件灵敏度(4lsb /gauss)转换为高斯。

高斯= -1018 LSB÷4lsb/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:四个象限弧形灯函数调用

程序 功能 描述
MATLAB atan2(y,x) 4象限晒黑-1.导致弧度。
atan2d (Y, X) 4象限晒黑-1.导致度数。
arduino. atan2(y,x) 4象限晒黑-1.返回两倍。
atan2f(y,x) 4象限晒黑-1.返回浮动。
c# 量化(Y, X) 4象限晒黑-1.返回两倍。

有关计算XY,XZ和YZ轴组合的角度,请参阅“全Arduino源代码附录A.

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

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

读取请求(框1)包括写入指示将读取的设备的设备组成。设备响应(框2),具有8个字节的数据,(8毫秒的X,Y,Z和6 MSB温度,然后是4LSB的X,Y,Z和6 MSB的温度)。

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

角的计算时间

使用ALS31300完成角度计算的总时间将取决于应用程序,但主要取决于用户微控制器的处理能力和速度。其他因素包括ALS31300的回路模式(表2)和通信频率的I2C接口。本文档中的定时示例假设在72 MHz上运行的青少年3.2微控制器,并配置了i2C通信速度为1 MHz(快速模式+)。注意Teensy 3.2快速模式+ i2C模式运行720 kHz。

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

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

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

请注意,框1只发生一次,但略长于图9中的No循环示例。在全循环模式下,读取请求由写入指示将读取哪个寄存器的设备,然后读取/写入设置全循环模式。请参阅附录A中的完整源代码如何实现任何循环,快速循环和全循环读取模式。

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

应用程序示意图

请参阅图11中的图像,示出了本文档中用于ALS31300的应用程序示意图。

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

微型3.2单片机的支持电路如图12所示原理图。

图12:青少年3.2应用原理图
图12:青少年3.2应用原理图

请参阅图11中标记为“SDA”和“SCL”的网,图12表示两个原理图之间的这些连接。注意,Teensy Micro上的SDA和SCL的引脚位置是用户可选择的,但必须以软件声明。请参阅附录A中的源代码,其中声明了SDA和SCL引脚。

结论

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

Arduino .ino草图文件使用的这个应用程序说明是可用的快板的软件门户。注册“ALS31300”设备以查看源代码。

ALS31300 datasheet可在//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.

附录 - 答:ALS31300和Teensy 3.2的全arduino源代码

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

查看示例源代码

完整的Arduino草图可在Allegro微系统的软件门户下的ALS31300设备标签。要注册Allegro的软件门户和查看ALS31300源代码,请访问https://registration.allegromicro.com/login。

附录b:小针头传单

每个Teensy 3.2的船舶下面的引脚传单。它也可从以下链接的PJR获取:https://www.pjrc.com/teensy/card7a_rev1.pdf。

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

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