PCI Express Parallel Port Card for LinuxCNC

While putting together a PC to investigate LinuxCNC, I installed a wireless networking card that turned out to be unsupported. I was able to shrug that off as unimportant, but that would not be true of the next hardware project: adding a parallel port to the machine. Parallel ports have been around for as long as the PC platform has been around and is the closest thing a PC has to GPIO pins. (Actually, mostly just output.) There are many fancier options with add-on cards with programmable FPGA and such, but they all boil down to low-latency output signal pins and parallel port is the pioneer for all that followed.

The starting point for this investigation is the LinuxCNC wiki for parallel port cards. I would not have been surprised if they focused on ISA cards of the original IBM PC, but fortunately they aren’t quite that old school which is good. Most of the entries talk about far more modern PCI cards. As I understand it, something using the MCS9865 chip (*) is the gold standard, preferably a dual port version for double the pins. There are other pages written by people reporting good results, but many (like this page about Netmos 9815) are out of date and no longer available.

Unfortunately, the only expansion slot on this MSI AM1I Mini-ITX is a single PCI-Express (PCIe) slot intended for a GPU. Though handled by the same industry consortium, PCI and PCI-Express cards have physically incompatible shapes. I went to Amazon looking for PCI-Express parallel cards that explicitly mention Linux CNC. Thanks to the similar name, Amazon would show PCI (non-express) cards which I can’t use. And for reasons I don’t understand, some USB adapters were shown(*) even though they would not work for this purpose: USB adds an unpredictable latency unacceptable for direct machine control.

Another tack I tried is to search for LinuxCNC wiki for parallel port chip identifiers. AX99100 came up empty. WCH382L boards are available (*) but they have been problematic and no longer recommended. OXPCIe952 boards are available (*) and LinuxCNC support for this chip has apparently matured past an early problematic teething period. Out of chips found on PCIe boards, the MCS9900 appears to have the longest track record. So I decided to try this unit (*) as my starting point.

PCIe parallel port card installed

The interface card itself installed easily, just like countless other PC add-on cards I’ve installed. The real proof requires connecting it to some mechanical hardware.

(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

LinuxCNC has Limited Hardware Support: Wireless Card Example

An important part of my home-built CNC project is to learn more about what goes on under the hood of CNC equipment, arguably more interesting to me than actually getting a machine up and running doing something productive. Which is why I decided against buying an all-in-one CNC control system and started putting together a machine to play with LinuxCNC instead. I was surprised to learn conventional wisdom for LinuxCNC has a preference for older machines. Steady and predictable is better than infrequent bursts of high performance. Modern PCs tend to be optimized for the latter.

Another reason is hardware support. While LinuxCNC is indeed built on a Linux kernel, there is little motivation to adopt the latest and greatest Linux features. LinuxCNC aims for steady reliable machines, which means avoiding new features if they might make machines less reliable. Older code means support for older hardware, and fewer hardware. Something that runs on a modern commodity Linux distribution has no guarantee LinuxCNC cares about it. I learned this lesson up front with a wireless card.

The motherboard I chose to use for LinuxCNC exploration is the MSI AM1I board that had been the heart of my home FreeNAS (now TrueNAS) server for several years before being decommissioned. It is the oldest PC motherboard I have right now, and it has a proven history of reliability. While I had the motherboard accessible for installation in a steel tower case, I thought I’d add wireless Ethernet capability to the system. This motherboard has a Mini-PCIe slot intended for a wireless card, and I had salvaged an appropriately sized card from a retired laptop.

Intel wireless-N 1030 card installed

It installed easily.

Intel wireless-N 1030 card antenna

I had also salvaged two antenna that had connected to this card. In the laptop, the wires were routed through screen hinge to connect to these antennae sitting within upper left and right corners of the screen. Now I shall route them to a plastic faceplate covering for an absent optical drive.

This was a widely supported Intel wireless card that had worked in the laptop (before it died) and still worked when I booted Ubuntu on this computer. LinuxCNC recognized it as a piece of hardware on the PCIe bus, but there was no networking connectivity. I had a wired Ethernet backup option readily available, so I didn’t spend time diagnosing how to connect to a network with this hardware. I’ve learned my lesson and put more research into the next piece of hardware: a PCI-Express Parallel port card.

Window Shopping RATTMMOTOR CNC Controller with Digital Dream

I determined that a Mach 3 CNC pendant wasn’t going to work in LinuxCNC with merely configuration file changes, so I started looking at other pendant options. I found this bare-bones option(*) that had only a few controls and no display screen, and almost every single function is broken out into its own physical wire. This fits very well with the LinuxCNC model built on the idea every I/O is a pin. Even when it’s not literally a pin on a parallel port, there’s a logical pin underneath for LinuxCNC configuration.

And while looking at these pendants designed for hard wiring, I found a controller that bundles such a pendant with a complete self-contained CNC controller unit. It is more capable than Grbl on an Arduino, but less than full LinuxCNC on a PC. It calls itself an offline motion controller system(*), running software from Digital Dream Automation. At a quoted maximum pulse rate of 500 kHz, it significantly outperforms Arduino Grbl which is reported to top out at around 30 kHz. This unit can also read G-Code from a USB flash drive, eliminating the need to have a separate computer running some sort of G-Code sender program to Grbl. A nice self-contained (I guess that’s what they meant by “offline”?) system.

Minor problem: G-code visualization options on such a little screen seems to be limited to 2D plots, giving up one of three axes. I’ve seen old CNC with the same limitation so it’s not a huge deal, but it is less than what we can do with modern PC-based systems.

Moderate problem: How would I generate G-code for these units? This particular unit’s owner’s manual explains firmware updates would be downloaded from ddcnc.com, and that’s how I found Digital Dream and presumably they are the author of software running on these units. Unfortunately, a quick search for Digital Dream on Fusion 360 post processor library came up empty. I don’t know how owners of DDCNC-based controllers like this one generates their G-code programs. The user manual has a list of supported commands, but I’m not familiar enough with the various styles to recognize if DDCNC uses the same set of code as something else.

Major problem: Buying such a product instead of setting up LinuxCNC comes with a drawback: I can’t dig into the code and learn how CNC controllers work under the hood. And that is the primary point of my CNC controller explorations. If someone asks me for a ready-made upgrade over Grbl on Arduino or ESP32, I’m happy to let them know these controllers exist. But for myself, I’ll resume my LinuxCNC explorations.

(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Brief Look at a LinuxCNC Pendant

Trying to build a little CNC is definitely a learn-as-I-go project. Moving the motor control box was a simple (though necessary) mechanical change, but not the only idea prompted by initial test runs. I also thought it would be nice to have a handheld pendant to help with machine setup, instead of going to the laptop all the time. I got a chance to look over a CNC pendant to see how I might integrate one.

This particular unit was purchased from this eBay vendor listing, but there are many other similar listings across different online marketplaces. Judging by this listing’s title, the popular keyword salad included: CNC Mach3 USB MPG Pendant Handwheel. I knew what CNC, USB, pendant and handwheel referred to. MPG in this context means “Manual Pulse Generator” referring to the handwheel that generates pulses to signal the CNC controller to move individual steps. And finally, Mach3 is a Windows software package that turns a PC into CNC machine controller.

My first draft CNC controller was built on an ESP32 without USB host capability, so there’s little hope of integrating this USB pendant. The most likely path would involve LinuxCNC, a freeware alternative to Mach3. Poking around documentation for control pendants, the first hit was this link which seems to be talking about units that connected via parallel port. Follow-up searches kept coming across this link for wireless pendants which I didn’t think was relevant. After coming across it for the fifth or sixth time, I decided to skim the page and saw that it also included information about a wired USB pendant. It’s not a direct match, though. Here’s information from Ubuntu’s dmesg tool after I plugged in this pendant.

[ 218.491640] usb 1-1: new full-speed USB device number 2 using xhci_hcd
[ 218.524920] usb 1-1: New USB device found, idVendor=10ce, idProduct=eb93
[ 218.524926] usb 1-1: New USB device strings: Mfr=1, Product=0, SerialNumber=0
[ 218.524931] usb 1-1: Manufacturer: KTURT.LTD
[ 218.538131] generic-usb 0003:10CE:EB93.0004: hiddev0,hidraw3: USB HID v1.10 Device [KTURT.LTD] on usb-0000:00:10.0-1/input0

The key here are USB identifiers idVendor and idProduct, 0x10CE and 0xEB93. I could change those values in the associated udev rule:

ATTRS{idVendor}=="10ce", ATTRS{idProduct}=="eb93", MODE="666", OWNER="root", GROUP="users"

But that was not enough. I dug deeper to find relevant source code and it is explicitly looking for idVendor:idProduct of 0x10CE:0xEB70.

dev_handle = libusb_open_device_with_vid_pid(ctx, 0x10CE, 0xEB70);

Oh well, getting this to run would go beyond just configuration files, there will need to be code changes and recompiles. Looks like some people are already looking at it, a search for eb93 found this thread. I don’t know enough LinuxCNC to contribute or even understand what they are talking about. I returned this USB pendant to its owner and set this idea aside. There are plenty of CNC pendant offerings out there I can revisit later, some of which are even bundled with an entire CNC control package.

Moving CNC Spindle Control To Equipment Panel

Thinking about CNC milling circuit boards might have been looking too far ahead. But I also made some mechanical changes after the successful engraving session. There was a distinct buzzing sound of vibration caught my attention. Unlike earlier tests with an endmill, this engraving tip removed very little material and I thought overall noise would be reduced. Most of it were, but one particular sound stayed the same and I wanted to know what it was.

A little bit of investigation found the source of the buzz inside my spindle motor controller box. Bolted near the spindle up on our Z-axis gantry beam, it was installed in that location purely out of convenience. A decision that was apparently not well thought out and contributing to headaches. Earlier we found the box had contributed electrical noise to the system, now I realized it contributed mechanical noise as well.

In addition to those problems, its current position also blocked the most promising path for us to install a dust collection system. And even if it was not directly blocking, we wouldn’t want it to be near dust path anyway.

All of those factors motivated a move from its current gantry-mounted position down below decks to the equipment plate where the Parker motion control X/Y stepper driver modules are mounted. In additional to longer wiring to cover the distance, a few other enhancements were made. We had a single capacitor installed on the motor wire to help our previous episode of electrical noise. Now the wire is longer and even more likely to turn into an antenna, so now we have one capacitor at each end. There’s a ferrite core added to each end as well, and the ground wire is now bolted to the equipment panel plate. All of these should give us better electrical noise resistance than before.

In addition to the motor wire, I extend wire connecting enable pin to E-stop so spindle power is cut when E-stop is pressed. I also extended the control wire for speed. Automated operation would require automatic speed control via Grbl, but this will do until I get around to it.

Spindle control mounted below

Side amusement: since this project involved mains voltage, I unplugged this box before moving and rewiring it. Then I immediately forgot I had unplugged it.

Once I plugged it back in, things started running as expected. This is a small step forward, something I like to interleave with investigations looking further ahead.

Circuit Board Milling Fixture First Draft

My short daydream about hobbyist-level tool-changing CNC was associated with the project to build a CNC from a 2-axis motion-controlled optical inspection table. Shortly before pandemic lockdown it reached the milestone of engraving a scrap sheet of polycarbonate plastic (“Lexan”). A lot of things have changed since then, putting the project in limbo, but I have a few partially written entries languishing in my “Drafts” folder. Following the precedence set by that tool-changer post, I intend to do a bit of polish and publish them for the record. First up: an idea for milling custom PCBs on the machine.

After that successful engraving test, I started considering PCB milling. It is another largely 2D task with tighter precision requirements than engraving cosmetic details, without increasing requirements on physical side loads and machine rigidity. I bought a batch of single-sided copper-clad boards (*) and started thinking about how I might design a fixture to mill them. This was the first draft, which I never got to test.

The idea was to create a small 3D-printed object that I could bolt to the MDF working surface of my XY Stage CNC. The object’s top surface is intended to be milled after bolting in place, to make sure it is flat/parallel with machine motion axis. The side overhangs are designed for 3D-printed clips that will hold the board in place while milling.

The first draft of the clips had very little holding power, because I anticipated physical forces would act a certain way and reality worked differently than how I thought. I had curved it so it clamps to the top surface as well as the rail, but doing so meant less force on the actual PCB holding claw.

The second draft was more successful, the PCB holding claw became part of the topside holding force. I also extended the shape downwards so it could brace against an additional surface for more strength.

PCB milling fixture installed

The idea was to put double-sided tape on the board’s back side before sticking it on this fixture. The clips would then exert downwards force on the double-sided tape to improve its resistance to sideways cutting forces. Would the tape add too much variation to the height? Would it flex too much for accurate cutting? Would the clips help or hinder the operation? I fully expected this first draft to not work as expected but looked forward to learning exactly how. Once this prototype fixture was bolted to the surface, I started looking into using FlatCAM to generate PCB-milling G-code. I never got far enough for a test run but I did make some mechanical refinements.

(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Using TCL 55S405 TV as Computer Monitor

I just bought a LG OLED55B2AUA for my living room, displacing a TCL 55S405. I have several ideas on what I could do with a retired TV, and the first experiment was to use it as a computer monitor. In short, it required adjusting a few TV settings and even then, there are a few caveats for using it with a Windows PC. Using it with a Mac was more straightforward.

As expected, it is ludicrously large sitting on my desk. And due to the viewing angles of this (I think VA) panel, the edges and corners are difficult to read. I see why some people prefer their large monitors to be curved.

I noticed a delay between moving my mouse and movement of onscreen cursor. This delay was introduced by TV’s image processing hardware. During normal TV programs, the audio can be delayed in order to stay in sync with the video. But that trick doesn’t work for interactive use, which is why TVs have a “Game Mode” to disable such processing. For this TV, it was under “TV settings” / “Picture settings” / “Game mode”. Turning it on allowed the mouse to feel responsive again.

The next problem was brightness. Using it as a monitor, I would sit much closer than I would a TV and there is too much light causing eyestrain. First part of the solution is to choose “Darker” option of “TV settings” / “Picture settings” / “TV brightness”. Then I went to “TV settings” / “Picture settings” / “Fine tune picture” where I could turn “Backlight” down to zero. Not only did this make the screen more comfortable it reduced electrical power consumption as well.

According to my Kill-A-Watt meter, this large TV consumed only 35 watts once I turned the backlight down to minimum. This is actually slightly lower than the 32″ Samsung computer monitor I had been using. Surprisingly, half of that power was not required to run the screen at all. When I “turn off” the TV, the screen goes dark but Kill-A-Watt still registered 17 watts, burning power for purposes unknown. Hunting around in the Settings menu, I found “System” / “Power” / “Fast TV Start” which I could turn off. When this TV is no longer set for fast startup, turning the TV off seems to really turn it off. Or at least, close enough that the Kill-A-Watt read zero watts. This is far better than my 32″ Samsung which read 7W even in low-power mode.

Since this is a TV, I did not expect high framerate capabilities. I knew it had a 24 FPS (frames-per-second) mode to match film speed and a 30 FPS mode for broadcast television. When I checked my computer video card settings, I was pleasantly surprised to find that 60Hz refresh rate was an option. Nice! This exceeded my expectations and is perfectly usable.

On the flipside, since this is a TV I knew it had HDCP (High-bandwidth Digital Content Protection) support. But when I start playing protected content (streaming Disney+ on Microsoft Edge for Windows 11) the TV would choke and fail over to its “Looking for signal…” screen. Something crashed hard and the TV could not recover. To restore my desktop, I had to (1) stop my Disney+ playback and (2) power cycle the TV. Not just pressing the power button (that didn’t work) I had to pull the power plug.

The pixels on this panel were crisp, and 4K UHD resolution actually worked quite well. 3840×2160 resolution at 55″ diagonal works out to 80 DPI (dots per inch), which is right within longtime computer monitor norms. For many years I had used a 15″ monitor at 1024×768 resolution, which worked out to 85DPI. Of course, 80DPI is pretty lackluster compared with “High DPI” displays (Apple “Retina Display”, etc.) now on the market with several hundred dots (or pixels) per inch. Despite crisp pixels at sufficient density, text on this panel isn’t always legible under Windows because it doesn’t work well with Microsoft’s ClearType subpixel rendering. ClearType takes advantage of typical panel subpixel orientation, where the red/green/blue elements are laid out horizontally for each pixel. This panel, unfortunately, have its elements laid out vertically for each pixel, foiling ClearType trying to be clever. In order for this panel to take advantage of ClearType rendering, I would have to rotate the screen 90 degrees to portrait orientation. This isn’t terribly practical, so I turned ClearType off.

For comparison, a brief test with my Apple MacBook Air (M1) saw the following behavior:

  • Same 3640×2160 resolution and 60Hz refresh rates were available.
  • I could activate HDR mode, an option that was grayed out and not available with the NVIDIA drivers on my Windows desktop. I lack MacOS HDR content so I don’t know whether it actually works.
  • Streaming Disney+ on Firefox for MacOS showed video at roughly standard-definition DVD quality. This is consistent with behavior for non-HDCP displays, and much preferable to crashing the TV so hard I need to power cycle it.
  • MacOS font rendering does not use color subpixels like Microsoft ClearType, so text looks good without having to turn off anything.

It appears this TV is a better monitor for a MacOS computer than a Windows machine.

LG OLED Look Gorgeous But webOS Is Horrid

Thanks to Black Friday discounts, I acquired an OLED TV which I had coveted for many years. I decided on a LG OLED55B2AUA purchased through Costco (Item #9755022). LG’s “B” line sits between the more affordable “A” and the more expensive “C” lines and it was a tradeoff I liked. (There are a few additional lines higher than “C” priced above my budget.) The TV replaced a TCL 55S405 and while they are both 55″ TVs, there is a dramatic difference in image quality. There are reviews out there for full information, my blog post here concentrates on the items that mattered to me personally.

The Good

  • The main motivation is image quality. OLED panel advantage comes from their self-illuminating pixels leading to great contrast and vibrant colors. The “C” line uses panels with a higher peak brightness, but I haven’t found brightness lacking. When the filmmaker intentionally includes something bright (flashlight in a dark room, etc.) this “B” panel is bright enough to make me squint.
  • HDMI 2.1 with variable refresh rate capability and a higher maximum frame rate (120FPS) so I can see all the extra frames my new Xbox Series X can render. On this year’s “B” units, HDMI 2.1 is supported on two of four HDMI ports, which is enough for me. HDMI 2.1 is supported on all four ports of “C” line, and none of “A” line because they are missing high framerate features entirely.
  • The LG “magic remote” has an accelerometer to let us move an on-screen cursor by tilting the remote. This is far better than the standard up/down/left/right keypads of a TV remote and, combined with responsive UI, makes navigation less of a chore. This is the only good thing about LG’s user interface.

The Bad

For reasons I failed to diagnose, the TOSLINK output audio port could not send sound to my admittedly old Sony STR-DN1000 receiver. Annoyingly, LG designed this TV without analog audio output. Neither a headphone jack (as is on my TCL) nor classic white and red RCA audio jacks. In order to use my existing speakers, I ended up buying a receiver with HDMI eARC support. This is money I would have rather not spent.

The Ugly

The internal operating system is LG’s build of webOS, which they have turned into a software platform for relentless, shameless, and persistent monetization efforts. My TCL Roku TV also served ads, but not nearly as intrusively as this LG webOS TV. That powerful processor which gave us snappy and responsive user interface isn’t going to just sit idle while we watch a movie. Oh no, LG wants to put it to work making money for LG.

Based on the legal terms & conditions they wanted me to agree to, the powerful processor of this TV wants to watch the same things I watch. It wants to listen to the audio to listen for keywords that “help find advertisements that are relevant to you”. That’s creepy enough, but there’s more: it wants to watch the video as well! The agreement implies there are image recognition algorithms at work looking for objects onscreen for the same advertising purpose. That’s a lot of processing power deployed in a way that provides no benefit to me. I denied them permission to spy on me, but who knows if they respected my decision.

Ad-centric design continues to the webOS home screen. The top half is a huge banner area for advertisement. I found an option to turn off that ad but doing so did not free up space for my use. It just meant a big fixed “webOS” banner taking up space. Next row down, the leftmost item represents the most recently used input port, which in my case is the aforementioned Xbox Series X. The rest of that row are filled with more advertising, which I haven’t found a way to turn off. The third and smallest row includes all the apps I care about and even more that I did not. Overall, only about 1/8 of the home screen surface area are under my control, the rest paid LG to be on my home screen.

I’m frankly impressed at how brazenly LG turned a TV into an ad-serving spyware device. I understand the financial support role advertisements play, but I’m drawing a line for my own home: as long as the ads stay in the menus and keep quiet while I’m actively watching TV, I will tolerate their presence. But if an LG ad of any type interrupts my chosen programming, or if an LG ad proved they’re spying on me despite lacking permission, I am unplugging that Ethernet cable.

UPDATE (two days later): Well, that did not take long. I was in the middle of watching Andor on Disney+ (Andor is very good) when I was interrupted by a pop-up notification on the bottom of the screen advertising free trial to a service I will not name. (Because I refuse to give them free advertising.) I will not tolerate ads that pop up in the middle of a show. Struggling to find an upside I can say this: that advertised service appeared to have no relation to Disney+ or anything said or shown in Andor, so the ad was probably not spying on me.

I was willing to let LG earn a bit of advertising revenue from me, as Roku did for my earlier TV, but LG’s methods were far too aggressive. Now LG will earn no ad revenue from me at all because this TV’s Ethernet cable has been unplugged.

AS7341 as Non-Destructive Sawppy Sensor

One of the reasons I became interested in AS7341 multi-spectral sensor was the fact it was an affordable and nondestructive instrument with an approximate analogue on real Mars rovers. I have been keeping a watch for interesting instruments that I might install on board Sawppy to emulate the rolling science laboratory nature of its Martian inspirations. During a visit to DTLA Maker Faire 2019, Sawppy had the opportunity to ferry around an air quality sensor courtesy of people from the South Coast Air Quality Management District. That was interesting but not representative of real Mars rovers as Mars did not having much of air to monitor quality of.

The most interesting and fatally flawed idea was to give Sawppy a variation of Curiosity’s ChemCam or the Perserverance SuperCam successor. As cool as rover space lasers might be, a rock-vaporizing laser on a rover that drives near human children seems like an extremely bad idea.

A similar idea was to mount a small Dremel tool on board Sawppy’s yet-to-be-built robot arm. This is a Mars rover tradition started by the MER (Mars Exploration Rover) twins Spirit and Opportunity. Whose robot arms held a Rock Abrasion Tool (RAT) to cut through rock surfaces in order to evaluate rock composition within. Curiosity rover has a drill, and Perseverance rover expands on that for rock core sampling. A motorized cutting bit is somewhat less dangerous than a vaporization laser, but still seemed like a bad idea.

Eliminating those ideas left the following candidate sensors:

There are several spectrometers aboard each of the rovers designed to look for different things. This spectrometer onboard Curiosity rover analyzed atmospheric composition. This one lives at the end of Perseverance rover robot arm. Maybe an AS7341 can act as a simplified stand-in for certain Mars rover spectrometers?

(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

AMS AS7341 11-Channel Multi-Spectral Digital Sensor

An interesting sensor module came to my attention recently thanks to the experiments of my talented friend Emily Velasco. She’s been building a contraption whose sound output is dependent on color. At first, the sensor module didn’t capture my attention because I’ve seen color sensors before. They’ve been available for fun projects like a M&M candy sorter, and many robotics/electronics kits like LEGO Mindstorms included their own. However, not all color sensors are equal. Once I looked into the AMS AS7341 sensor she was using, I learned it was far more capable than I had originally thought.

Instead of mapping color hue into a single reading, which is what I had expected, this sensor reports data across eleven channels. Eight of the channels are mapped to various wavelengths in the human visible spectrum, implemented via filters placed over optical sensors. The remaining three channels report color-independent data. One channel has no color-specific filter (“clear”) and would report an overall brightness value. One channel is sensitive to near infrared (NIR), outside visible spectrum. And the final channel is specialized for detecting common flicker frequencies 50Hz and 60Hz.

AMS product page for this sensor stated intended use cases for this sensor included color calibration tools. This sensor is intended to be a fundamental part of precision color instruments! All color sensors answer the “What color is it” question to varying degrees of precision. This sensor is aimed at the highly precise end of that spectrum. Note that the sensor by itself is not a color calibration tool, that will depend on the rest of the supporting electronics, software, and procedures for use. “How to calibrate the calibration tool” is a big field all by itself and critical for instrument accuracy in addition to precision.

I have very little background in color science, so I will start by looking at the sensor as a precision instrument of unknown accuracy. Even with that disclaimer I think it is a good project candidate.

Sawppy Dreams of Collaborative CAD

While putting together my presentation for the Space episode of Hangout and Nerdout, it occurred to me that I would be presenting Sawppy to an audience with a wide variety of backgrounds and would know many things I did not. Towards the end of the deck, I put in a slide asking for pointers to collaborative CAD tools. During the presentation I ended up skipping that slide because I got too excited blabbing about Sawppy and went over my 10 minute time limit. Fortunately, I had an opportunity to bring it up again during the Q&A afterwards when I was asked about user contributions.

The reality is that right now it that I don’t have an easy workflow for accepting contributions. I’ve been able to accept a few contributions in the form of edits for Sawppy assembly documentation. Two years ago, I wrote a series of blog posts about what I’d like to have in Sawppy documentation workflow. I posed my wish list to the audience of a Write the Docs LA meetup, and they were helpful in pointers to things I could investigate, but I never got as far as putting anything into practice.

And that was just for written word documentation. Accepting contributions in the form of CAD updates is a whole other ball of wax. Sawppy was designed in Onshape, a powerful web-based CAD system marketed to SolidWorks CAD professionals. I was entranced by the possibility that even $200 Chromebooks can be full power CAD workstations. Onshape has always had a free tier for makers, but that free tier is not their business focus and would occasionally disappear from Onshape website. As of this writing, Onshape free tier is back on their product list but that could change again in the future. When I started Sawppy, Onshape was a startup. They have since been acquired by PTC and free tier has a history of disappearing after startups are acquired.

Even if free Onshape tier remains available, it will always be limited to a subset of professional tier functionality. Which is unfortunate, because some of that would be useful for Sawppy to become a community-developed project. (To be clear, this is not limited to Onshape. Other products like Autodesk Fusion 360 similarly restrict their free tier capabilities.)

Sawppy dreams of a free CAD workflow with the following collaborative capabilities:

  • Tweak: Let people make minor changes without commitment of setting up and learning a full CAD workflow. For Sawppy, it would be very useful to make small adjustment to diameter of holes intended for heat-set inserts. Alex Glow brought up Thingiverse’s Customizer tool, which is an implementation of this concept but only applicable to objects designed in OpenSCAD.
  • Branch: Git style capability to create branches and merge changes back to main branch. (*)
  • Fork: GitHub style capability to let anyone fork a repository, make their changes, and create a pull request to propose merging their changes back to the original repository.
  • Diff: To evaluate those merges, we’d need to be able to visually compare the difference. CAD interchange formats like IGES and STEP use text files that would work within Git, but they are not designed to be human-readable. I would not be able to visualize the physical difference by looking at text changes in those file formats. Code-based CAD solutions like OpenSCAD are better in this regard, but it would be ideal to have a 3D view to compare changes. (*)
  • Review: Building on the previous bullet, we’d need to be able to annotate that view in order to have discussion before accepting a merge. Comments like “Why was this part lengthened?” or “Please change this fastener to M3x10mm.” This process would be analogous to a GitHub code review. Jinger Zeng brought up Wikifactory’s CAD Rooms capability, which at first glance looks very promising and worth further investigation.
  • Verify: automated software tests can be a part of verifying a pull request’s code changes. I don’t know if this concept has migrated to the professional CAD world. I would love to have automated checks to find problems without actually printing and building a rover.
    • I want to know if multiple physical parts are occupying the same space. (I think this is called “clash analysis” in professional CAD.) At a basic level it’ll check just the parts as they sit (and that alone would be valuable) but it’d also be nice to check for mechanical interference through entire range of motion of all joints.
    • Physical simulation to verify nothing has disconnected or hovering unsupported in space.
    • Mechanical simulation to verify all parts are still thick enough to support their intended loads.
    • Many more ideas! My imagination can run pretty far in this direction.
  • Document: And looping back to the earlier series about written documentation, CAD changes could require updating documentation to ensure information does not go stale and out of sync. For Sawppy documentation right now I have to remember to make updates manually. This is an error-prone process that has caused headaches for other rover builders as they read instructions that made no sense because I only remembered to update one place and forgot another. Computers should be able to help with the following tasks:
    • Update the construction BOM (Bill of Materials) to reflect CAD changes. (*)
    • Update illustrative figures in documentation by generating new CAD renderings.
    • Flag associated text for “is this still accurate” manual review to ensure they are not overlooked.

I don’t expect Onshape, Fusion 360, etc. to make this level of functionality freely available to makers. At this point my best hope is to find like-minded people who have done this kind of work in the open-source world. Failing that, I would have to learn an open-source CAD tool like FreeCAD and try to extend it. This will be a huge project far bigger than Sawppy itself!

(*) This exists in professional tier of Onshape, but not at the free tier.

Miniware Soldering Iron (TS80P)

Following successful initial tests with Miniware’s little hot plate MHP30, I went ahead and bought another product that I had been curious about. This is the Miniware TS80P soldering iron, which I bought through Adafruit as item #4244. I’ve read positive comments on this little USB-C powered wonder through Hackaday and other sources. And I like the idea of having a small soldering iron I could take to events like LayerOne to join in electronics fun.

User interface for TS80P closely resembled that for the MHP30 hot plate, running on a small OLED with two buttons. Since they’re both small USB-C powered heating devices, I suppose there’s a chance they’re running mostly (or possibly exactly) the same firmware code. I’m not a huge fan of their interface, as there are only two buttons whose functions vary depending on context making it hard for me to remember what each button would do at any given time. With time I suppose I will get used to it, and most of the time I just want to turn heat on/off so I doubt the interface would be a long term hinderance.

I had also hoped that the nature of USB-C power meant I could use this soldering iron away from a power socket, which would be useful if I need to perform field repairs on my Sawppy rover. Unfortunately, I can’t do that just yet. I own a few battery power banks with USB-C output, but none of them could support the voltage and amperage demanded by this little soldering iron. If I want to add this to my Sawppy field repair kit, I will have to buy a power bank capable of 12V 3A via USB Power Delivery.

A quick test soldering a 7-pin 0.1″ header went smoothly with neither good or bad surprises. Using this little pen-sized iron felt strange because I’ve become accustomed to holding a much larger iron when soldering. But aside from heat insulation, I don’t know of any fundamental reasons for a soldering iron to be big. Some people prefer the light weight and compact size maneuverability of a small iron, switching to these little guys as their primary soldering iron. I don’t know if I would make such a change, time will tell.

Monoprice 30W Powered Desktop Speakers (605300)

Encouraged by my resurrected Insignia powered subwoofer, I dug up another item from my to-do list. These are Monoprice Pro Audio Series 30W Powered Portable Speakers, item #605300. (No product link as this item has long since been discontinued, though their Powered Desktop Speakers category is still alive and well.) I had bought it for use as my computer desktop speakers and they worked well for a few years before falling silent. Then they sat for many more years in the teardown/repair pile until now.

The two speakers are not symmetrical. One of them have all the equipment and the other is a simple box with drivers. The fancier box (wired up to be the right channel but shown to the left in above picture) has a volume knob and two audio jacks. One jack is an auxiliary input to temporarily replace signals coming in from rear main audio input, and the other a headphone jack we can plug in to temporarily listen to something privately. This latter jack still works: I could hear the audio signal through headphones plugged into this jack, and I can hear loudness changing as I turn the volume knob.

The asymmetry is very visible when looking at the rear of both speakers. One has the power plug and switch, plus the aforementioned main audio input. A slider switch for “Bass Boost” On/Off (I never noticed much of a difference either way) and speaker level output to drive the other speaker.

The volume knob is surrounded by a ring of plastic that glows blue when it is powered on. This light still illuminates, so I don’t think the problem is as simple as a blown fuse.

Looking inside the simpler box first, it’s hard to see very much through the small opening. The electronic bits we could see is probably an audio crossover circuit.

Moving on to the other speaker, we see a lot more and thankfully they’re more accessible as well. AC power enters the enclosure to an in-line fuse. (I didn’t think the fuse was the problem, but I checked anyway and there is indeed electrical continuity.) Power then flows to a transformer which steps ~120V AC down to ~14V AC. This stepped-down voltage connects to the circuit board, adjacent to a large four-pin package that looks like a rectifier.

Four sets of wires lead from this board into the speaker enclosure. The smallest and thinnest pair of wires go to the smaller speaker driver for higher frequencies, and the thicker pair goes to the larger driver. Two gray bundles lead to front-panel controls, one for the volume knob/power LED and the other for the auxiliary/headphone jacks.

Examining the circuit board, I see discoloration underneath these two components. Labeled Z1 and Z2 with diode symbols, I infer these are Zener diodes. Z2 was held down by a white-colored compound of unknown nature. That stuff was tenacious and refused to peel off, but I could cut it with a knife allowing me to unsolder both Z1 and Z2. Once removed I could read diode markings as IN4742A, confirming they are Zener diodes. I don’t have any replacements on hand, but I could give these two a quick basic test. With my multimeter switched to diode test mode, they read ~0.72V the one way and nothing the other. These are expected values of a diode proving they have neither failed open nor failed short. Circuit board discoloration showed that they’ve been running hot, but that fact by itself is not necessarily a problem with Zener diodes. A full diode test is beyond my abilities at the moment, so I soldered them back into the board and tested the speaker again. I had a slim hope that heat stress damaged a solder joint and resoldering them would bring the speaker back to life. No such luck, but it was easy to check.

Next, I looked into the still-functioning headphone jack. The speakers would go silent when audio is going through the headphones. Perhaps the jack is stuck in the “we have headphones” configuration. This would keep the speakers silent even when there are no headphones present. Unfortunately, the audio jacks are mounted on this circuit board, glued to the enclosure. Breaking the board free may be destructive, so I put this off to later.

Looking for promising components to investigate, I settled on the audio amplifier chip. It is a big component with large pins that I could probe, and its markings are visible for easy identification. I found and downloaded the datasheet for ST Electronics TDA7265 (25+25W Stereo Amplifier with Mute & Stand-By) and got to work understanding how it was used here.

I printed out a picture of the circuit board (*) so I could take notes as I probed the board (with the power off) while comparing it to TDA7265 datasheet information. The first order of business was looking for pins 1 and 6, which the datasheet said were both negative side of input power. I found those two pins connected to the same copper trace on the board leading to one pin of the rectifier, giving me confidence that I’m looking at the right part and I am oriented in the correct direction. I noted the pins I wanted to check once I’ve powered on the board:

  • Pins labeled R+ and R- should be DC power rectified from the ~14V AC transformer output. If there’s no voltage, I may have a dead rectifier.
  • There are two inputs, each with their positive and negative pins. I’m not sure which is wired as left and which is right, but I can connect a stereo signal to both input jacks. I should see line level voltage if audio signal makes it to the amplifier chip. If not, I can backtrack from here.
  • If audio makes it to input, I will probe Outputs 1 and 2, which should have speaker level voltage relative to a shared ground.
  • If there is input signal but no output, I will probe pin 5 which controls mute & standby behavior. See what voltages I read, and compare behavior to what datasheet says.

With this plan in hand, I prepared my tools. My LRWave web app written earlier for Lissajous experiments will provide test input signal. For probing the circuit, I have my multimeter and I have my oscilloscope. As a quick test, with the power still off I probed the audio input jacks while LRWave was running full blast. I measured ~0.6V AC on those pins (in the above photo, labeled in the lower right as “R IN, R GND, L IN, and L GND”.) This is a great start. I then turned on the power strip (powering up the speaker) and was immediately blasted by the sound of LRWave’s 440Hz sine wave.

The speaker works now! That is great, but… why does it work now? The last hardware modification I deliberately made to the device was to resolder Zener diodes Z1 and Z2. I tested the speakers then, and it didn’t make any sound. I must have made another (non-deliberate) change to the hardware to bring it back to life. Was it reaching for the audio jacks and jiggling a loose cable connection? Was it something I did by accident while probing the amplifier chip circuit? I don’t know. The speaker works again, but this success was unsatisfying. I wouldn’t call it “repaired”, either, as I can’t explain how I fixed it. It could just as easily and mysteriously break again tomorrow. But if it does, at least I have a plan to investigate for Round 2.

(*) The lone surface mount IC visible on this side is a ST TL074 quad op-amp.

Sawppy at Space-Themed Episode of Hangout & NERDOUT

Roughly twenty-four hours from now, around December 15th, 2022 7PM Eastern time (4PM Pacific) I should be starting a chat with several other makers on a space-themed episode of Hackster.io/Make Hangout & NERDOUT. I will be one of three guest nerds invited to talk about their space-themed projects. Sawppy the Rover will be my topic for a ten-minute presentation, alongside similar presentation by the other guests. Then it’ll be an open Q&A where people can ask questions of the presenters (and presenters ask questions of each other!)

Sawppy has been a great adventure and it will be a challenge to compress the full story down to ten minutes, but I’ll give it my best shot. There’ll be a bit of Sawppy’s past, some of rover present, and a look towards the future. The Q&A session will be very informative at telling me which aspects of Sawppy catches people’s interest. Or if one or both of the other two presentations turn out to be more interesting to the audience, that’ll tell me something too!

Hackster.io landing page for the event: https://www.hackster.io/news/hangout-nerdout-ep-4-on-december-15th-goes-out-into-space-b633c0b485e8

The rudimentary PowerPoint slide deck I created for this event is publicly visible here: “20221215 Hangout Nerdout

Links shared over chat during the event (for all presenters, not just Sawppy): https://www.one-tab.com/page/OINy1FRqQiKasbZWUjtaww

The Zoom Events session was recorded, and I believe the intent is for it to be published at some point in the future. When that happens, I will see if I can embed the video here.

Hamilton Beach Coffee Grinder (Type CM04 Model 80344)

The coffee drinker of the house has upgraded to a burr-type grinder for coffee beans, retiring this well-used unit which is now on the teardown bench.

It’s more accurately a coffee bean chopper, since it spins a set of blades to break them apart.

Cracks have started developing on its blade hub, which might be related to why one of the two blade tips drag on the bowl carving a channel. (Slightly out of focus in above picture.)

Mechanically, I’m curious to see implementation details for the cord management system built into the base. I expect the rest of the machine to be a shell around an AC motor spinning the blade.

I peeled off three rubber feet expecting to find fasteners hidden underneath, but there was nothing.

The base was actually held in place by a plastic retaining mechanism in the center. After popping off its smooth cosmetic cover, we could grasp the retainer to unlock it with a twist. Then the retainer could be removed, which released the base.

Power cord reel is visible after base was removed.

This little piece of plastic towards the end stops power cord from unwinding further, bumping up against a retaining ring. This retaining ring is held in place by four hooks. Gripping the ring with pliers and twisting clockwise a few degrees to slide past the hooks allowing removal of ring and power cord reel.

I was surprised to find a slip-ring style arrangement of metal rings and fingers. I had expected to see a very clever arrangement of bent and creatively routed wires to support power cord reel rotation without the parts count and complexity of a slip ring. I was wrong: it’s a slip ring.

Underneath the slip ring we see the first (and it turns out, the only) signs of traditional fasteners. Three Philips-head fasteners around the outside keep the motor frame in place.

What looks like a flat-head fastener in the middle is actually the motor shaft.

Putting a flat-head screwdriver on the motor shaft allows us to control its rotation and remove the blade. After blade removal, the motor could be maneuvered out the bottom.

With the motor out of the way, we could pry on plastic clips holding top ring in place. This one shows several scars from my efforts to release it.

With the ring removed, the control circuit slides out the top.

I had not noticed the safety interlock switch until I saw wires leading up to it. This ensures the lid must be in place before the blades would spin. It’s pretty clogged with coffee grounds which will eventually cause it to become unreliable.

The heart of the machine is a motor with the following printed on it:

120V 60Hz

A web search found Hondaraya Engineering is a Hong Kong company, small enough of an operation that web search engines helpfully suggested I probably meant Honda the Japanese manufacturing giant. I wonder if Hondaraya was responsible for just the motor or if they were contracted by Hamilton Beach to engineer the entire grinder.

I was impressed by how this machine was designed. At its core, a pretty simple machine: a motor spinning a blade. The design and engineering team nevertheless devised a compact cord management system at the bottom. And it was held together almost entirely by cleverly designed plastic retaining mechanisms, the only exception were the three screws holding the motor frame in place. The lack of glue should mean easy assembly and repair, though replacement parts are not sold for this device. I never did find a good explanation why one blade tip has been dragging on the bowl. If a replacement blade were available, it would have been easy to replace and test to see if that would address the problem.

Capacitor Replacement on Insignia 100W Powered Subwoofer (NS-RSW211)

My home theater had a small powered subwoofer, an Insignia NS-RSW211 Rocketboost 6-1/2″ 70W Wired/Wireless-Ready Subwoofer. After several years of use, it started exhibiting some strange effects and I disconnected it. Since I’m not a huge home theater buff and it was a modest unit to begin with, I didn’t really miss its absence. It sat forgotten in a corner until I saw Monoprice held a sale on their item #8248, a similar-sized powered subwoofer that would be a great replacement. Before I hit “Buy” on the Monoprice item, though, I thought I should make an effort to fix the one I have.

The failing symptoms indicate an intermittent connection somewhere in the system. When I turn on the subwoofer, it is fine for the first few minutes. After that initial period, sound would start cutting in and out at irregular periods. Every time it cuts out, the low bass sounds disappear. When it cuts back in, a deep “thump” announces return of low frequencies. This would start out tolerably infrequent, like hearing a distant firework show. Interruptions then become increasingly frequent. Eventually it will sound like automatic weapons fire in the background even when we’re not watching an action film, at which point I would turn it off. After a few hours of rest, I could repeat the cycle. Intermittent issues are always annoying to diagnose (part of why I’ve been putting it off) but I should at least take a look. On to the workbench it goes!

There are a lot of fasteners visible on this back plate. This is not a huge surprise: a subwoofer’s job is to push those low frequency thumps. Each thump will rattle anything not securely fastened, and every thump will be trying to loosen every fastener. In fact, the large numbers of fasteners are quite welcome: if it had been glued together, opening it up would be a destructive act making a successful repair unlikely.

But it wasn’t glued, so I could get to work. Removing the outermost eight fasteners allowed me to remove the rear module. I was a little surprised to see all electronics were sealed inside an airtight box. This might be good for acoustics but bad for air cooling circulation. The only thing poking into the acoustic chamber are the pair of speaker wires going to the driver itself. They used commodity spade connectors and were easy to disconnect so I could focus on the electronics box.

Removing the next outermost set of six fasteners allowed me to open up the electronics box. I was greeted with the thick stench of fried electronics. Something definitely died in here and, if it smelled this strong, I should be able to see it.

Yep, there it is. Capacitor C28 is toast. Finding this dead capacitor is good news, much easier than diagnosing an intermittent issue. The bad news is I’m not familiar enough with power supply theory of operation to explain why this absolutely and completely dead capacitor would cause an intermittent failure.

One end has completely blackened and appears to have broken open as well.

The yellow circuit board appears to be the power supply subsystem. 120V AC power cable (black & white wires) goes to the power switch, then into one corner of this yellow board near the dead capacitor. Diagonally opposite them is this connector delivering +24V to the rest of the subwoofer.

Unplugging AC input and DC output wires, then removing four screws, allowed removal of this power supply board so I could unsolder the dead capacitor easily. It came off in two separate pieces, very dead.

Reading markings on the charred capacitor carcass was a challenge. After playing with lighting, camera settings, and photo editing, I could make it out as:


I’m not familiar with this type of capacitor and didn’t know how to interpret those numbers. Looking around online, I found this page which said “105” meant 10 * 105 pF = 1000000 pF = 1000 nF = 1 uF and the “K” meant +/- 10% tolerance. The voltage rating portion didn’t line up with anything on that page, though. I’m inferring that “250KC” means something that can handle up to at least 250V, as this device can take up to 230V AC input.

Looking around my various assortment trays of capacitors, I didn’t find anything +/- 10% of 1uF. I then looked through my pile of teardown remnants for capacitors to salvage. The closest candidate was a 0.68uF 450V capacitor from the Antec power supply that caught on fire.

It even had the same footprint as the original toasted capacitor, making for an easy fit in the available space. However, 0.68uF is still short of the capacitance of the original so I continued looking.

I found a 0.22uF 250V capacitor inside the surprisingly complex evaporator fan. There was a clear conformal coating over everything that made removal a bit of a pain (and the result looking messy.) But they gave me a theoretical 0.68uF + 0.22uF = 0.90uF and my multimeter says they’re actually a tiny bit above rated value. Bringing me within 10% of 1uF, good enough for a test run.

Since the original capacitor slot was already occupied by the 0.68uF capacitor, the second parallel capacitor had to sit on the back.

I buttoned everything back up and preliminary test looks promising. After playing through a two-hour movie, I have yet to hear the thumping “fireworks” to “gunfire” failure sequence. Still unknown: what killed the original capacitor, and whether the same will happen to these replacements. Time will tell. In the meantime, I’ve managed to keep something out of landfill and resisted the temptation to buy a Monoprice powered subwoofer on sale. I’m thankful the design & engineering team built this device in a repairable way.

High Power 600W Power Supply (HP1-J600GD-F12S)

Along with the “keyboard is broken” laptop, I was also asked to look into a mid-tower PC that would no longer turn on. I grabbed a power supply I had on hand and plugged it into the motherboard, which happily powered up. Diagnosis: dead power supply. I bought a new power supply for the PC to bring it back to life, now it’s time to take apart the dead power supply to see if I can find anything interesting. Could it be as easy as a popped circuit breaker or a blown fuse?

According to the label, the manufacturer has the impossibly unsearchable name of “High Power”. Fortunately, the model number HP1-J600GD-F12S is specific enough to find a product page on the manufacturer’s site. The exact model string also returned a hit for a power supply under Newegg’s house brand Rosewill, implying the same device was sold under Newegg’s own name. Amusingly, Newegg’s Rosewill product listing included pictures with “High Power” embossed on the side.

If there is a user-replaceable fuse or a user-accessible circuit breaker, they should be adjacent to the power socket and switch. I saw nothing promising at the expected location or anywhere else along the exterior.

Which meant it was time to void the warranty.

Exterior enclosure consisted of two pieces of sheet metal each bent into a U shape and held together with four fasteners. Once pried apart, I had to cut a few more zip-ties holding the cooling fan power wire in place before I could unplug it to get a clear view at the interior. Everything looks clean. In fact, it looked too clean — either this computer hadn’t been used very much before it blew, or it lived in a location with good air filtration to remove dust.

Still on the hunt for a circuit breaker or a fuse, I found the standard boilerplate fuse replacement warning. Usually, this kind of language would be printed immediately adjacent to a user-serviceable fuse. But getting here required breaking the warranty seal and none of the adjacent components looked like a fuse to me.

Disassembly continued until I could see the circuit traces at the bottom of the board. Getting here required some destructive cutting of wires, so there’s no bringing this thing back online. Perhaps someone with better skills could get here nondestructively but I lacked the skill or the motivation to figure things out nicely. I saw no obviously damaged components or traces on this side, either. But more importantly, now I could see that 120V AC line voltage input wire is connected to a single wire. That must lead to the fuse.

Turning the board back over, I see the line voltage input wire (brown) connected to a black wire that led to a cylinder covered in heat-shrink tubing and held in place by black epoxy. The shape of that cylinder is consistent with a fuse. The heat-shrink and epoxy meant this is really not intended to be easily replaced.

Once unsoldered, I could see the electronic schematic symbol for fuse printed on the circuit board. The “F” in its designation “F1” is consistent with “Fuse”, as do the amperage/voltage ratings listed below. This fuse is a few centimeters away from the caution message I noticed earlier, which was farther away than I had expected. My multi-meter showed no continuity across this device, so indeed the fuse has blown. I cut off the heat-shrink hoping to see a burnt filament inside a glass tube, but this fuse didn’t use a glass tube.

I started this teardown wondering if it was “as easy as a popped circuit breaker or a blown fuse”. While it was indeed a blown fuse, a nondestructive replacement would not have been easy. I don’t know why the fuse on this device was designed to be so difficult to access and replace, but I appreciate it is far better to blow a fuse than for a failing power supply to start a fire.

Zalman 120mm Case Fan, Clear with Blue LED (ZA1225CSL)

After years of faithful service, this particular cooling fan has worn down to a point where it would vibrate noisily, its associated friction dragging down fan blade speed. Time for me to retire it but not before subjecting it to a teardown.

Sticker on the back says it is a Zalman model ZA1225CSL.

This particular fan was cast in clear plastic and has embedded blue LEDs for visual novelty.

Four LEDs are angled such that they turn fan blades into LED light pipes creating an illuminated arc while the fan spun.

A glued-on clear cover hides the LED within. Getting good leverage on this cover is tough with the fan blades in place, so I’ll work on removing the fan first.

A razor blade made quick work of the rear sticker.

Under the sticker, we can see fan motor shaft held in place by a small white plastic ring.

Remove the ring (not terribly visible against a white background, I admit) and the fan hub slides free. Despite the racket it has been making, I see no obvious signs of wear on either this fan hub shaft or the hub bearing. I guess a tiny amount of wear was enough for the system to start wobbling.

It was easy to break those LED covers free once fan blades were no longer in the way.

The blue LEDs appear to be standard 3mm diameter units, powered by wires that were glued into channels molded into fan hub support beams. Pulling them free destroyed the clear insulation on those wires. Given how affordable LEDs are now, there’s not much point trying to salvage these LEDs beyond trying to see if I could. I had a 75% success rate: one LED out of four was torn off its wires, oops.

I removed the fan hub, and it appears this chip is in charge of the operation. Marked FTC S276.2QD, a web search found this to be the FS276 two-phase DC motor control chip by FTC. The website indicates Feeling Technology Corp is a Taiwan-based semiconductor company. The chip’s datasheet shows an integrated hall effect sensor, which explains why it is positioned to pick up magnetic field of the fan rotor. It has four pins: power on one end, ground on the other, and sinks for two motor phases.

The single-sided circuit board marked ZB111228 implemented the FS276 datasheet circuit with a few additions. Around the perimeter, we have pads for the four blue LEDs, each connected to power and ground through a current-limiting resistor marked with 681. I believe this means 68 * 101 = 680 ohms. We also have a transistor, connected to one of the two motor phases, to communicate tachometer signal.

I will likely find a use for the three-conductor wire with PC cooling fan connector on one end. I might stick the blue LEDs on a future project just for laughs. The motor control circuit board will go to electronic recycle. All the clear plastic will go to landfill.

Google Pixel 7 Camera Off-Axis Blur in Closeups

Thanks to Black Friday sales, I have upgraded my phone to a Google Pixel 7. My primary motivation was its camera, because most of the photographs posted to this blog were taken with my cell phone (Pixel 5a) camera. Even though I have a good Canon camera, I’ve rarely pulled it out because the cell phone photos have been good enough for use here. By upgrading to the Pixel 7, I hope to narrow the gap between the phone camera and a real Canon. So far it has been a great advancement on many fronts. There are other phone camera review sites out there for all the details, but I wanted to point out one trait worse than my Pixel 5a. It is specific to the kind of photos I take for this blog and not usually covered by photography reviews: with close-up shots, the image quality quickly degrades as we move off-axis.

I took this picture of an Adafruit Circuit Playground Express with the Pixel 7 roughly fifteen centimeters (~6 inches) away. This was about as close as the Pixel 7 camera was willing to focus.

The detail captured in the center of the image is amazing!

But as we get to the edges, clarity drops off a cliff. My Pixel 5a camera’s quality also dropped off as we moved off-axis, but not this quickly and not this badly.

For comparison, I took another picture with the same parameters. But this time, that GND pad is the center of the image.

Everything is sharp and crisp. We can even see the circuit board texture inside the metal plated hole.

Here are the two examples side by side. I hypothesize this behavior is a consequence of design tradeoffs for a camera lens small enough to fit within a cell phone. This particular usage scenario is not common, so I’m not surprised if it was de-emphasized in favor of other camera improvements. For my purposes I would love to have a macro lens on my phone, but I know I’m in the minority so I’m not holding my breath for that to happen.

In the meantime, I could mitigate this effect by taking the picture from further away. This keeps more of the subject in a narrow angle from the main axis, reducing the off-axis blur. I would sacrifice some detail, but I still expect the quality to be good enough for this blog. And if I need to capture close-up detail, I will have to keep this off-axis blur in mind when I compose the photo. I would love a sharp close-up photo from frame to frame, but I think I can work with this. And everything else about this Pixel 7 camera is better than the Pixel 5a camera, so it’s all good!

Micro-Mark 2″ Self-Centering Machinist’s Vise

For my workholding needs, I have been using the most affordable vise from Harbor Freight: Item #30999 4-inch Drill Press Vise. It was a huge improvement over holding things by hand, but it wasn’t great, and I’m ready for an upgrade. Now I have Micro-Mark’s Item #87469 2″ Self Centering Machinist’s Vise with Swivel Base and first impressions are promising.

The Harbor Freight vise was sufficient for most tasks. The most important feature were removable jaws: I designed and 3D printed many custom jaws to hold pieces of various projects. Once I’ve clamped something down, it stays put, fulfilling the point of a vise. My problem was that the sliding jaw had quite a bit of play along its motion. This caused two problems. First: the tiny amount of play in its motion means it can be difficult to clamp something exactly where I want it. As I tighten the vise and take up slack in its play, those jaws might shift a tiny bit which also shift position of my workpiece. Second: this vise expects all forces to be downward, which is reasonable for a drill press vise. But sometimes my drill bit would pull on the work piece as it drilled, and that would lift the workpiece and sliding jaw upwards a tiny bit as well. Most of the time this isn’t a problem, but every once in a while, that upwards lift ruins things.

When it comes to tools, precision costs money. The Harbor Freight vise was very cheap so its flaws were reasonable. To gain better precision I would have to move into the realm of vises designed for metal machining work. (And spend more money.) A 6″ vise is the standard baseline machining vise but that is overkill for my needs. (Example: Kurt DX6) I didn’t see anything promising on the Harbor Freight catalog, so I looked into the Micro-Mark catalog for accessories alongside their small metalworking mills. I started by looking at their Item # 82577 Quick-Lock Milling Vise, but that vise didn’t appear to have removable jaws. Then I looked at Item #21134 Toolmaker’s Vise which had removable jaws, but the geometry of the design gave me concern. All the machinist vises I’ve looked at had their leadscrew below the working area, so that a portion of clamping force is also directed downwards to resist upward pulls. I’m not certain #21134 does that. The only vise that seems to meet all of my requirements is Item #87469 2″ Self Centering Machinist’s Vise with Swivel Base. I didn’t particularly care about the self-centering aspect, but everything else looked promising.

A few days later it arrived in a well-padded box. The vise itself was coated in oil, sealed inside a plastic bag to avoid oil leaking into the shipping materials. I can confirm smooth confidence-inspiring movement in the jaws, which are removable as required. Even though both jaws move instead of just one moving, they still had far less free play combined than the singular jaw of the Harbor Freight vise. The resistance to upward lifting forces is still a question mark until I really put it to use, but I’m satisfied with everything else.

The only criticism is the handle, which extends below the level of the base. When I bolt this vise to a surface, I might not be able to crank it all the way around unless I make sure it dangles over an edge. Otherwise I would have to remove the handle and reinstall it at a different angle for every turn, which could get annoying. I’m not sure how serious of a problem this will be in practice, time will tell.