2025-06-10 2:00 PM
Hi,
I want to create a reflectometer to measure samples targets reflectivity in %. The samples are 10x15cm and the distance will be fixed: samples can be between 15cm to 1m. The measurement will happen in the dark in a controlled environment.
I found the ST reflectometer demo page so I thought it may be viable to use a VL53 ToF sensor. However, there is not much technical explanations : https://www.st.com/en/embedded-software/stsw-img018.html
So, I am currently investigating the idea of using a VL53 sensor. My first question is : is it a good idea ? If any, what would be the best VL53xx device for this purpose. If it is not a good idea do you have any suggestion or something to look for ?
I think reflectivity should be proportional to the signal rate in kcps multiplied by the number of active SPADs. I guess I can ignore the distance because it is fixed.
I have a VL53L1 and a board, so I made a basic test with reference materials placed at 20cm in a closed box. But for some reason the signal rate (signal rate x SPADs count) is not proportional between a black paper (around 5% reflectivity) and a white (around 90%). Does anyone know if it is a valid approach ? I have not found many resources for this problem.
Thanks a lot !
Solved! Go to Solution.
2025-06-11 9:54 AM
No coverglass means no crosstalk. And if you are going to try the no-coverglass approach the L1 is the only one you should even attempt. But really think about it. Dust would be a killer for this application. A crosstalk free coverglass like the one from www.hornix.com is one way to go.
It would make your system cleanable.
You are correct in the fact that the signal comes back as a rate. So independent of the timing budget. But choose a nice long one. 30ms -50ms would be my guess.
There is a slight issue with the ULD driver. We return signal per SPAD. But we only use the integer value of SPADs to do it. And some of the SPADs are occluded. (We have 1/2 SPADS and even 1/10th SPADS.) So modify that section of code to keep the floating-point value of SPAD until after the division. Then you can keep the integer.
the ULD is so light that we tried to avoid floating-point. We might have over done it.
SPADs are affected by temperature. And it changes the distance slightly. (we compensate for every 2 degrees C). But I honestly never thought about how it might affect the signal rate. You would have to check that yourself.
- john
2025-06-10 3:45 PM
If you realize that you are only measuring the reflectance at 940nm then it's a fine
We built that reflectometer and we got it to work, so it's clearly possible.
But there are some things you have to look out for.
1) you need signal rate per SPAD. The sensor tries to get 20Mega photons per second and adds SPADs when the signal goes low and shuts them off if the reflectance is high. Using the signal rate X SPAD count is going the wrong way round.
2) it works better with Lambertian *(matte finish) surfaces. Specular (mirror-like) surfaces have issues.
3) and you absolutely want to make sure the distance is fixed. Moving in or out changes the signal strength a lot.
When we 3D printed that cone, we had to paint it. Light was penetrating the code and messing things up.
Use matte finish black paint. It's 5% and you can paint a bit of paper with it to create a reference.
There are people who make calibrated paper - but it's really expensive.
In our calibration we use white paper and assume it's 88%.
Each sensor has to be calibrated.
A company called X-Rite - www.xrite.com - makes some calibrated paper but it's VERY expensive.
But might be worth it depending on your need.
2025-06-11 8:24 AM
Hi,
Thanks a lot John for your answer. this is really helpfull. I do realize the reflectivity is at 940nm, we are interested in it for our application.
1) If I understand well (SignalRatePerSpad - AmbientRatePerSpad) is proportional to the the sample reflectance as long as all the other parameters are equal. It is interesting to be able to keep the DSS and use only the ultra light driver api to adapt to the wide reflectance range we have between white and black .
2) It is OK for us I think
3) For now I am using hand made references papers, but thank you for the link, we will definitively need more precise references sooner than later. Overall I think our set up must be really precise for the fixed parameters. Should other parameters be controlled like temperature or so ?
Two more question :
I am correct when I say that the timing budget does not change the signal strength, because the signal strength is a rate (in kcps) ? Longer timing budget only makes the signal rate more precise ? Maybe I can adapt that a little if there is a saturation or a weak signal...
Regarding the sensor calibrations : Do you think we need to make the offset calibration to have reliable proportional reflectance measurements ?
We probably wont use a protective glass so I don't think we will need the crosstalk calibration either.
2025-06-11 9:54 AM
No coverglass means no crosstalk. And if you are going to try the no-coverglass approach the L1 is the only one you should even attempt. But really think about it. Dust would be a killer for this application. A crosstalk free coverglass like the one from www.hornix.com is one way to go.
It would make your system cleanable.
You are correct in the fact that the signal comes back as a rate. So independent of the timing budget. But choose a nice long one. 30ms -50ms would be my guess.
There is a slight issue with the ULD driver. We return signal per SPAD. But we only use the integer value of SPADs to do it. And some of the SPADs are occluded. (We have 1/2 SPADS and even 1/10th SPADS.) So modify that section of code to keep the floating-point value of SPAD until after the division. Then you can keep the integer.
the ULD is so light that we tried to avoid floating-point. We might have over done it.
SPADs are affected by temperature. And it changes the distance slightly. (we compensate for every 2 degrees C). But I honestly never thought about how it might affect the signal rate. You would have to check that yourself.
- john