从磁力计中获取有用的数据是一个挑战。首先,您不仅需要弄清楚如何获取数据,还需要考虑校准问题,然后将数据转换为有用的磁场测量数据。我们大多数人都想用磁力计作为指南针,所以下面将描述如何在第一个地方开始获取数据。将使用PMOD CMPS2..未来的帖子将描述如何校准和转换数据。
获取数据-快速启动
Pmod CMPS2使用I2C通信协议。下面是通过I2C控制器的伪代码从Pmod CMPS2获取一组磁力计数据的一系列命令。
-
PMOD CMPS2上的电源并在进一步操作之前等待10毫秒。
-
提供一个START条件,用一个写位调用设备ID
I2CBegin (0 xa0);//设备ID 0x30,写(0)位
-
等待收到来自Pmod CMPS2的ACK。
-
发送内部控制寄存器0(地址0x07)作为要通信的寄存器
I2CWrite (0 x07);//地址0x07对应控制寄存器0
-
等待收到来自Pmod CMPS2的ACK。
-
通过设置高位0和停止位来写入测量的命令。
I2CWrite (0 x01);//0x01启动数据采集
-
默认情况下,延迟至少7.92 mS,以允许Pmod CMPS2完成数据收集。
-
提供一个START条件,用一个写位调用设备ID
I2CBegin (0 xa0);//设备ID 0x30,写(0)位
-
等待收到来自Pmod CMPS2的ACK。
-
发送状态寄存器(0x03)作为要读取的寄存器
I2CWrite (0 x03);//表示您希望与地址0x03交互
-
提供一个START条件,用一个读取位调用设备ID
I2CBegin (0 xa1);//设备ID 0x30,读取(1)位
-
等待收到来自Pmod CMPS2的ACK。
-
循环SCL线路以接收SDA线路上的状态寄存器数据。通过重复步骤8到13,直到第0位设置为“1”,表示所有3个轴上的数据都可以被读取。
-
提供一个START条件,用一个写位调用设备ID
I2CBegin (0 xa0);//设备ID 0x30,写(0)位
-
等待收到来自Pmod CMPS2的ACK。
-
发送Xout LSB (0x00)对应的第一个寄存器地址作为要读取的寄存器。
I2CWrite (0 x00);//地址0x00作为第一个要读取的寄存器
-
提供一个START条件,用一个读取位调用设备ID
I2CBegin (0 xa1);//设备ID 0x30,读取(1)位
-
等待收到来自Pmod CMPS2的ACK。
-
循环SCL线以从SDA行中的X,Y和Z寄存器接收数据位,在每个数据字节之间提供ACK。PMOD CMPS2地址指针会自动移动到每个连续字节。通过发送nack后跟停止命令结束通信。
I2CReadMultiple (6);//读取6个字节,在接收到的每个字节和最后一个字节之后的NACK之间向从设备发送一个ACK
-
把读数转换成可用的数据。关于如何做到这一点的更多细节可以在另一篇文章中找到,或者可以访问Pmod CMPS2参考手册.
-
等待1/3的采集时间(默认为2.64 ms),再执行另一个测量。
不要忘记校准和转换从高斯单位到罗盘航向仍然需要,以获得准确的测量和把您的磁力计变成数字罗盘。如何正确校正磁力计的说明PMOD CMPS2.作为一个例子将在未来的帖子中出现,以及如何做正确的日期转换的说明。或者你现在可以通过上面直接链接的参考手册来访问这些指令。
如果您希望看到在Arduino IDE中写入的示例代码,我们如何从PMOD CMPS2获取,校准和转换数据,请参阅PMOD CMPS2资源中心.
对于任何意见或疑问,请在以下评论部分发布或访问Digilent论坛!
