AnsweredAssumed Answered

LIS3MDL large power consumption

Question asked by Ashman.David on Jun 22, 2016
Latest reply on Jan 11, 2018 by Jussi Mutila
I am using the LIS3MDL magnetometer on a custom PCB I recently designed.  In addition to the sensor, the PCB has an STM32F101 and a HopeRF LoRa radio.  I am measuring current consumption by the LIS3MDL much larger than that stated in the data sheet.  I've also measured higher than stated current consumption on the ST evaluation board.  

Has anyone else seen higher than stated values?  Are the datasheet numbers accurate?  FYI I'm using SPI interface and I've tried active high and active low interrupt config as well.  I've also verified DRDY rate of 20Hz.  Thanks!


Test #1:  Total board current of 185uA (uP in stop mode with interrupts disabled, radio in sleep mode, LIS3MDL in power down mode)
Test #2:  Total board current of 780uA (uP in stop mode with interrupts disabled, radio in sleep mode, LIS3MDL in 20Hz ODR low power mode).

I'm able to see baseline current consumption in the sensor when changing modes.  Running sensor at 20Hz low power mode adds 595uA (vs 40uA from datasheet).

Sensor config code for Test #2:

// Control register 1 & 4: 
LIS3MDL_set_ODR(ODR_20HZ);

// Control register 2:
 
LIS3MDL_set_FS(FS_4GAUSS); 

// Control register 3:
 
tmp = 0x00; 
LIS3MDL_write(REG_CTRL_REG31U&tmp); 

// Control register 5:
 
tmp = 0x00; 
LIS3MDL_write(REG_CTRL_REG51U&tmp); 

// Interrupt configuration.
 
tmp = 0x25; 
LIS3MDL_write(REG_INT_CFG1U&tmp); 

// Interrupt threshold registers.
 
LIS3MDL_set_detect_threshold(THRESHOLD_DEFAULT); 
tmp = ((abs(LIS3MDL_get_detect_threshold()) & 0xFF00>> 8U); 
LIS3MDL_write(REG_INT_THS_H1U&tmp); 
tmp = (abs(LIS3MDL_get_detect_threshold()) & 0x00FF); 
LIS3MDL_write(REG_INT_THS_L1U&tmp); 

// Read data once to clear out interrupt.
 
LIS3MDL_read
(REG_OUT_Z_H1U&tmp);

Outcomes