cancel
Showing results for 
Search instead for 
Did you mean: 

H3LIS331DL XYZ read out data abnormal

lyan.2
Associate

Hello ST Friends,

Here we are using H3LIS331DL in our product, using SPI interface. Below is the schematic.

 

lyan2_0-1741524879538.png

and related code is below.

 

 

 

		/* Check device ID */
		static uint8_t whoamI, tData;		
		whoamI = 0;
		h3lis331dl_device_id_get(&dev_ctx_xl, &whoamI);		
	
		user_printf("\r\nh3lis331dl whoamI: 0x%x\r\n", whoamI);

                //REG1
		tData = 0x27;	//0010 0111
		nrf_H3LIS331DL_write_reg(H3LIS331DL_CTRL_REG1, &tData, 1);
		
		//REG2
		tData = 0x00;	//0000 0000
		nrf_H3LIS331DL_write_reg(H3LIS331DL_CTRL_REG2, &tData, 1);
		
		//REG3
		tData = 0x92;	//1001 0010
		nrf_H3LIS331DL_write_reg(H3LIS331DL_CTRL_REG3, &tData, 1);
		
		//REG4
		tData = 0x80;	//1000 0000
		nrf_H3LIS331DL_write_reg(H3LIS331DL_CTRL_REG4, &tData, 1);
	
	
	
		nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG1, &tData, 1);
		user_printf("REG1: 0x%x\r\n", tData);
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG2, &tData, 1);
		user_printf("REG2: 0x%x\r\n", tData);
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG3, &tData, 1);
		user_printf("REG3: 0x%x\r\n", tData);
		
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG4, &tData, 1);
		user_printf("REG4: 0x%x\r\n", tData);
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG5, &tData, 1);
		user_printf("REG5: 0x%x\r\n", tData);
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_REFERENCE, &tData, 1);
		user_printf("REFERENCE: 0x%x\r\n", tData);		
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_INT1_CFG, &tData, 1);
		user_printf("INT1_CFG: 0x%x\r\n", tData);
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_INT1_SRC, &tData, 1);
		user_printf("INT1_SRC: 0x%x\r\n", tData);		
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_INT1_THS, &tData, 1);
		user_printf("INT1_THS: 0x%x\r\n", tData);	
		
		nrf_H3LIS331DL_read_reg(H3LIS331DL_INT1_DURATION, &tData, 1);
		user_printf("INT1_DURATION: 0x%x\r\n", tData);
		
		
		HAL_Delay(200);

        static uint8_t tx_buffer[64];
				
	while(1)
	{
		if(nrf_gpio_pin_read(PIN_H3LIS331_SensorINT1)== 0)
		{			
			h3lis331dl_acceleration_raw_get(&dev_ctx_xl, gH3LIS331_Acc);
			user_printf("ACC Raw: %d, %d, %d\r\n", gH3LIS331_Acc[0],gH3LIS331_Acc[1],gH3LIS331_Acc[2]);

			snprintf((char *)tx_buffer, sizeof(tx_buffer),"Acceleration [mg]:%5.2f\t%5.2f\t%5.2f\r\n", h3lis331dl_from_fs100_to_mg(gH3LIS331_Acc[0]), h3lis331dl_from_fs100_to_mg(gH3LIS331_Acc[1]), h3lis331dl_from_fs100_to_mg(gH3LIS331_Acc[2]));
		
			user_printf("ACC: %s\r\n", tx_buffer);
		}

 

 

 

 

and below is the UART output, seems the register are all configured successfully.

 

 

 

<info> app: SPI2 example started.

h3lis331dl whoamI: 0x32
REG1: 0x27
REG2: 0x0
REG3: 0x92
REG4: 0x80
REG5: 0x0
REFERENCE: 0x0
INT1_CFG: 0x0
INT1_SRC: 0x0
INT1_THS: 0x0
INT1_DURATION: 0x0
ACC Raw: 64, -48, 1008
ACC: Acceleration [mg]:196.00	-147.00	3087.00

ACC Raw: 16, -32, 928
ACC: Acceleration [mg]:49.00	-98.00	2842.00

ACC Raw: -16, -32, 912
ACC: Acceleration [mg]:-49.00	-98.00	2793.00

ACC Raw: 32, -48, 880
ACC: Acceleration [mg]:98.00	-147.00	2695.00

ACC Raw: 48, -48, 928
ACC: Acceleration [mg]:147.00	-147.00	2842.00

ACC Raw: 32, -32, 912
ACC: Acceleration [mg]:98.00	-98.00	2793.00

ACC Raw: 32, -32, 928
ACC: Acceleration [mg]:98.00	-98.00	2842.00

ACC Raw: 32, -64, 912
ACC: Acceleration [mg]:98.00	-196.00	2793.00

ACC Raw: 32, -64, 944
ACC: Acceleration [mg]:98.00	-196.00	2891.00

ACC Raw: 32, -32, 912
ACC: Acceleration [mg]:98.00	-98.00	2793.00

ACC Raw: 32, -32, 864
ACC: Acceleration [mg]:98.00	-98.00	2646.00

ACC Raw: -16, -16, 880
ACC: Acceleration [mg]:-49.00	-49.00	2695.00

ACC Raw: -16, -32, 928
ACC: Acceleration [mg]:-49.00	-98.00	2842.00

ACC Raw: 32, -32, 848
ACC: Acceleration [mg]:98.00	-98.00	2597.00

ACC Raw: 32, -16, 880
ACC: Acceleration [mg]:98.00	-49.00	2695.00

ACC Raw: 48, -16, 880
ACC: Acceleration [mg]:147.00	-49.00	2695.00

ACC Raw: 32, -48, 896
ACC: Acceleration [mg]:98.00	-147.00	2744.00

ACC Raw: 48, -48, 912
ACC: Acceleration [mg]:147.00	-147.00	2793.00

ACC Raw: 48, -32, 928
ACC: Acceleration [mg]:147.00	-98.00	2842.00

ACC Raw: 16, -16, 880
ACC: Acceleration [mg]:49.00	-49.00	2695.00

ACC Raw: 64, 0, 912
ACC: Acceleration [mg]:196.00	 0.00	2793.00

ACC Raw: 48, -48, 864
ACC: Acceleration [mg]:147.00	-147.00	2646.00

ACC Raw: 32, -32, 880
ACC: Acceleration [mg]:98.00	-98.00	2695.00

ACC Raw: -16, -16, 928
ACC: Acceleration [mg]:-49.00	-49.00	2842.00

ACC Raw: 32, -16, 944
ACC: Acceleration [mg]:98.00	-49.00	2891.00

ACC Raw: 32, -48, 912
ACC: Acceleration [mg]:98.00	-147.00	2793.00

ACC Raw: 32, -32, 896
ACC: Acceleration [mg]:98.00	-98.00	2744.00

ACC Raw: 32, -16, 912
ACC: Acceleration [mg]:98.00	-49.00	2793.00

ACC Raw: 0, 32, 960
ACC: Acceleration [mg]: 0.00	98.00	2940.00

 

 

 

But the ACC XYZ result seems abnormal.

we also captured the waveform as below.

lyan2_2-1741525513581.png

 

WhoAmI read out.

lyan2_1-1741525449604.png

REG config.

lyan2_3-1741525543158.png

XYZ read out.

lyan2_5-1741525596723.png

lyan2_6-1741525691880.png

And we just put the board steady on the table, but the XYZ vaule is abnormal in this condition.

Do you have any suggestion on this, thank you.

 

YAN.

 

 

 

 

 

 

 

 

 

 

 

1 REPLY 1
lyan.2
Associate

Hello, here i add one more information, we are using the driver from ST Github, the link is below, thanks.

 

https://github.com/STMicroelectronics/h3lis331dl-pid