使用ALS31300霍尔效应IC进行3 d线性或2 d角度感应
使用ALS31300霍尔效应IC进行3 d线性或2 d角度感应
作者:韦德接吻和罗伯特软化
亚博棋牌游戏快板微系统有限责任公司
摘要
本应用注释介绍了将快亚博棋牌游戏板微系统的ALS31300 3 d线性霍尔效应传感器集成电路(IC)用于3 d线性感应和2 d角度感应应用。详细的示例包括将寄存器内容转换为高斯度量以进行线性感测,并组合来自两个轴的数据以计算旋转角度感测的角度。其他章节通过我2C接口,应用程序示意图,以及关联的Arduino示例代码说明读取和写入ALS31300寄存器的流程。请见附件的了解所有源代码,包括Arduino .ino草图文件。Arduino .ino草图文件还在快板软件门户上提供。
简介
ALS31300 3D线性霍尔效应传感器IC为用户提供针对非接触式线性和角度位置传感的准确,低成本的解决方案。通过我2Ç接口,ALS31300在单一总线上提供来自多个传感器的角度和线性信息(见图1)。
本应用说明中列出的例子利用“小小的”3.2微控制器(https://www.pjrc.com/teensy/teensy31.html)和Arduino的(https://www.arduino.cc/) 软件环境。虽然本文件侧重于利用小小的3.2的实施,但操作方法和示例代码可直接用于其他Arduino开发板。
我2C概览
我2C总线是同步的双线串行通信协议,提供两到多个设备之间的全双工接口。总线指定两种逻辑信号:
- 主设备的串行时钟线(SCL)输出。
- 主设备或从设备的串行数据线(SDA)输出。
图1中显示的区块图展示了我2ç总线拓扑结构。
数据传输
数据在我2C上的传输包含以下步骤。
- 开始条件:由SDA线的下降沿定义,在SCL较高时由主设备发起。
- 地址循环:7 位从地址,加一个说明写 (0) 或读 (1) 的位,然后是一个应答位。
- 数据循环:。读取或写入8位数据,然后是一个应答位这个循环可以针对多字节数据传输而重复写的第一个数据字节可能是寄存器地址请见以下部分了解更多信息。
- 停止条件:由SDA线的上升沿定义,在sci高电平时发起。
除了指示开始或停止条件之外,SDA必须在时钟信号高电平时保持稳定.SDA只能在SCL低电平时改变状态。开始或停止条件可以在数据传输的任何时候发生.ALS31300将始终通过重设数据传输序列响应读或写请求。
时钟信号sci由主设备生成,而SDA线起到输入或开漏输出的作用,具体视数据传输的方向而定。图2所示的时序图说明了I2C总线的时序。ALS31300数据表提供这些名称的信号参考和定义。
我2C总线速度
常见的我2C总线速度是标准模式100 kbps的,低速模式10 kbps,但也允许使用其他较低的时钟频率。我2C协议的近期修订版本可以装载
更多节点,以更高速度运转,包括快速模式400 kbps和超快模式(FM +)1 Mbps的,而这些速度都受到ALS31300支持。请注意,规格说明书还列出了ALS31300不支持的高速模式3.4 Mbps的。
我使用ALS31300实施2C
ALS31300仅作为我2Ç从设备运行,因此不能在我2ç总线上发起任何事务。
ALS31300将始终通过重设数据传输序列响应读或写请求。读/写位状态设为低(0)则表示写循环,高(1)则表示读循环。主设备监测应答位,以确认从设备(ALS31300)响应主设备发送的地址字节.ALS31300将7位从地址解读为有效时,将通过在第九个时钟循环拉低SDA来应答。主设备请求数据写入时,ALS31300在时钟循环期间拉低SDA,然后通过一个数据字节表示数据已经成功接收。发送地址字节或数据字节后,主设备必须在第九次时钟循环之前释放SDA线,允许握手过程发生。
ALS31300的默认从地址是110xxxx,四个LSB位通过对地址引脚ADR0和ADR-应用不同电压而设置。在本演示中,两个地址引脚都设为接地,如图11所示如需。了解选择其他我2Ç从地址的信息,请参阅ALS31300数据表。两个地址引脚都接地时,默认我2Ç从地址为96。
写循环概览
ALS31300上访问寄存器的写循环如下文所示。
- 主设备发起开始条件
- 主设备发送 7 位从地址和写位 (0)
- 主设备等待ALS31300的ACK
- 主设备发送 8 位寄存器地址
- 主设备等待ALS31300的ACK
- 主设备发送 31:24 位数据
- 主设备等待ALS31300的ACK
- 主设备发送23:16位数据
- 主设备等待ALS31300的ACK
- 主设备发送 15:8 位数据
- 主设备等待ALS31300的ACK
- 主设备发送7:0位数据
- 主设备等待ALS31300的ACK
- 主设备发起停止条件
我2ç写序列在下文图3的时序图中进一步说明。
客户写入权限
在ALS31300中写入任何易失性寄存器或eepm之前,必须向设备发送存取代码。如果未启用客户存取模式,则不允许对设备写入。这一规则的唯一例外是睡眠位,其可以随意写入,无视存取模式。此外,任何寄存器或eepm位置都可以随时读取,无视存取模式。
如需进入客户存取模式,必须通过我2Ç接口发送存取命令。该命令包含连续的写入操作,以及地址和数据值,如表1所示。代码输入的时间无限制。进入客户存取模式后,必须反复开关设备电源才能更改存取模式。
表 1:客户存取代码
存取模式 | 地址 | 数码 |
客户存取 | 0X24 | 0x2C413534 |
读循环概览
ALS31300上访问寄存器的读取循环如下文所示。
- 主设备发起开始条件
- 主设备发送 7 位从地址和写位 (0)
- 主设备等待ALS31300的ACK
- 主设备发送 8 位寄存器地址
- 主设备等待ALS31300的ACK
- 发起开始条件。这次称为重启条件
- 主设备发送7位从地址和读位(1)
- 主设备等待ALS31300的ACK
- 主设备接收31:24位数据
- 主设备发送ACK到ALS31300
- 主设备接收23:16位数据
- 主设备发送ACK到ALS31300
- 主设备接收15:8位数据
- 主设备发送ACK到ALS31300
- 主设备接收7:0位数据
- 主设备发送NACK到ALS31300
- 主设备发起停止条件
我2ç读序列在下文图4的时序图中进一步说明。
图 4 中的时序图显示传输单个寄存器位置的整个内容(位 31:0)。另外,我2C主设备还可以选择用ACK替换NACK,这将允许读序列继续。这种情况将导致从以下寄存器(地址 + 1)传输内容(位 31:24)。然后,主设备可以继续应答或发布非应答(纳)或在任何字节之后停止,以停止接收数据。
请注意,读取仅需要初始寄存器位置,因此可更快进行数据检索。然而,在使用单个读取命令时,这回将数据检索限制于序列寄存器。主设备提供非应答位和停止位时,ALS31300停止发送数据。如果要读取非序列寄存器,则必须发送单独的读取命令。
针对X,Y,Z和温度数据的我2C回读模式
ALS31300我2C控制器有若干模式,可方便地反复轮询X, Y, Z和温度数据。这些选项包括单一模式、快速循环模式和完整循环模式。
单一模式
向寄存器发出的单个写或读命令 - 这是默认模式,最适合设置字段和读取静态寄存器如有需要,这个模式可以被用于以典型的串行方式读取X,Y,Z和温度数据,但如需快速检索数据,建议使用快速循环模式或完整循环模式。
快速循环模式
快速循环可持续读取X, Y, Z和温度数据,但限于X, Y, Z的前8位和温度的前6位。这个模式是牺牲截断分辨率而从集成电路高效读取数据的模式。图 5 的流程图说明了快速循环模式。
完整循环模式
完整循环模式可持续读取12位全分辨率X, Y, Z和温度数据。如用户需要以更快的速度读取全分辨率的X, Y, Z和温度数据,则建议使用这个模式。图 6 的流程图说明了完整循环模式。
表 2 进一步说明了循环模式。
表2:ALS31300循环读取模式
代码(二进制) | 模式 | 描述 |
00 | 单 | 无循环,与默认我2C类似。 |
01 | 快速循环 | 循环读取X, Y, Z和温度字段。 循环读取X, Y, Z的8 MSB)和温度的6 最高有效位。 |
10 | 完整循环 | 循环读取X, Y, Z和温度字段。 循环读取12位全分辨率字段 。 |
11 | 单 | 与代码 0 相同。 |
如需设置读取循环模式,按照表2将地址0 x27的3:2位设为所需代码。
磁场强度寄存器
磁场强度寄存器包含与ALS31300读取的三个轴测得的磁场成比例的数据。X, Y和Z磁力数据的寄存器地址和位字段如表3所描述。X, Y和Z轴的方向在图7中定义。
每个轴的MSB和LSB必须连接,以得出完整的12位磁场数据。参考附录,了解用于轮询并从ALS31300关联磁数据的各种技术的示例代码。
表 3:磁场强度寄存器
地址 | 位 | 名字 | 描述 | R / W |
0×28 | 31:24 | X轴MSB | 8位信号与前8位X方向磁场强度成比例。 | R |
23:16 | Y轴MSB | 8位信号与前8位Y方向磁场强度成比例。 | R | |
很高 | Z轴MSB | 8位信号与前8位Z方向磁场强度成比例。 | R | |
0x29 | 19:16 | X轴LSB | 4位信号与后4位X方向磁场强度成比例。 | R |
十五12 | ÿ轴LSB | 4位信号与后4位Y方向磁场强度成比例。 | R | |
十一8 | Z轴LSB | 4位信号与后4位Z方向磁场强度成比例。 | R |
温度传感器寄存器
表5说明了ALS31300的温度寄存器。
表 4:温度寄存器
地址 | 位 | 名字 | 描述 | R / W |
0×28 | 5:0 | 温度 MSB |
6 位信号与前 6 位温度成比例 。 |
R |
0x29 | 5:0 | 温度 LSB |
6位信号与后6位温度成比例 。 |
R |
计算测得字段
在这个例子中,ALS31300的全量程为500高斯,灵敏度为4 LSB /高斯。
首先对MSB和LSB寄存器进行完整的8字节读取,构成12位的符号二进制补码值。结合寄存器时,所有数据必须在一次 8 字节读取中读取,否则结果将为两个独立样本的组合。12 位数据按照表 5 合并。
表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,除以设备敏感性(4 LSB /高斯)即可转换为高斯值。
高斯= -1018 LSB÷4 = LSB/G -254高斯
使用两个轴计算角度
外加磁场的角度可以使用ALS31300两个轴的磁性数据和四象限反正切函数计算。在这个例子中,一个盘式磁铁经过径向磁化。图8中的图纸说明冰球形磁铁及其磁极相对于ALS31300的X,Y和ž轴的参考方向。在左边的方向中,磁铁围绕ž轴旋转,如黑色箭头所示,同时通过X和ý感测磁力。在右边的方向中,磁铁围绕ÿ轴旋转,同时利用X和ž信道感测。第三个方向可以用于围绕X轴旋转,利用ÿ和ž感测的磁铁。
标准反正切函数,即tan ()-1,返回从-90°到90°的角度值。对于这个应用,需要使用四象限反正切函数返回-180°到180°的角度。此函数还可避免除以0的问题。表6列出了四象限反正切函数。
表 6:四象限反正切函数调用
程序 | 函数 | 描述 |
马铃薯 | 量化(Y, X) | 四象限正切-1。得出弧度。 |
atan2d (Y, X) | 四象限正切-1。得出角度。 | |
ARDUINO | 量化(Y, X) | 四象限正切-1返回双重。 |
atan2f (Y, X) | 四象限正切-1。返回浮动。 | |
c# | ATAN2(Y,X) | 四象限正切-1返回双重。 |
请参阅附件的了解计算XY, XZ和YZ轴组合角度的所有Arduino源代码。
转换过程可以概括为3个主要步骤,如下所列。图9的范围图亦有指明。为简化例子,使用“单一模式“(表2)。
- 主设备发起读请求。
- 从设备传输 8 字节数据。
- 磁矢量数据转换为角度值。
读请求(方框1)包含一次写入,说明将被读取的寄存器。设备返回(方框2)8字节数据,(X,Y,Z的MSB 8,温度的6个MBS,然后是X,Y,Z的4个LSB和温度的6 MSB)。
角度计算时间
使用ALS31300完成角度计算的总时间将视具体应用而变化,但主要由用户的微控制器的处理能力和速度决定。其他因素包括ALS31300的循环模式(表2)和我2C接口的通信频率。这个文件中的定时例子假设小小的3.2微控制器以72 MHz的频率运行,且我2C通信频率配置为1 MHz(快速模式+)。请注意,小小的3.2快速模式+我2C模式的运行频率约为720千赫。
图9的例子简单地说明了从ALS31300读取数据的情况,但不是最快的情况。通过在ALS31300上使用循环模式,在第一次请求后,即可消除发起读取(图9中的方框1)的内部整理自检。
图10中的范围图显示ALS31300设置为完整循环模式时的角度转换流。方框 1、2 和 3 仍然与图 9 的相同步骤对应。
请注意,方框 1 仅出现了一次,但略长于图 9 中的无循环模式。在完整循环模式中,读请求包含一次写入,说明将被读取的寄存器,然后包含一次读/写,设置完整循环模式。请参阅附件一个的完整源代码,了解如何实施无循环,快速循环和完整循环读取模式。
方框3中的重复暂停显示Teensy 3.2微控制器运行atan2f(X,Y)函数所花费的时间。频率为72兆赫的Teensy 3.2上运行atan2f(X,Y)函数的平均时长是30微秒,而8数据字节的传输时间是120微秒。使用Teensy 3.2和ALS31300的完整循环模式,每150微秒就可以计算一个新的角度值。
应用示意图
指图11中展示为ALS31300使用的应用示意图的图片。
小小的3.2微控制器的支持电路如图12中的示意图所示。
指图11和图12中标记为“SDA”和“sci的网,说明两个示意图之间的连接。请注意,小小的微控制器上的SDA和sci管脚位置由用户选择,但必须在软件中声明。指附件一个中声明SDA和sci管脚的源代码。
结论
ALS31300是高度通用的微功率3 d霍尔效应传感器集成电路。该集成电路可用于多轴线性位置,或角度位置感测应用用,可配置为在高分辨率(12位)或中等分辨率(8位)模式下运转。我2C总线可配置性高,可以在1 Mbps到< 10 kbps的总线速度下运转,上拉电压范围为1.8到3.3 V。该集成电路还包含可以通过我2Ç接口读取的温度传感器。
与本应用说明一起使用的Arduino的.ino草图文件在快板软件门户上提供。注册“ALS31300”设备以查看源代码。
附件:ALS31300和小小的3.2的完整Arduino源代码
下面的片段显示与本应用一同使用的完整Arduino的源代码。示例函数包括我2C初始化,在单一,快速和完整循环模式下从ALS31300读取,使用2ç写入数据到ALS31300,以及使用ALS31300的磁力数据计算角度和高斯值。
完整的Arduino草图文件在快板微系统的软件门户ALS31300设备选项卡下提供。如需注册快板的软件门户,查看ALS31300源代码,请访问https://registration.allegromicro.com/login。
附件B:TEENSY管脚说明书
下面的管脚说明书与小小的3.2一起发的货。PJRS还在以下链接提供:https://www.pjrc.com/teensy/card7a_rev1.pdf。
本文中所含的信息不构成快板就本文主题而对客户做出的任何表示,担保,确保,保证或诱导。本文所提供的信息并不保证基于此信息的流程的可靠性,亦不保证快板已探究了所有可能出现的故障模式。客户负责对最终产品进行充分的验证测试,以确保该产品是可靠的,并且符合所有设计要求。