MMA8451Q Exhibits Excessive Iq In Sleep Mode

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MMA8451Q Exhibits Excessive Iq In Sleep Mode

1,448 Views
bjh
Contributor I

My interrupt driven low power design uses the MMA8451Q orientation interrupt to wake the design from sleep.  The configuration and interrupt functionality work perfectly, with the MMA configured and verified to be working at the lowest sample rate in the lowest power mode.  The device is connected per application diagram Figure 4 in the product datasheet.  In my application, VDDIO and VDD are tied (and unfortunately not separable in this layout for independent current measurements).

I'm measuring sleep current using an Agilent 34405A.

No MMA in circuit (just sleeping MCU)                     <3uA

MMA installed, sleeping, 1.56Hz, LP Mode               30uA    

I'm expecting closer to 10uA total system current consumption in this configuration.  I've replaced the device once, and confirmed the same behavior with the second device.  Any ideas on how to track down this extra current draw?

Odd Finding:

Another finding is that when I disconnect power from the MMA leaving the I2C lines connected, the current drops to expected levels.  Noteworthy is that the MMA configures and functions as normal with no VDD/VDDIO connections (parasitically powered through I2C lines).  It generates the orientation interrupts fine, and wakes the MCU for processing.  Measuring VDD/VDDIO at the MMA with a scope confirms an expected unstable voltage signal due to charging of VDD/VDDIO bypass capacitors through the I2C pull-ups, then discharging when the MMA wakes and I2C traffic resumes.  In this invalid and certainly unstable configuration the design draws 2.8uA while sleeping.

Thanks,


Bill

Labels (1)
0 Kudos
5 Replies

1,190 Views
TomasVaverka
NXP TechSupport
NXP TechSupport

Hi Bill,

As I answered in your SR #1-2993052614, could you please share with us your complete accelerometer initialization so that we can reproduce your settings?

What is the current consumption when the device is in STANDBY mode (ACTIVE bit = 0)?

What is the voltage applied to VDD/VDDIO tied pins?


Regards,

Tomas

0 Kudos

1,190 Views
bjh
Contributor I

Hi Tomas


Here is the initialization code:

U8 MMA8451OrientationInit(void)

{

  U8 temp;

  temp = MMA8451ReadReg(CTRL_REG1); //read contents of control register

  temp &= ~ACTIVE_MASK; //clear active bit

  MMA8451WriteReg(CTRL_REG1, temp); //rewrite CTRL_REG1

  temp = MMA8451ReadReg(CTRL_REG1); //read contents of control register

  temp &= 0xC7; //clear sample rate bits

  temp |= 0xF4; //set 1.56Hz sleep mode sample rate and 1.56Hz System Output Data Rate

  MMA8451WriteReg(CTRL_REG1, temp);

  MMA8451WriteReg(CTRL_REG2, SMODS1_MASK + SMODS0_MASK + SLPE_MASK + MODS1_MASK + MODS1_MASK);  //set low power for sleep and wake modes, enable auto-sleep

  MMA8451WriteReg(ASLP_COUNT_REG,0x01);  //short return to sleep interval, irrelevant since both modes are 1.56Hz


  temp = MMA8451ReadReg(PL_CFG_REG); //read contents of portrait/landscape PL config reg

  temp |= PL_EN_MASK; //enable PL detection

  MMA8451WriteReg(PL_CFG_REG, temp);

  temp = MMA8451ReadReg(PL_BF_ZCOMP_REG);  //read Back/Front and Z Compensation Register

  temp = 0x44; //default values for now

  MMA8451WriteReg(PL_BF_ZCOMP_REG, temp);

  temp = MMA8451ReadReg(PL_P_L_THS_REG);  //read Portrait/Landscape Threshold and Hysteresis Register

  temp = 0x84; //default trip angle of 45 degrees, with +/-14 degree hysterisis

  MMA8451WriteReg(PL_P_L_THS_REG, temp);

  temp = MMA8451ReadReg(CTRL_REG4); //read out control register 4

  temp |= INT_EN_LNDPRT_MASK; //set landscape/portrait interrupt

  MMA8451WriteReg(CTRL_REG4, temp);

  MMA8451WriteReg(CTRL_REG3, WAKE_LNDPRT_MASK + PP_OD_MASK); //wake on orientation, interrupt polarity active low, open-drain

  temp = MMA8451ReadReg(CTRL_REG5); //read out Interrupt Configuration Register

  temp |= INT_CFG_LNDPRT_MASK; //set landscape/portrait interrupt to INT1 line (clear for INT2)

  MMA8451WriteReg(CTRL_REG5, temp);

  MMA8451WriteReg(PL_COUNT_REG, 0x50); //set PL debounce count to 5 samples ( 5 * 0.640 = 3.2 seconds)

  temp = MMA8451ReadReg(CTRL_REG1); //read contents of control register

  temp |= ACTIVE_MASK; //set active bit

  MMA8451WriteReg(CTRL_REG1, temp);

  temp = MMA8451ReadReg(PL_STATUS_REG); //return current orientation for testing purposes

  temp &= 0x07;

  return temp;

}

Rather than measuring total system sleep current(as reported yesterday), I've moved my meter to the VDD/VDDIO supply line of the MMA (eliminating MCU consumption from measurement)

With the ACTIVE bit = 1 --> 33uA

With the ACTIVE bit = 0 --> 3uA

Voltage applied to VDD/VDDIO is 2.75V

Thanks,

Bill

0 Kudos

1,190 Views
TomasVaverka
NXP TechSupport
NXP TechSupport

Hi Bill,

I have just finished my test on the MMA8451Q with both the VDD and VDDIO tied together and connected to 3.3V with the following results:


Standby mode (Active bit = 0) --> 1.9uA

Active-Sleep Low Power mode @ 1.56Hz with PL function enabled --> 6.1uA

Active-Wake Normal mode @ 1.56Hz with PL function enabled --> 25.3uA

Those values correspond to the values specified in the data sheet (Table 1).

Looking at your initialization code, I have noticed that you set (obviously by mistake) the LNOISE bit (temp |= 0xF4) which slightly increases the current consumption as shown in Table 67 of the data sheet. With CTRL_REG1 = 0xF9 and CTRL_REG2 = 0x1F, the current consumption was 6.1uA all the time as the device remains in Low Power mode @ 1.56Hz even when the change in orientation is detected.

Is there any traffic on the bus during your current measurements? Based on your description I do not think so, but I want to be sure as it obviously increases the current consumption.

Regards,

Tomas

0 Kudos

1,152 Views
Soumyaind80
Contributor II

Hi @bjh , @TomasVaverka 

I know its been a long time since this question was posted but I am also facing a similar issue recently but in MMA8452Q version. Our application also demands accelerometer to stay in low power mode and MCU waits for interrupt from the accelerometer when there is sudden change in orientation.

@bjh: - Did you ever find a fix for this ?

@TomasVaverka:- My accelerometer schematic is attached herewith. ( I have 4.7k resistors connected to SCL and SDA and pulled up to 3.3V which is not shown in this pic ). I have a 10uF cap instead of 4.7uF suggested in datasheet. Can this influence the quiescent current ?

BLE_Debug3.PNG

Tags (2)
0 Kudos

1,108 Views
TomasVaverka
NXP TechSupport
NXP TechSupport

Hi Soumya,

 

1. No.

2. No, this also does not affect the current consumption.

 

When you change the (S)MODS bits to 0b11, is the MMA8452Q in Standby mode?

 

Most, although not quite all changes to the registers must be done while the MMA8452Q is in Standby mode. Current consumption in Standby mode should be ~ 2μA.

 

Best regards,

Tomas

0 Kudos