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

Power consumption fine tuning

Hi everyone, Well, our device is based on NRF 51822 CFAC MCU. It’s an ibeacon based device which advertises and receives data frequently, and writes data into flash memory.
We have some power consumption issues. We need to achieve at least 200 days of autonomous device working from cr 2032 battery, so in fact you need to achieve 1 mah/24 hours energy consumption. And the main question is how to switch NRF to low power mode periodically?

  • Hi Sergey

    Have you looked at the nRF51 current consumption guide? There are some good pointers there on how to tune your device for minimum current consumption. Anyway, all BLE examples in the nRF5 SDK 11.0.0 let the nRF51 enter low power mode between BLE radio events.

    For a connectable beacon running on nRF51, the current consumption should be:

    Connectable beacon: yes    
    Battery capacity: 220 mAh    
    DCDC: enabled    
    TX power: 0 dBm    
    Advertising interval: 100 ms              //Official iBeacon advertising interval
    Current consumption: ~220 uA    
    Battery life: 0.22Ah / 0,000220A = 1000 hours = 41 days
    
    Connectable beacon: yes    
    Battery capacity: 220 mAh    
    DCDC: enabled    
    TX power: 0 dBm    
    Advertising interval: 1000 ms            //Different advertising interval
    Current consumption: ~25 uA    
    Battery life: 0.22Ah / 0,000025A = 8800 hours = 366 days   
    
    Connectable beacon: yes    
    Battery capacity: 220 mAh    
    DCDC: enabled    
    TX power: -20 dBm                         //different TX power
    Advertising interval: 100 ms    
    Current consumption: ~173 uA    
    Battery life: 0.22Ah / 0,000173A = 1271 hours = 53 days  
    
    Connectable beacon: yes    
    Battery capacity: 1000 mAh              //different battery size
    DCDC: enabled    
    TX power: -0 dBm                         
    Advertising interval: 100 ms    
    Current consumption: ~220 uA    
    Battery life: 1Ah / 0,000220A = 4545 hours = 189 days
    

    You will decrease current consumption by perhaps 10% if you have your beacon non-connectable. If you use nRF52 instead of nRF51, you will decrease current consumption by ~40% for beacons, according to the specification.

  • HI Stefan,

    We are interested how to decease RX consumption and scan mode? Because device needs not only transmit data but also receive .

  • Do you mean that your device is connected in order to receive packets, but also is advertising at the same time? Not sure about your scenario, can you describe it more?

  • Hi Stefan, So we have some amount of BLE devices, let’s count two. They need to communicate with each other, for example one is RX each 10 secs, and each randomly it’s TX, same with another one . When they see each other they write the data in flash memory.

  • Hi Sergey

    Generally speaking, if you need to exchange data, advertising and scanning are power hungry operations, simply because devices are not synchronized. Being connected consumes far less power, simply because both the receiving and the sending device know when transmission and reception will take place.

    If you would describe your scenario in more detail, I could give better advise.

    Update 19.4.2016

    Thanks for the explanation of your scenario. Ill share some thoughts.

    Current consumption when advertising and scanning is generally a balance between the advertiser and the scanner. In order to ensure responsiveness of two devices, the advertiser must advertise frequently, or the scanner must scan frequently. You generally put the advertiser on the power constrained device and let the scanner be on the device that has a larger battery (typically the phone) or is plugged in. As I understand your scenario, each device will need to be both advertiser and scanner, but that scenario is not very good in terms of current consumption for power constrained devices.

    If you do not need high resolution /timing accuracy, then you could set relatively long advertising interval and relatively long scanning interval, in order to save power.

    If you are not aware of it, there is an example code for the beacon kit, the beacon Firmware 1.1.1 which can be detected by IOS by setting the Manufacturing ID to 0x004C. This example is connectable, and you can connect to the beacon, modify its RSSI settings, the major and minor values, and so forth. You could experience with this example if you think it fits your scenario.

    An idea is to make each device be scannable but not connectable. This means that when advertising packet is received by the scanner, the scanner can send a scan request to the advertiser, asking for more information. The advertiser will then send a scan response packet to the scanner. The application on the advertising device can be notified when a scan request is received and the notification can contain RSSI information. This way, both the advertiser and the scanner can be aware of each others presence.

    If you only need to know if a device is present, but do not need to know how many devices are present, then making a connection could be an option, monitor the RSSI value while in a connection, and when the RSSI gets low, disconnect and start advertising. If you would need to monitor when multiple devices are present, then I would assume you need both advertising and scanning on each device.

Related