Showing results for 
Search instead for 
Did you mean: 

VL6180 part to part variation

Associate II

Hi all,

         What is the part to part variation of ST VL6180 ToF sensor? During testing, we keep the sensor at a distance of 50mm from a retro reflector tape. In a batch of 50 sensors, the readout was from ~ 37 mm to  ~51 mm (expected readout is 50).

We made a larger batch of 1800 boards and ~130 boards had a readout from 25 mm to 60 mm (expected readout is 50) . 

We have used the below settings as per the datasheet. 


# Recommended settings from datasheet
self.writeI2C(0x0207, 0x01)
self.writeI2C(0x0208, 0x01)
self.writeI2C(0x0096, 0x00)
self.writeI2C(0x0097, 0xfd)
self.writeI2C(0x00e3, 0x01) #VL6180_WriteByte(0x00e3, 0x00); (seen this in ST forum)
self.writeI2C(0x00e4, 0x03) #VL6180_WriteByte(0x00e4, 0x04); (seen this in ST forum)
self.writeI2C(0x00e5, 0x02)
self.writeI2C(0x00e6, 0x01)
self.writeI2C(0x00e7, 0x03)
self.writeI2C(0x00f5, 0x02)
self.writeI2C(0x00d9, 0x05)
self.writeI2C(0x00db, 0xce)
self.writeI2C(0x00dc, 0x03)
self.writeI2C(0x00dd, 0xf8)
self.writeI2C(0x009f, 0x00)
self.writeI2C(0x00a3, 0x3c)
self.writeI2C(0x00b7, 0x00)
self.writeI2C(0x00bb, 0x3c)
self.writeI2C(0x00b2, 0x09)
self.writeI2C(0x00ca, 0x09)
self.writeI2C(0x0198, 0x01)
self.writeI2C(0x01b0, 0x17)
self.writeI2C(0x01ad, 0x00)
self.writeI2C(0x00ff, 0x05)
self.writeI2C(0x0100, 0x05)
self.writeI2C(0x0199, 0x05)
self.writeI2C(0x01a6, 0x1b)
self.writeI2C(0x01ac, 0x3e)
self.writeI2C(0x01a7, 0x1f)
self.writeI2C(0x0030, 0x00)

# Recommended settings from "Interpreting ALS and Range Results" section
self.writeI2C(0x0011, 0x10)
self.writeI2C(0x010a, 0x30)
self.writeI2C(0x003f, 0x46)
self.writeI2C(0x0031, 0xFF)
self.writeI2C(0x0040, 0x63)
self.writeI2C(0x002e, 0x01)

self.writeI2C(0x001b, 0x09)


Is there something that we are missing ?

ST Employee

My guess is you are missing the calibration steps. If you search for the words "offset calibration" and "crosstalk calibration" in the datasheet you will find how to do it. 

But a short description... 

During the reflow process, the PLL can get tweaked. This results in a fixed offset. Range on something a lot, and the difference between the average of your result and the known distance is your offset. Put that in the offset register at boot-up and you are all set. (White paper works well for this - retro-reflective material is a bit of an over-kill.)


Offset is slightly harder. 

You can read up on it here:

But this calibrates the number of photons that hit your coverglass and reflect back. 

It's important if you have a weak return signal. As all the photons are averaged, those zero-distance ones can shorten your result. 

The datasheet tells you how to calibrate your glass. But if you have consistent glass and a consistent distance between your sensor and glass, you can test those you have already built and use the calibration number for you entire run of product.

- john

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question. It helps the next guy.

Hello John,

                 Thank you for the reply. Let me explain the end use case.

We use the TOF sensor to find a delta in displacement. We are not very keen in knowing absolute distance with pin point accuracy. We also DONT use a covering glass or any sort to cover the sensor. In the end application, the sensor will be in an enclosed space, free of any one touching or fiddling with the senor. We need to reliably detect a change in distance of 2.0 mm. In the pilot batch of 50 boards, I had seen them detecting the delta  of 2.0 mm. 

In our present production flow, we do a PCB bring up and unit test. Here to make sure our sensor is not way off the mark, we do a distance measurement on a test jig. Here we have a retro reflector kept at 50 mm away from the sensor.  Presently we keep 37 mm as minimum distance and 63 mm as maximum distance. We have ~ 130 boards (out of ~ 1800) that fall below the 37 mm readout. The +/- 13mm margin was decided based on a pilot run of 50 boards.   

My concern is:

Will the sensors that reads less than 37 during unit test (the expected readout is 50mm) detect a change in displacement of 2.0mm.?  Will a  sensor that reads ~ 25mm instead of expected 50mm be able to detect our required 2mm delta? 

The PCB's are built in our EMS factory and our assembly line is at another geographic location. We plan to take few samples out of the 130 boards and try out in our system to see if they can indeed detect the 2mm delta.


BTW, the PCB goes through a reflow cycle and a wave soldering cycle. The sensor is protected using special wave soldering PCB fixtures. Do you see this as a concern ?


BTW, attached are the images of the PCB with VL6180

PCB Bottom with VL6180PCB Bottom with VL618020240523_125353.jpg


syam k  


Associate II

Hello John,

                  Did you get time to see my earlier reply ?  We are getting some of the boards that read 37mm or less from our EMS provider. I will do a test and see if the lower value sensors work well in detecting a distance change. 

I am attaching the volume data here. As you can see the sensors have a tendency to shift to left.  THe y axis is the number of boards/sensors and x axis is the sensor readout.