使用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总线是一种同步的两线串行通信协议,它在两个或多个设备之间提供全双工接口。总线指定两个逻辑信号:
- 串行时钟线(SCL)输出由主机。
- 串行数据线(SDA)输出由主或从。
图1所示的框图说明了I2C总线拓扑。
数据传输
通过I2C语言由以下顺序列出的几个步骤组成。
- 启动条件:由SDA线的负边定义,当SCL较高时由Master启动。
- 地址周期:7位从地址,1位表示写(0)或读(1),后面是一个确认位。
- 数据周期:读取或写入8位数据,然后是一个确认位。这个循环可以重复多个字节的数据传输。写操作的第一个数据字节可以是寄存器地址。有关更多信息,请参阅以下部分。
- 停止条件:当SCL高时,由SDA线上的正边定义。
除了指示启动或停止条件外,SDA必须在时钟信号高时保持稳定。SDA只能在SCL较低时改变状态。在数据传输期间的任何时候发生启动或停止条件是可以接受的。ALS31300总是通过重置数据传输序列来响应读或写请求。
时钟信号SCL由主控机产生,而SDA线根据数据传输的方向作为输入或漏极输出。I2C总线的时序图如图2所示。这些名称的信号引用和定义可以在ALS31300数据表。
我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上寄存器的写周期如下所示。
- Master启动启动条件
- 主发送7位从地址和写位(0)
- Master等待来自ALS31300的ACK
- Master发送8位寄存器地址
- Master等待来自ALS31300的ACK
- Master发送31:24位的数据
- Master等待来自ALS31300的ACK
- Master发送23:16位的数据
- Master等待来自ALS31300的ACK
- Master发送15:8位的数据
- Master等待来自ALS31300的ACK
- Master发送7:0位的数据
- Master等待来自ALS31300的ACK
- Master启动停止条件
我的2下面的时序图进一步说明了C的写入序列。
客户写访问
在写入ALS31300中的任何易失性寄存器或EEPROM之前,必须向设备发送访问码。如果未启用客户访问模式,则不允许对设备进行写操作。该规则唯一的例外是SLEEP位,无论访问模式如何,都可以写入该位。此外,可以在任何时间读取任何寄存器或EEPROM位置,而不管访问模式是什么。
要进入客户访问模式,必须通过I发送访问命令2C接口。该命令由一个串行写操作组成,地址和数据值如表1所示。输入代码没有时间限制。一旦进入客户接入模式,就不可能在不重新充电的情况下更改接入模式。
表1:客户访问代码
访问模式 | 地址 | 数据 |
客户访问 | 0 x35 | 0 x2c413534 |
读周期概述
访问ALS31300上寄存器的读周期如下所示。
- Master启动启动条件
- 主发送7位从地址和写位(0)
- Master等待来自ALS31300的ACK
- Master发送8位寄存器地址
- Master等待来自ALS31300的ACK
- 启动启动条件。这一次它被称为重启条件
- 主发送7位从地址和读位(1)
- Master等待来自ALS31300的ACK
- Master接收31:24位的数据
- Master发送ACK给ALS31300
- Master接收23:16位的数据
- Master发送ACK给ALS31300
- Master接收15:8位的数据
- Master发送ACK给ALS31300
- Master接收7:0位的数据
- Master发送NACK给ALS31300
- Master启动停止条件
我的2C读序列在图4的时序图中进一步说明。
图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中的流程图描述了快速循环模式。
完整的循环模式
全循环模式提供连续读取X, Y, Z和温度数据全,12位分辨率。对于希望在X、Y、Z和Temperature的全分辨率下获得更高的数据速率的用户,这是推荐的模式。图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中所需的代码值。
磁场强度记录器
如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感应。
标准正切函数,即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)来简化这个示例。
- 读请求由主服务器发起。
- 从Slave传输8字节的数据。
- 将磁矢量数据转换为角度值。
读请求(框1)包括对设备的写,指示哪些寄存器将被读。设备响应(框2)8字节的数据,(X, Y, Z的8 MSB和6 MSB的温度,接着是X, Y, Z的4 LSB和6 MSB的温度)。
角的计算时间
使用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中的相同步骤。
注意,框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的应用程序原理图。
Teensy 3.2微控制器的支持电路如图12所示的原理图。
参考图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。
本文件所包含的信息不构成Allegro就本文件标的向客户作出的任何陈述、保证、保证或诱惑。所提供的信息不能保证基于这些信息的流程是可靠的,也不能保证Allegro已经探索了所有可能的故障模式。客户有责任对最终产品进行充分的合格测试,以确保其可靠并满足所有设计要求。