Supply Voltage to Current Consumption Scaling for RAK3172

Hi there,

I am currently evaluating power optimization strategies for a design based on the RAK3172 (STM32WLE5CCU6) and would like to better understand how supply voltage influences current consumption in different operating modes.

Specifically, I am considering dynamically adjusting supply voltage depending on the operating state (sleep vs TX).

STM32WLE datasheet

The STM32WLE datasheet gives some useful information on this topic which might transfer to RAK3172.

  • 3.3V minimum are required for +22 dBm on the high output power PA (relevant for US915 etc.).
  • Up to +15 dBm is available on full VDD range (1.8 to 3.6 V) through the low output power PA (enough for +14 dBm limit in EU868).
  • The Low-power PA, SMPS OFF mode (highlighted in blue) is bad and draws 2x the current compared to the SMPS ON mode.

RAK3172 Datasheet

The RAK3172 datasheet specifies:

TX Mode: 87 mA (@ 20 dBm, 868 MHz)

However, the STM32WLE datasheet lists:

~107.5 mA (@ 20 dBm, 3.3 V, 868 MHz, HP PA optimized for 22 dBm)

This difference suggests that:

  • RAK might be measuring under different PA optimization settings, or
  • A different supply voltage was used, or
  • Module-level efficiency is better than bare MCU numbers (why?)

Could you clarify the measurement conditions for the 87 mA figure?

I would like to see the following measurements

  • RAK3172 deep sleep power consumption vs supply voltage
  • RAK3172 active power consumption vs supply voltage (like spinning in a loop, no peripherals)
  • RAK3172 TX power consumption at +14 dBm low power PA vs supply voltage
  • RAK3172 TX power consumption at +14 dBm high power PA vs supply voltage
  • RAK3172 TX power consumption at +22 dBm high power PA vs supply voltage

I might conduct these measurements soon by myself.

Thanks

Welcome back @TomStein ,

I am using a bare board with only the RAK3172. And measured different conditions, this is what I got running at 3.3V. I haven’t tested other voltage levels.

For RAK3172, there is no low power PA configured.

Low power PA is only available on RAK3172LP-SiP which is specially designed for that. That’s why we have two variants of the SiP.

RAK3172-SiP
RAK3172LP-SiP

I used this code for testing with AT+LPM=1 and AT+LPMLVL=2


// uint8_t payload[] = "1234567812345678123456781234567812345678123456781234567812345678";
uint8_t payload[] = "12345678";

void send_cb(void) {
  Serial.println("++ P2P TX Finished ++");
}

void recv_cb(rui_lora_p2p_recv_t data) {
  Serial.printf("P2P RX: RSSI %d, SNR %d\r\n", data.Rssi, data.Snr);
}

void setup() {
  Serial.begin(115200);

  delay(2000);

  // Radio Configuration
  api.lora.pfreq.set(868125000);
  api.lora.psf.set(12);
  api.lora.pbw.set(125);

  api.lora.registerPSendCallback(send_cb);
  api.lora.registerPRecvCallback(recv_cb);

  Serial.println(">> Step 1: 2s Sleep");
  api.system.sleep.all(5000);
  delay(2000);
}

void loop() {
  // --- PHASE 1: Power Management & RX ---
  Serial.println(">> Step 2: 2s Idle");
  delay(1000);

  Serial.println(">> Step 3: 3s RX Enable");
  api.lora.precv(2000);
  delay(3000);

  // --- PHASE 2: Graduated TX Power ---

  // Transmit at 5 dBm
  Serial.println(">> Step 4: TX @ 5 dBm");
  api.lora.ptp.set(5);
  api.lora.psend(sizeof(payload), payload);

  // 1s Idle
  delay(2000);

  // Transmit at 14 dBm
  Serial.println("Reset with RX mode");
  api.lora.precv(10);
  delay(100);
  Serial.println(">> Step 5: TX @ 14 dBm");
  api.lora.ptp.set(14);
  api.lora.psend(sizeof(payload), payload);

  // 3s Idle
  delay(3000);

  // Transmit at 22 dBm
  Serial.println("Reset with RX mode");
  api.lora.precv(10);
  delay(100);
  Serial.println(">> Step 6: TX @ 22 dBm");
  api.lora.ptp.set(22);
  api.lora.psend(sizeof(payload), payload);

  // 3s Idle
  delay(3000);

  // final 1s Idle
  Serial.println(">> Step 7: 1s Idle");
  delay(1000);

  Serial.println("--- Cycle Complete ---\r\n");
}

Hi Carl,

thank you for sharing this! Looking reasonable and thats very helpful.

However, I am wondering why does the curation of the TX peak increase with increased TX power? The duration should only be dependent on packet size and SF, right? Any chance you were using an old RUI version for this measurement like 4.0.6?
2. Do you use RAK3172 module or RAK3172-T? I used the one with TCXO.

I tested with the Firmware Version: RUI_4.0.6_RAK3172-T that was shipped on the modules I bought and got the same extending length TX durations. Additionally, I don’t see the “++ P2P TX Finished ++” messages in the logs.
With Firmware Version: RUI_4.2.3_RAK3172-T I do not get these anymore.

Besides that I get the following current readings at 3.3V

State Carl Mine
Sleep 2.8 µA 4.8 µA
Idle 6.64 mA 6.4 mA
RX mode 8.17 mA 9.8 mA
TX @ 5 dBm 56 mA 69.5 mA
TX @ 14 dBm 103 mA 114 mA
TX @ 22 dBm 148 mA 141 mA

This is my setup

Otii Arc connected with 10cm long cables to the RAK3172T module. UART2-TXO connected to the Otii with the purple PCBite. RST has 10k pull-up to 3V3 and BOOT is pulled to GND with the yellow PCBite.

Coming back to the original question of voltage scaling current consumption I tested six voltages from 2.0V to 3.5V.

State / VDD 2.0 V 2.25 V 2.5 V 3.0 V 3.3 V 3.5 V
Sleep 4.24 µA 4.22 µA 4.43 µA 4.66 µA 4.59 µA 4.68 µA
Idle 6.14 mA 6.21 mA 6.27 mA 6.35 mA 6.39 mA 6.42 mA
RX 13.9 mA 12.6 mA 11.7 mA 10.4 mA 9.81 mA 9.48 mA
TX 5 dBm board crashed 70.1 mA 69.8 mA 69.4 mA 69.2 mA 68.9 mA
TX 14 dBm board crashed board crashed 110 mA 113 mA 113 mA 113 mA
TX 22 dBm board crashed board crashed 133 mA 139 mA 142 mA 140 mA

Interpretation of Measurements

  • There is no voltage dependent current consumption for TX. Voltages below 2.5V make the board crash at higher powers.
  • RX current increases with decreased supply voltage.
  • Sleep current is higher than expected (should be around 1-2 uA and not 4.5uA). It does decrease slightly with decreased supply voltage. Same for Idle current.
  • I would assume that the actual output power for 22dBm is decreased with supply voltages below 3.3V, since the STM32WLE datasheet specifies says so in Table 4.

Variation between modules

I noticed little to no differences in sleep and idle currents between 2 modules that I tested.
The RF currents vary slightly with RX ±0.2 mA and TX ±2mA.

Conclusion

To summarize and close this topic:

I don’t think there is any good reason to include voltage scaling just because of RX/TX power consumption. However, for effective sleep or idle power consumption, there is an advantage to keep the module at 2.0V since the sleep power is just 8.5 uW compared to 15 uW at 3.3V and idle power is 12.3 mW compared to 21 mW.

I will look into RAK3172-SIP as you suggested @carlrowan