VL53L0X API: Usage of the 6 limit checks, Ambient SPAD damper, Dmax Cal, etc
Hello,
I have spent some time reading through the VL53L0X API and all documentation related to this sensor.
I was hoping your team could clarify the usage of a few functions and features.
- "Pre-Range" vs "Final-Range"
- This distinction is made througout the API, but the two are never actually defined. I was reading this document on TOF principles and on pg.37/38 it mentions a technique where the integration period is divided into two halves, each with a different frequency. Is that what Pre/Final refers to? This is my first guess since the VCSEL periods are split like this (i.e. 14/10 or 18/14).
- Scheduler Sequence Steps
- Why are two of these disabled by default?
- Limit Checks:
- 0: SIGMA_FINAL_RANGE (mm)
- 1: SIGNAL_RATE_FINAL_RANGE (Mcps)
- 2: SIGNAL_REF_CLIP (????)
- 3: RANGE_IGNORE_THRESHOLD (Mcps/SPAD)
- 4: SIGNAL_RATE_MSRC (Mcps)
- 5: SIGNAL_RATE_PRE_RANGE (Mcps)
- What are the use cases for these, especially #2, #4, and #5?
- For RANGE_IGNORE_THRESHOLD, is this limit check meant to be a constant rate like the other limit checks, or should it be implemented as a dynamic rate?
- Specifically, is the RIT's XTalk rate meant to be the constant "XTalk Compensation rate" calculated by VL53L0X_PerformXTalkCalibration( ), or is it the variable rate which would need to be deducted from Total_Signal_Rate after each measurement?
- Similarly, for the # active SPADs which the XTalk rate would be divided by, is that a constant number (i.e. the highest number we see when the sensor is struggling to collect enough photons, usually around 190) or should it also be a variable, equal to the EffectiveSpadRtnCount returned by each measurement?
- Some of your staff have suggested normalizing this rate, which to me, suggests it is indeed meant to be a dynamic rate. So perhaps RIT ideally adjusts with each measurement, with a formula like:
- RIT = (( N * (Xtalk rate/# active SPADs)) * 200)
- Why is the limit check for SIGNAL_RATE_FINAL_RANGE enabled by default, but MSRC and PRE-RANGE limit checks are disabled by default
- For RANGE_IGNORE_THRESHOLD, is this limit check meant to be a constant rate like the other limit checks, or should it be implemented as a dynamic rate?
- Ambient SPAD Damper Factor/Threshold
- What are the use cases for these parameters?
- Dmax Calibration
- There isn't any documentation on why Dmax should be calibrated, but there are functions for doing this. What benefit would come of calibrating Dmax, and what is the proper procedure?
- Xtalk must be calibrated after SPADs and offset. Does Dmax have a correct placement in the overall calibration sequence?
- VL53L0X_GetMeasurementRefSignal( )
- Does this function work? Are there special conditions to make it work? In api.c (@ line 2621) it looks like the SIGNAL_REF_CLIP limit check must be enabled or else it returns the ERROR_INVALID_COMMAND status code.
- Why isn't MeasurementRefSignal / LastSignalRefMcps included in the RangingMeasurementData_t struct?
I have many, many more questions but if we could answer these it would be an terrific start.
Thank you!!
