Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
Unlike the last CFL failure, this time I noticed the faint smell of electrical death near the Electronics Workbench, but I couldn’t track it down until the can light over the the Bench didn’t start:
Another Hot-Failed CFL Bulb
The date code suggests it’s been in the fixture for over a decade, so I can’t complain. Having two unrelated bulbs fail within a week, after years of service, is surely coincidence. If another fails within a week or two, however, it will definitely be Enemy Action.
The Fly6 rear camera on my bike started giving off three long beeps and shutting down. Doing the reformatting / rebooting dance provides only temporary relief, so I think the card has failed:
Sandisk Extreme Plus vs. Samsung EVO MicroSD cards
The Fly6 can handle cards up to only 32 GB, which means I should stock up before they go the way of the 8 GB card shipped with the camera a few years ago.
Some back of the envelope calculations:
It’s been in use for the last 19 months
The last 22 trips racked up 88 GB of video data = 4 GB/trip
They occurred over the last 6 weeks = 3.6 rides/week
Call it 250 trips = 1 TB of data written to the card = 32 × capacity
That’s only slightly more than the failure point of the Sony 64 GB MicroSDXC cards. The Fly6 writes about a third of the data per trip, so the card lasts longer on a calendar basis.
So now let’s find out how long the Samsung cards last …
Being a big fan of having a CNC machine know where it is, adding endstops (pronounded “home switches” in CNC parlance) to the Mostly Printed CNC axes seemed like a good idea:
MPCNC – X min endstop – actuator view
All the mounts I could find fit bare microswitches of various sizes or seemed overly complex & bulky for what they accomplished. Rather than fiddle with screws and nut traps / inserts, a simple cable tie works just fine and makes the whole affair much smaller. Should you think cable ties aren’t secure enough, a strip of double stick tape will assuage your doubts.
A snippet of aluminum sheet moves the switch trip point out beyond the roller’s ball bearing:
MPCNC – X min endstop
I’m not convinced homing the Z axis at the bottom of its travel is the right thing to do, but it’s a start:
MPCNC – Z min endstop
Unlike the stationary X and Y axes, the MPCNC’s Z axis rails move vertically in the middle block assembly; the switch moves downward on the rail until the actuator hits the block.
Perforce, the tooling mounted on the Z axis must stick out below the bottom of the tool carrier, which means the tool will hit the table before the switch hits the block. There should also be a probe input to support tool height setting.
The first mount fit perfectly, so I printed four more in one pass:
MPCNC MB Endstop Mounts – Slic3r preview
All three endstops plug into the RAMPS board, leaving the maximum endstop connections vacant:
MPCNC – RAMPS min endstop positions
Obviously, bare PCBs attached to the rails in mid-air aren’t compatible with milling metal, which I won’t be doing for quite a while. The electronic parts long to be inside enclosures with ventilation and maybe dust filtering, but …
The switches operate in normally open mode, closing when tripped. That’s backwards, of course, and defined to be completely irrelevant in the current context.
Seen from a high level, these switches set the absolute “machine coordinate system” origin, so the firmware travel limits can take effect. Marlin knows nothing about coordinate systems, but GRBL does: it can touch off to a fixture origin and generally do the right thing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
If link rot should set in, a direct rip from the website:
NEMA 17 BIPOLAR STEPPER MOTOR, KL17H248-15-4A, 76 oz-in
Specifications:
Shaft: 5mm diameter with flat
Current Per Phase: 1.5A
Holding Torque: 5.5Kg.cm (76 oz-in)
Rated Voltage: 4.2V
NO.of Phase: 2
Step Angle: 1.8° ± 5%
Resistance Per Phase: 2.8Ω± 10%
Inductance Per Phase: 4.8mH± 20%
Insulation Class: Class B
Dielectric Strength: 100Mohm
Operation Temp Range: -20 ~ +40° C
Lead Wire: 22AWG / 750mm with connector to stepper motor driver
Red- 1A
Green- 1B
Yellow- 2A
Blue- 2B
A nice torque curve:
KL17H248-15-4A – Torque curve
The present MPCNC design wires the motors on each end of X / Y axes in series. Each motor has 2.8 Ω of DC resistance = 5.6 Ω total and, given the small wire gauge (allegedly 22 AWG on the motors and unspecified for any eBay cables) and six (!) teeny header pins in series along the wires for each winding, a total series resistance of 6 Ω seems reasonable and is, in fact, what I measure with an ohmmeter.
The stepper drivers arrived preset for 1 A peak:
MPCNC Stepper Drive – as delivered – 500 mA div
The vertical scale is 500 mA/div. The waveform comes from a 10 mm move at 5000 mm/min = 83 mm/s, which is absurdly fast for such a machine, particularly seeing as how the default firmware limits it to 190 mm/min = 3 mm/s. Cutting speeds will be much lower than either of those.
The default DRV8825 current-setting pot setting was 600 mV, for a nominal current motor current of 1.2 A peak. That’s reasonably close to the measurement, all things considered.
However, because the motors run from a 12 V supply at 1 A, the winding and wiring losses mean they operate at a bit over 8 V: much much less than the nominal 24 and 32 V plotted in the torque curve. More voltage = faster response to microstep current changes = higher top speed. At sensible speeds, this surely does not matter.
Part of the tweakage will be to sort that out; a 24 V supply may be in order. Driving each motor separately (as required for automatic de-racking homing) at 1.5 A/phase would require 31.5×√2 A/motor × 5 motors = 15 10.5 A, which seems excessive even to me, particularly in light of sending it across a RAMPS board. At 1 A/phase, you need 10 7 A, which falls within the realm of reason and would be kinder to the PLA motor mounts. It’s not clear boosting the motor voltage will produce any real benefit, although giving the drivers more headroom seems reasonable.
The GT2 drive belts have 2 mm pitch, so the 16 tooth drive pulleys move 32 mm/rev and require 200 step/mm, which seems high to me. At a nice round 100 mm/s, the steppers must tick along at 20 k step/s, half of Marlin’s top speed, which may explain some of the roughness around 80 mm/s.
The torque curve suggests the motors want to run under 200 RPM = 3.3 rev/s = 100 mm/s with the stock 16 tooth pulley. No problem with those numbers!
Using 16:1 microstepping would produce 3200 step/rev, 100 step/mm, thus half the step rate at any speed. Reducing the driver step frequency can’t possibly be a Bad Thing for Marlin.
To the end of documenting colors, connectors, and connections for the MPCNC stepper motors …
At the stepper motors:
MPCNC – Stepper Connector
The plug for the stepper at the end of the harness:
MPCNC – Stepper Harness end connector
I opted to match the “pin 1” marks on the connectors, because that’s easy to remember, although it puts the pin latches on opposite sides:
MPCNC – Stepper to Harness End
Some obligatory Kapton tape holds the two connectors together.
The joint at the middle of the harness, with the near-end stepper cable on the upper left:
MPCNC – Stepper Harness mid connection
At the RAMPS driver end of the cable:
MPCNC – Stepper harness – driver end
The Z-axis extension cable, with the stepper cable on the right:
MPCNC – Z stepper to extension cable
I plugged the cables into the RAMPS board with the “pin 1” mark at the A1A2 end of the connectors.
With all the wires in place (and the GT2 drive belt still in its bag), I stuck masking tape tabs on the motor shafts, connected the RAMPS board, and verified the directions:
MPCNC – Stepper motor direction test
Although the Y axis needed reversing, both pairs of motors turned in the same direction!
Being that type of guy, I reversed the Y axis direction in the firmware configuration, because it’s easier for me to make all the physical connections look the same than (try to) remember to flip the Y axis connector whenever I must reconnect the cable to the driver.
A reader (you know who you are!) proposed an interesting project that will involve measuring audio passbands and suggested using white noise to show the entire shape on a spectrum analyzer. He pointed me at the NOISE 1B Noise Generator based on a PIC microcontroller, which led to trying out the same idea on an Arduino.
The first pass used the low bit from the Arduino runtime’s built-in random() function:
Arduino random function bit timing
Well, that’s a tad pokey for audio: 54 μs/bit = 18.5 kHz. Turns out they use an algorithm based on multiplication and division to produce nice-looking numbers, but doing that to 32 bit quantities takes quite a while on an 8 bit microcontroller teleported from the mid 1990s.
The general idea is to send a bit from the end of a linear feedback shift register to an output to produce arandomly switching binary signal. Because successive values involve only shifts and XORs, it should trundle along at a pretty good clip and, indeed, it does:
Arduino Galois shift reg bit timing
I used the Galois optimization, rather than a traditional LFSR, because I only need one random bit and don’t care about the actual sequence of values. In round numbers, it spits out bits an order of magnitude faster at 6 μs/bit = 160 kHz.
The spectrum looks pretty good, particularly if you’re only interested in the audio range way over on the left side:
Arduino Galois bit spectrum
It’s down 3 dB at 76 kHz, about half the 160 kHz bit flipping pace.
If you were fussy, you’d turn off the 1 ms timer interrupt to remove a slight jitter in the output.
It’s built with an old Arduino Pro Mini wired up to a counterfeit FTDI USB converter. Maybe this is the best thing I can do with it: put it in a box with a few audio filters for various noise colors and be done with it.
It occurs to me I could fire it into the 60 kHz preamp’s snout to measure the response over a fairly broad range while I’m waiting for better RF reception across the continent.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters