Multitoolhead 3d printer
This is a cartesian 3 z 2y 1 x motor 3d multi tool head 3d printer. It is at the moment being designed for 3d printer heads but will be able to have a laser and maybe a small mill all this auto tool head changing
Created by
will.robbins222
Tier 1
3 views
0 followers
will.robbins222
added to the journal ago
Sketched PCB

I started with the design of the tool head PCB(only the sketch at this moment). I decided to make a PCB for the tool head because it need to have efficent communication and it to be modular. The best way to do this is have multiple PCBs communicating over various ways of communication. I chose to use CAN communication because it is the cheapest and still prioritizes speed and size.
There are redundant things on the sketch which I will get rid of when I route the PCB. I was just determining what would be the best for efficiency of space and also accuracy. The extra things are the 12v 24 switcher based off of 3.3v logic which could be replaced by the high power section. Another thing is the tmc2209 la chip and the tmc2209 module, I will be comparing the price and the size usage of them and determine which I will choose. The final thing is the weight cell and the bltouch, weight cells help conserve size outside of the board but the weight cells have better size constraints for outside the PCB but not on the pcb because there need to be another ic.
Reasons I chose all the other components:
TMC2209: uart communication, stall gaurd, less heat
RP2354B: integrated storage so less money and less PCB space taken up, 48 pins more things being able to be connected, also most pins can be reprogrammed
I went with the RP2354B because of the chip count and the speed. I also I have not seen the Rp2354B being used for the most part in anything which exites me to use the chip evermore. I want to use the chip for other reasons like the 2Mb of integrated storage which is all I need for a toolhead because of the CAN communication. Also what exites me most is the RP2350s new idea of dual architecture of the ARM Cortex-M33 part and the Risk-V cores which is good for flexibility with good performance and stable processing. But what I found out while making the sketch is the amount of PIO pins which also increases flexablility for the mcu. So I chose the RP2354B because of the speed the flexablility of both the PIO and the dual architecture and the integrated storage.
MCP25625T-E/ML: integrated CAN transceiver and CAN controller on one ic
LIS3DHTR_C15134: cheap mems accelerometer to handle vibrations
WS2812B-2020: small cheap led for status good because it is widely known and lots of code for it already
Ocilators:
DSC1001BE5-016.0000T: cheap mems CMOS osilator 16MHZ
TOGNJING XOS32012000LT00351005: cheap CMOS osilator 12MHZ
The reason why I have two different oscilators is because of the ideal frequencies on the RP2354B chip and the MCP25625T-E/ML which are 12Mhz and 16Mhz respectively. I could have the RP2354B run on 16Mhz but its not ideal because it would mess up the PLL or the Phase-Locked loops and the USB subsystem. This would happen because 12Mhz is what they are natively coded for. A way I could have worked around this was to change the boot code and change the PLL settings so the CPU and the USB functionality remains the same. I don't want to do this because coding is not one of my strengths but also there is a higher chance of failure. Now I could also run the MCP25625T-E/ML one 12mhz but that has its own set of problems like bit timing and speed of the CAN bus. The speed is dependent on the oscillator and so if it was to connect to 12mhz instead of its recomended 16mhz-20mhz it won't operate at 1Gbs which I don't need but with a tool head I would like to have fast speeds for fail detection. To mitigate this I could go change the code but as I mentioned before I am not the best coder. So I chose to go with two different ocilators because there is a higher chance of failure on both chips even if I knew the boot up code of both chips extensively I would be able to mitigate the failure chance but there still would be a chance.
What I learned from before
This was initially part of the part I did before but there were to many issues and also I did not have a sketch of it which I now notice I should have done.
.png)
There are many differences that I have made, one being the change in micro controller which is very important. I made the change in micro controller ic because it was 20 cents more and the rp2040 had a slower speed older cores and less features. The features the RP2040 lacked were the PIO pins on the RP2354B chip which is important because the Tmc2209 communicates over single wire UART which I need a resistor to split on the RP2040 or use the PIO which it has less blocks compared to the RP2354B ic which has 3 instead of 2. Also the rp2350 series can interface with 5v so less logic level shifting if I need better integration. Also the RP2350 having more pins is ideal because I will be making a main board that needs more pins than the 30 that the rp2040 has. That's ideal because the more you buy the cheaper it is. When I route Version 2 of the tool head I will also improve the routing because on ver1 I have a lot of 90 degree routes which can worsen the signal.
The time is including the hours I spent on ver1 of the tool head PCB
will.robbins222
added to the journal ago
Built the frame and motion system
*Note: This project started about 6 months ago then I discovered Blueprint so I did not journal during that time nor did I take pictures. But when I realized that I could share my creations with people and hopefully get help from people and maybe get money I joined. *
Making the frame and motion system for the first time on a 3d printer
Iterations
This is my 6th iteration so far, after every iteration I started over, and the iterations are:
- Had the z axis at the lowest possible point but that caused many probblems with z axis ragidity and also the battery mount and electronics were too close of a fit. Also it was a hassle to mount the y frame
- Had the z axid where the lead screws aligned to the absolute top of the frame, which caused issues with the movement of the y axis becasue the gantry would hit the lead screws
- Measured the distance that the lead screws need to be bellow the gantry, there were two problems: the z axis was not rigid enough and in testing the y gantry broke. So to fix that I created the custom parts to make the z axis more rigid but that moved the motors towards the front of the machine so I had to move the motor mounts which took a bit. Also the cading took about 3 hours total because I had to get the precise measurements for the holes and just dimensions. The addition to the Z axis had compression screws so I could manually level the bed but becasue it added height I moved it downwards.
- Another problem arose as the compression screws were starting to bend the z axis helped which is one of the things I desgined before which the bending is not good in itself but also it was putting strain on the motors. To fix that problem I got rid of the springs
- Since it was lower now becasue no springs I needed to move it up. So I moved it up to the max height again but moved the distance the machine travels backwardsa and planned that the unsed space between the two lead screws to be where the dock for the multitool. But the problem still stands that there is reduced motion for the y gantry but that could be benificial becsause it shows where the docking station for the tool heads could possibly go
- What I have been working on at the moment it trying to have less strain on the z axis motors as for some reason they are very stiff even though they are measured out correctly. My fear at the moment is that lead screws are bent because the previous misalignment of the holes and the jamming of motor becasue of the heights being wrong and distances being wrong as mentioned before. So I have been working on this iteration for about a month or so making it the longest iteration
Making the frame and z axis
I bought 20 20x20mm t 500mm aluminum extrusions and put the frame together with T gussets. With the base frame out of the way I added the frame for the z axis motors. After each side was measured I then measured where the z axis motor mount should go and then added the mounts and the z axis motors with the 5mm to 8mm for the t8 lead screws. Then I added a custom cut aluminum bracket that has all the places where the t8 nuts go for the z axis t8 lead scews. this was to have a lay out not too disimilar to the prusa XL so I can base my creation off of something. Then when that was lined up correctly or so I thought in actuallity the heights of the frame for the z axis motors were wrong but the misalignment made me belive that the motor mounts weren't in the right place. But I did not know this at the time so i kept going, I then added the build plate which is an aluminum sheet I drilled and cut myself.
Making the x and y axis
After making the z axis I added the xy axis frame which is the top part of the frame. I added the motor mounts after measureing for the y axis because there are two y axis motors. The motors drive the y motion system on 2 400 mm mgh12 rails with mg12h carts with gt2 timming belts that attatch to a clamp I made on the x axis mount. The x axis mount is a custom made peice that has the place to mount the x axis motor and idle pully and the y axis belt clamps and also has mgn12 rail mounting holes in it. Which again on the mgn 12 rail was a mgn12h carriage with a final custom peice. This peice is the x carriage block it has a gt2 belt clamp on the back for the x axis and also mounting holes that are for securing the block to the carriage and the same holes are used for at the moment securing the extruder which is a microswiss direct drive extruder with a bltouch probe(this is just to test one of the harder tool heads that needs precise leveling and also is one of the most complex to code for, I will be switching it out for a custom auto tool head changer head eventually).
Using an arduino for the first time and which connects to a ramps sheild
Note: This is at the same time as making the frame and motion system
- Why I chose arduino mega+ramps: I thought it was the simplest and cheapest procedure at the time
- Why I chose Bltouch: Cheap easy to code(maybe changing in the future)
- Why a 24V 350w silicon heated bed: cheap for the size and wattage and 24v decreases the time it takes to
- Why I am using 2 different Power supplies, this is becasue a few different things use 12v in my system and others use 24v which I hope I will change in the future for one single psu
- Motor: As I mentioned there are 6 motors all nema 17 motors, and for the long term I would love to have each driven by a tmc2209 but those are expensive and I don't want to break any so I went a good price down to tmc2208s which are almost as good but are more than enough for this, hopefully I will upgrade soon. But you might be thinking about a ramps has only 2 z axis motor slots and a single y axis motor and then wondering how I can split the connections? Well I did it by first Daisy chaining the pins DIR, STEP, GND, VIO, and EN together from each motor(the x and y axis of course not being connected) and the signals coming from the ramps via a perfboard with male pins that go into their repspective gpio slots. After a short that killed 3 of the motor drivers I decided to make a pcb becasue I always wanted to make one, this acted as a splitter for the sginals and more stable place for the motor drivers.
- Why I have so many motors: They are for ragidity and also beacause I thought it would be good to have every axis have its own motors to localize problems
- Why Marlin: Easy code and works very well for the ramps
PROBLEMS PROBLEMS PROBLEMS
MECHANICAL ISSUES
I mentioned before that I thought that I had the z motor frame correct but it wasn't. There were many things wrong
- first one of the corners was higher than the others causing it to jam the motors.
- Second the motor mounts weren't all mounted at the same height relative to the bar they were mounted on causing extra strain on the motor shaft
- Third the mounts weren't within the margin of error which is 1-2 mm in the x or y direction or both
- To fix all of these I spent about 2 weeks making micro adjustments
##Electrical ISSUES
For the splitter for the motor controllers I did not have a common ground which killed countless motor controllers
Here is what it looks like:
As you can see there is no common gnd. Also another flaw is that there are no decoupling capacitors any where. At the moment I have fixed the common ground issue by soldering the gnds together via a wire. The issue took me a day to identify

Current state of the project:
.jpeg)
As you can see frame is looking good and motors look ok but you might notice that the ramps is seperated from the arduino mega this is beccause when I redid the perf board for the singal splitter for the motor drivers and I mixed up vio and vm which was a differnce of 19 volts. I know the mega is broken as the chip gets extrodinarrily hot when I power it, what I dont know is if it broke the ramps and the motor controllers, I am 90% sure the motor controllers that were on that chain are dead but have yet to test.
Moving forward I will make sure not to mix them up again.
What I hope to do in the next month:
Fix the motion system once and for all and then go back to the trouble shooting phase with the extruder again because it was getting jammed a lot. After that is done I will start to design the hub for the tool heads
The time this took me (not the 6 months part I know that to be true) but the actual time in hours it took me is an estimate
will.robbins222
started Multitoolhead 3d printer ago
1/31/2026 - Built the frame and motion system
*Note: This project started about 6 months ago then I discovered Blueprint so I did not journal during that time nor did I take pictures. But when I realized that I could share my creations with people and hopefully get help from people and maybe get money I joined. *
Making the frame and motion system for the first time on a 3d printer
Iterations
This is my 6th iteration so far, after every iteration I started over, and the iterations are:
- Had the z axis at the lowest possible point but that caused many probblems with z axis ragidity and also the battery mount and electronics were too close of a fit. Also it was a hassle to mount the y frame
- Had the z axid where the lead screws aligned to the absolute top of the frame, which caused issues with the movement of the y axis becasue the gantry would hit the lead screws
- Measured the distance that the lead screws need to be bellow the gantry, there were two problems: the z axis was not rigid enough and in testing the y gantry broke. So to fix that I created the custom parts to make the z axis more rigid but that moved the motors towards the front of the machine so I had to move the motor mounts which took a bit. Also the cading took about 3 hours total because I had to get the precise measurements for the holes and just dimensions. The addition to the Z axis had compression screws so I could manually level the bed but becasue it added height I moved it downwards.
- Another problem arose as the compression screws were starting to bend the z axis helped which is one of the things I desgined before which the bending is not good in itself but also it was putting strain on the motors. To fix that problem I got rid of the springs
- Since it was lower now becasue no springs I needed to move it up. So I moved it up to the max height again but moved the distance the machine travels backwardsa and planned that the unsed space between the two lead screws to be where the dock for the multitool. But the problem still stands that there is reduced motion for the y gantry but that could be benificial becsause it shows where the docking station for the tool heads could possibly go
- What I have been working on at the moment it trying to have less strain on the z axis motors as for some reason they are very stiff even though they are measured out correctly. My fear at the moment is that lead screws are bent because the previous misalignment of the holes and the jamming of motor becasue of the heights being wrong and distances being wrong as mentioned before. So I have been working on this iteration for about a month or so making it the longest iteration
Making the frame and z axis
I bought 20 20x20mm t 500mm aluminum extrusions and put the frame together with T gussets. With the base frame out of the way I added the frame for the z axis motors. After each side was measured I then measured where the z axis motor mount should go and then added the mounts and the z axis motors with the 5mm to 8mm for the t8 lead screws. Then I added a custom cut aluminum bracket that has all the places where the t8 nuts go for the z axis t8 lead scews. this was to have a lay out not too disimilar to the prusa XL so I can base my creation off of something. Then when that was lined up correctly or so I thought in actuallity the heights of the frame for the z axis motors were wrong but the misalignment made me belive that the motor mounts weren't in the right place. But I did not know this at the time so i kept going, I then added the build plate which is an aluminum sheet I drilled and cut myself.
Making the x and y axis
After making the z axis I added the xy axis frame which is the top part of the frame. I added the motor mounts after measureing for the y axis because there are two y axis motors. The motors drive the y motion system on 2 400 mm mgh12 rails with mg12h carts with gt2 timming belts that attatch to a clamp I made on the x axis mount. The x axis mount is a custom made peice that has the place to mount the x axis motor and idle pully and the y axis belt clamps and also has mgn12 rail mounting holes in it. Which again on the mgn 12 rail was a mgn12h carriage with a final custom peice. This peice is the x carriage block it has a gt2 belt clamp on the back for the x axis and also mounting holes that are for securing the block to the carriage and the same holes are used for at the moment securing the extruder which is a microswiss direct drive extruder with a bltouch probe(this is just to test one of the harder tool heads that needs precise leveling and also is one of the most complex to code for, I will be switching it out for a custom auto tool head changer head eventually).
Using an arduino for the first time and which connects to a ramps sheild
Note: This is at the same time as making the frame and motion system
- Why I chose arduino mega+ramps: I thought it was the simplest and cheapest procedure at the time
- Why I chose Bltouch: Cheap easy to code(maybe changing in the future)
- Why a 24V 350w silicon heated bed: cheap for the size and wattage and 24v decreases the time it takes to
- Why I am using 2 different Power supplies, this is becasue a few different things use 12v in my system and others use 24v which I hope I will change in the future for one single psu
- Motor: As I mentioned there are 6 motors all nema 17 motors, and for the long term I would love to have each driven by a tmc2209 but those are expensive and I don't want to break any so I went a good price down to tmc2208s which are almost as good but are more than enough for this, hopefully I will upgrade soon. But you might be thinking about a ramps has only 2 z axis motor slots and a single y axis motor and then wondering how I can split the connections? Well I did it by first Daisy chaining the pins DIR, STEP, GND, VIO, and EN together from each motor(the x and y axis of course not being connected) and the signals coming from the ramps via a perfboard with male pins that go into their repspective gpio slots. After a short that killed 3 of the motor drivers I decided to make a pcb becasue I always wanted to make one, this acted as a splitter for the sginals and more stable place for the motor drivers.
- Why I have so many motors: They are for ragidity and also beacause I thought it would be good to have every axis have its own motors to localize problems
- Why Marlin: Easy code and works very well for the ramps
PROBLEMS PROBLEMS PROBLEMS
MECHANICAL ISSUES
I mentioned before that I thought that I had the z motor frame correct but it wasn't. There were many things wrong
- first one of the corners was higher than the others causing it to jam the motors.
- Second the motor mounts weren't all mounted at the same height relative to the bar they were mounted on causing extra strain on the motor shaft
- Third the mounts weren't within the margin of error which is 1-2 mm in the x or y direction or both
- To fix all of these I spent about 2 weeks making micro adjustments
##Electrical ISSUES
For the splitter for the motor controllers I did not have a common ground which killed countless motor controllers
Here is what it looks like:
As you can see there is no common gnd. Also another flaw is that there are no decoupling capacitors any where. At the moment I have fixed the common ground issue by soldering the gnds together via a wire. The issue took me a day to identify

Current state of the project:
.jpeg)
As you can see frame is looking good and motors look ok but you might notice that the ramps is seperated from the arduino mega this is beccause when I redid the perf board for the singal splitter for the motor drivers and I mixed up vio and vm which was a differnce of 19 volts. I know the mega is broken as the chip gets extrodinarrily hot when I power it, what I dont know is if it broke the ramps and the motor controllers, I am 90% sure the motor controllers that were on that chain are dead but have yet to test.
Moving forward I will make sure not to mix them up again.
What I hope to do in the next month:
Fix the motion system once and for all and then go back to the trouble shooting phase with the extruder again because it was getting jammed a lot. After that is done I will start to design the hub for the tool heads
The time this took me (not the 6 months part I know that to be true) but the actual time in hours it took me is an estimate
2/6/2026 - Sketched PCB

I started with the design of the tool head PCB(only the sketch at this moment). I decided to make a PCB for the tool head because it need to have efficent communication and it to be modular. The best way to do this is have multiple PCBs communicating over various ways of communication. I chose to use CAN communication because it is the cheapest and still prioritizes speed and size.
There are redundant things on the sketch which I will get rid of when I route the PCB. I was just determining what would be the best for efficiency of space and also accuracy. The extra things are the 12v 24 switcher based off of 3.3v logic which could be replaced by the high power section. Another thing is the tmc2209 la chip and the tmc2209 module, I will be comparing the price and the size usage of them and determine which I will choose. The final thing is the weight cell and the bltouch, weight cells help conserve size outside of the board but the weight cells have better size constraints for outside the PCB but not on the pcb because there need to be another ic.
Reasons I chose all the other components:
TMC2209: uart communication, stall gaurd, less heat
RP2354B: integrated storage so less money and less PCB space taken up, 48 pins more things being able to be connected, also most pins can be reprogrammed
I went with the RP2354B because of the chip count and the speed. I also I have not seen the Rp2354B being used for the most part in anything which exites me to use the chip evermore. I want to use the chip for other reasons like the 2Mb of integrated storage which is all I need for a toolhead because of the CAN communication. Also what exites me most is the RP2350s new idea of dual architecture of the ARM Cortex-M33 part and the Risk-V cores which is good for flexibility with good performance and stable processing. But what I found out while making the sketch is the amount of PIO pins which also increases flexablility for the mcu. So I chose the RP2354B because of the speed the flexablility of both the PIO and the dual architecture and the integrated storage.
MCP25625T-E/ML: integrated CAN transceiver and CAN controller on one ic
LIS3DHTR_C15134: cheap mems accelerometer to handle vibrations
WS2812B-2020: small cheap led for status good because it is widely known and lots of code for it already
Ocilators:
DSC1001BE5-016.0000T: cheap mems CMOS osilator 16MHZ
TOGNJING XOS32012000LT00351005: cheap CMOS osilator 12MHZ
The reason why I have two different oscilators is because of the ideal frequencies on the RP2354B chip and the MCP25625T-E/ML which are 12Mhz and 16Mhz respectively. I could have the RP2354B run on 16Mhz but its not ideal because it would mess up the PLL or the Phase-Locked loops and the USB subsystem. This would happen because 12Mhz is what they are natively coded for. A way I could have worked around this was to change the boot code and change the PLL settings so the CPU and the USB functionality remains the same. I don't want to do this because coding is not one of my strengths but also there is a higher chance of failure. Now I could also run the MCP25625T-E/ML one 12mhz but that has its own set of problems like bit timing and speed of the CAN bus. The speed is dependent on the oscillator and so if it was to connect to 12mhz instead of its recomended 16mhz-20mhz it won't operate at 1Gbs which I don't need but with a tool head I would like to have fast speeds for fail detection. To mitigate this I could go change the code but as I mentioned before I am not the best coder. So I chose to go with two different ocilators because there is a higher chance of failure on both chips even if I knew the boot up code of both chips extensively I would be able to mitigate the failure chance but there still would be a chance.
What I learned from before
This was initially part of the part I did before but there were to many issues and also I did not have a sketch of it which I now notice I should have done.
.png)
There are many differences that I have made, one being the change in micro controller which is very important. I made the change in micro controller ic because it was 20 cents more and the rp2040 had a slower speed older cores and less features. The features the RP2040 lacked were the PIO pins on the RP2354B chip which is important because the Tmc2209 communicates over single wire UART which I need a resistor to split on the RP2040 or use the PIO which it has less blocks compared to the RP2354B ic which has 3 instead of 2. Also the rp2350 series can interface with 5v so less logic level shifting if I need better integration. Also the RP2350 having more pins is ideal because I will be making a main board that needs more pins than the 30 that the rp2040 has. That's ideal because the more you buy the cheaper it is. When I route Version 2 of the tool head I will also improve the routing because on ver1 I have a lot of 90 degree routes which can worsen the signal.
The time is including the hours I spent on ver1 of the tool head PCB