- I am using a TinyPICO Nano (ESP32) to read values from a MPU6050 gyro/accelerometer using I2C.
- The MPU is on a GY-521 breakout board (schematics here).
- The MPU specs state that I2C clock should be 400 kHz.
- As demonstrated by the code below, a single reading at that clock speed requires almost 40 ms, which seems huge.
- Increasing the clock speed to 600 kHz reduces the time required for a single reading to 3 ms.
- In both cases the readings seem accurate.
- Experimenting yields good results up to 1.2 MHz, with negligible time gains (down to 2.6 ms)
Code:
Code: Select all
from machine import Pin, I2C
from imu import MPU6050
from time import sleep_ms, ticks_ms, ticks_us, ticks_diff
for f in [6e5, 4e5]:
i2c = I2C(0, scl = Pin(22), sda = Pin(21), freq = int(f))
imu = MPU6050(i2c)
for _ in range(8):
sleep_ms(50)
now = ticks_us()
imu.gyro.xyz
diff = ticks_diff(ticks_us(),now)
print('freq = %d kHz, uses %d us, accel = %s, gyro = %s' % (int(f)/1000, diff, imu.accel.xyz, imu.gyro.xyz))
print()
Code: Select all
freq = 600 kHz, uses 2862 us, accel = (0.40625, 0.5942383, 0.6477051), gyro = (-4.320611, 0.5954198, -0.1526718)
freq = 600 kHz, uses 3080 us, accel = (0.4006348, 0.5837402, 0.6489258), gyro = (-3.847328, 0.4961832, -0.1374046)
freq = 600 kHz, uses 3089 us, accel = (0.3962402, 0.5895996, 0.6398926), gyro = (-4.045802, 0.6641222, -0.06870229)
freq = 600 kHz, uses 3120 us, accel = (0.4047852, 0.5883789, 0.6535645), gyro = (-3.961832, 0.7099237, -0.3282443)
freq = 600 kHz, uses 3083 us, accel = (0.4025879, 0.5871582, 0.6469727), gyro = (-4.21374, 0.4656488, -0.389313)
freq = 600 kHz, uses 3068 us, accel = (0.40625, 0.5917969, 0.6411133), gyro = (-3.969466, 0.5725191, 0.04580153)
freq = 600 kHz, uses 3048 us, accel = (0.4086914, 0.5869141, 0.6508789), gyro = (-4.160306, 0.5801527, -0.129771)
freq = 600 kHz, uses 3094 us, accel = (0.4040527, 0.583252, 0.6513672), gyro = (-3.984733, 0.351145, -0.2519084)
freq = 400 kHz, uses 38464 us, accel = (0.402832, 0.5881348, 0.6462402), gyro = (-3.862595, 0.4198473, -0.2519084)
freq = 400 kHz, uses 38508 us, accel = (0.4025879, 0.5895996, 0.654541), gyro = (-3.80916, -0.03816794, -0.2137404)
freq = 400 kHz, uses 38642 us, accel = (0.4160156, 0.5878906, 0.6477051), gyro = (-4.465649, 0.4122138, 0.007633588)
freq = 400 kHz, uses 38657 us, accel = (0.4033203, 0.5915527, 0.6464844), gyro = (-3.687023, 0.6030535, 0.03053435)
freq = 400 kHz, uses 38650 us, accel = (0.4008789, 0.5864258, 0.6381836), gyro = (-3.343511, 1.900763, 1.137405)
freq = 400 kHz, uses 38640 us, accel = (0.4084473, 0.590332, 0.6606445), gyro = (-4.122138, -0.7480916, -0.3435115)
freq = 400 kHz, uses 38723 us, accel = (0.3981934, 0.5842285, 0.6586914), gyro = (-1.954198, -0.3664122, -0.3587786)
freq = 400 kHz, uses 38678 us, accel = (0.40625, 0.5871582, 0.6447754), gyro = (-2.946565, -1.21374, -0.6641222)