The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Category: Electronics Workbench

Electrical & Electronic gadgets

  • Ham It Up v1.3 60 kHz Response

    The SMA-to-N cables arrived unexpectedly early, so I fired up the spectrum analyzer to see how the Ham It Up Upconverter behaved at 60 kHz (think WWVB), a smidge below its 100 kHz minimum input frequency spec. It’s worth noting that you can’t do a frequency sweep of the 100 kHz to 50 MHz upconverter response using the tracking generator, because the output sits 125 MHz above the input; yes, it took me a while to dope that out…

    Anyhow, the 60 kHz sine wave from the (sub-audio-frequency up to 2 MHz, 600 Ω -ish output) signal generator, passed through a 5X attenuator, and terminated in 50 Ω:

    Ham-It-Up - 60 kHz input
    Ham-It-Up – 60 kHz input

    It emerges from the H-I-U in Passthrough mode 3.6 dB lower:

    Ham-It-Up - 60 kHz passthru
    Ham-It-Up – 60 kHz passthru

    In Upconvert mode, the output sits 14 dB below the Passthrough output and 17.6 below the input:

    Ham-It-Up - 60 kHz upconvert
    Ham-It-Up – 60 kHz upconvert

    At that span setting, I don’t trust the frequency resolution of that 125.0605 MHz marker readout.

    Cranking the signal generator to produce -10 dBm at the H-I-U output in Passthrough mode brings up a bunch of harmonics:

    Ham-It-Up - 60 kHz harmonics passthru
    Ham-It-Up – 60 kHz harmonics passthru

    In Upconvert, they’re down 13.9 dB from the Passthrough output:

    Ham-It-Up - 60 kHz harmonics upconvert
    Ham-It-Up – 60 kHz harmonics upconvert13.9

    The H-I-U should have about 10 dB conversion loss at 100 kHz, so losing another 4 dB beyond the thing’s rated low end isn’t entirely surprising.

    All in all, it works fine…

  • Ham It Up v1.3 Noise Source Spectrum

    The adapter stack to attach the spectrum analyzer to the Ham It Up noise source turned out to be:

    • N male to BNC female
    • BNC double-male gender bender
    • BNC female to UHF male
    • UHF female to SMA male cable

    Which puts a serious lever arm on the spectrum analyzer end of the chain:

    SMA to N adapter stack
    SMA to N adapter stack

    Ya gotta have stuff, but a pair of cables going directly from the Ham It Up’s SMA female to the analyzer’s N female are on their way around the curve of the planet even as I type.

    That peak at 300 MHz is about +10 dBm, but averaging 25 peak values at each frequency trims off 5 dB and makes it easier to see:

    Noise source spectrum - pk det 25 avg
    Noise source spectrum – pk det 25 avg

    The reference level at the top of the graticule is +30 dBm, not the usual +10 dBm, so the left end of the trace doesn’t obliterate the marker readout.

    So the noise seems good for VHF to UHF projects, which seems reasonable. The noise at the low end falls dramatically with narrower bandwidths, as you’d expect; it’s reasonably flat around -30 dBm below 100 MHz.

    You’d want a bandpass filter in front of whatever you were doing, so as to keep that 300 MHz hash out of everything else.

     

  • Ham It Up Noise Source Enable Switch

    Some rummaging produced a tiny DPDT switch that actually fit the holes intended for a pin header on the recently arrived Ham It Up board, at least after I amputated 2/3 of the poor thing’s legs:

    Ham-It-Up - noise source switch - B
    Ham-It-Up – noise source switch – B

    The new SMA noise output jack sits in the front left, with the white “noise on” LED just left of the switch:

    Ham-It-Up - noise source switch - A
    Ham-It-Up – noise source switch – A

    There’s no way to measure these things accurately, at least as far as I can tell, but the holes came out pretty close to where they should be. The new SMA connector lined up horizontally with the existing IF output jack and vertically with the measured / rounded-to-the-nearest-millimeter on-center distance:

    Ham It Up - noise SMA drilling
    Ham It Up – noise SMA drilling

    The Enable switch doesn’t quite line up with the LED, so the holes will always look like I screwed up:

    Ham-It-Up - noise source switch - case holes
    Ham-It-Up – noise source switch – case holes

    That’s OK, nobody will ever notice.

    Now, to stack up enough adapters to get from the SMA on the Ham It Up board to the N connector on the spectrum analyzer …

     

  • Lithium Battery Pack Teardown

    For reasons not relevant here, I tore down a battery pack containing three 18650 lithium cells. After a major struggle that involved drilling access holes into the side of the case and hammering the cells free of their silicone potting restraint, I was confronted with this:

    Li-ion cell - unwrapped
    Li-ion cell – unwrapped

    Battery may explode or fire if mistreated. Yeah, that could happen.

    Having pretty well ignored all the warnings, the damaged cells spent two days in the cold on the patio:

    Li-ion cells - safety layout
    Li-ion cells – safety layout

    They seem unchanged, so I’ll dispose of them at the next electronics recycling event.

    As it turns out, the gadget containing the pack subsequently died of a whoopise while trying to figure out how the pack’s boost regulator worked, so it joined the cells on the outgoing pile.

    So it goes …

  • Bathroom Light Switch: Contact Autopsy

    The dual switch controlling the bathroom lights began requiring some fiddling, which was not to be tolerated. After replacing the switch, I cracked the old one open to see what’s inside…

    The failed side of the switch controlled the lights over the sink:

    Light switch contacts - lights
    Light switch contacts – lights

    The side for the ceiling vent fan + light got much less use, still worked, and look a bit less blasted.

    Light switch contacts - ceiling fan
    Light switch contacts – ceiling fan

    Not much to choose between the two. It’s been running for nigh onto two decades, so …

  • Ham It Up Noise Source

    An RTL-SDR receiver & Ham It Up RF upconverter arrived, with the intent of poking at LF signals. The upconverter circuit board also contains a mostly populated RF noise source:

    Ham-It-Up v1.3 noise source - schematic
    Ham-It-Up v1.3 noise source – schematic

    Being a sucker for noise sources, I spent some time pondering the circuitry.

    The as-built board has a 0 Ω jumper instead of the 6 dB pad along the upper right edge:

    Ham-It-Up v1.3 - noise components
    Ham-It-Up v1.3 – noise components

    The previous version had a pi bandpass filter in place of the pad and you could certainly repopulate it with two caps and a teeny inductor if you so desired.

    I added the SMA connector, which isn’t quite identical to the IF output connector above it:

    Ham-It-Up v1.3 - noise SMA
    Ham-It-Up v1.3 – noise SMA

    That will require a new hole in the end plate that I’ll get around to shortly. It also needs an external switch connected to the Enable jumper, but that’s in the nature of fine tuning.

    I’m awaiting a handful of adapters & cables from halfway around the planet…

  • Chip-on-board LED Desk Lamp Retrofit

    After the 5 mm white LEDs failed on the original desk lamp rebuild, I picked up some chip-on-board LED lamps from the usual eBay supplier:

    COB LED Desk Lamp - bottom
    COB LED Desk Lamp – bottom

    The LED’s aluminum baseplate (perhaps there’s an actual “board” inside the yellow silicone fill) is firmly epoxied to a small heatsink from the Big Box o’ Heatsinks, chosen on the basis of being the right size and not being too battered.

    The rather limited specs say the LED supply voltage can range from 9 to 12 V, suggesting a bit of slack, with a maximum dissipation of 3 W, which definitely requires a heatsink.

    The First Light test looked promising:

     COB LED Desk Lamp - first light
    COB LED Desk Lamp – first light

    That’s driven from the same 12 VDC 200 mA wall wart that I used for the failed ring light version. Measuring the results shows that the supply now runs at the ragged edge of its current rating, with the output voltage around 10.5 V with plenty of ripple:

    COB LED V I 100ma div
    COB LED V I 100ma div

    The 260 mA current (bottom, trace 1 at 100 mA/div) varies from 200 to 300 mA as the voltage (top, trace 2 at 2 V/div) varies between 10 V and a bit under 11 V. If you believe the RMS values, it’s dissipating 2.7 W and the heatsink runs at a pleasant 105 °F in an ordinary room. The wall wart gets about as warm as you’d expect; it contains an old heavy-iron transformer and rectifier, not a trendy switcher.

    The heatsink mount looks nice, in a geeky way:

    COB LED Desk Lamp - side detail
    COB LED Desk Lamp – side detail

    The left side must be that long to anchor the gooseneck; I thought about tapering the slab a bit, but, really, it’s OK the way it is. Dabs of epoxy hold the gooseneck and heatsink in place.

    The heatsink rests on a small ledge at the bottom of the slab that’s as tall as the COB LED is thick, with a wire channel from the gooseneck socket:

    COB LED Heatsink mount - Slic3r
    COB LED Heatsink mount – Slic3r

    The Hilbert Curve infill on the top produces a textured finish; I’m a sucker for that pattern.

    The old lamp base isn’t particularly stylin’, but the new head lights up my desk below the big monitors without any glare:

    COB LED Desk Lamp - overview
    COB LED Desk Lamp – overview

    Now, let’s see how long this one lasts…

    The OpenSCAD source code as a Github gist:

    // Chip-on-board LED light heatsink mount for desk lamp
    // Ed Nisley KE4ZNU December 2015
    Layout = "Show"; // Show Build
    //- Extrusion parameters must match reality!
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    //———————-
    // Dimensions
    ID = 0; // for round things
    OD = 1;
    LENGTH = 2;
    Gooseneck = [3.0,5.0,15.0]; // anchor for end of gooseneck
    COB = [25.0,23.0,2.5]; // Chip-on-board LED module
    Heatsink = [35.5,31.5,4.0]; // height is solid base bottom
    HSWire = [23.0,28.0,53.3]; // anchor width OC, width OAL, length OC
    HSWireDia = 1.4;
    HSLip = 1.0; // width of lip under heatsink
    BaseMargin = 2*2*ThreadWidth;
    BaseRadius = Gooseneck[OD]; // 2 x gooseneck = enough anchor, sets slab thickness
    BaseSides = 2*4;
    Base = [(Gooseneck[LENGTH] + Gooseneck[OD] + Heatsink[0] + 2*BaseRadius + BaseMargin),
    (Heatsink[1] + 2*BaseRadius + 2*BaseMargin),
    2*BaseRadius];
    //———————-
    // 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);
    }
    //– Lamp heatsink mount
    module Lamp() {
    difference() {
    translate([(Base[0]/2 – BaseRadius – Gooseneck[LENGTH]),0,0])
    hull()
    for (i=[-1,1], j=[-1,1])
    translate([i*(Base[0]/2 – BaseRadius),j*(Base[1]/2 – BaseRadius),Base[2]/2])
    sphere(r=BaseRadius/cos(180/BaseSides),$fn=BaseSides);
    translate([(Heatsink[0]/2 + Gooseneck[OD]),0,Heatsink[2] + COB[2]]) // main heatsink recess
    scale([1,1,2])
    cube((Heatsink + [HoleWindage,HoleWindage,0.0]),center=true);
    translate([(Heatsink[0]/2 + Gooseneck[OD]),0,Heatsink[2] – Protrusion]) // lower lip to shade lamp module
    scale([1,1,2])
    cube(Heatsink – [2*HSLip,2*HSLip,0],center=true);
    translate([0,0,Base[2]/2]) // goooseneck insertion
    rotate([0,-90,0]) rotate(180/8)
    PolyCyl(Gooseneck[OD],Base[0],8);
    translate([0,0,Base[2]/2 + Gooseneck[ID]/2]) // wire exit
    rotate([180,0,0])
    PolyCyl(Gooseneck[ID],Base[2],6);
    translate([Gooseneck[OD],0,(COB[2] – Protrusion)/2]) // wire slot
    rotate([180,0,0])
    cube([2*Gooseneck[OD],Gooseneck[ID],(COB[2] + Protrusion)],center=true);
    }
    }
    //———————-
    // Build it
    if (Layout == "Show") {
    Lamp();
    }
    if (Layout == "Build") {
    }