cancel
Showing results for 
Search instead for 
Did you mean: 

I did the calibration on offset on VL53L1X. Then get the offset value by calling getOffset() which is 1336. Use that in setOffset() in subsequent measurement. xTalk gives 15912. Cal distance used is 0.97m. But normal ranging at 2m is all wrong. Why?

PWan.1
Associate II
 
5 REPLIES 5
John E KVAM
ST Employee

I'm going to do a little guessing here.

The issue is that crosstalk affects the offset, and offset affects the crosstalk.

When doing the offset, use a bright reflective surface at close distance. A white sheet of paper at 14cm is a good start. With a target this close and this reflective, the crosstalk will not affect it much.

ONce you have the offset, start doing some ranging with a dark gray target. Find a place where the range under reprorts by 10 or 20%. Make sure the target diameter is at least 1/2 the distance to the target.

At 1M the target must be 50cm in diameter.

If I were you, I'd use a blacker target and try to find a closer distance. Just to make it easier.

With a darker target, the crosstalk photons will be a larger percentage of the overall photon count, so you will not have to use a 0.97M crosstalk calibration jig.

But assuming you have the procedure correct, then we have to talk units. Your offset is 13.36 mm. But the number comes out at 1336. Similarly the units of the Xtalk can be confusing. Try to insure what you are writing is what you are reading.

if you do the offset and crosstalk, you should range on the crosstalk target and get that distance.

did that happen? If not, I's suspect the crosstalk number is wrong. Try searching manually. Change the crosstalk if you range low, increase the crosstalk. If you range long decrease the crosstalk.

Then try to figure out why you got 15912 and what it should be. Note that crosstalk numbers are large and it takes quite a bit of change to affect the range.

Good luck,

  • john

If this or any post solves your issue, please mark them as 'Accept as Solution' It really helps. And if you notice anything wrong do not hesitate to 'Report Inappropriate Content'. Someone will review it.
PWan.1
Associate II

Thanks for your speedy reply. I read ST app notes and notice the xtalk calibration was done at 140mm. I used 0.97m is because this is where objects are passing underneath the sensor (nominal person's head from VL53L1X mounted on the door beam). Do I need to scale the number from getoffset() before plugging the number back using setoffset()? ie, I got 1336 from getoffset() but I should have been plugging in 13.36 back using setoffset()? UM2356 did mention about dividing by a factor of 512. I will follow your advice and retry. If my sensor gives me reasonable ranging data without offset/xtalk calibration, does that mean I can do without these calibrations? Note that for a people counting application, I really don't need 4m range. I only need 2m+ range. I did the cal because I want the system to work better if the person is less reflective to laser.

PWan.1
Associate II

There is a lens in my system. I came across AN1983 from Renesas on their TOF sensor xtalk calibration. It suggests using IR blocker directly above part of the lens that covers the photon detector in the calibration process. Do you think doing that helps in the case of VL53L1X? Their rationale is that the IR blocker stop photons reflecting from distance objects from reaching the detector. Only those reflected from the lens are reaching the detector. I like to hear your comment. THX.

John E KVAM
ST Employee

I built one of those for a customer who did not have the space on their manufacturing floor for a larger calibration area. My approach was to place a mirror between the TX and the RX side that reflected the transmitted photons away. And it works. Instead of aiming at a target, getting the distance, and comparing that to a known distance to work out the number of zero-distance photons, one simply reads any signal return as crosstalk.

But it requires the creation of the mirror structure, that has to be placed exactly using some sort of alignment tool.

We felt that creation of a calibration box was easier.

After all, you can create the box, test the first few dozen (or hundred) off the line, and use the higher of those numbers for your production line. Then test again if your glass changes, or you air-gap changes.

It's up to you.

The no-target method is easy if you use a histogram-based sensor such as the VL53L1CB.

There is work to be done if you use the VL53L1X as you have to dig out the return signal, which could be small indeed if you have a good coverglass.

  • john

If this or any post solves your issue, please mark them as 'Accept as Solution' It really helps. And if you notice anything wrong do not hesitate to 'Report Inappropriate Content'. Someone will review it.
John E KVAM
ST Employee

To calibrate propery, you need two targets. The offset is done with a bright target at 140mm, and the crosstalk is done with a dull target at some distance determined by the quality of your coverglass.

Once the the offset is done, the data is stored in a register, then do the offset and that will be stored.

Then one can extract all the calibration data, place it in your MCU memory to be loaded up at the next reboot.

After doing the crosstalk on a number of devices, use that data and insert it.

If you want the best accuracy you should do the offset calibration on each device. But if you are doing people counting and don't mind a possible 2cm inaccuracy, you can skip the offset calibration.

So it's possible to get some cal data on the first articles and just use that cal data for the rest of your run.

  • john

If this or any post solves your issue, please mark them as 'Accept as Solution' It really helps. And if you notice anything wrong do not hesitate to 'Report Inappropriate Content'. Someone will review it.