Computing the LP2980 adjust resistor using Python
The LP2980-ADJ is a 50 mA LDO that be configured for an output voltage from 1.23V to 15V using a pair of resistors.
The datasheet lists a formula for the output voltage, however no easy-to-use customizable software is provided that can be used to directly compute the correct resistor in a reproducible way.
Attached to this post is a script based on UliEngineering that not only computes the closest E96 (default, other ranges also available) resistor value and the actual output voltage with the actual E96 resistor value. A usage example is included at the bottom.
#!/usr/bin/env python3
"""
A script that computes the LP2980-ADJ adjust resistor.
See http://www.ti.com/lit/ds/symlink/lp2980-adj.pdf page 17
Based on Resistors.py, see
https://techoverflow.net/blog/2015/05/19/finding-the-nearest-e96-resistor-value-in-python/
"""
from UliEngineering.EngineerIO import *
from UliEngineering.Electronics.Resistors import *
__author__ = "Uli Köhler"
__license__ = "CC0 1.0 Universal"
__version__ = "1.0"
def computeLP2980OutputVoltage(r):
"""Compute the actual output voltage of a LP2980-ADJ given the adj resistor"""
return 1.23 + 1.23 * (r / 51.1e3)
def computeLP2980AdjResistor(u):
"""
Compute the exact value for the LP2980-ADJ adjust resistor,
given a target output voltage in volts.
"""
#Check limits
if u < 1.23: print("Warning: LP2980-ADJ does not support output voltages below 1.23V")
elif u > 15: print("Warning: LP2980-ADJ does not support output voltages above 15V")
#
return (100 * u - 123) * 51100 / 123
# Usage example: Compute E96 Rlim for U=4.00V
if __name__ == "__main__":
# Compute theoretical value
radj = computeLP2980AdjResistor(normalize_numeric("4.00 V"))
# Compute nearest actual value
e96_rlim = nearest_resistor(radj, sequence=e96)
actual_vout = computeLP2980OutputVoltage(e96_rlim)
# Print results
print("Theoretical Radj value: %s" % (format_value(radj, "Ω")))
print("Closest E96 value: %s" % (format_value(e96_rlim, "Ω")))
print("Output voltage at closest E96 value: %s" % (format_value(actual_vout, "V")))