Calculating the NCP380 Ilim resistor using Python

Problem

You want to calculate the correct value for the Ilim resistor for the NCP380 current limiter IC with a custom current limit.

Solution

This script not only uses the formula from the datasheet to compute the theoretical resistor value but also performs range checks (the NCP380 only supports currents from 0.1 to 2.1 amperes) and computes the nearest E96 resistor value.

In order to run the script, you need to place Resistors.py in the same directory (see this previous post for details).

#!/usr/bin/env python3
"""
A script that computes the NCP380 limit resistor ValueError
See http://www.onsemi.com/pub_link/Collateral/NCP380-D.PDF page 17

Based on Resistors.py, see
http://techoverflow.net/blog/2015/05/19/finding-the-nearest-e96-resistor-value-in-python/
"""
from UliEngineering.Electronics.Resistors import *
from UliEngineering.EngineerIO import format_value

__author__ = "Uli Koehler"
__license__ = "CC0 1.0 Universal"
__version__ = "1.0"

def computeNCP380AdjResistor(ilim):
    """Compute the exact value for the NCP380 adjust resistor,
    given a Ilim value in amperes"""
    #Check limits
    if ilim < 0.100: print("Warning: NCP380 does not support currents below 100 Milliamperes")
    elif ilim > 2.1: print("Warning: NCP380 does not support currents above 2.1 Amperes")
    #Compute resistor according to equation 5 from the datasheet
    rlim = -5.2959 * ilim**5 + 45.256 * ilim**4 - 155.25 * ilim**3 + 274.39 * ilim**2 - 267.6 * ilim + 134.21
    return rlim * 1000.0 #equation gives us kiloohms

# Usage example: Compute E96 Rlim for Ilim=0.23A
if __name__ == "__main__":
    # Compute theoretical value
    rlim = computeNCP380AdjResistor(0.23) #amperes
    # Compute nearest actual value
    actual_rlim = nearest_resistor(rlim, sequence=e96)
    # Print results
    print("Theoretical rlim value: %s" % (format_value(rlim, "Ω")))
    print("Closest E96 value: %s" % (format_value(actual_rlim, "Ω")))