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

  • Stack Light: EL817 Optoisolator Case

    Stack Light: EL817 Optoisolator Case

    Rather than let the boosted optoisolators flop around:

    Stack Light - controller hairball wiring
    Stack Light – controller hairball wiring

    A small case seemed like a Good Idea™:

    Optoisolator Case - OpenSCAD
    Optoisolator Case – OpenSCAD

    The little hex standoffs have M3 threads, although 6 mm screws are about as much as they’ll take. The recesses have clearance for the boost transistor underneath the PCB, but it’s your responsibility to not let random wires get in trouble with the exposed circuitry:

    Optoisolator case
    Optoisolator case

    A strip of good foam tape sticks it to the controller:

    Stack Light - controller wiring
    Stack Light – controller wiring

    Admittedly, the stack light wiring remains something of a hairball, but it’s in a good cause.

    The OpenSCAD code can build as many cavities as you need:

    Optoisolator Case - x5 - OpenSCAD
    Optoisolator Case – x5 – OpenSCAD

    The OpenSCAD source code as a GitHub Gist:

    // Optoisolator case
    // Ed Nisley – KE4ZNU
    // 2025-01-09
    include <BOSL2/std.scad>
    include <BOSL2/threading.scad>
    // Number of isolator mounts
    NumMounts = 2;
    /* [Hidden] */
    Protrusion = 0.1;
    PCB = [40.5,15.5,1.6]; // optoisolator PCB
    LipWidth = 0.8; // support lip under PCB
    Margin = [8.0,3.0,4.5]; // clearance around PCB
    BaseThick = 3.0; // underneath
    Block = PCB + [2*Margin.x, 2*Margin.y, (Margin.z + BaseThick)];
    echo(Block = Block);
    HolesOC = [9.5,10.0]; // M3 mounting holes (upper left / lower right)
    $fn = 3*4;
    //———-
    // Construct one mount
    module Mount() {
    union() {
    difference() {
    cube(Block,anchor=BOTTOM);
    up(Block.z – PCB.z)
    cube(PCB + [0,0,Protrusion],anchor=BOTTOM);
    up(BaseThick)
    cube(PCB – 2*[LipWidth,LipWidth,0] + [0,0,Block.z],anchor=BOTTOM);
    }
    for (i=[-1,1])
    translate([i*HolesOC.x/2,-i*HolesOC.y/2,BaseThick])
    threaded_nut(5.0,3.1,Margin.z,0.5, // flat size, root dia, height, pitch
    bevel=false,ibevel=false,anchor=BOTTOM);
    }
    }
    //———-
    // Mash together as many mounts as needed
    union()
    for (j=[0:(NumMounts – 1)])
    back(j*(Block.y – Margin.y))
    Mount();

  • Stack Light: Optoisolator Boost Transistor

    Stack Light: Optoisolator Boost Transistor

    The LEDs in each stack light layer require a current sink handling about 50 mA, far above the ability of cheap optoisolators based on the EL817 photocoupler:

    Optoisolator - OEM schematic
    Optoisolator – OEM schematic

    I’ll go into the motivation for optocouplers along with the laser controller wiring details.

    As delivered, the PCB has:

    • R1 = 1 kΩ (a convenient 1 V/mA current sense)
    • R2 = 10 kΩ (a rather high-value pullup)

    The idea is to add an able-bodied transistor to the output in a Darlington configuration:

    Optoisolator - Darlington output
    Optoisolator – Darlington output

    Some rummaging produced a small bag of 2N3904 transistors, although nearly any small NPN transistor will suffice. Removing R2 cleared the field for modification:

    Optoisolator modification - top
    Optoisolator modification – top

    The 2N3904 transistor (with the usual EBC pinout) fits face-down under the PCB:

    Stack Light - optoisolator transistor
    Stack Light – optoisolator transistor

    The cross-legged layout conceals the emitter and base leads being soldered snugly to the former OUT and GND terminals, respectively, with the collector going to the VCC terminal. The terminals thus become:

    • VCC → Collector
    • OUT → Emitter
    • GND→ X (no connection)

    Although I have little reason to believe the EL817 chips are anything other than what they claim to be, their topmarks seemed rather casual:

    EL817 optocoupler - top view
    EL817 optocoupler – top view

    The other four chips carried C333 rank + date codes.

    The datasheet says the C means the Current Transfer Ratio is 200% to 400%: the output current should be 2× to 4× the diode current. The test condition are 5 mA into the diode and 5 V across the transistor terminals. A quick test:

    • 2 mA → 4 mA = 2×
    • 5 mA → 15 mA = 3×
    • 10 mA → 35 mA = 3.5×
    • 12 mA → 40 mA = 3.3×

    The output transistor is rated only to 50 mA, so I stopped at 40 mA. The CTR is between 200% and 350% over that range, suggesting the parts are really real.

    The 2N3904 should have an hFE above 60 in that current range and multiply the EL817 gain by about that amount. Another quick test in the Darlington configuration, now with the 5 V supply across the 2N3904:

    • 100 µA → 8.1 mA = 81×
    • 250 µA → 43 mA = 172×
    • 500 µA → 83 mA = 166×

    The overall current gain is 40× to 50×, less than the estimate, but plenty high enough for my purposes. If you cared deeply, you’d run a circuit simulation to see what’s going on.

    Knowing I needed only 50-ish mA, stopping with the transistor burning half a watt (because VCE is held at 5 V) seemed reasonable. In actual use, VCE will be on the order of 1 V and the dissipation will be under 100 mW.

    A quick test shows they work as intended:

    Stack Light - controller hairball wiring
    Stack Light – controller hairball wiring

    But, yeah, talk about hairballs. Those things cry for little housings to keep them out of trouble.

    The chonky lumps with orange stripes are Wago Lever-Nut connectors: highly recommended.

  • Stack Light Base

    Stack Light Base

    Having external indications for the laser cutter’s internal status signals seemed like a good idea and, rather than build the whole thing, I got a five-layer stack light:

    Stack Light - disassembly
    Stack Light – disassembly

    It arrives sans instructions, apart from the data plate / wiring diagram label on the housing, so the first puzzle involves taking it apart to see what’s inside. My motivation came from a tiny chip of blue plastic on the kitchen table where I’d opened the unpadded bag. Apparently, a mighty force had whacked the equally unpadded box with enough force to crack the blue lens, but I have no idea how the sliver escaped the still-assembled stack.

    Anyhow, hold the blue/green lenses in one hand and twist the red/yellow lenses counterclockwise as seen looking at the cap over the red layer. Apply more force than you think appropriate and the latches will reluctantly give way. Do the same to adjacent layers all the way down, then glue the blue chip in place while contemplating other matters.

    A switch on each layer selects either steady (the default and what I wanted) or blinking (too exciting for my needs). Reassemble in reverse order.

    A Stack Light generally mounts on a production-line machine which might have a suitable cutout for exactly that purpose. I have no such machine and entirely too much clutter for a lamp, so I screwed it to a floor joist over the laser:

    Stack Light - installed
    Stack Light – installed

    The tidy blue PETG-CF base started as a scan of the lamp’s base to serve as a dimension reference:

    Stack Light - base scan
    Stack Light – base scan

    Import into LightBurn:

    • Draw a 70 mm square centered on the workspace
    • Round the corners until they match the 13 mm radius
    • Draw one 5.6 mm circle at the origin
    • Move the circle 52/2 mm left-and-down
    • Turn it into a 4 element array on 52 mm centers
    • Verify everything matches the image
    • Export as SVG

    Import into Inkscape:

    • Put the perimeter on one layer
    • Put the four holes on another
    • Center around an alignment mark at a known coordinate
    • Save as an Inkscape SVG

    Import into OpenSCAD, extrude into a solid model, and punch the holes:

    Stack Light Mount base - solid model
    Stack Light Mount base – solid model

    The lip around the inner edge aligns the lamp base.

    If I ever make another one, I’ll add pillars in the corners to put the threaded brass inserts close to the top for 10 mm screws instead of the awkward 30 mm screws in this one. More than a single screw hole in the bottom would align it on whatever you’re indicating.

    Now, to wire the thing up …

    The OpenSCAD source code as a GitHub Gist:

    Loading
    Sorry, something went wrong. Reload?
    Sorry, we cannot display this file.
    Sorry, this file is invalid so it cannot be displayed.
    // Stack Light mount
    // Ed Nisley – KE4ZNU
    // 2025-01-03
    include <BOSL2/std.scad>
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    BaseCenter = [100,100,0];
    Base = [70,70]; // nominal, for figuring holes
    Insert = [4.9,5.9,6.0];
    PlateThick = Insert[LENGTH];
    HolderTall = 24.0;
    WallThick = 2.7; // outer wall of light base
    LipThick = 1.5; // alignment lip inside light base
    LipTall = 0.75;
    CableOD = 5.0;
    Protrusion = 0.1;
    difference() {
    translate(-BaseCenter)
    linear_extrude(height=HolderTall + LipTall)
    import("Stack Light – base layout.svg",layer="Base Perimeter");
    up(Insert[LENGTH])
    translate(-BaseCenter)
    linear_extrude(height=HolderTall – LipTall)
    offset(delta=-(WallThick + LipThick))
    import("Stack Light – base layout.svg",layer="Base Perimeter");
    up(HolderTall)
    linear_extrude(height=HolderTall,convexity=5)
    translate(-BaseCenter)
    difference() {
    offset(delta=WallThick) // avoid glitches on perimeter edge
    import("Stack Light – base layout.svg",layer="Base Perimeter");
    offset(delta=-WallThick)
    import("Stack Light – base layout.svg",layer="Base Perimeter");
    }
    down(Protrusion)
    translate(-BaseCenter)
    linear_extrude(height=2*HolderTall,convexity=5)
    import("Stack Light – base layout.svg",layer="Base Holes");
    up(HolderTall/2)
    yrot(90) zrot(180/6)
    cylinder(d=CableOD,h=Base.x,$fn=6);
    }

  • Handi-Quilter HQ Sixteen: Preliminary Power PCB Schematic

    Handi-Quilter HQ Sixteen: Preliminary Power PCB Schematic

    Because I must eventually diagnose and fix the HQ Sixteen’s Motor Stall Heisenbug, I printed out several views of the power supply PCB on glossy photo paper for best visibility.

    The component side:

    Power PCB - components
    Power PCB – components

    The solder side:

    Power PCB - solder
    Power PCB – solder

    The X-ray view:

    Power PCB - overlaid
    Power PCB – overlaid

    Considerable pondering and sketching produced an annotated view of the solder side:

    HQ Sixteen - Power PCB - solder side - component labels - reduced
    HQ Sixteen – Power PCB – solder side – component labels – reduced

    Here’s a tentative schematic drawn on the fly while extracting it from the PCB traces:

    HQ Sixteen - Power PCB - rough schematic
    HQ Sixteen – Power PCB – rough schematic

    !!CAUTION!! I have not verified the schematic against the actual hardware / PCB / components, as the Heisenbug has not reoccurred and I had no occasion to take the machine apart for checking. Do not assume any connections or components are correctly drawn.

    Before I redraw the schematic in a more useful format, I must verify several nodes, because not everything in there makes sense.

    In particular, the elaborate resistor string in the middle of the page seems to establish reference voltages for everything else, from the motor power supply turn-on delay to the RUN signal starting the motor.

    The optoisolators definitely get the RUN command signal from the controller and feed the STALL motor status back to it. That’s assuming I understand enough to pin those labels on those connections.

    !!CAUTION!! Read my caveats about the direct-from-the-AC-line non-isolated +160 VDC motor supply before connecting your instruments. The GND traces are not isolated from the AC line and are not at the normal “0 V” AC neutral potential.

    But if this mess gets you further along with whatever you were doing, let me know how it all worked out for you.

  • OMTech 60 W Laser: Manual Pulse Button

    OMTech 60 W Laser: Manual Pulse Button

    I want to put the HLP-200B Laser Power Meter at the tube’s exit, just upstream from Mirror 1, where it can measure the laser’s power output before the mirrors get into the act. Reaching the Pulse button on the machine console requires much longer arms than any normal human can deploy, plus a certain willingness to lean directly over a laser tube humming with 15 kV at one end.

    Perusing the KT332N doc brings up a hint, blocked in red so you can make some sense of it:

    KT332N Input bits
    KT332N Input bits

    A few minutes with boxes.py produces a simple two-compartment box and a few minutes with LightBurn adds two holes:

    Remote Switch Box - LightBurn layout
    Remote Switch Box – LightBurn layout

    Another few minutes produces the box from Trocraft Eco, which is not quite thin enough for the switch (from my Box o’ Clicky Buttons) to snap into place, but a few dabs of hot melt glue hold it down:

    Laser remote pulse button - installed
    Laser remote pulse button – installed

    Double-sided foam tape sticks the box to the laser frame and the red-n-black cable snakes all the way across the back of the machine and through the electronics bay to the IN2 and GND terminals of the KT332N INPUT block:

    Laser remote pulse button - Ruida KT332N wiring
    Laser remote pulse button – Ruida KT332N wiring

    With the laser head parked at a safe spot and all interlocks happy, it works:

    Laser remote pulse button - demo
    Laser remote pulse button – demo

    That is a re-enactment, because I lack sufficient dexterity to handle a phone with my left hand, poke the button with my right finger, and not damage anything important.

    The general idea is to make it very difficult to inadvertently press that button: you must want to fire the laser with the tube compartment hatch up (it has no interlocks) and the control panel out of sight on the top-front of the machine.

    Setting the power to 30% and putting the meter in harm’s way:

    HLP-200B - Laser tube exit
    HLP-200B – Laser tube exit

    Again, a reenactment based on actual events.

    Five pulses later:

    40.8W
    42.4
    42.3
    41.2
    40.7
    41.5W avg
    0.82W std dev

    For the record, those five pulses dumped about 5 × 42 W × 10 x ≅ 2000 W·s = 2 kJ into the meter, raising it from “chilly basement ambient” to “be careful where you hold it”, thus making the meter’s aluminum case the least-efficient handwarmer in existence.

    The 30% PWM measurements at the center of the platform came out slightly lower: 38.5 W average with a sample standard deviation of 2.2 W.

    The large standard deviations prevent firm conclusions, but, yeah, the power at the tube exit seems about right, before two mirrors and ≅800 mm of path length take their toll.

    The LightBurn SVG layout as a GitHub Gist:

    Loading
    Sorry, something went wrong. Reload?
    Sorry, we cannot display this file.
    Sorry, this file is invalid so it cannot be displayed.
  • HLP-200B Laser Power Meter: First Measurements

    HLP-200B Laser Power Meter: First Measurements

    The HLP-200B Laser Power Meter arrives without much in the way of specifications:

    The HLP-200B Laser Power Meter Handheld comes fully calibrated at 10.6 μm (CO2). Each laser power meter we calibrate is directly traceable to NIST absolute standards because we use GOLD standards as a reference for each calibration. You will obtain the most accurate result possible

    A line in the description says “+/- 3% within the central section”, but that’s not much help. Back in the day, any error percentage referred to the meter’s full-scale value, which would be ±6 W for a 200 W meter.

    So I plunked the meter in the middle of the laser platform:

    HLP-200B Laser Power Meter - platform center
    HLP-200B Laser Power Meter – platform center

    Then took five measurements at each of ten power levels:

    PWM %10203040506070809099
    °C17.217.918.419.019.420.320.020.020.519.4
    Tube Current34710141618202224
    W7.121.042.051.859.163.067.869.674.764.0
    6.019.837.248.952.756.065.169.672.471.8
    6.421.139.345.656.553.261.160.774.675.2
    5.617.837.140.455.353.255.164.274.973.5
    6.017.736.945.154.553.162.269.972.270.9
    Avg Power6.219.538.546.455.655.762.366.873.871.1
    std dev0.571.662.194.292.394.264.784.161.344.29

    That’s easier to digest from a graph:

    HLP-200B Laser Power Meter - 60 W platform center measurements
    HLP-200B Laser Power Meter – 60 W platform center measurements

    The absurdity of computing the sample standard deviation from five measurements taken at each power level does not escape me, but this just surveys the situation.

    Earlier measurements of the tube current vs. PWM setting, using an RMS value computed by the oscilloscope’s firmware, produced a plot resembling the brown points (read the mA scale on the right) at the high end and differing greatly on the low end. These values come from the power supply’s digital meter, but the straight-line fit doesn’t look absurdly forced and the zero intercept seems plausible. I *assume* it’s actually measuring the tube current, rather than displaying a value computed from the PWM input, but I don’t know for sure.

    The rather sketchy paperwork accompanying the laser had one handwritten “21 mA” seemingly corresponding to 60 W output, which looks approximately correct. The instruction manual has a table of power vs. current suggesting that 65-ish W corresponds to 18 mA, with 100 W at 23 mA; it’s unclear whether that is for the 60 W tube in the machine or applies to the entire range of available tubes. The manual recommends not using more than 95% PWM, with which I heartily agree.

    Because my meter stand holds the target in the same position relative to the beam during successive measurements much better than I could by hand, I think the pulse-to-pulse variation comes from meter and tube repeatability.

    Earlier measurements with a grossly abused Gentec ED-200 joulemeter suggested the laser has some pulse-to-pulse timing variation, down in the millisecond range, but produced roughly the right power for middle-of-the-range PWM settings. This meter integrates the beam power over about ten seconds, so I think variations will be due to (possible) tube power changes and meter repeatability, rather than timing errors.

    Obviously, you must not depend on any single-shot measurement to fall within maybe 10% or several watts of the right answer.

    With all that in mind and assuming the meter is delivering approximately the right numbers on average, the power supply overcooks the tube at any PWM setting above 50%. I’ve noticed some beam instability / defocusing over 80% while cutting recalcitrant materials, which is surely due to the tube not lasing properly. I generally avoid doing that.

    The log fit to the measured power looks better than I expected, although I’m unprepared to compute natural logs in my head.

    Hey, it’s my idea of a good Christmas present …

  • HLP-200B CO₂ Laser Power Meter

    HLP-200B CO₂ Laser Power Meter

    What with Christmas approaching, I got myself an HLP-200B CO₂ Laser Power Meter:

    HLP-200B - front panel
    HLP-200B – front panel

    It’s a hefty chunk of aluminum, as befits a device intended to soak up a 200 W CO₂ laser beam, and both sides have a relentless simplicity:

    HLP-200B - back panel - redacted
    HLP-200B – back panel – redacted

    Having not found an online version of the manual:

    You’re welcome.

    [Edit: A slightly different version of the manual is online at https://www.ccbluetimes.net/pages/support ]

    The manual does not exactly match the hardware. In particular, “so users won’t need any tools to replace the battery” is incorrect:

    HLP-200B - battery lid screw
    HLP-200B – battery lid screw

    Until you loosen the M2 setscrew below the finger notch a couple of turns, “Use just fingers to remove the battery cover” will merely scuff your fingerprints. Apply a 1.5 mm or 1/16 inch straight screwdriver bit with no more than finger torque and, after two or three turns, the lid comes free.

    The meter arrives without a battery, so you passed the first test.

    Despite the “another screw hold (M4) is added”, there’s only one tapped hole in the case, as visible in the back panel photo. Seen from the front, it’s above the four digit LCD.

    Operation is at best awkward and at worst hazardous:

    • Press the blue button to turn it on and hear a beep
    • It’s ready to measure within three seconds
    • Hit it with the laser beam until it beeps
    • The LCD shows the power for six seconds
    • It shuts off with a beep
    • Bonus: If the meter doesn’t detect any energy, it shuts off 20-ish seconds after the button press

    Minus my power ears, the beeps are completely inaudible.

    The meter is sensitive enough to respond to weak heat sources like LED bulbs and even fingertips, so you can test it without firing the laser. The numeric value shows the power from a CO₂ laser beam dumping an equivalent amount of energy into the sensor:

    HLP-200B - finger heat response
    HLP-200B – finger heat response

    The sensor target is 20 mm OD, although the instructions remind you to “Ensure the laser is emitted to the center of the sensor”. I suspect hitting the sensor with a focused laser spot will eventually damage the surface.

    Making a real measurement requires:

    • Set the Pulse button for continuous output
    • Set the power level
    • Defeat the lid interlock switch on the laser cabinet
    • Push the blue button on the HLP-200B
    • Quickly position the meter target accurately in the beam path
    • Hold down the laser Pulse button
    • Freeze in that position until the meter beeps
    • Release the Pulse button
    • Quickly reorient the meter and read the display

    I have a visceral reluctance concerning safety interlock overrides, misgivings about poking my head inside the cabinet, and no yearning to put one hand near the beam line with the other on the console. Yes, I have known-good laser safety glasses.

    The meter generates plausible results for the (claimed) 60 W tube in my machine, but further tests await conjuring fixtures to keep various irreplaceable body parts out of harm’s way.