Overview
If your project is moving a lot of power around, and efficiency is key, an Adafruit LM73100 Ideal Diode breakout is a great way to keep your power budget tidy! As long as your power supply is 3 to 23V DC and up to 5A, use this in place of a diode to keep current flowing in only one direction. However, unlike a diode, you won't suffer a 1V+ forward drop which just gets lost as heat. Instead, the internal chip has two back-to-back FETs, with a typical Rdson of 30 mΩ. That means that even with 5A, you'll lose around 150mV. This makes it perfect for efficiency-sensitive setups like solar panels and LiPoly batteries.
Unlike our LM62200 dual ideal diode, this board acts as 'one' diode only - but it can handle much higher voltages and currents! There are also some niceties we added like solder-free operation thanks to on-board terminal blocks, and a green LED that will light when power is going in the right direction. You can also monitor the current draw by reading the analog voltage off of IMON, handy if you don't want a separate power monitoring kit.
To make it breadboard friendly, we've placed it on a small PCB with 9 x 0.1" breakout pads. We include a bit of header. Some light soldering is required to attach the header for breadboarding use. Or you can use direct wiring to the terminal blocks if you want to insert it directly into a circuit without a breadboard.
- Wide operating input voltage range: 2.7 V to 23 V
- 28 V absolute maximum
- Withstands negative voltages up to -15 V
- Integrated back-to-back FETs with low OnResistance: RON = 28.4 mΩ (typ)
- Ideal diode operation with true reverse current blocking
- Fast overvoltage protection
- 1.2-μs (typ) response time
- Fast-trip response to transient overcurrents during steady state
500-ns (typ) response time
Latch-off after fault - Analog load current monitor output (IMON)
Current range: 0.5 A to 5.5 A
Accuracy: ±15% (max) (IOUT ≥ 1 A) - Overtemperature protection
- Power Good indication (PG)
Page last edited July 15, 2025
Text editor powered by tinymce.
Pinouts
Power
- VIN / IN (terminal block) - To power the board, give it 3V to 22V DC. The power input pin is broken out at the bottom edge of the board (VIN) and on the terminal block on the left side of the board (IN).
- Vout / OUT (terminal block) - this is the output from the ideal diode. It is broken out at the bottom edge of the board (Vout) and on the terminal block on the right side of the board (OUT).
- GND / GND (terminal block) - common ground. The ground pin is broken out at the bottom edge of the board (GND) and on the terminal blocks on both sides of the board (GND).
LM73100 Pins
- UVLO - This is the active high enable pin. It is also used to set the undervoltage lockout threshold. At 3V, that is 1.2V and at 23V that is 9.2V.
- OVLO - This is the overvoltage lockout threshold pin. At 3V, that is 0.15V and at 23V it is 1.2V.
- PG - This is the power good indication pin. It is high when a proper power supply is detected.
- PGTH - This is the power good threshold pin. It can be set with a threshold setting to check against for the power good pin.
- DVDT - This is the slew rate/inrush current control pin.
- IMON - This is the current monitoring pin. You can read the analog voltage from this pin as a current monitor.
Power LED and Jumper
- Power LED - In the top center of the board, below the LM73100 label on the board silk, is the power LED, It is a green LED.
- LED jumper - This jumper is located on the back of the board and is labeled LED on the board silk. Cut the trace on this jumper to cut power to the power LED.
Page last edited July 15, 2025
Text editor powered by tinymce.
CircuitPython
It's easy to use the LM73100 Ideal Diode with CircuitPython, and the analogio core module. This module allows you to easily write Python code to read analog input data from the LM73100 IMON pin.
CircuitPython Microcontroller Wiring
First wire up the breakout to your board exactly as follows. The following is the breakout wired to a Feather RP2040 with the breakout inline with a lipo battery:
- LiPo battery positive to ideal diode VIN (red wire)
- LiPo battery negative to ideal diode GND (black wire)
- Ideal diode OUT to Feather JST-PH positive (red wire)
- Ideal diode GND to Feather JST-PH negative (black wire)
- Ideal diode IMON to Feather pin A0 (yellow wire)
Note that when you connect the Feather via USB for serial monitoring, the battery goes into charge mode and as a result isn't drawing any current through the battery. You can use an additional Feather or microcontroller to get current readings for this demo:
- LiPo battery positive to ideal diode VIN (red wire)
- LiPo battery negative to ideal diode GND (black wire)
- Ideal diode OUT to Feather 1 JST-PH positive (red wire)
- Ideal diode GND to Feather 1 JST-PH negative (black wire)
- Feather 1 GND to Feather 2 GND (black wire)
- Ideal diode IMON to Feather 2 pin A0 (yellow wire)
In practice, for a battery powered IoT project for example, you would likely be reading the current from the battery connected to the target Feather in code or logging wirelessly.
CircuitPython Usage
To use with CircuitPython, you need to update code.py with the example script.
Thankfully, we can do this in one go. In the example below, click the Download Project Bundle button below to download the necessary libraries and the code.py file in a zip file. Extract the contents of the zip file, and copy the code.py file to your CIRCUITPY drive.
Your CIRCUITPY/lib folder will be empty since the example is only using core modules that are built into the CIRCUITPY drive.
Example Code
Once everything is saved to the CIRCUITPY drive, connect to the serial console to see the data printed out!
# SPDX-FileCopyrightText: 2025 Liz Clark for Adafruit Industries
#
# SPDX-License-Identifier: MIT
# LM73100 IMON Current Monitoring
import time
import board
from analogio import AnalogIn
RIMON = 1500.0 # 1.5kΩ
GIMON = 2.5 # μA/A
analog_in = AnalogIn(board.A0)
def get_voltage(pin):
return (pin.value * 3.3) / 65536
print("LM73100 Current Monitor Started")
print("================================")
print(f"RIMON: {RIMON} ohms")
print(f"GIMON: {GIMON} μA/A")
print("================================\n")
while True:
# Read voltage from IMON pin
vimon = get_voltage(analog_in)
# Calculate output current
iout_A = vimon / (RIMON * GIMON)
iout_mA = iout_A * 1000.0
print(f"ADC: {analog_in.value} | VIMON: {vimon:.3f}V | Current: {iout_mA:.2f} mA")
time.sleep(0.5)
You'll see the raw analog reading, the IMON voltage reading and the current draw from the IMON pin printed out to the serial console. The code uses the formula from the datasheet (page 20, section 7.3.5 "Analog Load Current Monitor Output"):
Iout (A) = (Vimon(V) × 10^-6) / (Rimon(Ω) × Gimon(μA/A))
to calculate the current from the voltage output from the IMON pin as an analog reading.
Page last edited July 15, 2025
Text editor powered by tinymce.
Arduino
Using the LM73100 Ideal Diode with Arduino involves wiring up the breakout to your Arduino-compatible microcontroller and running the provided example code.
Wiring
Wire as shown for a 5V board like an Uno, with the breakout inline with an external DC power supply. If you are using a 3V board, like an Adafruit Feather, wire the board's 3V pin to the breakout VIN.
- Power supply positive to ideal diode VIN (red wire)
- Power supply negative to ideal diode GND (black wire)
- Ideal diode OUT to DC jack positive (red wire)
- Ideal diode GND to DC jack negative (black wire)
- DC jack output to Metro DC jack
- Ideal diode IMON to Metro pin A0 (yellow wire)
// SPDX-FileCopyrightText: 2025 Liz Clark for Adafruit Industries
//
// SPDX-License-Identifier: MIT
// LM73100 IMON Current Monitoring
const int IMON_PIN = A0; // IMON connected to analog pin A0
const float RIMON = 1500.0; // RIMON resistor value in ohms (1.5kΩ)
const float GIMON = 2.5; // GIMON typical value in μA/A (from datasheet, typical is 2.5)
const float VREF = 5.0; // Arduino reference voltage (5V for most Arduinos)
const int ADC_RESOLUTION = 1024;
void setup() {
Serial.begin(9600);
pinMode(IMON_PIN, INPUT);
Serial.println("LM73100 Current Monitor Started");
Serial.println("================================");
Serial.print("RIMON: ");
Serial.print(RIMON);
Serial.println(" ohms");
Serial.print("GIMON: ");
Serial.print(GIMON);
Serial.println(" μA/A");
Serial.println("================================\n");
}
void loop() {
int adcValue = analogRead(IMON_PIN);
float vimon = (adcValue * VREF) / ADC_RESOLUTION;
float iout_A = vimon / (RIMON * GIMON);
float iout_mA = iout_A * 1000.0;
Serial.print("ADC Value: ");
Serial.print(adcValue);
Serial.print(" | VIMON: ");
Serial.print(vimon, 3);
Serial.print(" V | Output Current: ");
Serial.print(iout_mA, 2);
Serial.print(" mA (");
Serial.print(iout_A, 3);
Serial.println(" A)");
delay(500); // Read every 500ms
}
Upload the sketch to your board and open up the Serial Monitor (Tools -> Serial Monitor) at 115200 baud. You'll see the raw analog reading, the IMON voltage reading and the current draw from the IMON pin printed out to the Serial Monitor. The code uses the formula from the datasheet (page 20, section 7.3.5 "Analog Load Current Monitor Output"):
Iout (A) = (Vimon(V) × 10^-6) / (Rimon(Ω) × Gimon(μA/A))
to calculate the current from the voltage output from the IMON pin as an analog reading.
Page last edited July 15, 2025
Text editor powered by tinymce.
Downloads
Page last edited July 15, 2025
Text editor powered by tinymce.