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

Power consumption 52832

Hi,

I am relatively new to programming hardware at this level, and have developed our product on the 52832, so finally I have purchased the Power Profiler Kit, and downloaded the NRFConnect and power profiler software.

Please see the attached screen shot, and can I ask if this is a good result in power consumption, or should I be trying to improve it further?

Sorry for such a newbie question, and any extra information or links to information to learn about power consumption more, would be fantastic, and much appreciated.

Cheers and thanks in advance for your help

Jason

  • Hi Jason,

    I would not say this is a good result, though I don't know anything about your product. I have a few observations:

    • I see that there are some spikes which I guess is due to some activity on your board. They look a bit high if you only have the nRF consuming a significant amount of power, but we need to know more about what you are doing at that point to say more. It wold also be helpfull with a better time resolution. CAn you upload a plot where you have zoomed in on the spike itself (in time)?
    • It seems like the base current is ~2 mA, which is a very high sleep current. If you have a typical battery powered device this is most likely unacceptable. Can you zoom in on the sleep current as well, so that we can see more closely the actual level? We also need to know more about your HW design and perhaps more important, what you do to limit current consumption in your FW. Typically you should disable any unused peripherals when needed, and put the CPU to sleep whenever it is not needed (typically from you main loop). You can refer to the BLE examples in the SDK to see how it is done there. You also need to make sure to disable logging, as UART logging causes the UART peripheral to be active, which in turn needs the high frequency clock etc, causing a high idle current consumption. A typical sleep current for a nRF52832 device is about 2-3 μA.

  • Hi Einar,

    Thank you for your response, I am writing a beacon (using PCA10040 DK) that advertises once every 2 seconds, which would be those spikes.

    I have a timer I use when the user presses a button, but does nothing in normal operation mode (which is the sample in the screen shot)

    I have rtc running, and have it call its callback approx once a minute. 

    I also use pwm to power a buzzer, but only for certain aspects of the product, but not for normal usage (which is the sample as shown again in the screen shot)

    Is there anything I should be aware of regarding the above features being active when in-active? 

    Overall, the sample shown should be nothing more than a normal BLE beacon, advertising once every 2 seconds, and not buzzer, or timer should are currently running.

    I am use softdevice 130 as well for reference.

    Please see zoomed in screen shot as requested: 

    Please let me know what else you need to help me.

    Cheers and once again, thanks in advance for your help.

    I have also noticed that if I dont activate the RTC, the following is the result, which I think looks better ?

    Jason

  • Hi Jason,

    I see. The current consumption waveform matched an advertising event, so then we know what is happening there.

    Your second plot shows the average current consumption including the advertising events, and this looks very good. It does not show only the sleep current, but it cannot be bad as you gut such a low average current consumption. However, you should get this level regardless of using an additional RTC or not, so there is probably something fishy with your FW. (The SoftDevice will already keep the 32 kHz clock active together with RTC0, and an additional RTC instance should only result in an increase in current consumption of 0.1 µA). Did you only disable the RTC to get to this level, or did you disable something else as well (perhaps indirectly, as not using the RTC prevents some other event from happening, so that you don't trigger usage of some other resource)?

    You write that you use the S130 SoftDevice and the nRF52832. Is that really the case? The S130 is only intended to be used with the nRF51. The corresponding SoftDevice for nRF52832 is S132. Which SDK version are you using?

    Einar

  • Hi Einar,

    Sorry, you are correct, I am using the S132 Softdevice, and I have dug a little further taking into consideration of your comments about what else I maybe doing when create my RTC instance, I also setup SAADC for battery monitoring, and it looks like from what I can tell, the cause of the high power usage, so I have now tried to initialize the SAADC, and after I get a sample, I then uninitialize it, and wait for approx 5 minutes to repeat, however, after about five minutes after uninitiliasing the SAADC ( nrf_drv_saadc_uninit ), I try to initialize (nrf_drv_saadc_init) and sample again, it simply wont work anymore, I keep trying to call nrf_drv_saadc_sample (about every 5 seconds) to start a sample, but it wont call the callback???  Any idea of what I might be doing wrong.

    As a note, if I nrf_drv_saadc_init at the start once only, and perform the sampling every 5 minutes by calling nrf_drv_saadc_sample, it works perfectly, however, this is probably the power consumption problem I am having, so performing the nrf_drv_saadc_uninit seems to stop this working. So I am guessing I need to turn of the SAADC, to bring the power back down, but now I have a new problem...always the way :-)

    For your reference, the SDK I am using is 12.3

    Cheers and thanks again for your help.

    Jason

  • Hi Jason,

    Yes, if you keep the SAADC active it will typically give a high current consumption for a few reasons:

    • If you use a TIMER to trigger regular sampling, this will keep the HF clock always on.
    • If you use DMA (implicitly used if you use more than one sample buffer), this will keep the DMA bus and underlying resources active causing a high current consumption.

    If you only need to collect a single sample every few minutes, then it is probably better to uninint the SAADC as you write, and initialize it as needed. You could also consider a low power implementation such as discussed here. The driver supports low power mode by setting SAADC_CONFIG_LP_MODE to 1 in your projects sdk_config.h.

Related