Some background: I have recently aquired a few really nice (and really heavy!!!) LAMBDA power supplies, The largest one supplies 24V, and up to 9A, but has annoying foldback current limiting, which causes the output shut off when even a short period overload (like inrush current) is detected. What I want: I would like to modify this power supply to give me (ideally) completly variable 0-15v dual rail voltages & 0-5A adjustable current limit, & I would like this to be controlled with arduino so that I can use a nice LCD display and control the supply remotely with a bluetooth or wifi app, and possibly do some data logging which could come in handy for energy measurements and stuff! My current PSU design: The schematic below is what I've currently built in LTspice. Both the voltage & current regulation work. The voltage across the (+) and (-) inputs of the current error amplifier should be the sum of the voltage drop across the shunt resistor and the voltage drop of a voltage reference, so when the voltage on the shunt resistor exceeds the voltage of that reference, the op amp will start to limit current by reducing the bias voltage on the pass transistor. This V_ref needs to be both variable and accurate, but since this V_ref is a differential voltage between the output of the pass transistor and the input of the error amp, I came up with the clever idea to use a resistor there and a variable constant current sink. That way the constant current through that resistor results in a fixed V_drop across it. With a bit of fudging around with it, I was able to make it work. However, I need to replace that "ideal" current sink with a real one. I tried using the classic NPN-based one, but it wasn't good enough. I then attempted to make the slightly improved version of that current sink with a spare op amp, although this worked, it would stop pulling current once the voltage fell below what was being maintained across the small resistor. The REAL question: Would anyone happen to know how to make a really accurate and variable current sink? Maybe if this is not such a great idea, what other methods can I use to generate a fixed differential voltage?