Discrete LM3909: Blue LED Radome

Dropping a simplified ping-pong ball radome for a Piranha RGB LED atop a discrete LM3909 on the AA alkaline cell holder:

Discrete LM3909 Radome - AA alkaline
Discrete LM3909 Radome – AA alkaline

The solid model has screw holes for the lid and the revised LED spider:

Astable Multivibrator - Alkaline AA Base - radome - solid model
Astable Multivibrator – Alkaline AA Base – radome – solid model

The RGB LED needs only two wires, as the LM3909 circuit can blink only one LED. I tried all three colors, but only blue and green justify the LM3909 hairball; red can get along with the astable circuit.

The LED wires connect across a 1 MΩ resistor serving as a mechanical strut between the 9.1 kΩ resistor on the left and the 10 Ω ballast resistor on the right.

Fresh alkaline cells at 3.0 V put 3.3 V across the blue LED with a 37 mA peak current. Older cells at 2.3 V produce 2.9 V at 15 mA. Dead cells at 1.9 V still fire the LED with 2.7 V at 4.2 mA, although the flash is barely visible in ordinary room light.

The lovely blue ball looks better in person!

The OpenSCAD source code as a GitHub Gist:

// Astable Multivibrator
// Holder for Alkaline cells
// Ed Nisley KE4ZNU August 2020
// 2020-09 add LED radome
/* [Layout options] */
Layout = "Build"; // [Build,Show,Lid,Spider]
/* [Hidden] */
CellName = "AA"; // [AA] -- does not work with anything else
NumCells = 2; // [2] -- likewise
Struts = -1; // [0:None, -1:Dual, 1:Quad] -- Quad is dead
// Extrusion parameters
/* [Hidden] */
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
function IntegerLessMultiple(Size,Unit) = Unit * floor(Size / Unit);
Protrusion = 0.1; // make holes end cleanly
inch = 25.4;
//- Basic dimensions
WallThick = IntegerMultiple(3.0,ThreadWidth);
CornerRadius = WallThick/2;
FloorThick = IntegerMultiple(3.0,ThreadThick);
TopThick = IntegerMultiple(2.0,ThreadThick);
WireOD = 1.5; // battery & LED wiring
WireOC = 4;
Gap = 5.0;
// Cylindrical cell sizes
// https://en.wikipedia.org/wiki/List_of_battery_sizes#Cylindrical_batteries
CELL_NAME = 0;
CELL_OD = 1;
CELL_OAL = 2;
// FIXME search() needs special-casing to properly find AAA and AAAA
// Which is why CellName is limited to AA
CellData = [
["AAAA",8.3,42.5],
["AAA",10.5,44.5],
["AA",14.5,50.5],
["C",26.2,50],
["D",34.2,61.5],
["A23",10.3,28.5],
["CR123A",17.0,34.5],
["18650",18.8,65.2], // bare 18650 with button end
["18650Prot",19.0,70.0], // protected 18650 = 19670 plus a bit
];
CellIndex = search([CellName],CellData,1,0)[0];
echo(str("Cell index: ",CellIndex," = ",CellData[CellIndex][CELL_NAME]));
//- Contact dimensions
CONTACT_NAME = 0;
CONTACT_WIDE = 1;
CONTACT_HIGH = 2;
CONTACT_THICK = 3; // plate thickness
CONTACT_TIP = 4; // tip to rear face
CONTACT_TAB = 5; // solder tab width
ContactData = [
["AA+",12.2,12.2,0.3,1.7,3.5], // pos bump
["AA-",12.2,12.2,0.3,5.0,3.5], // half-compressed neg spring
["AA+-",28.2,12.2,0.3,5.0,0], // pos-neg bridge
["Li+",18.5,16.0,0.3,2.8,5.5],
["Li-",18.5,16.0,0.3,6.0,5.5],
];
function ConDat(name,dim) = ContactData[search([name],ContactData,1,0)[0]][dim];
ContactRecess = 2*ConDat(str(CellName,"+"),CONTACT_THICK);
ContactOC = CellData[CellIndex][CELL_OD];
WireBay = 6.0; // room for wiring to contacts
//- Wire struts
StrutDia = 1.6; // AWG 14 = 1.6 mm
StrutSides = 3*4;
ID = 0;
OD = 1;
LENGTH = 2;
StrutBase = [StrutDia,StrutDia + 2*5*ThreadWidth, // ID = wire, OD = buildable
FloorThick + CellData[CellIndex][CELL_OD]]; // LENGTH = base is flush with cell top
//- Holder dimensions
BatterySize = [CellData[CellIndex][CELL_OAL] + // cell
ConDat(str(CellName,"+"),CONTACT_TIP) + // pos contact
ConDat(str(CellName,"-"),CONTACT_TIP) - // neg contact
2*ContactRecess, // sink into wall
NumCells*CellData[CellIndex][CELL_OD],
CellData[CellIndex][CELL_OD]
];
echo(str("Battery space: ",BatterySize));
CaseSize = [3*WallThick + // end walls + wiring partition
BatterySize.x + // cell
WireBay, // wiring bay
2*WallThick + BatterySize.y,
FloorThick + BatterySize.z
];
BatteryOffset = (CaseSize.x - (2*WallThick +
CellData[CellIndex][CELL_OAL] +
ConDat(str(CellName,"-"),CONTACT_TIP))
) /2 ;
ThumbRadius = 0.75 * CaseSize.z;
StrutOC = [IntegerLessMultiple(CaseSize.x - 2*CornerRadius -2*StrutBase[OD],5.0),
IntegerMultiple(CaseSize.y + StrutBase[OD],5.0)];
StrutAngle = atan(StrutOC.y/StrutOC.x);
echo(str("Strut OC: ",StrutOC));
LidSize = [2*WallThick + WireBay + ConDat(str(CellName,"+"),CONTACT_THICK), CaseSize.y, FloorThick/2];
LidScrew = [2.0,3.8,7.0]; // M2 pan head screw (LENGTH = threaded)
LidScrewOC = CaseSize.y/2 - CornerRadius - LidScrew[OD]; // allow space around screw head
//- Piranha LEDs
PiranhaBody = [8.0,8.0,8.0]; // Z = heatsink fins + body + lens height
PiranhaPin = 0.0; // trimmed pin length beyond heatsink
PiranhaPinsOC = [5.0,5.0]; // pin XY distance
PiranhaRecess = PiranhaBody.z + PiranhaPin/2; // minimum LED recess depth
BallOD = 40.0; // radome sphere
BallSides = 4*StrutSides; // nice smoothness
BallPillar = [norm([PiranhaBody.x,PiranhaBody.y]), // ID
norm([PiranhaBody.x,PiranhaBody.y]) + 3*WallThick, // OD
StrutBase[OD] + PiranhaBody.z]; // height to base of chord
echo(str("Pillar OD: ",BallPillar[OD]));
BallChordM = BallOD/2 - sqrt(pow(BallOD/2,2) - (pow(BallPillar[OD],2))/4);
echo(str("Ball chord depth: ",BallChordM));
//----------------------
// Useful routines
module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
FixDia = Dia / cos(180/Sides);
cylinder(r=(FixDia + HoleWindage)/2,h=Height,$fn=Sides);
}
// Spider for single LED atop struts, with the ball
module DualSpider() {
difference() {
union() {
for (j=[-1,1]) {
translate([0,j*StrutOC.y/2,StrutBase[OD]/2])
rotate(180/StrutSides)
sphere(d=StrutBase[OD]/cos(180/StrutSides),$fn=StrutSides);
translate([0,j*StrutOC.y/2,0])
rotate(180/StrutSides)
cylinder(d=StrutBase[OD],h=StrutBase[OD]/2,$fn=StrutSides);
}
translate([0,0,StrutBase[OD]/4]) // connecting bars
cube([StrutBase[OD]*cos(180/StrutSides),StrutOC.y,StrutBase[OD]/2],center=true);
cylinder(d=BallPillar[OD],h=BallPillar[LENGTH],$fn=BallSides);
}
for (j=[-1,1]) // strut wires
translate([0,j*StrutOC.y/2,-Protrusion])
PolyCyl(StrutBase[ID],StrutBase[OD]/2,6);
for (n=[-1,1]) // LED wiring
rotate(n*90)
translate([StrutOC.x/3,0,-Protrusion])
PolyCyl(StrutBase[ID],StrutBase[OD],6);
translate([0,0,BallOD/2 + BallPillar[LENGTH] - BallChordM]) // ball inset
sphere(d=BallOD);
translate([0,0,BallPillar.z - PiranhaRecess + BallPillar.z/2]) // LED inset
cube(PiranhaBody + [HoleWindage,HoleWindage,BallPillar.z],center=true); // XY clearance
translate([0,0,StrutBase[OD]/2 + WireOD/2 + 0*Protrusion]) // wire channels
cube([WireOD,BallPillar[OD] + 2*WallThick,WireOD],center=true);
}
}
//-- Overall case with origin at battery center
module Case() {
union() {
difference() {
union() {
hull()
for (i=[-1,1], j=[-1,1])
translate([i*(CaseSize.x/2 - CornerRadius),
j*(CaseSize.y/2 - CornerRadius),
0])
cylinder(r=CornerRadius/cos(180/8),h=CaseSize.z,$fn=8); // cos() fixes undersize spheres!
if (Struts)
for (i = (Struts == 1) ? [-1,1] : -1) { // strut bases
hull()
for (j=[-1,1])
translate([i*StrutOC.x/2,j*StrutOC.y/2,0])
rotate(180/StrutSides)
cylinder(d=StrutBase[OD],h=StrutBase[LENGTH],$fn=StrutSides);
translate([i*StrutOC.x/2,0,StrutBase[LENGTH]/2])
cube([2*StrutBase[OD],StrutOC.y,StrutBase[LENGTH]],center=true); // blocks for fairing
for (j=[-1,1]) // hemisphere caps
translate([i*StrutOC.x/2,
j*StrutOC.y/2,
StrutBase[LENGTH]])
rotate(180/StrutSides)
sphere(d=StrutBase[OD]/cos(180/StrutSides),$fn=StrutSides);
}
}
translate([BatteryOffset,0,BatterySize.z/2 + FloorThick]) // cells
cube(BatterySize + [0,0,Protrusion],center=true);
translate([BatterySize.x/2 + BatteryOffset + ContactRecess/2 - Protrusion/2, // contacts
0,
BatterySize.z/2 + FloorThick])
cube([ContactRecess + Protrusion,
ConDat(str(CellName,"+-"),CONTACT_WIDE),
ConDat(str(CellName,"+-"),CONTACT_HIGH)
],center=true);
translate([-(BatterySize.x/2 - BatteryOffset + ContactRecess/2 - Protrusion/2),
ContactOC/2,
BatterySize.z/2 + FloorThick])
cube([ContactRecess + Protrusion,
ConDat(str(CellName,"+"),CONTACT_WIDE),
ConDat(str(CellName,"+"),CONTACT_HIGH)
],center=true);
translate([-(BatterySize.x/2 - BatteryOffset + ContactRecess/2 - Protrusion/2),
-ContactOC/2,
BatterySize.z/2 + FloorThick])
cube([ContactRecess + Protrusion,
ConDat(str(CellName,"-"),CONTACT_WIDE),
ConDat(str(CellName,"-"),CONTACT_HIGH)
],center=true);
translate([-CaseSize.x/2 + WireBay/2 + WallThick, // wire bay with screw bosses
0,
BatterySize.z/2 + FloorThick + Protrusion/2])
cube([WireBay,
2*LidScrewOC - LidScrew[ID] - 2*4*ThreadWidth,
BatterySize.z + Protrusion
],center=true);
for (j=[-1,1]) // screw holes
translate([-CaseSize.x/2 + WireBay/2 + WallThick,
j*LidScrewOC,
CaseSize.z - LidScrew[LENGTH] + Protrusion])
PolyCyl(LidScrew[ID],LidScrew[LENGTH],6);
for (j=[-1,1])
translate([-(BatterySize.x/2 - BatteryOffset + WallThick/2), // contact tabs
j*ContactOC/2,
BatterySize.z + FloorThick - Protrusion])
cube([2*WallThick,
ConDat(str(CellName,"+"),CONTACT_TAB),
(BatterySize.z - ConDat(str(CellName,"+"),CONTACT_HIGH))
],center=true);
if (false)
translate([0,0,CaseSize.z]) // finger cutout
rotate([90,00,0])
cylinder(r=ThumbRadius,h=2*CaseSize.y,center=true,$fn=22);
translate([0,0,ThreadThick - Protrusion]) // recess around name
cube([0.6*CaseSize.x,8,2*ThreadThick],center=true);
if (Struts)
for (i2 = (Struts == 1) ? [-1,1] : -1) { // strut wire holes and fairing
for (j=[-1,1])
translate([i2*StrutOC.x/2,j*StrutOC.y/2,FloorThick])
rotate(180/StrutSides)
PolyCyl(StrutBase[ID],2*StrutBase[LENGTH],StrutSides);
for (i=[-1,1], j=[-1,1]) // fairing cutaways
translate([i*StrutBase[OD] + (i2*StrutOC.x/2),
j*StrutOC.y/2,
-Protrusion])
rotate(180/StrutSides)
PolyCyl(StrutBase[OD],StrutBase[LENGTH] + 2*Protrusion,StrutSides);
}
}
translate([0,0,0])
linear_extrude(height=2*ThreadThick + Protrusion,convexity=10)
mirror([0,1,0])
text(text="KE4ZNU",size=6,spacing=1.20,font="Arial:style:Bold",halign="center",valign="center");
}
}
module Lid() {
difference() {
hull()
for (i=[-1,1], j=[-1,1], k=[-1,1])
translate([i*(LidSize.x/2 - CornerRadius),
j*(LidSize.y/2 - CornerRadius),
k*(LidSize.z - CornerRadius)]) // double thickness for flat bottom
sphere(r=CornerRadius/cos(180/8),$fn=8);
translate([0,0,-LidSize.z]) // remove bottom
cube([(LidSize.x + 2*Protrusion),(LidSize.y + 2*Protrusion),2*LidSize.z],center=true);
for (j=[-1,1]) // wire holes
translate([0,j*WireOC,-Protrusion])
PolyCyl(WireOD,2*LidSize.z,6);
for (j=[-1,1])
translate([0,j*LidScrewOC,-Protrusion])
PolyCyl(LidScrew[ID],2*LidSize.z,6);
}
}
//-------------------
// Build it!
if (Layout == "Case")
Case();
if (Layout == "Lid")
Lid();
if (Layout == "Spider")
if (Struts == -1)
DualSpider();
else
cube(10,center=true);
if (Layout == "Build") {
rotate(90)
Case();
translate([0,-(CaseSize.x/2 + LidSize.x/2 + Gap),0])
rotate(90)
Lid();
if (Struts == -1)
translate([CaseSize.x/2,0,0])
DualSpider();
}
if (Layout == "Show") {
Case();
translate([-CaseSize.x/2 + LidSize.x/2,0,(CaseSize.z + Gap)])
Lid();
}

Discrete LM3909: Blue LED Waveforms

The circuitry and instrumentation is essentially the same discrete LM3909 as before:

LM3909 - blue - test setup
LM3909 – blue – test setup

With a few minor tweaks:

  • Blue LED, forward voltage 2.56 to 2.97 V
  • 24 Ω R1
  • One Q2 current mirror transistor driving Q3

With a pair of fresh AA alkaline cells producing 3.1 V (not the NiMH Duracells you see in the picture), the blue LED blinks brightly.

The 610 mV peak voltage across R1 shows the LED starts at 25.4 mA:

LM3909 blue - 3.1 V - R1 24 ohm
LM3909 blue – 3.1 V – R1 24 ohm

The capacitor reaches 1 V, then goes about 150 mV into reverse charge during the flash (note the different horizontal scales):

LM3909 blue - 3.1 V - C1 V
LM3909 blue – 3.1 V – C1 V

The Darlington version of Q1 seems to do a decent job of keeping the cap out of reverse charge. A Shottky diode would add a few hundred mV, but I doubt there’s anything nasty going on inside the cap as it stands.

The blue LED has a forward drop of 2.97 V at 20 mA, so I’m surprised the voltage across it hits 3.1 V at 25 mA:

LM3909 blue - 3.1 V - LED V
LM3909 blue – 3.1 V – LED V

Very little of the voltage appears across Q3, the driver transistor:

LM3909 blue - 3.1 V - Q3 coll
LM3909 blue – 3.1 V – Q3 coll

With a pair of nearly dead alkaline cells for a 2.0 V supply, the LED current peak drops to 4.6 mA:

LM3909 blue - 2.0 V - R1 24 ohm
LM3909 blue – 2.0 V – R1 24 ohm

The LED lights brightly, then fades away exactly like you’d expect from that waveform.

The cap still charges to about 1 V and stays well above 0 V during the (much longer) flash:

LM3909 blue - 2.0 V - C1 voltage
LM3909 blue – 2.0 V – C1 voltage

The voltage across the LED now reaches only 2.7 V, which is substantially higher than the 2.0 V battery supply and exactly why the LM3909 existed:

LM3909 blue - 2.0 V - LED voltage
LM3909 blue – 2.0 V – LED voltage

Q3 continues to saturate, although you can see the effect of the decreased base drive during the flash:

LM3909 blue - 2.0 V - Q3 coll
LM3909 blue – 2.0 V – Q3 coll

The blue LED won’t light at 1.3 V, but still gives out a weak flash at 1.7 V, so I’d say the tweaked LM3909 circuitry works reasonably well.

Alkaline AA Astable vs. RGB and Yellow LEDs

A fresh pair of alkaline AA cells at 3.2(-ish) V can’t light a Vf = 3 V blue LED with any authority, but I laid out an astable multivibrator circuit with a Piranha RGB LED to see how the colors looked:

Astable AA Alkaline - build test
Astable AA Alkaline – build test

Lighting all three LEDs at once doesn’t make much sense, although I did try it just for the amusement. Spoiler: red wins, even with more-or-less equal currents.

Mounting the hairball on an AA alkaline holder looks better:

Astable AA Alkaline - RGB LED test
Astable AA Alkaline – RGB LED test

Red being the only LED color making any kind of sense meant the Piranha was overqualified for the job, so I replaced all that clutter with a simple 5 mm yellow LED:

Astable AA Alkaline - yellow
Astable AA Alkaline – yellow

It’s shatteringly bright at 20 mA from fresh alkalines at 3.2 V and remains visible down to 1.8 V.

The original circuit schematic / layout doodle:

Astable wiring layout - Piranha RGB test
Astable wiring layout – Piranha RGB test

No surprise in any of this, as it’s why the discrete LM3909 circuitry happened, but it’s nice to have a simple LED atop some alkalines for show-n-tell. If, of course, show-n-tell events ever happen again …

DSO150: USB Serial Output

Taking all those pictures of the DSO150 screen reminded me it has a data dump function: press the V/Div and ADJ buttons to squirt configuration, measurements, and trace data from the TX pad on the main board, just in front of the red-black power wires hot-melt glued in place:

DSO150 USB serial adapter - interior
DSO150 USB serial adapter – interior

The picture shows the “before” stage, while I was figuring out where to carve another hole in the case.

NB: The 113-15001-111 DSO150 firmware version includes the serial output option, so you won’t need third-party firmware. Similarly, current PCBs bring the serial pins to neatly labeled header pads. You should refer to the JYETech DSO150 / DSO Shell product page for the details.

After all the cuttin’ and filin’ was done, it looked like this:

DSO150 USB serial adapter - exterior
DSO150 USB serial adapter – exterior

The power switch on the back of the case (top of the picture) disconnects the lithium cell from the charge controller board (now tucked behind the battery) to eliminate any trickle current discharge. Charging the battery thus requires turning that switch on and turning the scope off with its own power switch (along its front edge). Capturing trace data requires having both switches on (duh), whereupon the scope’s normal operating current convinces the charge controller that the cell hasn’t reached full charge. Turn the scope off and, most likely, the controller will tell you the cell is fully charged.

An intro blurb squirts from the port at 115200 in good old 8N1 format when you turn the scope on:

DSO Shell
JYE Tech Ltd.
WWW.JYETECH.COM
FW: 113-15001-111

Pressing the V/Div and ADJ buttons dumps the trace data:

VSen,0.5V
Couple,DC
VPos, -2.02V
Timebase,0.2s
HPos,00362
TriggerMode,NORM
TriggerSlope,Rising
TriggerLevel,  2.02V
RecordLength,01024
Vmax,  2.85V
Vmin,  0.24V
Vavr,  0.87V
Vpp,  2.61V
Vrms,  1.03V
Freq, 0.441Hz
Cycl, 2.266s
PW, 0.231s
Duty, 10.2 %
SampleInterval,00008ms
00000,0000000000, 0.8518688
00001,0000000008, 0.5273474
00002,0000000016, 0.5273474
00003,0000000024, 0.5476300
00004,0000000032, 0.5476300
00005,0000000040, 0.5476300
<< snippage >>
01015,0000008120, 0.8113037
01016,0000008128, 0.8315863
01017,0000008136, 0.8315863
01018,0000008144, 0.8315863
01019,0000008152, 0.8315863
01020,0000008160, 0.8315863
01021,0000008168, 0.8315863
01022,0000008176, 0.8518688
01023,0000008184, 0.8518688

It’s all in neatly comma-separated-value format, so you can slam it into a spreadsheet and have your way with it. Utilities also exist to capture the data, extract the values, and send them directly to GNUplot, etc.

Like so:

DSO150 test image
DSO150 test image

If I expected to do a lot of that, I’d boldify the traces and embiggen the text, all of which is in the nature of fine tuning.

It’s hard to reproduce the beauty of the DSO150’s display, though:

DSO150 test image
DSO150 test image

The DSO150 remains pretty good for being the worst oscilloscope I’m willing to use …

Discrete LM3909 vs. DSO150 Scope

Although I’m a big fan of multi-channel scopes and Hall-effect current probes, a dirt-cheap single-trace oscilloscope can get you quite a ways to the goal:

LM3909 - DSO150 test setup
LM3909 – DSO150 test setup

That’s a genuine JYETech DSO150 powered by an 18650 lithium cell and a boost converter set to 9 V. Make sure you get a genuine DSO150 from an authorized seller, rather than one of the myriad knockoffs; it doesn’t cost much more and tends to reward the right folks.

Anyhow, battery power means you can connect it directly across components to measure what would otherwise be a differential voltage:

LM3909 - Darl Q1 3x Q2 - 1.5 V - R1 V - DSO150
LM3909 – Darl Q1 3x Q2 – 1.5 V – R1 V – DSO150

That’s the voltage across R1, the 39 Ω LED ballast resistor in the discrete LM3909 circuit running from a 1.5 V supply. Divide the 314 mV peak by 39 Ω to get 8 mA of LED current.

The voltage across C1, the timing and boost capacitor, looks like this:

LM3909 - Darl Q1 3x Q2 - 1.5 V - C1 V - DSO150
LM3909 – Darl Q1 3x Q2 – 1.5 V – C1 V – DSO150

So the cap adds half a volt to the supply in order to put 2.0 V across the LED, which accounts for the relatively low current; the green LED has a forward drop of about 2.2 V at 20 mA and 1.9 V at µA-level current.

For completeness, the voltage across the LED:

LM3909 - Darl Q1 3x Q2 - 1.5 V - Green LED V - DSO150
LM3909 – Darl Q1 3x Q2 – 1.5 V – Green LED V – DSO150

So, yup, the LED really does see 2.0 V. I love it when the numbers work out.

Crank the supply to 3 V and see this across R1:

LM3909 - Darl Q1 3x Q2 - 3.2 V - R1 V - DSO150
LM3909 – Darl Q1 3x Q2 – 3.2 V – R1 V – DSO150

The LED current is now 1.23 V / 39 Ω = 33 mA.

The capacitor just barely enters reverse charge:

LM3909 - Darl Q1 3x Q2 - 3.2 V - C1 V - DSO150
LM3909 – Darl Q1 3x Q2 – 3.2 V – C1 V – DSO150

Pop quiz: what voltage to you expect to see across the LED?

I’ll leave further investigation to your imagination, but for low-frequency analog work, you can do worse than a DSO150.

Discrete LM3909: First Light

Another entry in the “The bigger the blob, the better the job” soldering contest:

LM3909 - Darl Q1 3x Q2 mirror - installed
LM3909 – Darl Q1 3x Q2 mirror – installed

It’s a discrete-transistor version of the LM3909 atop the alkaline AA cell holder, with a little PTC fuse for that good safety vibe. The overall layout follows this doodle:

LM3909 wiring layout - Darl Q1 - 3x Q2 gain
LM3909 wiring layout – Darl Q1 – 3x Q2 gain

The four transistors across the bottom row let me test the simulation suggesting there’s no need for the 3× current gain mentioned in the App Note. Spoiler: future LM3909 circuits have the usual two-transistor mirror.

Adding some instrumentation required a bit of unsoldering and clip-lead action: to get the Tek current probe around the LED wiring:

LM3909 - Darl Q1 3x Q2 mirror - test setup
LM3909 – Darl Q1 3x Q2 mirror – test setup

The voltage probe is across the LED, although you’ll also see the voltage across the capacitor and differential voltages measured properly with the common clip leads on the battery negative terminal. I unsoldered two of the mirror transistors after verifying a single mirror transistor can saturate Q3.

Removing the AA cells and feeding it with 3 V from a bench supply:

LM3909 - Darl Q1 1x Q2 - V on C1 - I 3V VCC 10 mA-div
LM3909 – Darl Q1 1x Q2 – V on C1 – I 3V VCC 10 mA-div

The yellow trace is the voltage at the collector of Q3 = positive terminal of C1. The purple trace is the voltage at the LED cathode = negative terminal of C1. The fuzzy white trace is the difference of those two, showing C1 charges to about 1 V at the start of the LED flash. The white wedge over on the left marks the 0 V level, confirming the cap doesn’t enter reverse-charge territory during the flash.

The green LED produces a bright flash starting at 30 mA (bottom trace, 10 mA/div) for 15 ms. With 1 V on the cap, the LED + 39 Ω ballast resistor see nearly 4 V at the start of the pulse, because Q3 saturates around 20 mV.

Reducing the supply voltage to 1.5 V flattens the current and lengthens the flash to 35 ms:

LM3909 - Darl Q1 1x Q2 - V on C1 - I 1.5V VCC 10 mA-div
LM3909 – Darl Q1 1x Q2 – V on C1 – I 1.5V VCC 10 mA-div

The cap still charges to 1 V between on-times, but the lower supply puts barely 2.5 V across the LED + 39 Ω resistor and the current peaks at 10 mA. The increased duration turns the flash into a blink.

It’s good enough, so AA alkalines should last quite a while.

Discrete LM3909 LED Flasher: Circuit Variations

The basic discrete LM3909 LED Flasher circuit looks like this:

Discrete LM3909 - basic circuit
Discrete LM3909 – basic circuit

The LM3909 IC boosted a single 1.5 V cell enough to fire a red(-ish) LED, even with the cell well under 1 V. I want to blink a blue(-ish) LED from a pair of AA alkaline cells (with the right size & heft to serve as a base for the hairball circuitry), so the voltage ranges from just over 3 V down to maybe 1.5 V. Although the original circuit works, the LED pulse is long enough to put a reverse bias on the timing capacitor; a 470 µF electrolytic cap (positive terminal on the right at node P2-OUT) produces a pulse every few seconds.

A slightly tweaked version of the circuitry puts -400 mV across C1 (green trace) by the end of the pulse:

Discrete LM3909 - basic circuit - 3.0 V simulation
Discrete LM3909 – basic circuit – 3.0 V simulation

The App Note describes the negative feedback loop from the collector of “power transistor” Q3 through Q4 and Q1, closing through the Q2 current mirror. The base-emitter drops of Q4 and Q1 set the trip point where Q1 starts to conduct and the LED turns on.

Q3 is on when the LED is on, with C1 reverse-charging through R1 and the LED. The voltage at the top of R2 rises from the negative voltage at the start of the pulse, carrying the emitter of Q1 along with it. The LED pulse will end when the rising emitter voltage shuts off Q1 and, thus, the Q2 current mirror driving Q3. Because Q3 holds the bottom of R5 close to 0 V, the base of Q4 is at about half the supply voltage, so Q1 remains on until its emitter rises to about 2 forward drops (handwavingly ignoring the R6 + R7 voltage divider) below the supply.

If the LED pulse is longer than required to completely discharge C1, the poor cap gets reverse-biased and suffers indigestion. Aluminum electrolytics can withstand a little reverse bias, but it’s Bad Practice.

When Q3 and the LED are off, C1 forward-charges through (R4 + R5) + R2, with most of the initial voltage across R2, because C1 should start with a little more than 0 V across it. This holds the current mirror off until C1 charges enough to raise the base of Q4 about two forward drops above Q1’s emitter, shove current through Q4 and Q1, turn on the Q2 current mirror, Q3, and light the LED.

Around and around it goes!

The worst case for reverse charge happens at higher supply (a.k.a. battery) voltages and higher LED currents. Reducing the reverse charge time requires more forward drop through Q4 + Q1 to soak up the higher voltage and lower the trip voltage at Q1’s emitter, which suggests putting another forward-biased junction in series.

Putting a diode in Q1’s base lead doesn’t produce much improvement:

Discrete LM3909 - Q1 B diode - 3.0 V
Discrete LM3909 – Q1 B diode – 3.0 V

Perhaps because the 27 µA current at the trip point is so low the diode doesn’t actually have much forward drop; the simulation says 400 mV.

Putting the diode in the emitter runs the current mirror’s 5 mA through it:

Discrete LM3909 - Q1 E diode - 3.0 V
Discrete LM3909 – Q1 E diode – 3.0 V

The overall period remains about 2 s, but the LED pulse = reverse charge time drops by a factor of two and the cap voltage bottoms out at 0 V, so that’s good.

A Darlington transistor provides far more gain to compensate for the reduced base drive:

Discrete LM3909 - Darl Q1 - 3.0 V
Discrete LM3909 – Darl Q1 – 3.0 V

The LED pulse is slightly shorter and its current goes up a smidge, but the cap voltage remains above zero.

A line in the LM3909 App Note mentions that the Q2 current mirror amplifies Q1’s emitter current by a factor of three: “This current will be amplified by about 3 by Q2 and passed to the base of Q3”. An IC current mirror’s designer can scale its output by varying the collector area, but out here in the discrete world we must splice multiple transistors in parallel:

Discrete LM3909 - Darl Q1 3xQ2- 3.0 V
Discrete LM3909 – Darl Q1 3xQ2- 3.0 V

More base drive in Q3 doesn’t buy much, because it’s already pretty well saturated during the pulse, but the current goes up enough to push C1 slightly into reverse charge territory again. As far as I can tell, the factor-of-three gain was required to make up for the relatively poor performance of IC technology around 1970; things have definitely improved since then.

It’s worth mentioning that the actual circuitry (in particular, the LEDs!) will differ from the simulations, so the pretty plots are more along the lines of serving suggestions than actual predictions. Verily, a simulation can’t prove that a circuit will work, but can sometimes help show why it won’t.

All the LTSpice simulation files tucked into a GitHub Gist:

Version 4
SHEET 1 1816 760
WIRE 64 -16 0 -16
WIRE 112 -16 64 -16
WIRE 272 -16 112 -16
WIRE 544 -16 272 -16
WIRE 1024 -16 544 -16
WIRE 1200 -16 1024 -16
WIRE 112 0 112 -16
WIRE 272 0 272 -16
WIRE 1024 32 1024 -16
WIRE 1200 32 1200 -16
WIRE 0 48 0 -16
WIRE 544 48 544 -16
WIRE 944 80 864 80
WIRE 960 80 944 80
WIRE 1136 80 1104 80
WIRE 272 96 272 80
WIRE 400 96 272 96
WIRE 480 96 400 96
WIRE 400 112 400 96
WIRE 112 128 112 80
WIRE 272 128 272 96
WIRE 688 128 640 128
WIRE 800 128 752 128
WIRE 944 144 944 80
WIRE 1024 144 1024 128
WIRE 1024 144 944 144
WIRE 1104 144 1104 80
WIRE 1104 144 1024 144
WIRE 112 160 112 128
WIRE 864 192 864 176
WIRE 912 192 864 192
WIRE 0 208 0 128
WIRE 400 208 400 192
WIRE 640 208 640 128
WIRE 640 208 400 208
WIRE 400 224 400 208
WIRE 112 272 112 224
WIRE 128 272 112 272
WIRE 224 272 192 272
WIRE 272 272 272 208
WIRE 272 272 224 272
WIRE 912 272 912 192
WIRE 400 336 400 304
WIRE 544 336 544 144
WIRE 544 336 400 336
WIRE 112 368 112 272
WIRE 912 368 912 352
WIRE 912 368 112 368
WIRE 272 400 272 272
WIRE 112 416 112 368
WIRE 1200 448 1200 128
WIRE 1200 448 336 448
WIRE 112 464 112 416
WIRE 400 480 400 336
WIRE 0 496 0 288
WIRE 0 496 -32 496
WIRE -32 528 -32 496
WIRE 0 576 0 496
WIRE 64 576 0 576
WIRE 112 576 112 544
WIRE 112 576 64 576
WIRE 272 576 272 496
WIRE 272 576 112 576
WIRE 400 576 400 560
WIRE 400 576 272 576
FLAG -32 528 0
FLAG 112 128 P6-RLIM
FLAG 112 416 P18-RC
FLAG 224 272 P2-OUT
FLAG 64 -16 P5-V+
FLAG 64 576 P4-V-
SYMBOL res 96 -16 R0
SYMATTR InstName R1
SYMATTR Value 39
SYMBOL LED 96 160 R0
SYMATTR InstName D1
SYMATTR Value LXHL-BW02
SYMBOL res 96 448 R0
SYMATTR InstName R2
SYMATTR Value 9.1k
SYMBOL cap 192 256 R90
WINDOW 0 0 32 VBottom 2
WINDOW 3 32 32 VTop 2
WINDOW 40 52 32 VTop 2
SYMATTR InstName C1
SYMATTR Value 1m
SYMATTR SpiceLine2 ic=0.5
SYMBOL res 256 112 R0
SYMATTR InstName R5
SYMATTR Value 390
SYMBOL res 256 -16 R0
SYMATTR InstName R4
SYMATTR Value 390
SYMBOL npn 336 400 M0
SYMATTR InstName Q3
SYMATTR Value 2N3904
SYMBOL res 384 96 R0
SYMATTR InstName R6
SYMATTR Value 20k
SYMBOL res 384 208 R0
SYMATTR InstName R7
SYMATTR Value 10k
SYMBOL res 384 464 R0
SYMATTR InstName R8
SYMATTR Value 20k
SYMBOL npn 480 48 R0
SYMATTR InstName Q4
SYMATTR Value 2N3904
SYMBOL npn 800 80 R0
SYMATTR InstName Q1
SYMATTR Value 2N3904
SYMBOL pnp 960 128 M180
SYMATTR InstName Q2a
SYMATTR Value 2N3906
SYMBOL voltage 0 192 R0
WINDOW 123 0 0 Left 0
WINDOW 39 24 116 Left 2
SYMATTR InstName V1
SYMATTR Value 1.5
SYMBOL res 896 256 R0
SYMATTR InstName R9
SYMATTR Value 100
SYMBOL pnp 1136 128 M180
SYMATTR InstName Q2b
SYMATTR Value 2N3906
SYMBOL res -16 32 R0
SYMATTR InstName PTC
SYMATTR Value 5
SYMBOL diode 688 144 R270
WINDOW 0 32 32 VTop 2
WINDOW 3 0 32 VBottom 2
SYMATTR InstName D2
SYMATTR Value 1N4148
TEXT -56 192 VRight 2 ;AA Alkaline
TEXT 512 528 Left 2 !.tran 30
TEXT 504 496 Left 2 ;Pins 3 and 7 = no connect
TEXT 760 488 Left 2 ;Sorted by Vd at If=20 mA \n \nPart # Mfg Is (A) N Iave (A) Vf@Iave (V) Vd@If (V)\nQTLP690C Fairchild 1.00E-22 1.500 0.16 1.90 1.82\nPT-121-B Luminous 4.35E-07 8.370 20.00 3.84 2.34\nLUW-W5AP OSRAM 6.57E-08 7.267 2.00 3.26 2.39\nLXHL-BW02 Lumileds 4.50E-20 2.600 0.40 2.95 2.75\nW5AP-LZMZ-5K Lumileds 3.50E-17 3.120 2.00 3.13 2.76\nLXK2-PW14 Lumileds 3.50E-17 3.120 1.60 3.11 2.76\nAOT-2015 AOT 5.96E-10 6.222 0.18 3.16 2.80\nNSSW008CT-P Nichia 2.30E-16 3.430 0.04 2.92 2.86\nNSSWS108T Nichia 1.13E-18 3.020 0.04 2.99 2.94\nNSPW500BS Nichia 2.70E-10 6.790 0.03 3.27 3.20\nNSCW100 Nichia 1.69E-08 9.626 0.03 3.60 3.50
TEXT 168 256 Left 4 ;+
TEXT 656 56 Left 2 ;3 V battery needs more VBE
Version 4
SHEET 1 1816 760
WIRE 64 -16 0 -16
WIRE 112 -16 64 -16
WIRE 272 -16 112 -16
WIRE 544 -16 272 -16
WIRE 1024 -16 544 -16
WIRE 1200 -16 1024 -16
WIRE 112 0 112 -16
WIRE 272 0 272 -16
WIRE 1024 32 1024 -16
WIRE 1200 32 1200 -16
WIRE 0 48 0 -16
WIRE 544 48 544 -16
WIRE 848 80 736 80
WIRE 944 80 848 80
WIRE 960 80 944 80
WIRE 1136 80 1104 80
WIRE 272 96 272 80
WIRE 400 96 272 96
WIRE 480 96 400 96
WIRE 400 112 400 96
WIRE 112 128 112 80
WIRE 272 128 272 96
WIRE 672 128 640 128
WIRE 848 144 848 80
WIRE 944 144 944 80
WIRE 1024 144 1024 128
WIRE 1024 144 944 144
WIRE 1104 144 1104 80
WIRE 1104 144 1024 144
WIRE 112 160 112 128
WIRE 736 192 736 176
WIRE 784 192 736 192
WIRE 0 208 0 128
WIRE 400 208 400 192
WIRE 640 208 640 128
WIRE 640 208 400 208
WIRE 400 224 400 208
WIRE 912 240 848 240
WIRE 112 272 112 224
WIRE 128 272 112 272
WIRE 224 272 192 272
WIRE 272 272 272 208
WIRE 272 272 224 272
WIRE 912 272 912 240
WIRE 400 336 400 304
WIRE 544 336 544 144
WIRE 544 336 400 336
WIRE 112 368 112 272
WIRE 912 368 912 352
WIRE 912 368 112 368
WIRE 272 400 272 272
WIRE 112 416 112 368
WIRE 1200 448 1200 128
WIRE 1200 448 336 448
WIRE 112 464 112 416
WIRE 400 480 400 336
WIRE 0 496 0 288
WIRE 0 496 -32 496
WIRE -32 528 -32 496
WIRE 0 576 0 496
WIRE 64 576 0 576
WIRE 112 576 112 544
WIRE 112 576 64 576
WIRE 272 576 272 496
WIRE 272 576 112 576
WIRE 400 576 400 560
WIRE 400 576 272 576
FLAG -32 528 0
FLAG 112 128 P6-RLIM
FLAG 112 416 P18-RC
FLAG 224 272 P2-OUT
FLAG 64 -16 P5-V+
FLAG 64 576 P4-V-
SYMBOL res 96 -16 R0
SYMATTR InstName R1
SYMATTR Value 39
SYMBOL LED 96 160 R0
SYMATTR InstName D1
SYMATTR Value NSSW008CT-P1
SYMBOL res 96 448 R0
SYMATTR InstName R2
SYMATTR Value 9.1k
SYMBOL cap 192 256 R90
WINDOW 0 0 32 VBottom 2
WINDOW 3 32 32 VTop 2
WINDOW 40 52 32 VTop 2
SYMATTR InstName C1
SYMATTR Value 470
SYMATTR SpiceLine2 ic=0.5
SYMBOL res 256 112 R0
SYMATTR InstName R5
SYMATTR Value 390
SYMBOL res 256 -16 R0
SYMATTR InstName R4
SYMATTR Value 390
SYMBOL npn 336 400 M0
SYMATTR InstName Q3
SYMATTR Value 2N3904
SYMBOL res 384 96 R0
SYMATTR InstName R6
SYMATTR Value 20k
SYMBOL res 384 208 R0
SYMATTR InstName R7
SYMATTR Value 10k
SYMBOL res 384 464 R0
SYMATTR InstName R8
SYMATTR Value 20k
SYMBOL npn 480 48 R0
SYMATTR InstName Q4
SYMATTR Value 2N3904
SYMBOL npn 672 80 R0
SYMATTR InstName Q1a
SYMATTR Value 2N3904
SYMBOL pnp 960 128 M180
SYMATTR InstName Q2a
SYMATTR Value 2N3906
SYMBOL voltage 0 192 R0
WINDOW 123 0 0 Left 0
WINDOW 39 24 116 Left 2
SYMATTR InstName V1
SYMATTR Value 1.5
SYMBOL res 896 256 R0
SYMATTR InstName R9
SYMATTR Value 100
SYMBOL pnp 1136 128 M180
SYMATTR InstName Q2b
SYMATTR Value 2N3906
SYMBOL npn 784 144 R0
SYMATTR InstName Q1b
SYMATTR Value 2N3904
SYMBOL res -16 32 R0
SYMATTR InstName PTC
SYMATTR Value 5
TEXT -56 192 VRight 2 ;AA Alkaline
TEXT 512 528 Left 2 !.tran 30
TEXT 504 496 Left 2 ;Pins 3 and 7 = no connect
TEXT 760 488 Left 2 ;Sorted by Vd at If=20 mA \n \nPart # Mfg Is (A) N Iave (A) Vf@Iave (V) Vd@If (V)\nQTLP690C Fairchild 1.00E-22 1.500 0.16 1.90 1.82\nPT-121-B Luminous 4.35E-07 8.370 20.00 3.84 2.34\nLUW-W5AP OSRAM 6.57E-08 7.267 2.00 3.26 2.39\nLXHL-BW02 Lumileds 4.50E-20 2.600 0.40 2.95 2.75\nW5AP-LZMZ-5K Lumileds 3.50E-17 3.120 2.00 3.13 2.76\nLXK2-PW14 Lumileds 3.50E-17 3.120 1.60 3.11 2.76\nAOT-2015 AOT 5.96E-10 6.222 0.18 3.16 2.80\nNSSW008CT-P Nichia 2.30E-16 3.430 0.04 2.92 2.86\nNSSWS108T Nichia 1.13E-18 3.020 0.04 2.99 2.94\nNSPW500BS Nichia 2.70E-10 6.790 0.03 3.27 3.20\nNSCW100 Nichia 1.69E-08 9.626 0.03 3.60 3.50
TEXT 168 256 Left 4 ;+
TEXT 664 256 Left 2 ;Use MPSA14 Darlington
TEXT 656 56 Left 2 ;3 V battery needs more VBE
Version 4
SHEET 1 1816 760
WIRE 64 -16 0 -16
WIRE 112 -16 64 -16
WIRE 272 -16 112 -16
WIRE 544 -16 272 -16
WIRE 1024 -16 544 -16
WIRE 1200 -16 1024 -16
WIRE 1360 -16 1200 -16
WIRE 1520 -16 1360 -16
WIRE 112 0 112 -16
WIRE 272 0 272 -16
WIRE 1024 32 1024 -16
WIRE 1200 32 1200 -16
WIRE 1360 32 1360 -16
WIRE 1520 32 1520 -16
WIRE 0 48 0 -16
WIRE 544 48 544 -16
WIRE 848 80 736 80
WIRE 944 80 848 80
WIRE 960 80 944 80
WIRE 1136 80 1104 80
WIRE 1296 80 1280 80
WIRE 1456 80 1440 80
WIRE 272 96 272 80
WIRE 400 96 272 96
WIRE 480 96 400 96
WIRE 400 112 400 96
WIRE 112 128 112 80
WIRE 272 128 272 96
WIRE 672 128 640 128
WIRE 848 144 848 80
WIRE 944 144 944 80
WIRE 1024 144 1024 128
WIRE 1024 144 944 144
WIRE 1104 144 1104 80
WIRE 1104 144 1024 144
WIRE 1280 144 1280 80
WIRE 1280 144 1104 144
WIRE 1440 144 1440 80
WIRE 1440 144 1280 144
WIRE 112 160 112 128
WIRE 736 192 736 176
WIRE 784 192 736 192
WIRE 1200 192 1200 128
WIRE 1360 192 1360 128
WIRE 1360 192 1200 192
WIRE 1520 192 1520 128
WIRE 1520 192 1360 192
WIRE 0 208 0 128
WIRE 400 208 400 192
WIRE 640 208 640 128
WIRE 640 208 400 208
WIRE 400 224 400 208
WIRE 912 240 848 240
WIRE 112 272 112 224
WIRE 128 272 112 272
WIRE 224 272 192 272
WIRE 272 272 272 208
WIRE 272 272 224 272
WIRE 912 272 912 240
WIRE 400 336 400 304
WIRE 544 336 544 144
WIRE 544 336 400 336
WIRE 112 368 112 272
WIRE 912 368 912 352
WIRE 912 368 112 368
WIRE 272 400 272 272
WIRE 112 416 112 368
WIRE 1200 448 1200 192
WIRE 1200 448 336 448
WIRE 112 464 112 416
WIRE 400 480 400 336
WIRE 0 496 0 288
WIRE 0 496 -32 496
WIRE -32 528 -32 496
WIRE 0 576 0 496
WIRE 64 576 0 576
WIRE 112 576 112 544
WIRE 112 576 64 576
WIRE 272 576 272 496
WIRE 272 576 112 576
WIRE 400 576 400 560
WIRE 400 576 272 576
FLAG -32 528 0
FLAG 112 128 P6-RLIM
FLAG 112 416 P18-RC
FLAG 224 272 P2-OUT
FLAG 64 -16 P5-V+
FLAG 64 576 P4-V-
SYMBOL res 96 -16 R0
SYMATTR InstName R1
SYMATTR Value 39
SYMBOL LED 96 160 R0
SYMATTR InstName D1
SYMATTR Value NSSW008CT-P1
SYMBOL res 96 448 R0
SYMATTR InstName R2
SYMATTR Value 9.1k
SYMBOL cap 192 256 R90
WINDOW 0 0 32 VBottom 2
WINDOW 3 32 32 VTop 2
WINDOW 40 52 32 VTop 2
SYMATTR InstName C1
SYMATTR Value 470
SYMATTR SpiceLine2 ic=0.5
SYMBOL res 256 112 R0
SYMATTR InstName R5
SYMATTR Value 390
SYMBOL res 256 -16 R0
SYMATTR InstName R4
SYMATTR Value 390
SYMBOL npn 336 400 M0
SYMATTR InstName Q3
SYMATTR Value 2N3904
SYMBOL res 384 96 R0
SYMATTR InstName R6
SYMATTR Value 20k
SYMBOL res 384 208 R0
SYMATTR InstName R7
SYMATTR Value 10k
SYMBOL res 384 464 R0
SYMATTR InstName R8
SYMATTR Value 20k
SYMBOL npn 480 48 R0
SYMATTR InstName Q4
SYMATTR Value 2N3904
SYMBOL npn 672 80 R0
SYMATTR InstName Q1a
SYMATTR Value 2N3904
SYMBOL pnp 960 128 M180
SYMATTR InstName Q2a
SYMATTR Value 2N3906
SYMBOL voltage 0 192 R0
WINDOW 123 0 0 Left 0
WINDOW 39 24 116 Left 2
SYMATTR InstName V1
SYMATTR Value 1.5
SYMBOL res 896 256 R0
SYMATTR InstName R9
SYMATTR Value 100
SYMBOL pnp 1136 128 M180
SYMATTR InstName Q2b
SYMATTR Value 2N3906
SYMBOL pnp 1296 128 M180
SYMATTR InstName Q2c
SYMATTR Value 2N3906
SYMBOL pnp 1456 128 M180
SYMATTR InstName Q2d
SYMATTR Value 2N3906
SYMBOL npn 784 144 R0
SYMATTR InstName Q1b
SYMATTR Value 2N3904
SYMBOL res -16 32 R0
SYMATTR InstName PTC
SYMATTR Value 5
TEXT -56 192 VRight 2 ;AA Alkaline
TEXT 512 528 Left 2 !.tran 15
TEXT 504 496 Left 2 ;Pins 3 and 7 = no connect
TEXT 760 488 Left 2 ;Sorted by Vd at If=20 mA \n \nPart # Mfg Is (A) N Iave (A) Vf@Iave (V) Vd@If (V)\nQTLP690C Fairchild 1.00E-22 1.500 0.16 1.90 1.82\nPT-121-B Luminous 4.35E-07 8.370 20.00 3.84 2.34\nLUW-W5AP OSRAM 6.57E-08 7.267 2.00 3.26 2.39\nLXHL-BW02 Lumileds 4.50E-20 2.600 0.40 2.95 2.75\nW5AP-LZMZ-5K Lumileds 3.50E-17 3.120 2.00 3.13 2.76\nLXK2-PW14 Lumileds 3.50E-17 3.120 1.60 3.11 2.76\nAOT-2015 AOT 5.96E-10 6.222 0.18 3.16 2.80\nNSSW008CT-P Nichia 2.30E-16 3.430 0.04 2.92 2.86\nNSSWS108T Nichia 1.13E-18 3.020 0.04 2.99 2.94\nNSPW500BS Nichia 2.70E-10 6.790 0.03 3.27 3.20\nNSCW100 Nichia 1.69E-08 9.626 0.03 3.60 3.50
TEXT 168 256 Left 4 ;+
TEXT 1224 224 Left 2 ;Current mirror with 3X current gain
TEXT 664 256 Left 2 ;Use MPSA14 Darlington
TEXT 656 56 Left 2 ;3 V battery needs more VBE
Version 4
SHEET 1 1816 760
WIRE 64 -16 0 -16
WIRE 112 -16 64 -16
WIRE 272 -16 112 -16
WIRE 544 -16 272 -16
WIRE 1024 -16 544 -16
WIRE 1200 -16 1024 -16
WIRE 112 0 112 -16
WIRE 272 0 272 -16
WIRE 1024 32 1024 -16
WIRE 1200 32 1200 -16
WIRE 0 48 0 -16
WIRE 544 48 544 -16
WIRE 944 80 768 80
WIRE 960 80 944 80
WIRE 1136 80 1104 80
WIRE 272 96 272 80
WIRE 400 96 272 96
WIRE 480 96 400 96
WIRE 400 112 400 96
WIRE 112 128 112 80
WIRE 272 128 272 96
WIRE 704 128 640 128
WIRE 944 144 944 80
WIRE 1024 144 1024 128
WIRE 1024 144 944 144
WIRE 1104 144 1104 80
WIRE 1104 144 1024 144
WIRE 112 160 112 128
WIRE 768 192 768 176
WIRE 800 192 768 192
WIRE 912 192 864 192
WIRE 0 208 0 128
WIRE 400 208 400 192
WIRE 640 208 640 128
WIRE 640 208 400 208
WIRE 400 224 400 208
WIRE 112 272 112 224
WIRE 128 272 112 272
WIRE 224 272 192 272
WIRE 272 272 272 208
WIRE 272 272 224 272
WIRE 912 272 912 192
WIRE 400 336 400 304
WIRE 544 336 544 144
WIRE 544 336 400 336
WIRE 112 368 112 272
WIRE 912 368 912 352
WIRE 912 368 112 368
WIRE 272 400 272 272
WIRE 112 416 112 368
WIRE 1200 448 1200 128
WIRE 1200 448 336 448
WIRE 112 464 112 416
WIRE 400 480 400 336
WIRE 0 496 0 288
WIRE 0 496 -32 496
WIRE -32 528 -32 496
WIRE 0 576 0 496
WIRE 64 576 0 576
WIRE 112 576 112 544
WIRE 112 576 64 576
WIRE 272 576 272 496
WIRE 272 576 112 576
WIRE 400 576 400 560
WIRE 400 576 272 576
FLAG -32 528 0
FLAG 112 128 P6-RLIM
FLAG 112 416 P18-RC
FLAG 224 272 P2-OUT
FLAG 64 -16 P5-V+
FLAG 64 576 P4-V-
SYMBOL res 96 -16 R0
SYMATTR InstName R1
SYMATTR Value 39
SYMBOL LED 96 160 R0
SYMATTR InstName D1
SYMATTR Value LXHL-BW02
SYMBOL res 96 448 R0
SYMATTR InstName R2
SYMATTR Value 9.1k
SYMBOL cap 192 256 R90
WINDOW 0 0 32 VBottom 2
WINDOW 3 32 32 VTop 2
WINDOW 40 52 32 VTop 2
SYMATTR InstName C1
SYMATTR Value 1m
SYMATTR SpiceLine2 ic=0.5
SYMBOL res 256 112 R0
SYMATTR InstName R5
SYMATTR Value 390
SYMBOL res 256 -16 R0
SYMATTR InstName R4
SYMATTR Value 390
SYMBOL npn 336 400 M0
SYMATTR InstName Q3
SYMATTR Value 2N3904
SYMBOL res 384 96 R0
SYMATTR InstName R6
SYMATTR Value 20k
SYMBOL res 384 208 R0
SYMATTR InstName R7
SYMATTR Value 10k
SYMBOL res 384 464 R0
SYMATTR InstName R8
SYMATTR Value 20k
SYMBOL npn 480 48 R0
SYMATTR InstName Q4
SYMATTR Value 2N3904
SYMBOL npn 704 80 R0
SYMATTR InstName Q1
SYMATTR Value 2N3904
SYMBOL pnp 960 128 M180
SYMATTR InstName Q2a
SYMATTR Value 2N3906
SYMBOL voltage 0 192 R0
WINDOW 123 0 0 Left 0
WINDOW 39 24 116 Left 2
SYMATTR InstName V1
SYMATTR Value 1.5
SYMBOL res 896 256 R0
SYMATTR InstName R9
SYMATTR Value 100
SYMBOL pnp 1136 128 M180
SYMATTR InstName Q2b
SYMATTR Value 2N3906
SYMBOL res -16 32 R0
SYMATTR InstName PTC
SYMATTR Value 5
SYMBOL diode 800 208 R270
WINDOW 0 32 32 VTop 2
WINDOW 3 0 32 VBottom 2
SYMATTR InstName D2
SYMATTR Value 1N4148
TEXT -56 192 VRight 2 ;AA Alkaline
TEXT 512 528 Left 2 !.tran 30
TEXT 504 496 Left 2 ;Pins 3 and 7 = no connect
TEXT 760 488 Left 2 ;Sorted by Vd at If=20 mA \n \nPart # Mfg Is (A) N Iave (A) Vf@Iave (V) Vd@If (V)\nQTLP690C Fairchild 1.00E-22 1.500 0.16 1.90 1.82\nPT-121-B Luminous 4.35E-07 8.370 20.00 3.84 2.34\nLUW-W5AP OSRAM 6.57E-08 7.267 2.00 3.26 2.39\nLXHL-BW02 Lumileds 4.50E-20 2.600 0.40 2.95 2.75\nW5AP-LZMZ-5K Lumileds 3.50E-17 3.120 2.00 3.13 2.76\nLXK2-PW14 Lumileds 3.50E-17 3.120 1.60 3.11 2.76\nAOT-2015 AOT 5.96E-10 6.222 0.18 3.16 2.80\nNSSW008CT-P Nichia 2.30E-16 3.430 0.04 2.92 2.86\nNSSWS108T Nichia 1.13E-18 3.020 0.04 2.99 2.94\nNSPW500BS Nichia 2.70E-10 6.790 0.03 3.27 3.20\nNSCW100 Nichia 1.69E-08 9.626 0.03 3.60 3.50
TEXT 168 256 Left 4 ;+
TEXT 656 56 Left 2 ;3 V battery needs more VBE
Version 4
SHEET 1 1812 680
WIRE 96 -16 32 -16
WIRE 144 -16 96 -16
WIRE 304 -16 144 -16
WIRE 544 -16 304 -16
WIRE 752 -16 544 -16
WIRE 144 0 144 -16
WIRE 304 0 304 -16
WIRE 752 0 752 -16
WIRE 928 0 752 0
WIRE 752 32 752 0
WIRE 928 32 928 0
WIRE 544 48 544 -16
WIRE 832 80 816 80
WIRE 864 80 832 80
WIRE 304 96 304 80
WIRE 400 96 304 96
WIRE 480 96 400 96
WIRE 400 112 400 96
WIRE 144 128 144 80
WIRE 304 128 304 96
WIRE 752 144 752 128
WIRE 752 144 704 144
WIRE 832 144 832 80
WIRE 832 144 752 144
WIRE 144 160 144 128
WIRE 704 160 704 144
WIRE 32 208 32 -16
WIRE 400 208 400 192
WIRE 640 208 400 208
WIRE 400 224 400 208
WIRE 704 272 704 256
WIRE 144 288 144 224
WIRE 160 288 144 288
WIRE 256 288 224 288
WIRE 304 288 304 208
WIRE 304 288 256 288
WIRE 400 320 400 304
WIRE 544 320 544 144
WIRE 544 320 400 320
WIRE 144 368 144 288
WIRE 704 368 704 352
WIRE 704 368 144 368
WIRE 304 400 304 288
WIRE 144 416 144 368
WIRE 928 448 928 128
WIRE 928 448 368 448
WIRE 144 464 144 416
WIRE 400 480 400 320
WIRE 32 496 32 288
WIRE 32 496 0 496
WIRE 0 528 0 496
WIRE 32 576 32 496
WIRE 96 576 32 576
WIRE 144 576 144 544
WIRE 144 576 96 576
WIRE 304 576 304 496
WIRE 304 576 144 576
WIRE 400 576 400 560
WIRE 400 576 304 576
FLAG 0 528 0
FLAG 144 128 P6-RLIM
FLAG 144 416 P18-RC
FLAG 256 288 P2-OUT
FLAG 96 -16 P5-V+
FLAG 96 576 P4-V-
SYMBOL res 128 -16 R0
SYMATTR InstName R1
SYMATTR Value 12
SYMBOL LED 128 160 R0
SYMATTR InstName D1
SYMATTR Value PT-121-B
SYMBOL res 128 448 R0
SYMATTR InstName R2
SYMATTR Value 9.1k
SYMBOL cap 224 272 R90
WINDOW 0 0 32 VBottom 2
WINDOW 3 32 32 VTop 2
WINDOW 40 52 32 VTop 2
SYMATTR InstName C1
SYMATTR Value 470
SYMATTR SpiceLine2 ic=0.5
SYMBOL res 288 112 R0
SYMATTR InstName R5
SYMATTR Value 390
SYMBOL res 288 -16 R0
SYMATTR InstName R4
SYMATTR Value 390
SYMBOL npn 368 400 M0
SYMATTR InstName Q3
SYMATTR Value 2N3904
SYMBOL res 384 96 R0
SYMATTR InstName R6
SYMATTR Value 20k
SYMBOL res 384 208 R0
SYMATTR InstName R7
SYMATTR Value 10k
SYMBOL res 384 464 R0
SYMATTR InstName R8
SYMATTR Value 20k
SYMBOL npn 480 48 R0
SYMATTR InstName Q4
SYMATTR Value 2N3904
SYMBOL npn 640 160 R0
SYMATTR InstName Q1
SYMATTR Value 2N3904
SYMBOL pnp 816 128 R180
SYMATTR InstName Q2a
SYMATTR Value 2N3906
SYMBOL voltage 32 192 R0
WINDOW 123 0 0 Left 0
WINDOW 39 24 116 Left 2
SYMATTR InstName V1
SYMATTR Value 3
SYMBOL res 688 256 R0
SYMATTR InstName R9
SYMATTR Value 100
SYMBOL pnp 864 128 M180
SYMATTR InstName Q2b
SYMATTR Value 2N3906
TEXT -24 192 VRight 2 ;AA Alkaline
TEXT 512 528 Left 2 !.tran 10
TEXT 504 496 Left 2 ;Pins 3 and 7 = no connect
TEXT 1064 112 Left 2 ;Sorted by Vd at If=20 mA \n \nPart # Mfg Is (A) N Iave (A) Vf@Iave (V) Vd@If (V)\nQTLP690C Fairchild 1.00E-22 1.500 0.16 1.90 1.82\nPT-121-B Luminous 4.35E-07 8.370 20.00 3.84 2.34\nLUW-W5AP OSRAM 6.57E-08 7.267 2.00 3.26 2.39\nLXHL-BW02 Lumileds 4.50E-20 2.600 0.40 2.95 2.75\nW5AP-LZMZ-5K Lumileds 3.50E-17 3.120 2.00 3.13 2.76\nLXK2-PW14 Lumileds 3.50E-17 3.120 1.60 3.11 2.76\nAOT-2015 AOT 5.96E-10 6.222 0.18 3.16 2.80\nNSSW008CT-P Nichia 2.30E-16 3.430 0.04 2.92 2.86\nNSSWS108T Nichia 1.13E-18 3.020 0.04 2.99 2.94\nNSPW500BS Nichia 2.70E-10 6.790 0.03 3.27 3.20\nNSCW100 Nichia 1.69E-08 9.626 0.03 3.60 3.50
view raw Discrete LM3909.asc hosted with ❤ by GitHub