使用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 3 d线性霍尔效应传感器IC为用户提供针对非接触式线性和角度位置传感的准确,低成本的解决方案。通过我2C接口,ALS31300在单一总线上提供来自多个传感器的角度和线性信息(见图1)。
本应用说明中列出的例子利用“小小的”3.2微控制器(https://www.pjrc.com/teensy/teensy31.html)和Arduino (https://www.arduino.cc/) 软件环境。虽然本文件侧重于利用小小的3.2的实施,但操作方法和示例代码可直接用于其他Arduino开发板。
我2C概览
我2C总线是同步的双线串行通信协议,提供两到多个设备之间的全双工接口。总线指定两种逻辑信号:
- 主设备的串行时钟线(sci)输出。
- 主设备或从设备的串行数据线(SDA)输出。
图1中显示的区块图展示了我2C总线拓扑结构。
数据传输
数据在我2C上的传输包含以下步骤。
- 开始条件:由SDA线的下降沿定义,在sci较高时由主设备发起。
- 地址循环:7 位从地址,加一个说明写 (0) 或读 (1) 的位,然后是一个应答位。
- 数据循环:读取或写入 8 位数据,然后是一个应答位。这个循环可以针对多字节数据传输而重复。写的第一个数据字节可能是寄存器地址。请见以下部分了解更多信息。
- 停止条件:由SDA线的上升沿定义,在sci高电平时发起。
除了指示开始或停止条件之外,SDA必须在时钟信号高电平时保持稳定。SDA只能在sci低电平时改变状态。开始或停止条件可以在数据传输的任何时候发生。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仅作为我2C从设备运行,因此不能在我2C总线上发起任何事务。
ALS31300将始终通过重设数据传输序列响应读或写请求。读/写位状态设为低 (0) 则表示写循环,高 (1) 则表示读循环。主设备监测应答位,以确认从设备(ALS31300)响应主设备发送的地址字节。ALS31300将7位从地址解读为有效时,将通过在第九个时钟循环拉低SDA来应答。主设备请求数据写入时,ALS31300在时钟循环期间拉低SDA,然后通过一个数据字节表示数据已经成功接收。发送地址字节或数据字节后,主设备必须在第九次时钟循环之前释放SDA线,允许握手过程发生。
ALS31300的默认从地址是110 xxxx,四个LSB位通过对地址引脚ADR0和ADR1应用不同电压而设置。在本演示中,两个地址引脚都设为接地,如图 11 所示。如需了解选择其他我2C从地址的信息,请参阅ALS31300数据表。两个地址引脚都接地时,默认我2C从地址为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
- 主设备发起停止条件
我2C写序列在下文图3的时序图中进一步说明。
客户写入权限
在ALS31300中写入任何易失性寄存器或eepm之前,必须向设备发送存取代码。如果未启用客户存取模式,则不允许对设备写入。这一规则的唯一例外是睡眠位,其可以随意写入,无视存取模式。此外,任何寄存器或eepm位置都可以随时读取,无视存取模式。
如需进入客户存取模式,必须通过我2C接口发送存取命令。该命令包含连续的写入操作,以及地址和数据值,如表 1 所示。代码输入的时间无限制。进入客户存取模式后,必须反复开关设备电源才能更改存取模式。
表 1:客户存取代码
存取模式 | 地址 | 数据 |
客户存取 | 0 x24 | 0 x2c413534 |
读循环概览
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 位数据
- 主设备发送纳到ALS31300
- 主设备发起停止条件
我2C读序列在下文图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 x28 | 31:24 | X轴MSB | 8位信号与前8位X方向磁场强度成比例。 | R |
23:16 | Y轴MSB | 8位信号与前8位Y方向磁场强度成比例。 | R | |
15:8 | Z轴MSB | 8位信号与前8位Z方向磁场强度成比例。 | R | |
0 x29 | 19:16 | X轴LSB | 4位信号与后4位X方向磁场强度成比例。 | R |
十五12 | Y轴LSB | 4位信号与后4位Y方向磁场强度成比例。 | R | |
十一8 | Z轴LSB | 4位信号与后4位Z方向磁场强度成比例。 | R |
温度传感器寄存器
表5说明了ALS31300的温度寄存器。
表 4:温度寄存器
地址 | 位 | 名称 | 描述 | R / W |
0 x28 | 5:0 | 温度 最高有效位 |
6 位信号与前 6 位温度成比例 。 |
R |
0 x29 | 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和Z轴的参考方向。在左边的方向中,磁铁围绕Z轴旋转,如黑色箭头所示,同时通过X和Y感测磁力。在右边的方向中,磁铁围绕Y轴旋转,同时利用X和Z信道感测。第三个方向可以用于围绕X轴旋转,利用Y和Z感测的磁铁。
标准反正切函数,即tan ()-1,返回从-90°到90°的角度值。对于这个应用,需要使用四象限反正切函数返回-180°到180°的角度。此函数还可避免除以 0 的问题。表 6 列出了四象限反正切函数。
表 6:四象限反正切函数调用
程序 | 函数 | 描述 |
MATLAB | 量化(Y, X) | 四象限正切-1。得出弧度。 |
atan2d (Y, X) | 四象限正切-1。得出角度。 | |
ARDUINO | 量化(Y, X) | 四象限正切-1。返回双重 |
atan2f (Y, X) | 四象限正切-1。返回浮动。 | |
c# | 量化(Y, X) | 四象限正切-1。返回双重 |
请参阅附件的了解计算XY, XZ和YZ轴组合角度的所有Arduino源代码。
转换过程可以概括为 3 个主要步骤,如下所列。图 9 的范围图亦有指明。为简化例子,使用“单一模式”(表2)。
- 主设备发起读请求。
- 从设备传输 8 字节数据。
- 磁矢量数据转换为角度值。
读请求(方框 1)包含一次写入,说明将被读取的寄存器。设备返回(方框2)8字节数据,(X, Y, Z的8 MSB)温度的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中框的重复暂停显示小小的3.2微控制器运行atan2f (x, y)函数所花费的时间。频率为72 MHz的小小的3.2上运行atan2f (x, y)函数的平均时长是30μs,而8数据字节的传输时间是120μs。使用小小的3.2和ALS31300的完整循环模式,每150μs就可以计算一个新的角度值。
应用示意图
指图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。该集成电路还包含可以通过我2C接口读取的温度传感器。
与本应用说明一起使用的Arduino .ino草图文件在快板软件门户上提供。注册“ALS31300”设备以查看源代码。
附件:ALS31300和小小的3.2的完整Arduino源代码
下面的片段显示与本应用一同使用的完整Arduino源代码。示例函数包括我2C初始化,在单一,快速和完整循环模式下从ALS31300读取,使用2C写入数据到ALS31300,以及使用ALS31300的磁力数据计算角度和高斯值。
完整的Arduino草图文件在快板微系统的软件门户ALS31300设备选项卡下提供。如需注册快板的软件门户,查看ALS31300源代码,请访问https://registration.allegromicro.com/login。
附件B:很小的管脚说明书
下面的管脚说明书与小小的3.2一起发的货。PJRS还在以下链接提供:https://www.pjrc.com/teensy/card7a_rev1.pdf。
本文中所含的信息不构成快板就本文主题而对客户做出的任何表示,担保,确保,保证或诱导。本文所提供的信息并不保证基于此信息的流程的可靠性,亦不保证快板已探究了所有可能出现的故障模式。客户负责对最终产品进行充分的验证测试,以确保该产品是可靠的,并且符合所有设计要求。