Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
The CAMTool V3.3 board dispenses with fancy USB power switching circuitry:
CAMTOOL CNC-V3.3 schematic – USB Power Entry
The NUP2201 is an ESD clamp diode / suppressor IC, which is a nice touch, but FU1, a simple 300 mA polyfuse, is the only thing standing between the USB cable and the on-board +5 V regulator. In real life, it looks like this:
CAMTool V3.3 – USB power fuse
It’s the little black rectangle between the USB jack and the CH340 USB-to-serial chip. The
The far end of the USB cable plugs into a Raspberry Pi, a device known for unseemly fussiness about USB power, so I unsoldered the fuse and installed a diode:
CAMTool V3.3 – USB power diode
It’s a BAT54 Schottky diode, pointed toward the right to prevent current from the board getting to the Pi. Pin 2 (toward the bottom) isn’t connected to anything inside the package, either, so it’s all good.
I suppose if one were a stickler for detail, one could gimmick the diode in series with the fuse, but I figured that’s a solution for a problem well down on the probability list …
The X axis driver is an unmodified DRV8825 PCB operating in default mixed-decay mode. The Y axis DRV8825 has its DECAY pin pulled high, thereby putting it in fast decay mode.
The scope timebase varies to match the programmed feed rate. Because the X and Y axes move simultaneously, each axis moves at 1/√2 the programmed speed:
G1 X10 Y10 F100 → 71 mm/min on X and Y
The motor generates minimal back EMF at slow speeds, so the winding sees nearly the full supply voltage. As described in the previous post, the basic problem arises when the current rises too fast during each PWM cycle:
V = L di/dt
di/dt = 24 V / 3 mH = 8 kA/s
The first 1:32 microstep away from 0 calls for 5% of max current = 50 mA at a 1 A peak. The DRV8825 datasheet says the PWM typically runs at 30 kHz = 33 µs/cycle, during which the current will change by 270 mA:
267 mA = 8 kA/s × 33.3 µs
Notice how the current slams to a nearly constant, much-too-high value just after the first microstep. The incorrect current level decreases with lower supply voltage, because the rate-of-change decreases and the commanded current level reaches the actual (incorrect) current sooner.
Varying the motor voltage at a constant 10 mm/min:
3018 XY – Mixed Fast – 24V – 10mm-min 1A-div
3018 XY – Mixed Fast – 20V – 10mm-min 1A-div
3018 XY – Mixed Fast – 15V – 10mm-min 1A-div
3018 XY – Mixed Fast – 12V – 10mm-min 1A-div
3018 XY – Mixed Fast – 10V – 10mm-min 1A-div
Note that reducing the supply voltage doesn’t change the motor winding current, because the DRV8825 controls the current during each microstep, at least to the best of its ability.
Also note that the current overshoots the target for those microsteps, even when the motor is stopped, because there’s no back EMF, so the power dissipation is too high even at rest.
Enough back EMF appears at 100 mm/min to begin tamping down the current overshoot at 24 V:
3018 XY – Mixed Fast – 24V – 100mm-min 1A-div
The current waveform looks good at 12 V:
3018 XY – Mixed Fast – 12V – 100mm-min 1A-div
The back EMF at 1000 mm/min nearly eliminates the overshoot at 24 V, with fast decay in the Y axis causing some PWM ripple:
3018 XY – Mixed Fast – 24V – 1000mm-min 1A-div
Both decay modes look good at 12 V:
3018 XY – Mixed Fast – 12V – 1000mm-min 1A-div
At 1500 mm/min, the highest reasonable speed for the thing, and a 24 V supply, both waveforms still look good:
3018 XY – Mixed Fast – 24V – 1500mm-min 1A-div
However, the back EMF is now high enough to buck the 12 V supply, preventing the current from decreasing fast enough in mixed decay mode (top trace):
3018 XY – Mixed Fast – 12V – 1500mm-min 1A-div
Tweaking the GRBL config to allow 2000 mm/min feeds shows the waveforms starting to become triangular, even at 24 V:
3018 XY – Mixed Fast – 24V – 2000mm-min 1A-div
And a 12 V supply opposed by the back EMF simply can’t change the current fast enough to keep up with the DRV8825 microstep current levels:
3018 XY – Mixed Fast – 12V – 2000mm-min 1A-div
Bottom line: a +12 V motor supply and DRV8825 drivers modified to run in fast decay mode look like the best setup for the 3018-Pro: good current control at low speeds with enough moxie to handle higher speeds.
I should hack the DRV8825 boards into 1:8 microstep mode to reduce the IRQ rate by a factor of four, then see what happens to the back EMF at absurd speeds.
Verily, given the right tools, any job becomes do-able:
New Utility Pole – installing
It was fascinating for me and just another day at the office for everybody else:
New Utility Pole – wiring
They nailed the original pole tag to the new pole, complete with the original 1940 nail:
New Utility Pole – pole tag 144701
I expect this pole will outlive me, just as the original pole outlived the folks who built our house.
The most memorable comment came from the person doing the CHG&E damage assessment, who really really wanted this to not be their problem: “Anybody could steal a pole tag and nail it on that pole.” I asked what location their records showed for the pole tag, whereupon the conversation moved on.
Second-place award: no, we were not interested in trenching underground lines 300 feet along the property line, at our expense, to avoid an “unsightly” pole.
For unknown reasons, I was supposed to figure out which telecom utilities had wired the pole, notify them, and wait for them to tack their cables to the new pole. I called both Verizon and Altice / Optimum, got service tickets, and watched them close the tickets without further action. I tried re-opening the Verizon ticket and was told somebody would be there within 48 hours. An Optimum guy showed up, promised a quick return visit from a team with proper equipment, but nothing happened.
I suppose having no customer at the end of the cable removed any motivation to clear their hardware off our lawn, so, after two weeks, I deployed the bolt cutter, rolled up the cables, and scrapped ’em out.
After nigh onto 18 years, the pipe straps holding the Zzipper fairing struts to the handlebars of our Tour Easy recumbents finally shrugged off their plastic wraps:
Tour Easy Zzipper Fairing – OEM mount
Although they still worked, riding over broken pavement produced distinct rattles; alas, the roads around here feature plenty of broken pavement.
The solution is a rugged plastic block capped with aluminum plates to spread the clamping load:
Tour Easy Zzipper Fairing – block mount
The solid model is straightforward:
Zzipper Fairing – Strut Mount – solid model – Show view
A slight bit of tinkering made the stack exactly the right height for 45 mm screws secured with nyloc nuts. No washers on either end, although that’s definitely in the nature of fine tuning.
The three sections print without support:
Zzipper Fairing – Strut Mount – solid model
I reamed the smaller hole with a 3/8 inch drill to match the fairing strut rod. The as-printed larger hole fit the handlebar perfectly, although the first picture shows the tubing isn’t exactly round on the near side of the block, where it starts the outward bend toward the grips.
The cap plates cried out for CNC, but I simply traced two outlines of the block on 1/8 inch aluminum sheet, bandsawed near the line, introduced them to Mr Disk Sander for finishing & corner rounding, transfer-punched the holes from the plastic blocks, and drilled to suit:
Tour Easy Zzipper Fairing – clamp plates
Making two pairs of plates by hand counts as Quality Shop Time around here.
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
Mixed decay mode begins as fast decay, but at a fixed period of time (75% of the PWM cycle) switches to slow decay mode for the remainder of the fixed PWM period. This occurs only if the current through the winding is decreasing (per the indexer step table); if the current is increasing, then slow decay is used.
The 24 V supply on the CNC 3018-Pro provides too much voltage for the motors, because slow decay mode can’t handle those rising slopes:
3018 XY – Mixed Fast – 24V – 10mm-min 12V 1A-div
Note that “rising” means the current increases with either polarity from 0 A at the midline. The DRV8825 uses a MOSFET H-bridge to drive winding current in either direction from the +24 V motor supply voltage.
Both traces show motor winding current at 1 A/div, with the XY axes creeping along at 10 mm/min (thus, 7.1 mm/min each). The upper trace is the X axis, with a stock DRV8825 module in mixed decay mode. The lower trace is the Y axis, with its DRV8825 hacked into fast decay mode.
The basic problem, about which more later, comes from the current rising too fast during each PWM cycle:
V = L di/dt
di/dt = 24 V / 3 mH = 8 kA/s
The first 1:32 microstep away from 0 calls for 5% of max current = 50 mA at a 1 A peak. The DRV8825 datasheet says the PWM typically runs at 30 kHz = 33 µs/cycle, during which the current will change by 270 mA:
267 mA = 8 kA/s × 33.3 µs
Some preliminary measurements suggest these (probably counterfeit) DRV8825 chips actually run at 16 kHz = 66 µs/cycle:
3018 X – ripple 1 step – 18V – A0 B-90 500mA-div
During those cycles the current can increase by more than 500 mA. The first scope picture shows an abrupt increase to maybe 700 mA, so, yeah, that’s about right.
Having the wrong current in one winding means the motor isn’t positioned correctly during those microsteps. The 3018-Pro runs at (an absurd) 1600 µstep/mm, so being off by even a full step isn’t big deal in terms of positioning.
The real problem comes from running nearly 1 A through both windings. Those little motors run really hot: they’re dissipating twice what they should be.
Anyhow, the pin layout shows the DRV8825 DECAY mode selection on pin 19:
DRV8825 pinout
Which sits on an inconveniently skinny little PCB pad, fifth from the left on the bottom:
DRV8825 PCB – open Decay pin
Memo to Self: Don’t make that mistake when you lay out a PCB. Always put a little pad or via on a disconnected pin, so as to have a hand-soldering target big enough to work with.
The objective is to pull the pin high:
DRV8825 DECAY pin settings
Pin 15, in the lower left corner, provides the output of a 3.3 V linear regulator, with its PCB trace connected to the left side of the ceramic cap:
Those are two different PCBs. The crappy TI logos, not easily visible in those low-res pix, on both ICs suggest they’re by-now-typical counterfeits, so seeing a factor-of-two difference in PWM frequency isn’t surprising.
The CNC 3018-Pro router arrived with GRBL 1.1f installed on the Camtool V3.3 board and ran well enough, although it accelerated very slowly. After installing Home switches, figuring out the travel limits, and trying different speeds & accelerations, it runs much better:
$1=100 turns off the stepper motor drivers after 100 ms of inactivity:
3018 X – 100ms timeout – 100mm-min 12V 500 ma-div
There’s no force worth mentioning on a diamond scribe when the motors stop, so there’s no reason to keep them energized, and the DRV8825 chips resume from the same microstep when re-enabled.
$3=5 reverses the X and Z motor rotation, so you can use the same type of cable on all three axes and have them move the way you’d expect.
$20=1 turns on Soft Limits, thereby producing an error when you (or the G-Code) tries to move beyond the machine’s limits, as defined by the $120 $121 $122 values relative to the Home switch positions.
$21=0 leaves Hard Limits off, because I didn’t see much point in switches on both ends of all the axes for this little bitty machine.
$22=1 enables the Home cycle, after which you must start each session by homing the machine.
$27=1.000 sets the Pull-off distance from all three Home positions, so the machine ends up at absolute XYZ = -1.000 mm relative to the switch trip points after homing. This depends on the mechanics of the limit switches, but seems OK with the MBI-style switches I used:
$110 $111 $112 = 1100 set the maximum speed along the XYZ axes in mm/min. Note the hard upper limit set by the maximum microcontroller interrupt rate of about 40 k/s:
I’ll have more to say about speed limits, stepper current, torque, and similar topics.
$120 $121 $122 = 3000 set the acceleration along the XYZ axes in mm/sec². These are two orders of magnitude higher than the default acceleration, which accounts for the as-received sluggish acceleration.
$130=299.000 $131=179.000 $132=44.000 set the XYZ travel limits relative to the Home switch trip points, which feed into the $20=1 Soft Limits. You could probably eke out another millimeter along each axis, but this is what I came up with.
With all those in place, the G54 coordinate system puts the XY origin dead in the middle of the platform and the Z origin a little bit below its upper travel limit. Set them thusly:
G10 L2 P1 X-147 Y-90.6 Z-1.5
The original and tweaked GRBL configuration settings as a GitHub Gist:
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
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
After a few days of topping off the rear tire on Mary’s bike, with no gashes or debris in the tire, I finally replaced the Michelin Protek tube and autopsied it:
Michelin Protek tube autopsy
While it’s possible to extract the valve and perhaps even clean / replace it, I think that’s just delaying the inevitable. The rubber shreds may be necessary to fill large punctures, but they seem to wreck the valve seal.
Her bike now has an ordinary (pronounced “cheap”) tube inside the Schwalbe Marathon Plus armored tire. We’ll see how long this lasts.