My Propeller Based 3D printer.
davidsaunders
Posts: 1,559
I realized that I have been asking questions about details, though have not given a good overview of this project.
I have built a simple 3D printer, that uses a P8X32A as its controller, details following.
The Mechanical HW:
I am using simple 8mm steel rods for the rails, with simple linear bearings. That is for the X and Y axis (the 2D axis for a single layer). The two X rails are at far sides, with the Y Rail hanging in between the two X rails (from the linear bearings on the X rails). The extruder is hung from the Y rail linear bearing, with a second peice of wood to hold the orientation relitive to the bed.
The print bed is on a single vertical rail, with a screw on the opisite side.
The screw is hooked to a Nema 17 stepper to raise or lower the print bed. The X and Y steppers have a wood spool on them with fishing line that is used to move the linear bearings. The X and Y steppers are small $5 stepper motors. All 3 steppers are unipolor.
The extruder and hot end are very simple.
The hot end is just a peice of steel that is hollow, with a thin ceramic insulator and a bit if NiChrome for the heating element. There is a thermistor for monitoring the temperature of the hot end.
The extruder is a continuous rotation servo, with a two part wooden wheel feeder. The tip is just a screw on piece that goes on the end of the hot end, and has a 0.4mm hole in it.
There are simple wire contact zero position contacts for X, Y, and Z. This allows soft zeroing after everything is correctly adjusted.
That is it for the Mechanical HW (well there is a wooden frame holding everything, and 4 leveling screws in the top section of the print bed).
The Electronics:
The steppers and heating element are driven by a 12 volt power supply with the grounds tied through ULN2803's that are controlled from the Propeller.
The wiring is fairly simple, at the propeller it looks like:
The Firmware:
I have written the firmware completely from scratch. Seeing the difficulty iBruce is having porting TeaCup I am glad that I did write mine from scratch.
I am not ready to release my firmware yet, as I am still debugging it. Though the cog usage is:
I have built a simple 3D printer, that uses a P8X32A as its controller, details following.
The Mechanical HW:
I am using simple 8mm steel rods for the rails, with simple linear bearings. That is for the X and Y axis (the 2D axis for a single layer). The two X rails are at far sides, with the Y Rail hanging in between the two X rails (from the linear bearings on the X rails). The extruder is hung from the Y rail linear bearing, with a second peice of wood to hold the orientation relitive to the bed.
The print bed is on a single vertical rail, with a screw on the opisite side.
The screw is hooked to a Nema 17 stepper to raise or lower the print bed. The X and Y steppers have a wood spool on them with fishing line that is used to move the linear bearings. The X and Y steppers are small $5 stepper motors. All 3 steppers are unipolor.
The extruder and hot end are very simple.
The hot end is just a peice of steel that is hollow, with a thin ceramic insulator and a bit if NiChrome for the heating element. There is a thermistor for monitoring the temperature of the hot end.
The extruder is a continuous rotation servo, with a two part wooden wheel feeder. The tip is just a screw on piece that goes on the end of the hot end, and has a 0.4mm hole in it.
There are simple wire contact zero position contacts for X, Y, and Z. This allows soft zeroing after everything is correctly adjusted.
That is it for the Mechanical HW (well there is a wooden frame holding everything, and 4 leveling screws in the top section of the print bed).
The Electronics:
The steppers and heating element are driven by a 12 volt power supply with the grounds tied through ULN2803's that are controlled from the Propeller.
The wiring is fairly simple, at the propeller it looks like:
::::: PIN USAGE ::::: 0 - 11 : Steppers. : Output. 12 : Feed Continous Rotation Servo. : Output. 13 : Hot End Heating Element PWM. : Output. 14 : X/Y/Z Limit Zeroing Micro Switches. : Input. 15 : Delta Sigma out for Thermistor. : Output. 16 : Delta Sigma In for Thermistor. : Input. 17 - 23 : UNUSED. : UNDEF. 24 - 27 : NTSC video. : Output. 28 - 29 : Read/Write EEPROM's. : I/O. 30 - 31 : Comunicate with Host Computer. : I/O. I will be adding: Pin 19: Extruder Switching Servo. Pins 20 - 21: Select driver set for currrent Extruder. Pins 22 - 23: Comunicate with other Propellers.I think that gives a good overview.
The Firmware:
I have written the firmware completely from scratch. Seeing the difficulty iBruce is having porting TeaCup I am glad that I did write mine from scratch.
I am not ready to release my firmware yet, as I am still debugging it. Though the cog usage is:
::::: COG USAGE ::::: COG : USAGE : Language -----:-------------------------------------------------:---------- 0 : Control X, Y, Z steppers, and feed servo. : PASM 1 : Read sensors, and control hot end heater by PWM : PASM 2 : Unused. : NONE 3 : Unused. : NONE 4 : NTSC Status Display, limited single cog. : PASM 5 : Parse G-Code : SPIN 6 : Read/Write SPI EEPROM. : PASM 7 : Comunicate with host computer. : PASM I will be adding: COG 0: Control Hot End and Extruder selector (up to 3 extruders). COG 3: Communicate with secondary Propellers for extended functionality.I will release my code into the OBEX once either it is 100% complete or once I need some enough help that I have to release it to ask for the help.
Comments
I also forgot to mention that two of the steppers are driven at 5V, and the servo is driven at 5V. So that should bring it up to date.
Spin/pasm I assume?
No I would not want to put it on github. I have yet to take the time to learn the correct usage of git.
I am working towards lowering the entry to 3D printing, and once I have enough prints, and 0 software errors will be providing a complete set of plans. As it uses the Propeller it seems that the best place for it is in the OBEX, and I will provide a link from the 3D-Printing forum when it is stable enough.
I have looked at a bit of my code today, most of it in PASM on the Prop side, and I think I may go with a bit more SPIN. Using more spin would lower the barrier to entry, and also help with my own debugging. Though I must admit that I have some concern about using to much hub mem, as SPIN runs there and has a stack, and I am using a lot of hub ram for buffering G-Code and the parsed commands, plus a partial video buffer.
Though as the direct control stuff is slow enough to run in SPIN, it may be worth a shot, so long as I can keep the SPIN under 8KB including the stacks. The G-Code parser is already in Spin, so if I put the stepper control, extruder servo control, heating element control, and sensor controls into spin (except for the Sigma Delta for the thermistor), it should still be more than fast enough, and easier for those new to the Propeller to understand. And I think it possible to do and stay under 8KB of hub ram (I hope).
______________________________________________________________________________________________________________________
On the Propeller side, I am a good chunk into converting the firmware into SPIN, and I believe that it will work out great.
I do need to get it all off of my Linux SD-Card in order to continue, though there are many things I need to pull off of that card.
______________________________________________________________________________________________________________________
Now I just need to find a new low cost ARM system that will run RISC OS and Linux. And not a RPi beings as it was a bug in the Raspbian updates that caused the trouble and damaged 3.
and a copy of knoppix Linux ( or other flavors of Linux) http://knoppix.net/. In addition to github storage there are plenty of free cloud storage solutions available such as Google Drive, Drop Box, etc. Amazon now has unlimited storage for $59.99 per year. and free for 3 months.https://www.amazon.com/clouddrive/home.
If one of the cards doesn't have important data I would manually delete the partitions with knoppix and redo them. Then load raspbian again and try it.
Though I am going to attempt to talk about my 3D printer.
I think that to those new to the Propeller it is likely that SPIN is going to be easier to deal with than PASM (I am an exception, 7 years ago when I discovered the Prop I dove into PASM ignoring SPIN).
As I am doing the conversion largely because I want others to be able to use it, the most tedious part is writing long and very detailed comments, explaining in detail how what works for those that do not know.
As I am using a custom G-Code sender for the printer anyway I am thinking about just parsing the G-Code on the host machine and sending more concise commands to the printer to reduce the buffer size needed on the printer, any thoughts?
Is your NTSC driver just text and monochrome? If yes, you could use my 1pin tv driver - the font is in cog and the hub is reclaimed for the screen buffer.
Thank you.