Due to high demand, expect some shipping delays at this time - orders may not ship for up to 2-3 business days.

lis3dh current consumption
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

lis3dh current consumption

by rozzie on Tue Dec 06, 2016 11:49 pm

Hello. I have an application that is *extremely* current sensitive. I am trying to use the LIS3DH breakout to detect very coarse movement of the enclosure, and my software only checks the latched INT line once in a blue moon. It is working extremely well!


I have a budget of approximately 5-10 microamps for this unit to be operating continuously in the background. The data sheet, on page 11, says that in low-power mode it should be achieving something less than 6 microamps the way that I have it configured.

Unfortunately, the Adafruit LIS3DH module as a whole appears to be drawing about 775-790 microamps. I've looked at the schematic and I can't quite understand why, but I am not an EE.

I am powering the unit with an already-well-regulated 3V3, and so I tried to be cute and fed power in after the regulator (on 3VO), but that was not a good idea: the power consumption goes UP to approximately 975 microamps. Back to Vin.

I do not believe that it has anything to do with TWI because I pulled the TWI wires, and it didn't impact the consumption. (That said, I don't know the effect of your pullups.)

Can your engineers confirm and figure out why this is sucking so much energy, and potentially make a specific recommendation? I am not against surgery on the device if you can make a recommendation that could get me back into the 5-10 microamp budget.

If it's a matter of just desoldering the regulator and powering via 3vo, that would be fine. But if there are other components that could also be causing the issue, I'd need an engineer to give specific guidance.

I know that surgery on the boards is probably not a recommendation you generally make, but the current draw is really way way out of my budget, and if I can use your board I'd really like to given the number of other Adafruit modules in the design.

Thanks for listening.

** more info **

The parameters I'm using - and this was validated both by the device's behavior and by reading back the registers - are:
REG1: 0x2f (LPEN | ODR1 | ZEN | YEN | XEN)
REG2: 0x09 (FDS | HPIS1)
REG3: 0x40 (AOI1)
REG4: 0x00
REG5: 0x08 (LIR_INT1)
REG6: 00

Posts: 34
Joined: Wed Apr 27, 2016 4:13 pm

Re: lis3dh current consumption

by adafruit_support_mike on Wed Dec 07, 2016 4:04 am

For those numbers, the 10k pull-up resistors on the I2C lines are the most likely suspects. At 3.3v a pair would pull about 660uA, and that's in the right ballpark for the load you're seeing.

The best choice would probably be to power the whole LIS3DH breakout from a GPIO pin. The current it uses is far below the working limits of most microcontroller GPIO, and it's hard to beat 'completely shut down' for current consumption.

Posts: 64491
Joined: Thu Feb 11, 2010 2:51 pm

Re: lis3dh current consumption

by rozzie on Wed Dec 07, 2016 9:23 am

Thanks for your constructive reply, Mike.

I can't power the module down because its entire purpose is to sit there, active in its own low power mode, to detect (and latch int1 ON) if the device has been physically moved. If/when it has been moved, after the movement stabilizes for 15m the device then uses gpio to power-on a GPS module to figure out where it is.

In other words, the LIH being always-on is already part of a power saving optimization.

Posts: 34
Joined: Wed Apr 27, 2016 4:13 pm

Re: lis3dh current consumption

by rozzie on Wed Dec 07, 2016 11:07 am

Well, here's something interesting for you to chew on.

I was looking at the schematic, thinking "what are the most likely places where current might want to escape to ground?"

What stood out to me was R1, which ties SDO to ground.

And because I have an extra module here, I decided "what the heck" and snipped/desoldered R1, finding it on the .BRD file. (It's located just above/right the "SDA" label on the top of the board.)

By doing this, of course, it changes the I2C address to 0x19, which is fine.

Amazingly, this dropped the current from 780 microamps to 16 microamps, while retaining full functionality of the device!

And so while this is still higher than the power budget I'd hoped for, it's still small enough that it allows me to continue working on the prototype.

I am not an EE but I would be super curious as to why connecting SDO in this way (known as SA0/SDO in the datasheet) would cause such an incredible current draw.

It isn't as though your design is "wrong"! The ST datasheet for the chip, on P.20, says:

SDO/SA0 pad can be used to modify less significant bit of the device address. If SA0 pad is connected to voltage supply, LSb is ‘1’ (address 0011001b) else if SA0 pad is connected to ground, LSb value is ‘0’ (address 0011000b).

Posts: 34
Joined: Wed Apr 27, 2016 4:13 pm

Re: lis3dh current consumption

by adafruit_support_mike on Thu Dec 08, 2016 3:41 am

Hmm.. interesting.

The pull-down is there because you don't want to leave the pin floating, and we default to the lowest address in any range that can be set.

The pull-down is a 10k, which can only pull 330uA at most from a 3.3v supply, so the additional current would have to come through other parts of the chip. There's no mention of that in the datasheet, but that isn't surprising.

Datasheets represent a negotiated agreement between a company's engineering, marketing, and legal divisions. The engineers usually want to give people accurate information about real-world applications of a device, while the marketing people want to emphasize all the positives and deny any negatives. Meanwhile, the legal department recognizes that any positive statement made in a datasheet creates a legal obligation.

The end result is an interesting combination of verifiable facts that can best be described as 'telling the right truth the right way'. There's no guarantee that two specs in the same table can be achieved at the same time. The quiescent current value might be listed for the lowest operating voltage, while the bandwidth might be listed for the highest voltage. Engineers who work for chip companies have a tendency to write 'what the datasheet didn't say' articles about older chips when they get the chance.

Casting a suitably jaundiced eye over the LIS3DH datasheet, the first thing I notice is that the typical operating voltage is listed as 2.5v, and the footnotes in the electrical specifications section also stress 2.5v

That might give you an option for reducing power. If you hold the LIS3DH at 2v during its idle period, then bump it up to 3v when you need it to communicate with the microcontroller, you'll probably see some improvement in quiescent current.

Try pulling the breakout's voltage regulator and powering the 3v pin through a couple of silicon diodes tied to a 3.3v source. That should put the voltage at the board somewhere between 2v and 2.5v. Also connect a GPIO pin to the breakout's 3v pin through a single Schottky diode. Sending the pin high will raise the LIS3DH supply voltage far enough that the I2C signals will work comfortably, while setting the pin to a high-impedance state will let the LIS3DH drop back to its 2.5v range.

Posts: 64491
Joined: Thu Feb 11, 2010 2:51 pm

Re: lis3dh current consumption

by jaycarlson on Sun May 14, 2017 8:38 pm

Mike, regardless of your philosophical beliefs about datasheets, the LIS3DH datasheet clearly says the SDO/SA0 pin has a pull-up on it — see Table 13 on page 21. In fact, CTRL_REG0 allows you to even *control* this pull-up resistor in software (a nice feature you don't often see).

Adafruit should *not* pull SA0 down to ground — it will cause excessive current flow, as well as put the pin in an undetermined state if the pull-down resistor is sufficiently large (as it will 'flight' with the internal pull-up).

Honestly, more broadly, I'm not sure what Adafruit was thinking when they designed this module — they offer a ton of accelerometers at different price points with different features; the LIS3DH's claim to fame is definitely its low-power nature, yet the board doesn't seem to be designed for low-power systems. I basically had to rip off all the parts on the board to get power consumption down to reasonable values. That MIC5225 LDO alone uses 15 times more current than this accelerometer does (!!!) while not being any more stable or less expensive than, say, an MCP1700 (or the many other low-Iq regulators out there). I understand that Adafruit wants to share parts across multiple designs, but you guys really need to update to some more modern parts. Also, there's really no reason for 3.3V LDOs on boards in the first place — every MCU development board out there either natively runs at 3.3V, or has a built-in 3.3V regulator that users can use. Save yourself the 30 cents (and 30 uA!!) and just make the board 3.3V-only. And why on earth do you guys put level shifters on all of your boards? I've never worked on a 5V MCU that wasn't compatible with 3.3V logic levels. Am I missing something?

Anyway, I was only able to get power consumption down to 4.5 uA, which is still more than twice as much as what the datasheet claims.

I'm still searching the datasheet for other clues — if anyone stumbles upon something, let me know!

Posts: 1
Joined: Sun May 14, 2017 7:47 pm

Please be positive and constructive with your questions and comments.