cancel
Showing results for 
Search instead for 
Did you mean: 

The standby power consumption of the VL53L1X-SATEL far exceeds the value stated in the datasheet

qqzlqqzlqqzl
Associate III

Dear ST Team,

As the title of this article suggests, I have encountered an issue where the standby power consumption of the ST original VL53L1X-SATEL far exceeds the value stated in the datasheet. The first image below shows the power consumption data, and the second image is the power consumption description of the device from the datasheet.

In my attempts, I have not made any hardware modifications to the VL53L1X-SATEL nor used an MCU to communicate or write to the registers of VL53L1X. I connected XSDN_I to the power GND to enter the hardware shutdown mode, with an input voltage of 2.8V. According to the power consumption parameters in the second image, I am puzzled because the value is much higher than what is stated in the datasheet.

Additionally, I noticed that the VL53L1X-SATEL has a voltage regulator and level-shifting chip. I shorted R21 to bypass the power consumption of the voltage regulator module, but the power consumption was still over a hundred microamps, which does not align with the datasheet. I then separated the VL53L1X-SATEL at the middle soldering hole (removing the 0R resistor first, and it should not have damaged the chip), and directly supplied 2.8V to the VDD and GND pins. However, the power consumption did not improve.

My question is: why does the power consumption remain so high even after entering hardware shutdown mode? What steps should I take to achieve low power consumption?

 

qqzlqqzlqqzl_2-1735868223217.png

qqzlqqzlqqzl_3-1735868270498.png

 

 

 

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
John E KVAM
ST Employee

As a software guy, I'm always worried about these questions, but...

The VL53L1X-SATEL is not what is in the datasheet. It has too many parts on it. 

But you can actually break the board in half and solder to the 'fingers' on the end of the board. ( remove the 0-ohm resistors at the perforation and simply break the board in half. That will eliminate all the level shifters and regulators on the board. Most of those parts on the board enable it to connect to any MCU. But if you have an Nucelo-F401RE, you can connect the fingers of the half-board and get a better measure. 

Lowering the Xshut pin will turn off the clocks in the part and get you into the lowest power. 

It's an interesting experiment.

In AppNote AN6049 on the ST web site there is connection diagram. (It's for the VL53L4, but the parts are interchangeable.

JohnEKVAM_1-1735921006214.png

I'd use this diagram. And monitor the power consumption as you ground the XShut pin. 

- 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.

View solution in original post

6 REPLIES 6
John E KVAM
ST Employee

As a software guy, I'm always worried about these questions, but...

The VL53L1X-SATEL is not what is in the datasheet. It has too many parts on it. 

But you can actually break the board in half and solder to the 'fingers' on the end of the board. ( remove the 0-ohm resistors at the perforation and simply break the board in half. That will eliminate all the level shifters and regulators on the board. Most of those parts on the board enable it to connect to any MCU. But if you have an Nucelo-F401RE, you can connect the fingers of the half-board and get a better measure. 

Lowering the Xshut pin will turn off the clocks in the part and get you into the lowest power. 

It's an interesting experiment.

In AppNote AN6049 on the ST web site there is connection diagram. (It's for the VL53L4, but the parts are interchangeable.

JohnEKVAM_1-1735921006214.png

I'd use this diagram. And monitor the power consumption as you ground the XShut pin. 

- 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.

Thank you for your response. The good news is that I achieved low power consumption close to the specifications in the manual by separating the board into smaller boards and adding some peripheral components. It is worth noting that the small board requires three additional pull-up resistors, which need to pull up SDA, SCL, and Xshut, respectively, for proper use. The SDA, SCL, and Xshut of the small board are not pulled up by default.

Hello, as mentioned above, I achieved power consumption consistent with the manual using the ULD library. However, when using the ULP library, I noticed a standby power consumption of around 5mA. Could you provide a firmware update or advise which register to modify? Thank you.  

John E KVAM
ST Employee

There are stand-by modes:

JohnEKVAM_0-1742423184546.png

So the first thing to check is how much power you are consuming in Hardware Standby. Drop the XShut pin. 

Thats your baseline as the sensor is tuned off. 

Now bring up XShut. The I2C interface will run, but the ranging engine should still be off.

Then initialize the sensor and get another consumption number. Here the processors are ready to go, but just waiting for a start. 

Next you want to do a very infrequent range. Something like once per second. 

During the range the consumption should be on the order of 18mA when the lasers are firing, but it's only for a very short time. 

IN my testing of the Low power with accuracy, I had a plot of the power consumption that looked like this"

JohnEKVAM_1-1742424111210.png

That first ULP range was the low power consumption. When the code determined there was a target, it took a High power range to get an accurate range. the space between them is the I2C transactions. And the initial bit and the final level are low indeed.  

Certainly it's in the micro-amp range, not milliwatts. 

If you can show me a plot like this, perhaps I can find something. 

-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.

Hello John, Figure 1 shows the current curve when I use the ULP library with a 2.8V power supply. Those current peaks represent the current consumed when the chip is measuring distance, while the current valleys show the current when the chip has completed distance measurement and entered software standby mode. My main question is, why is the current in software standby mode so high after distance measurement is complete? I've removed the voltage regulator chip and used independent power supply, but I haven't removed the level shifter chip (I don't think the level shifter chip's power consumption would be this high, and when I use the ULD library, the software standby current matches the manual, so I believe the abnormal standby power consumption with the ULP library is unrelated to the level shifter chip). Figure 2 shows my configuration code using the ULP library.
企业微信截图_17409860483318.png

int main(void)
{

  /* USER CODE BEGIN 1 */
	uint16_t	dev=0x52;
	int status=0;
	volatile int IntCount;
  uint8_t byteData, sensorState=0;
  uint16_t wordData;
	
	uint8_t measurement_status;
	uint16_t estimated_distance_mm;
	uint16_t sigma_mm;
	uint16_t signal_kcps;
	uint16_t ambient_kcps;
	
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_TIM16_Init();
  MX_LPUART1_UART_Init();
  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);
	printf("\r\n--MCU ready !--\r\n");
	I2C_Scan(&hi2c1); 
	//while(1)I2C_Scan(&hi2c1); 
  status = VL53L1_RdByte(dev, 0x010F, &byteData);
  printf("VL53L1X Model_ID: %X\r\n", byteData);
  status = VL53L1_RdByte(dev, 0x0110, &byteData);
  printf("VL53L1X Module_Type: %X\r\n", byteData);
  status = VL53L1_RdWord(dev, 0x010F, &wordData);
  printf("VL53L1X: %X\r\n", wordData);
	while(sensorState==0){
		status = VL53L1X_BootState(dev, &sensorState);
	HAL_Delay(2);
  }
  printf("Chip booted\r\n");
	
 /* This function must to be called to initialize the sensor with the default setting  */
  status = VL53L1X_ULP_SensorInit(dev);
	if(status) printf("init error\r\n");
  /* Optional functions to be used to change the main ranging parameters according the application requirements to get the best ranging performances */
	//VL53L1X_ULP_SetInterruptConfiguration(dev,0,0);
  status = VL53L1X_ULP_SetInterMeasurementInMs(dev, 500); /* in ms possible values [20, 50, 100, 200, 500] */
	status = VL53L1X_ULP_SetMacroTiming(dev, 20); 
	status = VL53L1X_ULP_SetSignalThreshold(dev, 1600);
	status = VL53L1X_ULP_SetSigmaThreshold(dev, 50);
  //  status = VL53L1X_SetOffset(dev,20); /* offset compensation in mm */
  status = VL53L1X_ULP_SetROI(dev, 16); /* minimum ROI 4 */
  //	status = VL53L1X_CalibrateOffset(dev, 140, &offset); /* may take few second to perform the offset cal*/
  //	status = VL53L1X_CalibrateXtalk(dev, 1000, &xtalk); /* may take few second to perform the xtalk cal */
  printf("VL53L1X Ultra Lite Driver Example running ...\r\n");
	
  status = VL53L1X_ULP_StartRanging(dev);   /* This function has to be called to enable the ranging */
	if(status) printf("init error\r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
	{
		HAL_Delay(1000);
		status = VL53L1X_ULP_DumpDebugData(dev, 
																		&measurement_status, 
																		&estimated_distance_mm, 
																		&sigma_mm, 
																		&signal_kcps, 
																		&ambient_kcps);
		if (status == VL53L1X_ULP_ERROR_NONE) 
		{
			printf("Measurement Status: %u ", measurement_status);
			printf("Estimated Distance: %u mm ", estimated_distance_mm);
			printf("Sigma: %u mm ", sigma_mm);
			printf("Signal Rate: %u kcps ", signal_kcps);
			printf("Ambient Rate: %u kcps\r\n", ambient_kcps);
		} 
		else 
		{
			printf("Error reading measurement: %d\r\n", status);
		}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		//HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

John E KVAM
ST Employee

Try issuing a Stop/Start every few ranges. Does this change anything?

and if it does not, please create a new post. Call it something like:

VL53L1X standby power consumption too high in the ULP driver. 

It's better than cluttering up an existing ticket - even if the problems are similar.

- 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.