Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
Given the length of the battery wires inside a Belkin F6C1500 UPS, you might think any arrangement will work. Not so. The wires from the guts of the UPS must exit to the batteries exactly like this:
F6C1500 Battery wires from UPS
There’s a black wire tucked under the red wire, both of which must exit though the angled slot and run toward the front of the battery compartment.
Seen from the front, the red wire connects the positive terminal of the lower (left) battery to the negative terminal of the top (right) battery and the black wire connects the negative terminal of the lower battery to the UPS circuitry:
F6C1500 Battery interconnect wires
Trust me on this: there is no other arrangement of those wires that will simultaneously connect everything properly and fit within the case.
As for disassembly, the small tab on the left end of the case holds the front panel in place. Press that inward with a flat screwdriver, then slide the cover toward the tab. Four locking slots along the sides will disengage and you can then lift the panel off.
With that out of the way, there’s a screw hidden under the BELKIN label in the middle of the removable cover:
Severalusers have observed that the stepper motor driving the M2’s Z axis leadscrew gets very hot. I measured about 140 °F = 60 °C on the as-built motor, so I loosened the screws and raised the motor slightly:
M2 Z axis motor – raised
I eased some heatsink compound underneath by putting dabs on a slip of paper and painting it on the bottom of the motor case, lowered the Z stage to the bottom of its travel, and tightened the mounting screws:
M2 Z axis motor – added thermal compound
That reduced the temperature to about 120 °F = 50 °C, which still seemed excessive for a short-stack motor mounted on a fairly large chunk of stainless steel. The motor also sounded quite rough during homing and long manual moves, sooo … something was wrong. I bet you know where this is going, right?
Let’s start with the firmware side and determine what current the motor should be seeing.
The default Z axis stepper current constant W (called Z_CURRENT in the Marlin source) is 135. The board in my M2 has R30 = 3.3 kΩ, which sets the maximum possible current to 2 A. Working the equation backwards, a Z_CURRENT = 135 will produce a peak winding current of 1.1 A.
However, a nearby comment in the source code suggests this is should be about 0.75 A. The original RAMBo board had a maximum possible current of 1.5 A, but running those numbers doesn’t agree. Another comment suggests 185 corresponds to about 1 A, which isn’t right, either. There’s nothing new about stale comments not corresponding to the actual hardware; I’ve done that myself.
With 1.1 A in hand, let’s unplug the cable and measure the winding resistance.
Not much to my surprise, the motor has 28 Ω windings. The M2 uses a 19 V supply for the steppers, so the maximum motor current works out to 19 V/28 Ω = 680 mA, but it must be less than that to allow the microstepping controller to manage the current.
It seems that Makergear is connecting a high-resistance stepper intended for a simple H-bridge drive to a high-performance microstepping controller. For some background on why that combination doesn’t work, see my analysis of the original MBI Thing-O-Matic steppers.
I thought we all agreed we weren’t going to do that any more. Maybe nobody sells a low-resistance motor-with-integral-leadscrew?
Anyhow.
The only thing to do in the short term is to reduce the peak current to a rational value around 600 mA:
74 = 255 * (0.8 * 0.6) / 166
I set it to a nice, round 75 and reloaded the firmware, which immediately made the motor hum, rather than growl, on long moves. The case temperature didn’t drop by very much, because the poor motor still dissipates about 11 W, not much less than the original 13 W. There’s only so much heat you can pull out of the case and these little motors are actually rated for maybe 5 W, tops.
The motor’s overall performance didn’t change, which is good, because it didn’t have much performance to begin with. The X and Y motors can accelerate at 9000 mm/s2, but the Z motor limit is 30 mm/s2; it doesn’t really accelerate, it sort of gains momentum in a stately manner.
The power + thermistor cable for the M2 Heated Build Platform attaches to the Z axis stage at the Y axis motor, with the conductors encased in a fairly stiff braided loom. The cable flexes from fully retracted to fully extended as the HBP moves along the Y axis. Here’s a view at about mid-travel:
M2 HBP cables – wire loom
Unfortunately, there’s no provision for strain relief at the HBP or around the connectors. The silicone heating pad firmly anchors the two pairs of power wires to the aluminum plate, but that simply means they flex sharply at the edge of the pad:
M2 HBP connections
I removed the loom between the motor mount and the connectors, but that still doesn’t provide nearly enough flexibility:
M2 HBP cables – loom removed
The wires still flex sharply at the outboard side of the connector and at the HBP pad; this can’t possibly survive more than a few thousand long cycles before something expensive breaks. The Thing-O-Matic HBP connector debacle suggests that I may need to attach a strut to the Y axis stage that rigidly supports the connectors, with a much longer loop of wire soaking up the strain to the fixed end.
The 18 AWG wires carrying the 10+ A of HBP current get unpleasantly warm, suggesting that new loop will require heavier wire. In round numbers from that table, 18 AWG stranded wire runs 6.5 mΩ/ft, so the (roughly) four feet of wire pair between the electronics case and the HBP will drop 250+ mV and dissipate 2.5 W. I suspect it’s worse than that, but haven’t made any measurements to back up that suspicion.
Enthusiasm may get a product out, but engineering makes it work
Plywood and plastic do not produce a stable 3D printer
Measurements matter
8-bit microcontrollers belong in the dustbin of history
With that in mind, I’ve long thought that LinuxCNC (formerly EMC2) would provide a much better basis for the control software required for a 3D printer than the current crop of Arduino-based microcontrollers. LinuxCNC provides:
Hard real time motion control with proven performance
A robust, well-defined hardware interface layer
Ladder-logic machine control
Isolated userspace programming
Access to a complete Linux distro’s wealth of programs / utilities
Access to an x86 PC’s wealth of hardware gadgetry
Rather than (try to) force-fit new functions in an Arduino microcontroller, I decided it would be interesting to retrofit a DIY 3D printer with a LinuxCNC controller, improve the basic hardware control and sensing, instrument the extruder, then take measurements that might shed some light on DIY 3D printing’s current shortcomings.
Rebuild the extruder with temperature and force sensors
Start taking measurements!
My reasons for choosing the Makergear M2 as the basis for this project should be obvious:
All metal: no plywood, no acrylic (albeit a plastic filament drive)
Decent stepper motors (with one notable exception)
Reasonable hot end design
Good reputation
The first step of the overall plan included a meticulously documented M2 build that I figured would take a month or two, what with the usual snafus and gotchas that accompany building any complex mechanism. Quite by coincidence, a huge box arrived on my birthday (the Thing-O-Matic arrived on Christmas Eve, so perhaps this is a tradition), the day when I learned that Mad Phil had entered his final weeks of life.
As the Yiddish proverb puts it: If you wish to hear G*d laugh, tell him of your plans.
So I converted a box of parts into a functional M2 3D printer over the course of four intense days, alternating between our living room floor and a card table in Phil’s home office, showing him how things worked, getting his advice & suggestions, and swapping “Do you remember when?” stories. Another few days sufficed for software installation, configuration, and basic tuneup; I managed to show him some shiny plastic doodads just before he departed consensus reality; as nearly as I can tell, we both benefited from the distractions.
Which means I don’t have many pictures or much documentation of the in-process tweakage that produced a functional printer. The next week or so of posts should cover the key points in enough detail to be useful.
Not to spoil the plot or anything: a stock M2 works wonderfully well.
Owl – half size – left
For example, a half-scale cushwa owl printed in PLA at 165 °C with no bed cooling and these Slic3r parameters:
500 mm/s move
300 mm/s infill
200 mm/s solid infill
100 mm/s internal perimeter
50 mm/s bottom layer
30 mm/s external perimeter
1 mm retract @ 300 mm/s
The beak came out slightly droopy and each downward-pointing feather dangles a glittery drop. There’s room for improvement, but that’s pretty good a week after opening a box o’ parts…
Running a random set of colored LEDs from the Basement Laboratory Parts Warehouse Wing through the LED Curve Tracer produced this pleasant plot:
The white LED doesn’t match up with either the blue or the UV LED. Perhaps the blue LED uses a completely different chemistry that shoves further to the right than seems proper? I suppose I should run a handful of white, blue, and UV LEDs through the thing just to see what’s going on…
The Bash / Gnuplot source code:
#!/bin/sh
numLEDs=8
#-- overhead
export GDFONTPATH="/usr/share/fonts/truetype/"
base="${1%.*}"
echo Base name: ${base}
ofile=${base}.png
echo Input file: $1
echo Output file: ${ofile}
#-- do it
gnuplot << EOF
#set term x11
set term png font "arialbd.ttf" 18 size 950,600
set output "${ofile}"
set title "${base}"
set key noautotitles
unset mouse
set bmargin 4
set grid xtics ytics
set xlabel "Forward Voltage - V"
set format x "%4.1f"
set xrange [0.5:4.5]
#set xtics 0,5
set mxtics 2
#set logscale y
#set ytics nomirror autofreq
set ylabel "Current - mA"
set format y "%3.0f"
set yrange [0:35]
set mytics 2
#set y2label "right side variable"
#set y2tics nomirror autofreq 2
#set format y2 "%3.0f"
#set y2range [0:200]
#set y2tics 32
#set rmargin 9
set datafile separator whitespace
set label 1 "IR" at 1.32,32 center
set label 2 "R" at 1.79,32 center
set label 3 "O" at 2.10,32 center
set label 4 "Y" at 2.65,32 center
set label 5 "G" at 2.42,32 center
set label 6 "B" at 4.05,32 center
set label 7 "UV" at 3.90,32 center
set label 8 "W" at 3.25,32 center
#set arrow from 2.100,32 to 2.125,31 lt 1 lw 2 lc 0
plot \
"$1" index 0 using (\$5/1000):(\$2/1000) with linespoints pt 1 lw 2 lc rgb "red" ,\
"$1" index 1 using (\$5/1000):(\$2/1000) with linespoints pt 1 lw 2 lc rgb "orange" ,\
"$1" index 2 using (\$5/1000):(\$2/1000) with linespoints pt 1 lw 2 lc rgb "dark-yellow" ,\
"$1" index 3 using (\$5/1000):(\$2/1000) with linespoints pt 1 lw 2 lc rgb "green" ,\
"$1" index 4 using (\$5/1000):(\$2/1000) with linespoints pt 1 lw 2 lc rgb "blue" ,\
"$1" index 5 using (\$5/1000):(\$2/1000) with linespoints pt 1 lw 2 lc rgb "purple" ,\
"$1" index 6 using (\$5/1000):(\$2/1000) with linespoints pt 1 lw 2 lc rgb "magenta" ,\
"$1" index 7 using (\$5/1000):(\$2/1000) with linespoints pt 1 lw 2 lc rgb "dark-gray"
EOF
This receipt from a recent trip to the scrap metal dealer explains everything I’ve read about what happens when “cheap commodities” become “precious metals”…
That having been the case for some years, the weighman now scans your (well, my) drivers license to establish traceability in the event the metal turns out to be stolen, with your ID printed on the receipt. The receipt turns into cash at a fortress-like ATM structure out front, far from the actual metal-handling operation.
Despite having a computerized metal scale below what looks to be a cable modem bolted to the wall of the small-lot bay, EMR has no web presence whatsoever. That’s not yet a crime, but …
Some explanations:
B241 = brass plumbing fittings, chrome OK
CABL1 = house wiring and other copper-heavy cable
CABL2 = electronic gadget cables & connectors
C273 = pure copper with no fittings or solder, no enameled wire
C275 = copper bonded to any other metal or coated with insulation
We immediately converted those two Grants into a tank of gas and two bags of groceries, so the day came out about even.
Judging from the much-folded Dayton 4X221 Snap-Around Ammeter Operating Instructions (a scanned copy that I folded around the original and tucked inside the case), the ammeter dates back to 1979, which says Mad Phil probably used it in the early 80s, when he was repairing AV equipment. Unlike most vintage clamp-on ammeters, this one can also measure voltage and resistance:
Dayton 4X221 Snap-Around Ammeter – Specifications
The resistance function requires a single AAA alkaline cell in the bulky probe, so this should come as no surprise:
The probe housing contains a 1 A fast-blow fuse, which blocked the corrosion from getting deeper into the probe tip:
Dayton 4X221 Resistance Probe – battery and fuse
The AAA cell was “Best if installed by Jan 1999”, which I’m sure was true. Somehow, you never recognize the last time you use something; I suppose old instruments get used to not seeing the light over the workbench after a while.
Anyhow.
Douse the corrosion with vinegar to neutralize the potassium hydroxide, rinse out the probe body, polish the top of the fuse, buff up the battery contact on the test lead, and it’s all good again.