3D Printer upgrades

2025-01-06

I own a 2017 CR-10S, which is a weird sub-model of the creality CR-10 that has a few minor improvements, but then creality ended up releasing another CR-10S that has an entirely different build. For all intents and purposes, the one I got can be treated exacly like a CR-10.

I found a 3D printer of my own to be an extremely useful tool in my month-to-month activities. As in, every now and then I need a plastic part/component that is either custom-designed by me OR can be bought off-the-shelf, but is both cheaper and doesn't require a trip to town to acquire.

So, to start things off, I wanted to upgrade the software package of the printer, because I kept hearing good things about the klipper firmware, but, I wasn't sure if the cr10 that I had was supported, since I couldn't find an official 'supported/unsupported' list anywhere, I had to commit.

So, the way that newer printers handle things these days is that there is a host computer, running some sort of webUI that conntects via USB serial to the MCU of a 3d printer, (the cr10s mainboard relies on an atmega2365 iirc), which is running klipper, which is supposed to be highly configurable via it's serial interface, thus offloading most of the relevant config work and computing over to the far more capable host computer, at least that's how things are looking like after spending half a day learning about it.

The firmware upgrade itself went.. decently. I had issues with the raspberry pi I ended up using. I could not get it to run reliably due to the fact that I was using an underpowered power supply, and I didn't have a capable one on hand. I don't know how the mechanics of it all played out, but hooking up an HDMI output from a powered monitor ended up making the rpi work reliably enough to setup and test the printer management interface.

At this point, the webUI that came with mainsailOS was running, but it was complaining about not being able to talk to the printer. I had to compile klipper and flash it to the cr-10. I honestly thought it would be far more hassle than it acutally ended up being. I just had to connect the raspi to the printer, make menuconfig to select the right MCU model, and make flash FLASH_DEVICE=/dev/serial/by-id/usb_device_id. After a reset, I knew I'd done something right when the control box LCD had suddenly lit up with an entirely new UI.

After that, I had another task ahead of me -- finding the right printer configuration. I had to realize that for some unknown reason, the CR-10 config that was present in the filesystem was in fact not the right config. I had dissasembled my printer's control box earlier to find out which MCU i had, so I knew that i was running an atmega 2xxx, and the printer config I had was asking me to configure the firmware flasher for an atmega 1xxx, I later found a seemingly correct version of the config in the klipper github repository. I copied that over to the raspi, re-read the docs to find the right place to put the config in and reset my system.

By now, I was hoping to get a benchy going, but the webUI was still unable to talk to the printer. After a bit of digging, I found an issue issue where the daemon that talked to klipper over serial was throwing errors and not opening up a socket that the web interface was looking for as it's link to the printer. System logs revealed a python backtrace. I figured it was a software bug. I also figured that a system update would fix it. I was right.

I sliced a benchy, I uploaded it with reckless abandon and I hit print. Things went smoothly from there, but.. honestly, I shouldn't have gotten away with it. There was a very real risk of me damaging my printer. If the config was wrong in any way, the thermal controller could've had wrong values (and thus overheating the hotend/build plate), the limit switch pins could've been set wrong (the printer would try to break itself upon axis homing), the motion model could have been wrong, the axis could have been mixed up, so on and so forth. A lesson for my future self to not pull shit like this going forward.

After a successful benchy print, I'm only left with tuning. With the time that I had left in the day, I only managed to tune the extruder to produce cleaner corners.

But now, i'm not sure if should bother, I want to modify the hardware of the printer as well to be more compact and comfortable to use. I'm also looking into replacing the CR10's bowden extruder with a direct drive one, so I could print flexible filaments easier.

Doing any sort of major hardware modifications to the printer means that I'll also have to re-tune it.

So, for now, I'm looking into printing hardware upgrades.

NOTE: for posterity's sake, i used these as reference documents: https://www.klipper3d.org/ https://docs-os.mainsail.xyz/getting-started


2025-01-07

Was out for the first half of the day; spent the latter half printing out these: https://www.printables.com/model/154051-cr-10-precision-thumbdial

My first attempt at printing these knobs at 0.2mm layer hight came out with a lot of underextrusion.

Likely caused by the pressure advance setting I calculated yesterday. I reduced it from 0.69 to 0.5.

Up next is finding a good set of quick-adjust belt tensioners in order to get my belt tension dialed in, because my prints are displaying another issue -- subtle, consistent, 2mm spaced wobbles along the Y axis.

They're called VFAs, or Vertical Fine Artifacts. My prints come out with having them be entirely vertical regardless of the angle of the print itself, which indicates sub-optimal belt tension.

Source for the above: https://ellis3dp.com/Print-Tuning-Guide/articles/troubleshooting/vfas.html

So, next on my to-print list is a good set of quick-adjust belt tensioners.

The printer is still running on the hodged raspberry pi. I haven't looked into a better PSU yet, but I have looked into finding a nicer case for the raspi.

I also need to remind myself to reconfigure the raspi to instead use wi-fi instead of the ethernet connection. There is currently a cable drooped across the room from my network cabinet to the printer.

I also decided to look into how to change the UI of the LCD out of sheer curiosity. Turns out i don't even have to modify the firmware, it's all in the config, but I started that journey for knowledge off at the lowest level, by looking into the klipper firmware itself and the entire LCD driver from the firmware to the python code running on the raspi is less than a thousand lines of code. Delightfully simple. I'm glad to know that i'll have no trouble making custom modifications to the firmware if I ever need to.

As I wrote this, i realized that it would be nice to have some sort of quick-status system on my desktop for the state of my 3d-printer. I.e., a simple percentage bar that shows how far along my print is. This should be possible thanks to moonraker.


2025-01-08

Bed level adjustment wheels are complete, but not yet installed.

Found these X and Y axis belt tension adjusters online:
https://www.printables.com/model/604330-cr-10-belt-tensioner-y
https://www.printables.com/model/605118-cr-10-x-belt-tensioner

Set them out to print at 0.16 layer height with 100% infill with PLA. The print is going to take a while.


2025-01-12

I left the project for a day because I was distracted a bit. Getting those tensioners printed was a pain in the ass. The housings were .. terrible to print.


2025-01-13
Today I attached all of the recently printed components to the printer. I did have to find some new hardware to use with the new belt tensioners, just different length bolts mostly.

As for setting the tension, I used a spectrum analyzer on my phone and i plucked the belts after setting them up so i was plucking at a length of 15cm. Documentation stated to aim for 110hz from the belt, and that's what I set my tensioners to.

The Y axis tensioner was actually really nice to use. The X axis tensioner wasn't as nice, i'm consdiering reprinting it as well because I think that the tensioner is designed for a smaller size bearing and smaller screws too.

I've also took the time to clean up my build plate and install the leveler knobs i printed. Gotta say, bed leveling is far easier now. However, i still think that I need a touch probe, because the glass pane i'm using is not actually level by itself. I noticed a 'dip' across the western edge of the plate, going from north to south.

So, even with a seemingly well-leveled bed, a touch probe would be a useful addition here.

After installing everything, the first practical print is for a raspi case that would attach to the printer. The klipper host is still sitting loosely about a meter to the side, away from the printer. I laid a pair of pliers on it's GPIO pins and left it like that for an hour or so. Luckily, nothing blew up.


2025-01-18

After printing the belt tensioners, i've decided to move onto converting the CR-10 into a standalone printer. As it stands now, it's a device made up of two units, connected via mess of cables. A standalone conversion would instead move everything from the separate box into a slew of components situated directly under the printer.

This can't be achieved without a lot of parts. Ever since the 13th, i've been essentially continuously printing parts that would be bolted onto the frame of the CR-10. I'd say i'm about half way through with the things I want printed. Honestly, it's good printing practice.

As of today, for the conversion, printed:


2025-01-24

I've started working a job, and so, had a bit less time to work on the printer. It is the weekend though and so I find myself printing again. I'm on the final stretch of the print-a-thon for what i'm calling 'stage 2' of the printer upgrades i have planned.

'stage 2' is essentially a complete overhaul of the CR-10 to rework it into a standalone printer. Wheras it used to have an additional box with the PSU and control board next to it, it would be converted so tha those components would be attached to the frame itself instead.

As of now, i'm printing what I hope is the last piece needed for the entire thing to come together - a raspi case that mounts under the heated bed.


2025-01-25

I've commited to reworking the printer. But, after a day's work, I now know of some issues.

Apart from that, the biggest challenge is just.. rerouting every cable of the printer. So far, I have reconnected all of the stepper motors, all of the limit switches and i've re-rigged the mains connector and the mains on/off switch. I've also connected the raspi to the control board.

Taking reference pictures was and will be a huge help. I can see that i'll keep working on this throughout the weekend.


2025-01-29

Never bothered to write something properly for last sunday, but I've managed to successfully convert the printer into a more standalone version. It boots, runs klipper and prints without issue.

But, I have other problems, those being: