Klipper Expander

Klipper Expander

After building a few 3D printers I realized how nice it would be to have a control board for just some heaters or lights with some temperatures sensors and GPIO pins. After tinkering in KiCad for a bit on some other projects (Nano Display Adapter and a flat-flex display breakout), I realized that this could be a viable project.

Looking around and talking with other users in the VORON CoreXY 3D printer discord I settled on 4 Mosfet outputs, 2 thermistor inputs, I2C header, 1 level-shifted NeoPixel output and an SWD header for easy debugging. The STM32F042F6P6 was selected as it was already known to work with the Klipper 3D printing firmware as well as having enough memory for the project in addition to having a direct USB connection so no USB to UART chip was needed.. Micro USB was chosen for its availability and

The initial design was to be a squarish board with the 4 mosfet outputs on the left side with the USB and SWD headers on the right. 20-TSSOP package was picked as it allowed for the easiest assembly by hand as this board is intended to be easily manufacturer by hand without needing a hot air station or reflow oven. All resistors, capacitors and LED’s are to be 0805 or larger with other components selected for availability on JLCPCB’s SMD assembly tool and Digikey/Mouser. The board uses a mini-blade fuse that is common on the SKR series of control boards and allows for easy replacement should the need arise.

Un-produced version of the Expander from Jan 2020. Includes all sub-circuits and part information but lacks mounting holes.

After looking at the layout for the Expander and discussing with a few other people, we decided that it would make more sens to have the board transition to more of a thin rectangle shape to allow for most of the outputs to be on one face making mounting and wire routing in a printer easier.

STM32 Klipper Expander.png
Official V1 of the Klipper Expander

The final design layout has moved to a 100mm x 25mm PCB with mounting holes spaced 92mm apart (4mm in from each corner). This allowed for much easier routing as the Vin and all mosfet outputs come out the top as well as the USB Micro-B connector. The board was sent to JLCPCB to have boards made and SMD assembled with the BOM and Centroid files generated from KiCad.

The first run came back and as JLC doesn’t assemble through hole parts or the USB connected (doesn’t have any in stock). after a bit of careful hand soldering and checking with a multi meter I had the USB connector soldered in. Now, at this point I realized that i REALLY hadn’t figured out the software/flashing side of things. Fortunately, another member of the group had ordered some boards and with his help I was able to see the device on the Raspberry Pi thought lsusb as STM Device in DFU Mode. The board was also detected through dfu-util --list as device ID 0483:df11

Setting klippers make menuconfig options and running the make command returned no error and i was able to flash the device by specifying its ID as the FLASH_DEVICE parameter.

The board had the klipper firmware on it and now was detected with it’s own unique ID from the STM32 chips serial number. /dev/serial/by-id/usb-Klipper_stm32f042x6_050028000E43504735393520-if00

The board has been installed in my V2 for a few months no with no issues. It currently controls my case lighting, exhaust fan as well as a chamber thermistor. I plan on adding some NeoPixels to the V2 at some point and will use the expander to control them.

Wilson II Initial Build

I decided to build a second printer after realizing the frame of the I3 had a bit of flex in it and without the frame being anchored to a base plate it would rock on fast print moves.

I originally came across the Wilson by MJRice and liked the aluminium extrusion frame and larger 200x300x200 build volume.

Wilson TS reference photo from Github

I had printed about 99% of the parts when i was checking on the final BOM and saw that Martin had made a new Repo on his github named “Wilson 2”.

After seeing this upgrade and noting the stiffer frame, more robust linear rods, lead screw Z-drive, and non-ATX power supply, i decide that i would shift focus to the newer Wilson II design. Having to reprint all the parts was a pain but it gave me more time to dial in the I3 for better prints. Printed in translucent green PLA, the parts were completed in a few weeks with a few failures and a lot of learning.

I3 Rework Initial build

This printer was designed and built in 2014 after 2 years of watching and learning about the 3D printing community.

I chose the I3-rework for its abundance at the time as well as the basic simplicity of the parts needed. After a few eBay purchases for the 3D printed parts, motors, and electronics, a few more on Amazon for the ramps board and belts, I made a trip to the local hardware store. There, I was able to source the nuts, bolts, and threaded rods but couldn’t find 8-mm smooth rod anywhere that wasn’t prohibitively expensive. After visiting a friend for an unrelated project, we happened to look through his basement and found some metal in his father’s stock rack that looked correct. Taking it home it was a perfect 8 mm and is still installed on the printer to this day.

As you can see hear, the initial tuning wasnt PERFECT

Once the printer was assembled I started to learn more about why the prints were failing.

  1. The hotend cooling fan actually needs to be ON to properly cool the hotend and prevent jams.
  2. Bed leveling is a thing
  3. Prints stick to thin plywood AMAZINGLY… even a bit TOO well and they NEVER come off.

My next addition was going to be a better bed leveling setup and a heated build plate with a proper build surface.