Current source design aspects

Tessellated Circuits: Home => Old Home => The Chronulator SMD => current source  

The Chronulator Current Source

What is a current source?

First some background. A current source, in the language of circuit analysis, is the dual of a voltage source. We all seem to have more familiarity with voltage sources (cells, batteries and those things where we plug our lamps into the wall), so it can be useful to define the properties of a current source by means of comparison with a voltage source:

Property Voltage source Current source
Output A constant voltage as
per design and/or setting
A constant current as
per design and/or setting
Short circuit Infinite (in theory) current* The same constant current
Open Circuit The same constant voltage Infinite (in theory) voltage*
Loaded within design limits The same constant voltage The same constant current
Output resistance or impedance Zero Infinite

Notes for the table, but not to be skipped;

*No physical circuit has infinite properties: in this case an actual infinite output (current or voltage) would mean infinite power capability. Consider a bench power supply's current limit: after such and such a current demand is reached either it shuts off or only outputs a constant current, depending on its design. AHA! So a power supply might be either a current or a voltage source. In fact a good bench supply will have separate voltage and current controls and can be used as either. So, thinking about a current source is really no different than thinking about a voltage source: if the voltage dropped across a current source's load becomes higher than the source's voltage capability (called the compliance), then it very likely becomes a voltage source, again a dual situation.

This is probably the most confusing aspect of a current source. Most would think that an infinite output impedance would allow no power to flow, but that is not the case. What it does mean that for any change in the load resistance the current does not change. Now, one has to stay with the duality program here: if a voltage source's impedance is a (hopefully small) series resistance, then a current source's impedance is a (hopefully large) PARALLEL resistance. Any non infinite parallel resistance will "steal" current from the output. This helps me keep things clear, hope it does it for you too...

What about the Chronulator's current source?

First, realize that the circuit in the Chronulator is a current source driven by the voltage from a microcontroller's port pin, and that the voltage is Pulse Width Modulated (PWM) to create a variable average current. In the design an eight bit PWM counter is used so the maximum value is 255, in other words a value of 255 would be the same as always on. In fact the maximum value used by the software, to drive both the minutes and hour circuits is 240, a number that is divisible by both 60 and 12 (or 24). [In actuality the maximums will be 240-(1/60)×240 which is 59/60×240 which calculates as 236 for the minutes scale except when in the calibrate mode when it does hit 240. This could be important if you are looking at a running clock's output with a scope. A similar calculation, using either 11/12 or 23/24, applies for the hours circuit.]

The source used here is composed of two PNP bipolar transistors with various resistors as required to bias the transistors.

Modelling the Chronulator's current source:

Here's a model of the current source in LTspice (file: ISource.asc; right click on the image to download the model file, using your browser's “Save Link As...” option).

Note that R3 represents the meter, and that R1 is made up of one variable and two fixed resistors in the actual meter drive circuits.

Run the model without the '.step temp' command (just right click on it in LTSpice and put an '#' in front of the line) and you will get the operating points in a pop-up table. Change R3 to be any value greater than 0 (LTspice won't accept a zero, but you can enter, say .001) up to about 30 kΩ and the current through the resistor will not change substantially (at about 127 μA). If the resistor is increased to say 40 kΩ the current will start to drop due to there no longer being enough “headroom” to allow the two PNP transistors to drop their inherent base-emitter voltages. Quite an impressive load range when you think of it, say 30 million to 1! Note that in the Chronulator the supply voltage is 3 V or less when running off the 2 AA-cell battery, so there is less headroom in practice.

I've marked one voltage on the image, the Vbe for Q1. That means base-emitter, and the fact that it is fairly constant is key to the circuit's operation. It, with R1, determines the operating current: I = Vbe/R1. For the R1 shown, I is about 0.58/5000 = 116 μA.

Note that the value of R2 is ideally such that the current through it matches the load current. This is because the best performance is attained when the two transistors have as close to identical currents flowing through them as possible. Practically, in this application it does not matter too much. You can play with the values in simulation if you want. One implication of the above statement is that the current consumed by the circuit is approximately (exactly if perfectly matched) twice the load current. This has a negative affect on battery life—battery life is better if R2 is higher than the otherwise perfect value.

A different, better design?

The original design does the job, mostly, however there are a couple of problems. (The one aspect that it excels at, putting a constant current into a varying load, is not actually important since the resistance of a d'Arsenoval meter does not change except by exhibiting the tempco of copper.)

The first imperfection is the sensitivity of current to temperature. If you enable the “.step temp -100 150” Spice command and click on run you will see a fairly linear current vs. temperature curve for the current through R3 (left click on R3 to get its current plotted). The tempco works out to be about .4 μA per °C, and this means that a change of only about 4°C would cause the display to be off by a minute at the high end of the scale!

The second problem, and this is not nearly as significant, is the sensitivty to input voltage. The board can run with either the battery voltage which would be somewhat less than 3 V or, from the USB bus voltage, 5 V. If the simulation is run with R1=5k, R2=82k and V1 stepped from 1.5 to 5.5 V then it is seen that the meter current will vary from about 109 μA at 2.5 V to about 115 μA at 5 V. This is about a 5% change, which is not too bad considering that a minute is about 16% of the full scale, but it might make it hard to read the minutes accurately on a physically small meter scale, considering that d'Arsenoval meters can be fairly non linear.

I thought I could do better. A modern voltage reference chip such as the MAX6001 (a 1.25 V part) has some pretty impressive specs. The tempco is typically 20, maximum 100 ppm/°C and the line regulation (sensitivity to input voltage) is typically 8, max 120 μV/V. Now, 100 ppm/°C is the same as 0.01%/°C, better than the about 0.4%/°C found above, and the line regulation maps to 0.012%/V, again quite an improvement.

So I decided to try an alternative circuit. I installed one of these references and a couple of P-channel MOSFETs to switch its output into series circuits each consisting of a variable resistance much like in the Chronulator and a meter onto a breadboard. It worked just fine, though I did not test it exhaustively over temperature.

Then things started getting com­plicated. Since I was convinced that I should also provide the same circuit to users as they were used to, I would have to provide jumpers and optional com­ponents in the circuit so that either meter driver could be implemented, see the schematic fragment at right. To implement the original circuit (well, with an improvement, can you spot it?) the solder-blob jumper at SJ1 would have to connect the FET to Vcc and SJ3 would have to be open with all other components installed. To select the reference-driven source SJ1 would have to have a blob to the left and SJ3 would have to short out Q2 and R3 would have to be absent.

This all took too much room, so in the end I just stuck with the basic Chronulator current source with the following modifications: