A constant current circuit maintains a fixed current through a load regardless of supply voltage fluctuations or load resistance changes, up to a specific compliance voltage limit. While basic series resistors are fine for crude LED limiting, any application requiring precision—like battery charging, sensor biasing, or laser diode driving—demands an active current circuit. In this guide, we break down the classic Bipolar Junction Transistor (BJT) current sink, compare it to integrated alternatives, and walk through a real-world 20mA design with exact component values and failure-mode analysis.
The Core Topology: BJT Constant Current Sink
The most fundamental active current circuit relies on an NPN transistor configured as a common-collector amplifier (emitter follower) with a fixed base voltage. The transistor acts as a variable resistor, automatically adjusting its collector-emitter resistance to maintain a constant voltage drop across the emitter sense resistor.
Here are the critical node labels for this topology:
- V_CC: The main DC supply rail (e.g., 12V).
- V_BASE: The reference voltage applied to the transistor base, typically set by a Zener diode or a voltage divider.
- V_EMITTER: The node connecting the transistor emitter to the sense resistor. This voltage is always V_BASE minus the base-emitter junction drop (V_BE, typically ~0.7V).
- V_COLLECTOR: The output node where the load connects. The load sits between V_CC and the collector.
- GND: The common ground reference for the supply, the base bias network, and the sense resistor.
Because the base voltage is held rigid by the reference network, the emitter voltage is also fixed. By Ohm's Law (I = V/R), a fixed voltage across a fixed emitter resistor yields a fixed emitter current. Since collector current is nearly identical to emitter current (I_C ≈ I_E), the load receives a constant current.
Behavior Matrix: How Element Changes Affect the Current Circuit
Understanding how a current circuit reacts to component drift and environmental changes is what separates a textbook schematic from a working bench prototype. The table below maps parameter changes to their direct effects on the output current (I_OUT).
| Parameter Changed | Direction | Effect on I_OUT | Physical Reason & Bench Reality |
|---|---|---|---|
| Sense Resistor (R_SENSE) | Increase | Decreases | I_OUT = V_EMITTER / R_SENSE. A 1% increase in resistance yields a 1% drop in current. |
| Base Reference (V_BASE) | Increase | Increases | Raises V_EMITTER. Zener diodes have positive tempcos; as they heat, V_BASE rises, slightly increasing I_OUT. |
| Load Resistance | Increase | No Change | The BJT reduces its V_CE to compensate. This holds true only until the transistor hits saturation (compliance limit). |
| Ambient Temperature | Increase | Increases | V_BE drops by ~2mV/°C. A 25°C rise drops V_BE by 50mV, raising V_EMITTER and pushing I_OUT higher by ~0.6mA on an 82Ω resistor. |
| Supply Voltage (V_CC) | Decrease | No Change | Assuming V_CC remains above the compliance voltage (V_LOAD + V_CE(sat) + V_EMITTER), the current remains locked. |
BJT Sink vs. LM317 Source: Topology Trade-offs
Why build a discrete BJT sink when you can use an LM317 voltage regulator configured as a constant current source? The choice depends entirely on your dropout voltage requirements, component budget, and whether you need a high-side source or a low-side sink.
| Criteria | Discrete BJT Current Sink | LM317 Current Source |
|---|---|---|
| Topology Position | Low-side (Load connected to V_CC) | High-side (Load connected to GND) |
| Dropout / Compliance Voltage | Very low (~0.2V V_CE(sat) + V_EMITTER) | High (~2.5V minimum headroom required) |
| Component Count & Cost | 4 parts (~$0.15 total BOM) | 2 parts (~$0.60 for LM317 + 1 resistor) |
| Thermal Stability | Poor (requires V_BE tempco compensation for precision) | Excellent (internal bandgap reference and thermal limiting) |
Design Walkthrough: Sizing Components for a 20mA Driver
Let's design a low-side current circuit to drive a standard indicator LED at exactly 20mA from a 12V V_CC rail. The LED has a forward voltage (V_F) of 2.0V.
1. Set the Base Reference (V_BASE)
We need a stable voltage. A 2.4V Zener diode (BZX79-C2V4) is cheap and provides a stiff reference. We will bias it with a resistor from V_CC.
V_BASE = 2.4V
2. Calculate the Emitter Voltage (V_EMITTER)
The base-emitter junction of our 2N3904 NPN transistor drops about 0.7V.
V_EMITTER = V_BASE - V_BE = 2.4V - 0.7V = 1.7V
3. Size the Sense Resistor (R_SENSE)
Using Ohm's Law for our target 20mA (0.02A):
R_SENSE = V_EMITTER / I_OUT = 1.7V / 0.02A = 85Ω
The closest standard 1% E96 value is 84.5Ω, or we can use a standard E12 82Ω resistor which will yield a slightly higher 20.7mA. Let's use 82Ω to ensure the LED is fully bright. Power dissipation is I²R = (0.02)² * 82 = 0.032W, so a standard 1/4W (0.25W) resistor is more than adequate.
4. Size the Base Bias Resistor (R_B)
The 2N3904 has a minimum DC current gain (h_FE) of 100. Base current I_B = I_C / h_FE = 20mA / 100 = 0.2mA. To keep the Zener diode in its breakdown region and make the bias 'stiff', we should supply at least 5x the base current (1mA).
R_B = (V_CC - V_BASE) / I_BIAS = (12V - 2.4V) / 1mA = 9.6kΩ
We will use a standard 10kΩ resistor.
| Component | Designator | Value / Part Number | Tolerance | Power Rating |
|---|---|---|---|---|
| Transistor | Q1 | 2N3904 (NPN BJT, TO-92) | N/A | 625mW |
| Zener Diode | D1 | BZX79-C2V4 (2.4V) | 5% | 500mW |
| Sense Resistor | R_SENSE | 82 Ω (Carbon/Metal Film) | 1% | 250mW |
| Bias Resistor | R_B | 10 kΩ (Carbon/Metal Film) | 5% | 250mW |
Extreme Failure Modes: What Breaks When Things Go Wrong
A robust design anticipates component failures. Here is how this specific current circuit behaves when pushed to the extremes or when a single element fails.
- Shorted R_SENSE: The emitter is tied directly to GND. V_EMITTER drops to 0V. The transistor base-emitter junction acts as a standard forward-biased diode, pulling massive current through the base and collector. The 2N3904 will likely exceed its 200mA max collector rating and fail short, dumping full V_CC into your load. Fix: Add a small fuse or use a transistor with a higher current rating if load survival is critical.
- Opened R_SENSE: The emitter current path is broken. I_OUT drops immediately to zero. The load turns off safely. The transistor base will pull ~1mA through R_B and D1, but no collector current flows. Safe failure mode.
- Shorted Load: If the load accidentally shorts to GND, the full 12V V_CC appears across the collector-emitter junction. The transistor will attempt to push 20mA. Power dissipation in Q1 becomes P = V_CE * I_C = 12V * 0.02A = 240mW. The 2N3904 can handle 625mW, so it will survive, but it will get noticeably warm. If V_CC were 30V, dissipation would hit 600mW, pushing the TO-92 package to its absolute thermal limit.
- Opened Base Connection (or failed R_B): Base current drops to zero. The transistor cuts off. I_OUT falls to the leakage current (I_CEO), typically in the nanoamp range. The load turns off safely.
Step-by-Step Breadboard Testing Protocol
Do not just plug it in and hope. Follow this sequence to verify the current circuit's compliance range and thermal stability on the bench. You will need a digital multimeter (DMM) and a variable bench power supply.
- Build the Bias Network First: With the bench supply turned off and set to 12V, insert Q1, D1, and R_B into the breadboard. Do not connect R_SENSE or the load yet.
- Verify V_BASE: Power on the supply. Probe the base of Q1 (V_BASE) relative to GND. You should read between 2.28V and 2.52V (accounting for the 5% Zener tolerance). If you read ~11.5V, your Zener is in backward or R_B is open.
- Install Sense and Load: Power down. Insert the 82Ω R_SENSE from the emitter to GND. Connect your LED load between V_CC and the collector.
- Measure V_EMITTER: Power on. Probe the emitter node. You should read exactly V_BASE minus ~0.7V (e.g., 2.4V - 0.7V = 1.7V). If V_EMITTER is 0V, Q1 is dead or wired backward.
- Calculate Actual Current: Measure the exact voltage across R_SENSE. Divide this voltage by the exact measured resistance of your 82Ω resistor. (e.g., 1.68V / 81.5Ω = 20.6mA). This is your true I_OUT.
- Test the Compliance Limit: Slowly dial down the bench power supply from 12V to 3V. Watch the current reading on your DMM. It should remain dead steady at ~20mA until V_CC drops below roughly 4.5V (V_LED + V_CE(sat) + V_EMITTER). Below that threshold, the current circuit 'drops out' and the current will fall off a cliff. This defines your compliance voltage boundary.
For deeper theoretical background on active current mirrors and thermal compensation techniques, refer to the All About Circuits guide on constant current sources. If you decide to pivot to an integrated high-side source for a later revision, the Texas Instruments LM317 datasheet provides exact dropout curves and thermal resistance calculations for TO-220 packaging.






