This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Current Optimisation

Hi ,

My firmware is almost done, and now is the time to optimise power cunsomption.

First, my software has a special mode. Each day it wakes up, communicate with a sensor, save into ram buffer the data, and go back to lowPower system On mode ( to keep ram retention on and peripheral initialized ).

As i want to wake up each day, I'm using APP_TIMER instance. When i wake up, i just jump into timer_handler. But when i use my PowerProfile kit to monitor real current profile, i see that i'm consuming 6mA during this wake up step ! It bother me because, as i need to keep a good resolution for this app timer (around 1ms for the couting periode as 25ms interval period use app timer) , i can't use big prescaler value, meaning i will wake up around 6times a day, count if it is the sixth wake up , and then mesure. But during 5 wake up, i will consume 6mA just to increment and compare a counter ... 

1.  How to reduce this 6mA to almost nothing. Is most of the 6mA comes from radio start ? Should i switch off this to avoid big cunsumption on timer wake up ? 

I have used online power profiler and an guess it comes from that...

2. During Normal systeme mode, I start by advertising, and i was suprised to see big cunsumption around 18mA in spike ! Is it normal ?

As usual, thank you :)

  • Hi,

    The CPU current is around 7 mA if you don't use the DCDC regulator (enabled with sd_power_dcdc_mode_set()). However, the periodic wake-up should have very little impact on the average current consumption, looks like it must be something else that's increasing the average in your case. Can you zoom in on the floor current between the "wake-up" spikes and see what the floor current is?

    2. During Normal systeme mode, I start by advertising, and i was suprised to see big cunsumption around 18mA in spike ! Is it normal ?

     Are you sure the CPU is going to sleep here? Looks like it might be RADIO+CPU.

  • Hi Vidar,

    As you know i'm starting fgrom HRS example. On the module i'm using , VDD and VDDH has been connected together, ican't have choice here , moreover, it obliged me to add an externel ldo for one sensor that required a fixed voltage ... as gpio have same voltage than vdd because it is forced in normal mode.

    When i search into the code, i see no call to sd_power_dcdc_mode_set , So i guess that, as specified in Product Specification, it is automatically managed.

    Yes the cpu is on when i advertise because i wake up my system with a movement so cpu is wake up and start to advertise. Is it possible to advertise on movement without wake up the cpu ?

  • Hi,

    You still have to enable the DCDC when you use normal voltage mode. The internal LDO is used by default.

    Olfox said:
    ican't have choice here , moreover, it obliged me to add an externel ldo for one sensor that required a fixed voltage

    Is the external sensor powered in this measurement?

    Olfox said:
    Yes the cpu is on when i advertise because i wake up my system with a movement so cpu is wake up and start to advertise. Is it possible to advertise on movement without wake up the cpu ?

     The app should call the idle handle when it's not doing anything else like in the original hrs sample.

  • Is the external sensor powered in this measurement?

    No, it was not mounted on the pcb.

    Ok i was confused by this in PS:

    • Auto-controlled refresh modes for LDO and DC/DC regulators to maximize efficiency

    So it seems my systeme only works with LDO reg1 at the moment, and i need to call  

    sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE); 

    Once ble_stack_init(); has been enable

    I have read on some tickets that DCDC only works with Vdd>2.1V then i have to disable it to
    use LDO till 1.8V to win a bit of life time. A good idea to use Power fail comparator can be a good
    tmethod to switch when voltage is lower than 2.1V.

    1. can you confirm this 2.1V value and behavior,

    because i didn't find this value that seems to comes from nrf51 product.
    The app should call the idle handle when it's not doing anything else like in the original hrs sample.

    2. Do you mean that i should call advertising_start(erase_bonds);function, and just after call idle_state_handle(); to avoid having cpu during advertising ?

    3. Is timeout or connected event generated then?

    4. Also, how do you set the TX power in dbm please? I need to check if i am set to 0dbm or not because this big spikes are really high ! Hopefully, i have a good batterys to be able to supply during this spike but i don't think that's normal behavior.

    Thank you

  • Here is DCDC enable:

    I hacve also connected directly my board on nrf PPK ( not through mux on my production board).

    Low power:

    Advertising current:

    Connected:

    Spike on the right are some reading with the phone.

    So imagine i need to refresh my characteristic each 100ms. Can I be still connected but with cpu in low power ? I'm not sure how softdevice and radio part are independent.

Related