I share this design because it's very handy, cheap, useful and the parameters are easy to adapt for other uses and ranges.
It might look messy but it's just due to poor planning (that's the 2nd prototype)
This generator is based on a classic 2-PNP circuit:
- R1's value is not critical, it must only be able to supply enough current to turn T1 fully on. The BC559C has a hFE around 500, I want to supply 20mA, so 200µA is more than enough. 10K can provide 1mA (@10V) so it could be increased to almost 50K...
- T1 and T2 should ideally be identical, from the same lot, to reduce drift (T1 would slightly drift anyway if it conducts some significant current)
- the current is set by R3+R4+45. T2 keeps their drop below 0.7V so current I=0.7/(R3+R4+R5) (can this be easier to calculate ?)
For example, when all the pots are down to 0, only R3 remains and it limits the current to 0.7/27=25,9mA (in practice we find 21.6mA because the drop is lower, close to 0.6V)
Conclusion: it's cheap, rather stable and uses very few parts. Another advantage is the low minimal drop: with a 9V battery, the circuit has at least 8V of headroom. Even more headroom is possible if a 2nd battery in series increases the supply voltage to 18V (R1's value would be doubled).
The real circuit is shown below :
- A single switch turns the current generator and the ammeter on
- A bypass switch lets us check the settings without having to short the output with a wire
- R3 is decreased to 27 Ohms so the max current is about 21mA
Max current (R4=R5=0) : 21.6mA
Min current with only R4 : 0.3mA
Min current with R5 : 4.7µA
The output current is stable from 0V to 8V
The integrated ammeter is only 4000 points and can't show less than 10µA, an additional ammeter in series with the proper range would be required. However, simulation shows that base currents start to become predominant in the µA range so there is no point in going lower...