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.

Author: Ed

  • Stepper Motor Idle Current

    The motor driver box on my Sherline mill started out as a stock unit, but I’ve tweaked the circuitry to improve the analog performance. Those adventures formed the basis of my Above the Ground Plane columns in Circuit Cellar magazine columns for August & October 2004.

    Because the firmware for the PIC microcontrollers wasn’t available, I wrote a clean-room version so I could show how it all worked for the column. My code won’t run on a stock Sherline board, though, so it’s not a drop-in replacement for the stock firmware.

    One of the reasons I attacked the controller was to reduce the audible noise coming from the motors. That’s an inescapable part of chopped-current stepper motor drive circuitry, but the noise was modulated by all manner of things that shouldn’t have affected it; just touching the box shouldn’t make any difference at all. The fact that it did meant the circuit board had some, well, infelicitous layouts.

    Although the final result was much more stable, I decided to turn off each motor if it didn’t move for at least five seconds; that’s a simple firmware tweak when you write your own code. As a result, the shop was quiet when I wasn’t actively milling.

    Solar Measurements Circuit Board - Top Side
    Solar Measurements Circuit Board – Top Side

    Now, having a motor be completely turned off while milling is going on isn’t generally a good idea, because milling forces from the other axes can push the table against the leadscrew and, perhaps, turn the screw against the unresisting motor. I figured that on a Sherline mill, what with the sissy little cuts I take, that wouldn’t be a problem.

    And I was right for the better part of four years!

    A benefit of turning the driver circuitry off was that I could easily twist the knobs by hand to fine-tune the XYZ position during setup. That worked out really well.

    However, drilling the seemingly simple circuit board pattern you see here (for my February 2009 CC column) produced exactly the right collection of forces (while drilling? Huh?), vibration (maybe) and motor pauses (for sure) to introduce an absolutely repeatable positioning error that Went Away when I tweaked the firmware to keep the motors enabled at all times.

    I’ve since made another tweak that reduces the current to an idle level after five seconds. That both reduces the audible noise and drills the board correctly, so I’ll keep an eye on it for a while before declaring victory.

    The PCB has a few unused (in my code, anyway) chip-to-chip connections that I could employ to let them all decide when nobody’s moving. I think turning the motors off 20 seconds after the last axis stops moving should work Just fine; my G-code doesn’t wait around that long except for manual tool changes.

    Update: More on PCB drilling there.

  • Where to find Presentations & Handouts

    There’s now a link over in the Useful Stuff section that’ll take you to my presentation files & handouts.

  • Sherline Mill Counterweight Gantry: Center Support

    Expanding plug on crossbeam
    Expanding plug on crossbeam

    This is the dingus that attaches the crossbeam to the central pipe rising up from the table for my counterweight gantry. I discarded a whole bunch of elaborate construction ideas in favor of just jamming a plug in the pipe and cranking down on a nut to tighten it.

    Expanding plug overview
    Expanding plug overview

    It’s pretty much self-explanatory; I cut everything to fit, cleaned up the cuts with a file, and added some lube to the tapers so as to make it nice & slippery.

    The need for an O-ring to hold the halves together occurred to me after I’d bandsawed a 1 mm trench in the side of the plug. I chucked it up in the lathe again and used a round-nose tool to carve a groove around its belly. If you try this, do the groove first: an interrupted cut is murder on what’s basically a parting-off tool.

    Expanding plug parts
    Expanding plug parts

    While I know (thanks to Guy Lautard’s invaluable Machinist’s Bedside Reader books) that a self-releasing plug must have a taper angle with a tangent greater than the joint’s coefficient of friction, that really wasn’t much help here. I picked 40 degrees and, yup, it’s self-releasing, but not really slippery enough. Takes a bit of torque to expand the plug enough for a good grip.

    Perhaps my grubby surface finish has something to do with it?

    Memo to self: find out how to figure the taper angle correctly, then do better finishing.

  • Sherline Mill Counterweight Gantry

    It’s a simple fact of life that a CNC’ed Sherline mill requires a counterweight pulling the head upward, because, without some help, that poor little Z-axis motor has a hard time lifting the head’s nine-pound dead weight. The fact that it’s cantilevered way out from the Z-axis dovetails is another problem: there’s plenty of torque binding those ways.

    For the last few years I’ve hung a random hunk of iron from a pair of pulleys attached to the floor joists overhead, but that’s not portable and I’m planning to bring the mill to the Cabin Fever Expo again this year. So I hacked out a sort of gantry that works reasonably well and, when I get back, it’ll replace my crude pulley lashup on the joists.

    Mill counterweight gantry center support
    Mill counterweight gantry center support

    The main beam is an aluminum extrusion that looks like it started life as a traffic sign post; it came with the house and Ol’ Gene was tight with the town DPW, so that seems reasonable. The center support is actually a pipe clamp that I’ll crunch on the edge of the table at the expo, with two plywood scraps to keep from embossing their furniture: the pipe sticks straight up from the table.

    There’s an expanding plug inside the top of the pipe that I must go into more detail about later, but the general notion is that the beam becomes one with the pipe when I crank on the nut. I faced off the top of the pipe and cleaned out the graunched metal at the end of the threads.

    The gray strap should hold electrical conduit to a wall, yet fits perfectly on iron pipe; who knew? Given that no plumbing size matches any physical property you can actually measure, specifying a match like that is impossible.

    Counterweight pulley with Loctite
    Counterweight pulley with Loctite

    I made a pair of pulleys around 26 mm OD ball bearings, mostly because I couldn’t find anything else that would work. Yes, they’re open to shop crud, but I’ll add side shields before I screw it to the ceiling. I know I’ll be explaining how they work at Cabin Fever, so there’s no point in hiding the things.

    The shaft is a steel rod, turned to fit and drilled out for a 10-32 screw. The greenish dab on the shaft is Loctite; I slid the pulley over the dab, aligned the cable with the hole, and let it cure in place. Loctite gets me out of making a quartet of fussy little spacers: better living through chemistry.

    The outer ring is polycarbonate, chosen because the sheet was the right thickness. This ought to be a lathe project, but it was easier to clamp it on the mill, so I helix-milled the center hole to fit the bearing OD.

    Spiral-milling the pulley OD
    Spiral-milling the pulley OD

    I hammered a piece of copper pipe into a mandrel / jaw pad, put a thin chunk of acrylic under the polycarb as a spacer, grabbed the whole affair in the three-jaw chuck, and helix-milled the OD. No drive dog to hold it in place, no special prep, no nothing: it Just Worked. Of course, I’m taking sissy little cuts on the thing, but you best do that on a Sherline anyway.

    The copper pipe mandrel trick doesn’t give great precision, which, fortunately, isn’t needed in this application. I found a chunk of EMT in the heap with the right OD and walloped the copper pipe around it with a rubber mallet to beat it into shape.

    The reason you need a mandrel is that thin ring of plastic deforms under the pressure of the jaws, producing a three-lobed effect: pleasing in an art project, yet strangely inappropriate in a nominally circular machined part. I discovered this exquisite little inconvenience a few years ago and haven’t forgotten the lesson yet.

    I planned to use a slitting saw to cut a groove for the wire rope around the OD, but then I came to my senses: ‘way too much leverage on that poor little chuck and not enough traction from the jaws. A bit of rummaging came up with a 3/16-inch ball-end mill burr, which was just slightly larger than the wire rope.

    [Update: What I’ve been calling a “ball-end mill” is actually a “ball-end burr”. A “ball-end” or “ball-nose” mill is basically an end mill with a hemispherical end. Sometimes “burr” is spelled “bur”.]

    Ball-end mill used the wrong way
    Ball-end mill used the wrong way

    Then I screwed up: I mounted the chuck on the rotary table, the table on a right-angle plate, the plate on the mill, and zeroed the ball at the top of the pulley.

    The right way to use a ball-end mill burr is along its equator, so I should have zeroed it at either the left or right side of the pulley. The ball doesn’t have really great cutting edges around its South Pole.

    Fortunately, it cut a 1.5-mm trench around the polycarb just fine. I suspect if I was using aluminum, this would not have had a happy outcome.

    The parts heap yielded a pair of lead blocks, a sturdy eye screw, and some humongous heat-shrink tubing that made a tidy counterweight. I lashed everything to the countertop supporting the mill, added a 2×4 post and a machinist’s jack to support the countertop, and it passed the smoke test.

    Lead counterweight
    Lead counterweight

    The Sherline seems happier with a counterweight that slightly outweighs its head. The lead blocks weigh 13 pounds, about 3 pounds more than the head, and Z-axis travel is nice & smooth.

    It’s said that the disadvantage of removing all the weight from the head is that there’s less weight to press drill bits into the workpiece. I haven’t seen that problem yet; methinks a few pounds really don’t make that much difference compared to the forces generated by the motor through the leadscrew. We shall see when this thing is installed in its permanent home on the floor joists.

    Counterweight hook on Sherline mill head
    Counterweight hook on Sherline mill head

    Real machinists make all sorts of lavish clamps to attach the counterweight rope to the Sherline mill head. I favor the Orc Engineering approach: a random hook from the heap, firmly attached with a big hose clamp, more-or-less over the head’s center of mass. What’s not to like?

    Incidentally, one nice feature of a hook on the head is that you can hang the head out of the way under a nearby shelf. I have both the 3k rpm and 10k rpm heads and it’s really nice to have the other head conveniently located, yet out of the way.

    Something that’s obvious in retrospect: that pipe’s gotta be very close to vertical, lest the cable drag on the side of the holes. I may need some shims on the Cabin Fever table to make the answer come out right.

    Here’s the heart of the helical-milling rough-cut routine for the OD. We start at a safe Z-axis traverse level and the first pass is at Z=0 on the surface to reveal any gross alignment errors…

    G0 X[0 - #<_Pulley_Radius>] Y0			(set up for cutter comp)
    
    G41.1 D[#<_Tool_Dia> + #<_Cut_Finish>]				(cutter comp on left)
    G2 X[#<_Pulley_Radius>] I[#<_Pulley_Radius>] F#<_Traverse_Feed>	(CW entry arc to right side)
    
    G0 Z0
    F[#<_Mill_Feed> / 2]
    
    #<_Pass> = 0		(iteration counter)
    #<_ZLevel> = 0		(current Z-axis level)
    
    O100 DO
    
    G2 X[#<_Pulley_Radius>] I[0 - #<_Pulley_Radius>] Z#<_ZLevel>	(helix down) 
    
    #<_ZLevel> = [#<_ZLevel> - #<_Cut_Depth>]
    #<_Pass> = [#<_Pass> + 1]
    
    O100 WHILE [#<_Pass> LE #<_Num_Passes>]
    
    G2 X[#<_Pulley_Radius>] I[0 - #<_Pulley_Radius>] 		(remove ramp to final level) 
    
    G40			(comp off)
    G0 X#<_Pulley_Dia> Y0	(move away from part)
    G0 Z[#5163 * 25.4]	(get air)

    Memo to self: use the ball mill’s equator next time.

    Update: The thing fit perfectly on the floor joists over the mill; more info there.

  • Non-slip Sherline Drawbar Bolts

    The drawbar bolts on a Sherline mill (and, presumably, the lathe) have a fitting that adapts the bolt head to the top of the spindle. There’s nothing to keep it from sliding right off the bolt, which happens 100% of the time when you just pick up the drawbar.

    The fix is easy: a short length of heatshrink tubing applied near the bolt head.

    I happened to have some tubing with an internal hot-melt glue lining that stick like, well, glue to the bolt. Pretty nearly any heatshrink tubing will work, although you might need two layers to catch the fitting’s ID.

    Sherline drawbar bolts with heatshrink tubing to capture the fitting
    Sherline drawbar bolts with heatshrink tubing to capture the fitting

  • Adjusting Sherline Mill Column Gib

    This is a nuisance you gotta do once in a while. The symptom today was that the mill axis didn’t line up at all with the laser aimer I have mounted on the ceiling; it’s supposed to point right down the spindle bore, but the bore wandered all over the place. Took me a while to realize it was really that bad…

    Basically, you must take the headstock off, unplug the axis motors, and put the mill on the workbench so you can get convenient access to the back of the column. Unscrew the cap screw holding the Z-axis backlash lock plate and disconnect the saddle nut. Make sure the lock doesn’t engage.

    Loosen the gib lock, remove the gib, clean the crap off the mating dovetail surfaces & gib, add a touch of their approved silicone lube, slide the gib back & lock it in place. Slide the saddle up & down (that’s why you want the saddle nut disconnected) and tweak the gib until it slides more-or-less freely along the entire length without binding or being too loose. My saddle gets stiff near the very bottom of the column, but it never gets that low in actual use. Make sure the gib lock is tight.

    Run the saddle nut to the top of the leadscrew, slide the saddle in place, back those two tiny setscrews out, secure the saddle nut to the saddle with a short cap screw, then turn the setscrews until they just touch the nut.

    At this point, the nut should be in its nominal position, centered on the leadscrew and aligned concentric with its axis. If you turn the Z-axis knob and it binds, then you get to loosen the cap screw, futz with the setscrews, tighten the cap screw, check for binding, and iterate until it works properly.When it’s OK at the top, crank it all the way to the bottom and verify that it doesn’t bind elsewhere.

    Mine took one iteration this time, which is just sheer blind good fortune. Or maybe the saddle nut is wearing out and getting sloppy?

    Then adjust the backlash lock to reduce the backlash to whatever you think is appropriate. My Z-axis has a few mils unless that thing is way too snug.

    Sherline’s instructions for aligning the saddle nut screw that connects the leadscrew to the saddle are on Sherline’s site, hidden in the instructions for the “new” Z-axis backlash adjustment: http://www.sherline.com/4017Zinst.htm.

    Memo to Self: do this more often.

  • Mysterious USB Disconnects

    For the last few months, one of the USB hubs in my PC has been disabling a port connected to an external USB hub. The external hub re-establishes communication with all the devices, but the X server doesn’t take kindly to having devices yanked out from underneath it. After this glitch, my left-hand trackball and tablet are dead in the water; the only way to get ’em working is to log out, restart X, and log back in again. Not pleasant.

    Oddly, the keyboard continues to function.

    Note that it’s the hub in the PC that’s complaining, not the external hub.

    USB connections at PC
    USB connections at PC

    I’ve tweaked the obvious things: switched USB ports on the PC, replaced the external hub, powered and un-powered the external hub, rearranged the devices on the hub, moved other devices away from the hub, and so forth and so on.

    Now it’s time to start taking notes. The current external hub is a cheap, no-name gadget direct from China that bears a striking resemblance to the tchotchke HP-branded “Made In China” hub a friend picked up at SC06.

    Both hubs have a cut-out in the case for a power plug, but the internal circuit boards lack the requisite jack to actually make use of external power.

    Here’s the current dmesg dump.

    [ 2917.702975] hub 1-0:1.0: port 2 disabled by hub (EMI?), re-enabling...
    [ 2917.702986] usb 1-2: USB disconnect, address 3
    [ 2917.702989] usb 1-2.2: USB disconnect, address 4
    [ 2917.712300] /build/buildd/linux-2.6.24/drivers/input/tablet/wacom_sys.c: wacom_sys_irq - usb_submit_urb failed with result -19
    [ 2917.787223] usb 1-2.3: USB disconnect, address 5
    [ 2917.831161] usb 1-2.4: USB disconnect, address 6
    [ 2918.002420] usb 1-2: new full speed USB device using uhci_hcd and address 7
    [ 2918.165658] usb 1-2: configuration #1 chosen from 1 choice
    [ 2918.170675] hub 1-2:1.0: USB hub found
    [ 2918.172533] hub 1-2:1.0: 4 ports detected
    [ 2918.502967] usb 1-2.2: new low speed USB device using uhci_hcd and address 8
    [ 2918.662816] usb 1-2.2: configuration #1 chosen from 1 choice
    [ 2918.679915] input: Microsoft Comfort Curve Keyboard 2000 as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2.2/1-2.2:1.0/input/input10
    [ 2918.721211] input,hidraw2: USB HID v1.11 Keyboard [Microsoft Comfort Curve Keyboard 2000] on usb-0000:00:1d.0-2.2
    [ 2918.751759] input: Microsoft Comfort Curve Keyboard 2000 as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2.2/1-2.2:1.1/input/input11
    [ 2918.793088] input,hidraw3: USB HID v1.11 Device [Microsoft Comfort Curve Keyboard 2000] on usb-0000:00:1d.0-2.2
    [ 2919.010108] usb 1-2.3: new low speed USB device using uhci_hcd and address 9
    [ 2919.165963] usb 1-2.3: configuration #1 chosen from 1 choice
    [ 2919.187020] input: Kensington      Kensington Expert Mouse as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2.3/1-2.3:1.0/input/input12
    [ 2919.244778] input,hidraw4: USB HID v1.10 Mouse [Kensington      Kensington Expert Mouse] on usb-0000:00:1d.0-2.3
    [ 2919.465338] usb 1-2.4: new low speed USB device using uhci_hcd and address 10
    [ 2919.617208] usb 1-2.4: configuration #1 chosen from 1 choice
    [ 2919.625530] input: Wacom Graphire3 6x8 as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2.4/1-2.4:1.0/input/input13

    The external hub is on the white cable (a USB extender cable, which may contribute to the problem) plugged into the port at the far right from the network cable. But i’ve used an external hub with a different and very official USB A-B cable.

    The USB connections on the back panel:

    Top row: Zire 71 PDA cradle | External USB hub (the offending one)

    Bottom Row: Logitech trackball | Dell 2001 monitor hub | empty port

    What I changed after this glitch:

    HP SC06 hub replaces no-name hub.

    Update: Time passes… and it craps out twice.

    The dmesg dump:

    [10625.203907] usb 1-2.2: USB disconnect, address 8
    [10625.970605] usb 1-2.3: USB disconnect, address 9
    [10626.865087] usb 1-2.4: USB disconnect, address 10
    [10627.880887] usb 1-2: USB disconnect, address 7
    [10638.410365] usb 1-2: new full speed USB device using uhci_hcd and address 11
    [10638.579231] usb 1-2: configuration #1 chosen from 1 choice
    [10638.582167] hub 1-2:1.0: USB hub found
    [10638.584118] hub 1-2:1.0: 4 ports detected
    [10638.898574] usb 1-2.1: new low speed USB device using uhci_hcd and address 12
    [10639.035458] usb 1-2.1: configuration #1 chosen from 1 choice
    [10639.038484] input: Wacom Graphire3 6x8 as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2.1/1-2.1:1.0/input/input14
    [10639.301891] usb 1-2.3: new low speed USB device using uhci_hcd and address 13
    [10639.445768] usb 1-2.3: configuration #1 chosen from 1 choice
    [10639.466865] input: Microsoft Comfort Curve Keyboard 2000 as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2.3/1-2.3:1.0/input/input15
    [10639.505029] input,hidraw2: USB HID v1.11 Keyboard [Microsoft Comfort Curve Keyboard 2000] on usb-0000:00:1d.0-2.3
    [10639.525686] input: Microsoft Comfort Curve Keyboard 2000 as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input16
    [10639.572404] input,hidraw3: USB HID v1.11 Device [Microsoft Comfort Curve Keyboard 2000] on usb-0000:00:1d.0-2.3
    [10639.777083] usb 1-2.4: new low speed USB device using uhci_hcd and address 14
    [10639.917975] usb 1-2.4: configuration #1 chosen from 1 choice
    [10639.934026] input: Kensington      Kensington Expert Mouse as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2.4/1-2.4:1.0/input/input17
    [10639.971692] input,hidraw4: USB HID v1.10 Mouse [Kensington      Kensington Expert Mouse] on usb-0000:00:1d.0-2.4
    [10962.110496] usb 5-5.2: new high speed USB device using ehci_hcd and address 8
    [10962.219819] usb 5-5.2: configuration #1 chosen from 1 choice
    [12290.756701] usb 5-5.2: USB disconnect, address 8
    [54272.946992] hub 1-0:1.0: port 2 disabled by hub (EMI?), re-enabling...
    [54272.947001] usb 1-2: USB disconnect, address 11
    [54272.947003] usb 1-2.1: USB disconnect, address 12
    [54273.003212] usb 1-2.3: USB disconnect, address 13
    [54273.071171] usb 1-2.4: USB disconnect, address 14
    [54273.214485] usb 1-2: new full speed USB device using uhci_hcd and address 15
    [54273.383873] usb 1-2: configuration #1 chosen from 1 choice
    [54273.386778] hub 1-2:1.0: USB hub found
    [54273.388736] hub 1-2:1.0: 4 ports detected
    [54273.699213] usb 1-2.1: new low speed USB device using uhci_hcd and address 16
    [54273.840096] usb 1-2.1: configuration #1 chosen from 1 choice

    So replacing the hub seems to have not done anything useful, as expected.

    Next step: plug the hub cable into the right-hand port on the bottom row.

    Update: Time passes and another disconnect pops up. I’d just poked the USB button on my pocket camera’s cradle. Coincidence? Sometimes it disconnects when I sit down, which suggests a static discharge.

    The dmesg dump:

    [ 1275.088536] hub 3-0:1.0: port 2 disabled by hub (EMI?), re-enabling...
    [ 1275.088547] usb 3-2: USB disconnect, address 5
    [ 1275.088549] usb 3-2.1: USB disconnect, address 6
    [ 1275.132321] usb 3-2.3: USB disconnect, address 7
    [ 1275.220223] usb 3-2.4: USB disconnect, address 8
    [ 1275.371502] usb 3-2: new full speed USB device using uhci_hcd and address 9
    [ 1275.541198] usb 3-2: configuration #1 chosen from 1 choice
    [ 1275.544148] hub 3-2:1.0: USB hub found
    [ 1275.546102] hub 3-2:1.0: 4 ports detected
    [ 1275.856554] usb 3-2.1: new low speed USB device using uhci_hcd and address 10
    [ 1275.993439] usb 3-2.1: configuration #1 chosen from 1 choice
    [ 1275.997194] input: Wacom Graphire3 6x8 as /devices/pci0000:00/0000:00:1d.2/usb3/3-2/3-2.1/3-2.1:1.0/input/input10
    [ 1276.259871] usb 3-2.3: new low speed USB device using uhci_hcd and address 11
    [ 1276.406735] usb 3-2.3: configuration #1 chosen from 1 choice
    [ 1276.423836] input: Microsoft Comfort Curve Keyboard 2000 as /devices/pci0000:00/0000:00:1d.2/usb3/3-2/3-2.3/3-2.3:1.0/input/input11
    [ 1276.469640] input,hidraw2: USB HID v1.11 Keyboard [Microsoft Comfort Curve Keyboard 2000] on usb-0000:00:1d.2-2.3
    [ 1276.490647] input: Microsoft Comfort Curve Keyboard 2000 as /devices/pci0000:00/0000:00:1d.2/usb3/3-2/3-2.3/3-2.3:1.1/input/input12
    [ 1276.545539] input,hidraw3: USB HID v1.11 Device [Microsoft Comfort Curve Keyboard 2000] on usb-0000:00:1d.2-2.3
    [ 1276.746036] usb 3-2.4: new low speed USB device using uhci_hcd and address 12
    [ 1276.896906] usb 3-2.4: configuration #1 chosen from 1 choice
    [ 1276.912985] input: Kensington      Kensington Expert Mouse as /devices/pci0000:00/0000:00:1d.2/usb3/3-2/3-2.4/3-2.4:1.0/input/input13
    [ 1276.960781] input,hidraw4: USB HID v1.10 Mouse [Kensington      Kensington Expert Mouse] on usb-0000:00:1d.2-2.4
    [ 1280.734257] usb 5-5.2: new high speed USB device using ehci_hcd and address 7
    [ 1280.843575] usb 5-5.2: configuration #1 chosen from 1 choice

    Next step: rearrange cables thusly…

    Top row: Zire 71 PDA cradle | Dell 2001 monitor hub

    Bottom Row: Logitech trackball | External USB hub (the offending one) | empty port

    Methinks it’s time to start yanking the SD card out of the camera and poking it into the PC’s media reader. That should eliminate one possible source of bus confusion.

    Time to reset…

    Update: time passes and it’s been working OK… up until I zapped the desk lamp with a teeny static spark, at which moment dmesg reports this:

    [49077.518404] hub 3-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
    [49077.518413] usb 3-1: USB disconnect, address 2
    [49077.518416] usb 3-1.1: USB disconnect, address 3
    [49077.562470] usb 3-1.3: USB disconnect, address 4
    [49077.658411] usb 3-1.4: USB disconnect, address 5
    [49077.805865] usb 3-1: new full speed USB device using uhci_hcd and address 6
    [49077.974924] usb 3-1: configuration #1 chosen from 1 choice
    [49077.982443] hub 3-1:1.0: USB hub found
    [49077.983860] hub 3-1:1.0: 4 ports detected
    [49078.302253] usb 3-1.1: new low speed USB device using uhci_hcd and address 7
    [49078.439141] usb 3-1.1: configuration #1 chosen from 1 choice
    [49078.442156] input: Wacom Graphire3 6x8 as /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1.1/3-1.1:1.0/input/input10
    [49078.709567] usb 3-1.3: new low speed USB device using uhci_hcd and address 8
    [49078.853443] usb 3-1.3: configuration #1 chosen from 1 choice
    [49078.875540] input: Microsoft Comfort Curve Keyboard 2000 as /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1.3/3-1.3:1.0/input/input11
    [49078.920499] input,hidraw2: USB HID v1.11 Keyboard [Microsoft Comfort Curve Keyboard 2000] on usb-0000:00:1d.2-1.3
    [49078.941372] input: Microsoft Comfort Curve Keyboard 2000 as /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1.3/3-1.3:1.1/input/input12
    [49078.999851] input,hidraw3: USB HID v1.11 Device [Microsoft Comfort Curve Keyboard 2000] on usb-0000:00:1d.2-1.3
    [49079.212710] usb 3-1.4: new low speed USB device using uhci_hcd and address 9
    [49079.351593] usb 3-1.4: configuration #1 chosen from 1 choice
    [49079.367726] input: Kensington      Kensington Expert Mouse as /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1.4/3-1.4:1.0/input/input13
    [49079.411112] input,hidraw4: USB HID v1.10 Mouse [Kensington      Kensington Expert Mouse] on usb-0000:00:1d.2-1.4

    So it looks like there’s really something EMI-ish going on. Perhaps it’s time to look into grounding all the exposed metal around here.

    Update: It really was static electricity. More discussion there.