标签: mpu6050

ESP8266 + Micropython:为什么我会定期用i2c读取来获得相同的值?

我写使用一些简单的代码MicroPython上Digistump橡树,这基本上是一个ESP8266接口板运行.我试图了解通过i2c定期读取传感器时看到的行为.

下面的代码(读取ACCEL_XOUT_HACCEL_XOUT_L寄存器的值)工作得很好:

>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True: 
...     h, l = bus.readfrom_mem(0x68, 0x3b, 2)
...     print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
Run Code Online (Sandbox Code Playgroud)

(该print语句只是从两个补码执行转换.)

正如预期的那样,当我移动imu时,打印出的加速度计值大致实时变化.

但如果我在循环中引入延迟,例如...

>>> import time
>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True: 
...     h, l = bus.readfrom_mem(0x68, 0x3b, 2)
...     print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
...     time.sleep(1) …
Run Code Online (Sandbox Code Playgroud)

accelerometer esp8266 micropython mpu6050

7
推荐指数
0
解决办法
557
查看次数

I2C 检测不到?硬件问题还是其他问题?

我一直在研究一些 i2c 示例。把它全部插在一起,我发现我需要安装 i2c-tools 包,然后使用 raspi-config 启用 I2C 系统。

WiringPi gpio 命令有一个 i2cdetect 命令的快捷方式,运行它会给出

在此处输入图片说明

前 3 周一切正常,检测到 68。我不明白是什么问题!!!谁能帮我解决这个问题。

i2c raspberry-pi3 mpu6050

5
推荐指数
1
解决办法
1万
查看次数

MPU-6050:正确从 FIFO 寄存器读取数据

介绍

MPU-6050 是一种流行的模块,包含温度传感器、加速度计和陀螺仪。用户可以通过 I2C 或 SPI 读取传感器信息。有两个文件可公开用于从 IC 寄存器中读取数据。这些是:

  1. MPU-6000 和 MPU-6050 寄存器映射和描述文档

  2. MPU-6000 和 MPU-6050 产品规格


语境

由于总线通信延迟,通过 I2C 读取 IMU 的各个寄存器会使样本随时间偏移。因此,传感器的 X、Y 和 Z 轴寄存器的顺序读取不同步。为了解决这个问题,该器件提供了一个 1024 字节的内部 FIFO 队列。配置为推送到队列的数据以采样率推送到一起。因此读取 FIFO 会产生同步数据。

见(2),第 7.17 节

MPU-60X0 包含一个 1024 字节的 FIFO 寄存器,可通过串行接口访问。FIFO 配置寄存器决定将哪些数据写入 FIFO。可能的选择包括陀螺仪数据、加速度计数据、温度读数、辅助传感器读数和 FSYNC 输入。FIFO 计数器会跟踪 FIFO 中包含多少字节的有效数据。FIFO 寄存器支持突发读取。中断函数可用于确定新数据何时可用


问题

数据表指定为了从 FIFO 读取,您必须执行以下操作:

  1. 启用 FIFO(位 6,寄存器0x6A,文档 (1),第 4.29 节)
  2. 使用要推送的传感器信息配置 FIFO(注册0x23,文档 (1),第 4.7 节)。我通过分别设置第 6、5、4 和 3 位来启用XG_FIFO_ENYG_FIFO_ENZG_FIFO_EN和 …

i2c mpu6050 esp32

4
推荐指数
1
解决办法
3349
查看次数