Please tell me how to reduce the current consumption in sleep mode.

Hello, I'm an engineer from Japan.

There is a problem that the standby current in sleep mode is higher than expected.
I am using "ble_central - ble_app_blinky_C" as a base program.
In this program, both central and peripheral use sleep mode during standby.

In sleep mode, I would like to be in the "ON_RAMON_EVENT" state described in the evaluation board manual.
In that case, the current consumption is expected to be 0.8uA, but when measured with the Power Profiler Kit II, the standby current is 43uA.

This is the same for both central and peripheral.

I think I need to set it before entering sleep mode, but I don't know how to do it.
Data is simple data transmission of On/OFF, but timer interrupt is used.
The data transmission interval is 200ms, but I don't want to change it from the viewpoint of reaction speed.

Can someone tell me how to reduce the current consumption in sleep mode?

thank you.

Parents
  • Hi

    I think you're mistaken here, as the average current you see in the Power Profiler is 43µA, advertisements included. If you hold shift+ left click to drag you should get a much lower average in between these spikes that will be a better better indication of what the sleep current of your device is. To go into idle mode, I'd recommend using the idle_state_handle() that's used in most of the SDK example projects in the nRF5 SDK.

    Best regards,

    Simon

Reply
  • Hi

    I think you're mistaken here, as the average current you see in the Power Profiler is 43µA, advertisements included. If you hold shift+ left click to drag you should get a much lower average in between these spikes that will be a better better indication of what the sleep current of your device is. To go into idle mode, I'd recommend using the idle_state_handle() that's used in most of the SDK example projects in the nRF5 SDK.

    Best regards,

    Simon

Children
  • Thank you for answering.

    Accelerating while holding Shift+Left Click slows down the average between these spikes considerably, giving a more accurate indication of what the device's sleep current is.

    I know this way, the momentary current change is not a problem, the standby power is as high as 45uA.

    > To enter idle mode, it is recommended to use idle_state_handle() which is used in most of the SDK sample images in nRF5 SDK.

    Yes, it's in sleep mode using the idle_state_handle() function.

    When I built and measured the sample program "ble_central - ble_app_blinky_C" without processing, the same 45uA current flowed.

    I was able to get the current down to 28uA by editing sdk_config.h and disabling the log module, but I couldn't get it down to the target of 5uA.

    ■ "sdk_config.h" Editing Location
    #define NRF_LOG_ENABLED 0
    #define NRF_LOG_DEFAULT_LEVEL 0

    PPK2 uses an external power supply and measures as an amperemeter, so I think it's highly accurate.

    The measured value is 28uA in the raw sample program, but is it possible to reduce the standby power consumption in sleep mode to the target of 5uA?

    thank you.

  • Hi

    I'm sorry about the late reply, but I've been out of office the last couple of days and are only now getting through my backlog. Can you show me what the power consumption between the advertisement spikes are exactly by uploading a screenshot where you have marked the area between spikes with Shitft + Left Click? Alternatively you can export the power profiler trace as a .ppk file so I can review it on my end. Please note that you will need to upload it on DevZone in a .zip file, as the editor on DevZone doesn't support .ppk files.

    The standby current should indeed be able to go down to 5uA or less, but I think the reason it is higher than this is that it's not actually in the a standby mode.

    Best regards,

    Simon

  • Thank you for your reply.

    After asking the question, I searched on the Internet and specified XTAL as the external clock, and was able to lower the standby current to 19uA.

    // <0=> RC
    // <1=> XTAL
    // <2=> Synth
    #ifndef NRFX_CLOCK_CONFIG_LF_SRC
    #define NRFX_CLOCK_CONFIG_LF_SRC 1
    #endif

    In addition, I was able to lower the signal strength to about 0.8uA by specifying -8dbm using the "sd_ble_gap_tx_power_set" function, but I decided not to use it because the drop was small and the operation worsened.

    Therefore, the current standby power is 19uA.

    The sleep mode base current is probably 0.8uA, but I don't think the average standby current can be lowered because regular communication is performed at 200ms intervals.
    I was able to temporarily lower the standby current by extending the interval between the central and peripheral periodic communications, but it returned immediately and I didn't understand.

    #define MIN_CONNECTION_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS)
    #define MAX_CONNECTION_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS)

    Also, I don't want to use this method because increasing the interval between periodic communication between the central and the peripheral made it worse.

    I am attaching the ppk file of the Power Profile Kit2 you requested.

    Thank you for your reply.

    PPK2_Sleep_Mode_waveform.zip

Related