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: Oddities

Who’d’a thunk it?

  • Vape Cartridge

    Being the kind of guy who lives under a rock, I thought this thing lying at the end of the driveway might be a USB widget:

    Vape cartridge - side
    Vape cartridge – side

    But the contacts are all wrong:

    Vape cartridge - contacts
    Vape cartridge – contacts

    It has an opening on the other end:

    Vape cartridge - exhaust port
    Vape cartridge – exhaust port

    An easy teardown produces a yard sale of parts:

    Vape cartridge - components
    Vape cartridge – components

    The fiber snippet inside the coil carries the same sickly sweet scent as exhaled by passing vapers.

    Some casual searching suggests it’s a Juul Vape Pod. The Juul site insists on lower browser armor than I’m willing to grant it; you’re on your own.

    The heating coil press-fits into slots cut in the contacts:

    Vape cartridge - heater and contacts
    Vape cartridge – heater and contacts

    It’s about 1 Ω cold, so I foolishly assume there’s a current limiter somewhere in the circuitry.

    The little steel tube goes into the Tray o’ Cutoffs, where it might come in handy some day, the debris hits the trash, and I washed my hands up to the elbows.

    Ya learn something new every day around here and, obviously, I must get out more …

  • BLDC Fan vs. PWM: Inductive Spike

    Feeding 50% PWM at 1 kHz into the simpleminded 24 V BLDC driver produces the results you’d expect:

    BLDC Blower - 24 V 1 kHz 50 pct 2600 RPM - 200 mA-div - sample B
    BLDC Blower – 24 V 1 kHz 50 pct 2600 RPM – 200 mA-div – sample B

    The upper trace shows the MOSFET drain voltage, the lower trace is the current at 200 mA/div.

    The fan is connected from +24 VDC to the drain, so it’s getting power when the MOSFET is turned on and the drain is at 0 V. When the MOSFET turns off, the drain goes high and the drain current flow stops dead in its tracks.

    Of course, the fan current doesn’t drop to zero, because inductance. The drain voltage rises until the MOSFET body diode enters avalanche breakdown, whereupon the energy in the magnetic field burns down across the voltage difference as usual.

    Weird current waveforms happen all the time:

    BLDC Blower - 24 V 1 kHz 50 pct 2600 RPM - 200 mA-div - sample C
    BLDC Blower – 24 V 1 kHz 50 pct 2600 RPM – 200 mA-div – sample C

    Or like this:

    BLDC Blower - 24 V 1 kHz 50 pct 2600 RPM - 200 mA-div - sample A
    BLDC Blower – 24 V 1 kHz 50 pct 2600 RPM – 200 mA-div – sample A

    I think we’re looking at a sensorless BLDC controller trying to figure out the fan RPM from the back EMF after rebooting during each PWM cycle.

    The fan turns at 2600 RPM at 50% PWM, close enough to the 2580 RPM I measured at 12 VDC.

    In any event, the drain voltage in the upper trace tops out around 120 V, because the IRF530 MOSFET has a 100 V absolute maximum VDS spec: you’re watching avalanche breakdown happen. A transistor rated for 14 A of avalanche current isn’t in much danger quenching only 200 mA, though, so it’s all good, apart from slapping the fan with -100 V across what used to be its +24 V supply.

    A closer look at the turn-off end of the pulse:

    BLDC Blower - 24 V 1 kHz 50 pct 2600 RPM - 200 mA-div - detail 2
    BLDC Blower – 24 V 1 kHz 50 pct 2600 RPM – 200 mA-div – detail 2

    Eyeballometrically, the drain current decreases at 100 mA / 500 ns = 200 kA/s with the drain voltage clamped at 120 V, during the division just right of center. The other side of the fan sits at +24 VDC, so the effective inductance looks like 480 μH = 96 V / 200 kA/s. I’m unwilling to tear the blower apart just to measure the motor winding inductances.

    In any event, because we’re seeing the output of a 24 V three-phase fan controller being reverse-biased at 100 V, I doubt those numbers mean anything, other than that you shouldn’t PWM-chop the current going into a BLDC fan controller, of course.

  • Monthly Image: March Snowfall

    One of the March snowstorms dumped about a foot of wet, sticky snow on our yard throughout the day and evening:

    Snowfall - Front yard
    Snowfall – Front yard

    The high-pressure sodium street light behind the tree glows orange, with LED yard lights on the right providing blue highlights.

    The faint purple disk dead center in the image comes from the Pixel XL’s IR laser (so they say) rangefinder reflected in 1950-era window glass. Another image, with the Pixel pressed flat against the glass, shows two reflections:

    Snowfall - Pixel IR rangefinder reflections - detail
    Snowfall – Pixel IR rangefinder reflections – detail

    Mary took a similar picture in the morning, standing in the patio just outside the front door:

    Snowfall - Front yard - day
    Snowfall – Front yard – day

    The downed branch will require some chainsaw work, but, if past experience is any guide, the sticks will vanish from the end of the driveway within a day. The previous storm dropped a tree on the power lines half a mile northward, leaving us in the dark for about 18 hours.

    Funny thing about major snowstorms, though: there’s not much looting in their aftermath.

  • MPCNC: Autolevel Probe, Endstop Edition

    When in doubt, use an endstop switch:

    MPCNC - Endstop Z probe - USB camera
    MPCNC – Endstop Z probe – USB camera

    The USB camera lurks in the upper right.

    Just after that picture, I clipped off the NC switch terminal so I can wire this endstop in parallel with the tool length probe. Epoxy coating to follow.

    The DW660 collet grabs a length of 1/8 inch drill rod jammed into a hole positioned to put the switch actuator directly in line with the spindle axis when it trips the switch, so as to measure a known and useful location:

    Z Axis Height Probe - MBI endstop - Slic3r
    Z Axis Height Probe – MBI endstop – Slic3r

    After mulling things over for a while, I fired up the Sherline, drilled a #54 hole in the actuator, and epoxied a 3/32 inch bearing ball in the hole:

    MPCNC - Endstop Z probe - bearing
    MPCNC – Endstop Z probe – bearing

    A #54 drill hole is half the diameter of the ball and, with a bit of luck, enough of the ball will stick through into the epoxy on the underside for a good grip:

    MPCNC - Endstop Z probe - bearing - detail
    MPCNC – Endstop Z probe – bearing – detail

    The general idea is to convert the stamped steel actuator into a single, albeit not particularly sharp, contact point that can glide over the platform / PCB / sheet-of-whatever to measure the surface. The actuator pivots as it depresses, so the ball must slide horizontally just a bit. I prefer a rod-in-tube probe poking a linear button switch, but those weren’t getting me anywhere.

    If I were really cool, I’d use a ruby ball. Maybe silicon nitride?

    The OpenSCAD source code as a GitHub Gist:

    // MPCNC Z Axis Height Probe – MBI endstop in router collet
    // Ed Nisley KE4ZNU – 2018-02-17
    Layout = "Build"; // Build, Show
    /* [Extrusion] */
    ThreadThick = 0.25; // [0.20, 0.25]
    ThreadWidth = 0.40; // [0.40]
    /* [Hidden] */
    Protrusion = 0.1; // [0.01, 0.1]
    HoleWindage = 0.2;
    inch = 25.4;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    ID = 0;
    OD = 1;
    LENGTH = 2;
    //- Adjust hole diameter to make the size come out right
    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);
    }
    PCB = [40.0,1.6,16.5]; // endstop PCB, switch downward, facing parts
    Touchpoint = [4.8,4.8,-4.5]; // contact point from PCB edges, solder side
    TapeThick = 1.0; // foam mounting tape
    ShankOD = 0.125 * inch; // rod into tool collet
    ShankInsert = 3*ShankOD; // … insertion into switch holder
    WallThick = 3.0; // basic wall & floor thickness
    Mount = [PCB.x,
    (WallThick + TapeThick + Touchpoint.y) + (ShankOD/2 + WallThick),
    PCB.z + ShankInsert
    ];
    NumSides = 2*4;
    //—–
    // Define shapes
    module SwitchMount() {
    difference() {
    translate([PCB.x/2 – Touchpoint.x, // overall block
    Mount.y/2 – (ShankOD/2 + WallThick),
    (PCB.z + ShankInsert)/2])
    cube(Mount,center=true);
    translate([0,0,-Protrusion]) // collet shank hole
    PolyCyl(ShankOD,2*Mount.z,NumSides);
    translate([PCB.x/2 – Touchpoint.x, // PCB recess
    -Mount.y/2 + TapeThick + Touchpoint.y,
    PCB.z/2 – Protrusion/2])
    cube([Mount.x + 2*Protrusion,
    Mount.y,
    PCB.z + Protrusion
    ]
    ,center=true);
    }
    }
    //—–
    // Build it
    if (Layout == "Show")
    SwitchMount();
    if (Layout == "Build") {
    translate([0,0,Mount.z])
    rotate([180,0,-90])
    SwitchMount();
    }
  • Red Oaks Mill: Rt 376 Infrastructure Decay

    NYS DOT’s recent Rt 376 repaving projects improved the road surface, but the infractructure seems to be crumbling apace, as we spotted on a recent walk across the bridge over Wappinger Creek:

    Red Oaks Mill bridge - dangling concrete
    Red Oaks Mill bridge – dangling concrete

    The ragged edge of the deck shows other slivers have fallen into the creek.

    My arms aren’t long enough to get a closer view:

    Red Oaks Mill bridge - dangling concrete - detail
    Red Oaks Mill bridge – dangling concrete – detail

    The concrete roadway is developing potholes in the right hand southbound lane, so the upper surface has begun crumbling, too.

    I think the bridge dates to the mid-1990s, based on the aerial photo history from Dutchess GIS, so it’s a bit over twenty years old. Nothing lasts.

    Repairing stuff is hard

  • Streaming Radio Player: OLED Garble

    Even in the dim light of dawn, it’s obvious slowing the SPI clock to 1 MHz didn’t quite solve the problem:

    RPi OLED display - garbled
    RPi OLED display – garbled

    The display started up fine, became encrypted during the next few hours, and remained garbled as the track information changed. This is almost certainly a bad SPI transfer trashing the OLED module’s control registers.

    Dropping the clock to the absolute minimum of 0.5 MHz didn’t help, either:

    serial = spi(device=0,port=0,bus_speed_hz=500000)
    device = sh1106(serial)
    

    This particular display woke up blank after loading the new code, then worked OK after another reset. The other streamers lit up as expected on the first try, so the slower SPI isn’t making the situation instantly worse.

    Running the clock at 1 MHz definitely reduced the failure rate, which suggests it’s a glitchy thing.

    Good embedded systems practice suggests resetting the entire display from scratch every now and again, but my streamer code has no concept of elapsed time. Opening that particular can o’ worms would almost certainly result in an on-screen clock and I do not want to go there.

    I suppose I must get a new oscilloscope with SPI bus decoding to verify all the SPI setup and hold times …

  • Monthly Image: Red Sky in the Morning

    You can tell the day’s weather won’t be good when you see this:

    Red Sky in the Morning - 2018-02-07
    Red Sky in the Morning – 2018-02-07

    Taken just before the snow started …

    I wish I could run the snowblower up and down the driveway to preemptively level it at -5 inches, so the snowfall would end with almost bare asphalt.

    Long ago, they promised me heated driveways and sidewalks to eliminate snow shoveling, but it hasn’t worked out that way, either.