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: Machine Shop

Mechanical widgetry

  • Thing-O-Matic: Broken G0 Semantics in RepG 25

    I upgraded to ReplicatorG 25 and the Thing-O-Matic promptly got weird: the initialization code slowed to a crawl. The motors ran fine, the motion was properly coordinated, but the thing moved at a minute fraction of its normal 100 mm/s.

    This was most obvious on the first move to the center of the stage after homing the axes. If you peer into the source code, that instruction looks like this:

    G0 X0 Y0 Z10	    (pause at center to build confidence)
    

    The comment tells you exactly why I put that move in there when I first started tinkering with start.gcode: I long ago discovered that automation doesn’t always do what you want, so having a simple verification at the first opportunity sometimes pays off big.

    Anyhow.

    A bit of rummaging showed that RepG 25 has changed the semantics of G0, which is supposed to be a fast move to the programmed coordinates. Now G0 moves at the feed rate set by the most recent G1 and also accepts an F parameter, which it shouldn’t. I suspect somebody refactored the code and didn’t notice that G0 isn’t supposed to work exactly like G1.

    There’s a RepG ticket for that.

    The current start.gcode, just for future reference…

    (---- start.gcode begins ----)
    (MakerBot Thing-O-Matic with aluminum HBP and Z-min platform switch)
    (Tweaked for TOM 286 - Ruttmeister MK5 stepper extruder mod)
    (Ed Nisley - KE4ZNU - May 2011)
    (- set initial conditions -)
    G21		(set units to mm)
    G90		(set positioning to absolute)
    (- begin heating -)
    M104 S210 T0	(extruder head)
    M109 S110 T0	(HBP)
    (- coarse home axes -)
    G162 Z F1000	(home Z to get nozzle out of danger zone)
    G161 Y F4000	(retract Y to get X out of front opening)
    G161 X F4000	(now safe to home X)
    G92 X-53.0 Y-59.0 Z117.0	(set XYZ coordinate zeros)
    (- fine home axes)
    G0 X-51 Y-57 Z115 F400	(back off switches)
    G161 Y F200
    G161 X F200
    G162 Z F200
    G92 X-53.0 Y-59.0 Z117.0	(re-set XYZ coordinate zeros)
    (- manual nozzle wipe)
    G0 X0 Y0 Z10	    (pause at center to build confidence)
    G4 P500
    G0 X40 Y-57.0 Z10	(move to front, avoid wiper blade)
    G0 X56            (to wipe station)
    G0 Z6.0           (down to wipe level)
    M6 T0			        (wait for temperature settling)
    G1 Y-45	F1000		  (slowly wipe nozzle)
    (-----------------------------------------------)
    (- Make sure the XY position matches the G92    )
    (- home Z downward to platform switch)
    G0 X56.4 Y7.6 Z3	    (get over build platform switch)
    G161 Z0 F50	          (home downward very slowly)
    G92 X56.4 Y7.6 Z1.50   (set Z height)
    G0 Z6.0			          (back off switch to wipe level)
    (-----------------------------------------------)
    (- start extruder and re-wipe)
    G0 X56 Y-45     (set up for wipe from rear)
    G1 Y-57.0 F1000 (wipe to front)
    M108 R2.0	      (set stepper extruder speed)
    M101		        (Extruder on, forward)
    G4 P4000  	    (take up slack, get pressure)
    M103		        (Extruder off)
    G4 P4000  	    (Wait for filament to stop oozing)
    G1 Y-45	F1000		(slowly wipe nozzle again)
    G0 X0           (get away from wiper blade)
    (- manual splodge)
    (G0 X0 Y-58)		  (to front center)
    (G0 Z0.5) 		    (just over surface)
    (M108 R2.0)	    (set stepper extruder speed)
    (M101)           (start extruder)
    (G4 P1500)       (build up a turd)
    (- inhale filament blob)
    (M108 R25)	      (set reversal extruder speed)
    (M102)           (Extruder on, reverse)
    (G4 P50)
    (M103)		        (Extruder off)
    (- build some pressure)
    M108 R2.0	    (set stepper extruder speed)
    M101           (start extruder)
    G4 P50       (run for a bit)
    (---- start.gcode ends ----)
    

    I suppose I must add a feedrate parameter to each G0 as a workaround. Drat.

  • Stepper Motor Back EMF

    Some simple measurements using that Pololu driver in its default mixed decay mode and that Arduino sync generator. The captions give the operating conditions; basically, I’m varying the rotation speed by cranking the signal generator driving the Pololu board.

    At 1 rev/s, it’s about as good as it gets:

    Back EMF - 9V 400mA 1 RPS
    Back EMF – 9V 400mA 1 RPS

    At 5 rev/s, the driver has trouble getting current out of the winding:

    Back EMF - 9V 400mA 5 RPS
    Back EMF – 9V 400mA 5 RPS

    At 10 rev/s, things are getting ugly:

    Back EMF - 9V 400mA 10 RPS
    Back EMF – 9V 400mA 10 RPS

    At 20 rev/s, the back EMF has pretty much taken control of the current and the driver is going along for the ride:

    Back EMF - 9V 400mA 20 RPS
    Back EMF – 9V 400mA 20 RPS

    At 25 rev/s, the driver produces only occasional dents in the waveform:

    Back EMF - 9V 400mA 25 RPS
    Back EMF – 9V 400mA 25 RPS

    At 25.3 rev/s, the motor stalled. Even with no back EMF (what with the rotor being stopped and buzzing in frustration), the driver can’t force the current to behave:

    Back EMF - 9V 400mA 25.3 RPS
    Back EMF – 9V 400mA 25.3 RPS

    I don’t have any way to measure the motor’s output torque, but at 1500 RPM there won’t be any worth mentioning.

    For what it’s worth, 25 rev/s means the driver is handling 40 k steps/sec = 25 µs/step. The motors in a Thing-O-Matic run at 3 rev/s to move the XY stages at 100 mm/s, so scale what you see here accordingly.

  • Beard Trimmer: NiCd Rejuvenation

    Strictly speaking, I do not have a beard: I simply do not shave (*). There being no money in selling Trimmers for the Non-shaving, a while back I bought a battery operated Beard Trimmer. The NiCd cells lasted for the predictable few years and recently gave up the ghost entirely: an overnight charged produced a weak buzz with no cutting action to speak of.

    The case uses one-time snap-together latches, which makes dismantling it a challenge. Start by removing all the gimcrackery on the business end, then pry out the two latches holding the it-was-white-once cutting length adjustment ring.  With that out of the way, undo the two latches inside the top and work your way down, prying the case halves apart in the way the overlap flange doesn’t like, so as to force the latches loose.

    This picture shows the six latches, three on each side. The ones just to the right of the blue impeller require the most cursing:

    Beard trimmer case and innards
    Beard trimmer case and innards

    The circuit board snaps out, with the two PCB contact areas clamped down by springy contacts leading to the motor.

    Beard trimmer - battery charger PCB
    Beard trimmer – battery charger PCB

    The two NiCd cells boast of their High Energy, but they’re only 600 mAh. That’s actually too much for this high-drain, short-run application, as they don’t completely discharge. They’re held in place on the right end with a blob of hot melt glue:

    Beard trimmer - NiCd cells
    Beard trimmer – NiCd cells

    I unsoldered the cells and gave ’em a brute-force overnight charge at C/10 = 60 mA, then ran a discharge test (clicky for more dots):

    Beard Trimmer - NiCd Discharge Test
    Beard Trimmer – NiCd Discharge Test

    Lookee that! The cells still deliver their rated capacity, even though they no longer worked with the stock charger. I repeated the slow-charge and discharge trick, which produced a perfectly overlapping trace.

    Flushed with success, I unleashed the built-in charger overnight, then produced a third overlapping trace.

    So they suffered from voltage depression, most likely due to never being completely discharged and then being overcharged far too often. That’s cured by a complete discharge and recharge, which worked perfectly.

    I hack back the overgrowth when it gets bushy and recharge the trimmer when it seems to be getting weak, which used to take a week or two. That’s a bad way to maintain a NiCd battery, particularly as the PCB applies a very low load to keep its computronium running, but I have better things to do than babysit a beard trimmer. Honest.

    Anyhow, assembly is in the reverse order and it’s perfectly happy again.

    I probably won’t change my evil ways, so the next time I’m sure the battery will be really and truly dead.

    (*)  Not shaving adds about ten minutes a day to my life, which I regard as a fair tradeoff over the course of several decades. It also added a decade to my apparent age, Back In The Day when that mattered. Now it seems to knock off a decade, which isn’t entirely a Bad Thing.

  • Arduino Case

    The base of that case makes a good protector to keep an Arduino board out of the conductive clutter on a typical electronics bench. I stopped the printer shortly after it finished the bosses atop the mounting posts:

    Arduino case - base on build platform
    Arduino case – base on build platform

    That yellow filament means I can’t lose it!

  • Lawn Mower Drive Control Lever Assist

    Our Craftsman lawn mower has both a deadman grip for the motor (the Operator Presence Control Bar) and a Drive Control Lever that engages the rear wheel drive. The latter requires a death grip to keep the belt engaged, which means you (well, I) spend about two hours clenching the grip.

    Lawn mower - compound leverage handle
    Lawn mower – compound leverage handle

    I’ve long since flipped the control to the left side and added thick foam padding, but there’s no adjustment that reduces the death-grip requirement: you can change the engagement distance, not the spring constant.

    Evidently the Sears engineers have much stronger hands than anyone in our family.

    The doodad hose-clamped to the upright part of the mower handle is a basically a hinge that applies force to the tip of the red handle. The hinge axis lies far enough from the handle’s pivot so that holding the hinge against the handle requires very little force; at least it’s no longer a death grip.

    Lawn mower - compound leverage handle engaged
    Lawn mower – compound leverage handle engaged

    It’s not an ideal solution, but it engages and (more importantly) disengages easily. I still don’t like mowing the lawn, but at least I don’t return with a crippled-up hand.

    The hinge is actually a lock hasp, so it has a slot that slides neatly over the Drive Control Lever’s tab. I beat both sides into a more-or-less cylindrical form over a piece of pipe, while miraculously not bending the hinge pin.

    Evidently the Sears engineers never actually used the damn mower for two hours at a time.

  • Personal Protective Equipment: Start ‘Em Young!

    That comment prompted me to rummage around for one of my favorite photos: a much younger version of my Shop Assistant helping us shred leaves in the front yard.

    Shop Assistant in Autumn leaf pile
    Shop Assistant in Autumn leaf pile

    She thinks it’s entirely right & proper to:

    • don safety goggles while doing anything even remotely eye-unsafe
    • wear a dust mask to mow the lawn
    • jam 30 dB foam plugs into her ears during thrash metal concerts

    A parent can’t ask for more, methinks…

  • Helmet Mirror Mount: First Light

    Printing went smoothly after two preliminary passes to work out the sizes and alignments; this is the second pass, which you can tell because the mirror shoulder has three supports instead of the two shown in the solid model:

    Mirror mount parts on build plate
    Mirror mount parts on build plate

    One view of the parts, with the mirror shaft in place:

    Mirror mount partial assembly - top
    Mirror mount partial assembly – top

    Another view, showing the bottom of the Elevation Plate with the recessed nut:

    Mirror mount parts partial assembly - bottom
    Mirror mount parts partial assembly – bottom

    Assembling the two glue joints required an overnight clamping:

    Mirror mount - glued and clamped
    Mirror mount – glued and clamped

    Then a layer of double-stick foam tape affixes it firmly to the helmet:

    Mirror mount - on helmet
    Mirror mount – on helmet

    It’s a bit too big and way ugly, but works pretty much as expected.

    Two lengths of heatshrink tubing now lock the mirror shaft sections in place; they tended to rotate slightly under normal vibration.

    The OpenSCAD code and model have a few modifications from this object. The next one won’t have the third section of mirror shaft, which makes the shoulder and Az Mount smaller, and the Az Mount is 1 mm closer to the El Body. That shaves a few millimeters off the whole thing.

    The mirror clamp out there on the end is much too large and has too many fiddly parts. I think a little printed doodad would work, but that’s in the nature of fine tuning.