cancel
Showing results for 
Search instead for 
Did you mean: 

VL53L0X Configuration

BHakes
Visitor

Hello!

We use the VL53L0X as a time-of-flight sensor on a custom PCB. We used Arduino to configure and read the VL53L0X during development of our embedded system. Now later in development, we find differences between Arduino readings and readings taken from our Linux-based Embedded System (LES). I am investigating what differences exist between our Arduino application used during development and the application running on the LES. While not every sensor is showing shifts in range measurement, the worst case shifts are 6-7mm difference and repeatable.

I have collected all I2C communication with the VL53L0X from boot to when we enter the measurement loop for both Arduino and LES hosts. I see some differences and have investigated what I can, but I have a hard time understanding what exactly those differences mean without a register map and descriptions. I understand ST will not provide this information, so I am hoping you can instead provide any insight on my below questions. 

The main differences I see are when we read the SPAD map (registers 0xB0-0xB5) from the sensor during boot. My understanding is that ST does some calibration to account for part-to-part variation.Those calibration factors are stored in VL53L0X internal registers (0xB0-0xB5) and the host is responsible to read those values and store them. At what point are they used again, and why does the host need to store them? In our application we write them back to the same locations we read them from, although sometimes the data appears modified. The SPAD map configuration is currently my biggest source of confusion.

Another difference I've noticed is when we read the 0x83 register. No definition is given for what this address is, but we do some bitwise operations and write the data back to register 0x83. Could you briefly explain what this register is for?

Lastly, the final difference captured showed different data being written to the SYSTEM_INTERMEASUREMENT_PERIOD register and subsequent registers (0x04-0x08). This appears to be the delay between when one measurement ends and the next begins. I think this could be due to how sensor variation is handled as I don't see any source code to calculate a variable intermeasurement time. Can you confirm if the sensors provide values describing timing variation to account for part variability?

Beyond what I've described above, the Arduino and LES are operating the sensor in the same way, under the same conditions, in the same application. Any support would be much appreciated!

Kind Regards,

Brycen

0 REPLIES 0