A powder and inkjet 3D printer based on HP45 inkjet technology
A full zip of the current project WITHOUT 3D source files, but with usable 3D files. 20180717.
x-zip-compressed - 29.41 MB - 07/17/2018 at 16:47
This will not be the log that will show a working machine. I wanted to update my status because it is a month since my last log, and else people think I have stopped. I am getting there. I actually have the entire connection with GRBL working and stable, and already have a good link with the HP45. Here is a small list of what is left to do:
After that milestone I will modify Oasis for 3D printing. That "SHOULD" not take that long since it is not adding much to the software side, but I have been wrong before.
Have an interface:
Now the news, good for me, bad for the project. Summer has arrived, and I need vacation. So the coming few weeks I will not be working on this project. No logs, probably no answers.
All the files in their most current state are now updated on my website: https://ytec3d.com/oasis-download-page/
None of it is final version, but it is last work I will do on it in several weeks.
Until next time, when I hopefully can show a working machine.
I have been very busy learning Python the past few weeks. It was already on the list, and now that I really need it, I am forced to learn it with a project the size of Oasis. While progress has been steady, I have had to learn Python basically from the very basics.
The software I need to write has to do a few things.
This control software will be programmed in Python and PyQT. My choice for QT is not based on any good research, I just have a little familiarity with it. A concept of the window is below:
But programming on Oasis controller directly quickly led me to conclude that I needed more experience. I left the Oasis controller for a while. I needed to learn all aspects of the program I need to write separately (and some incredibly basic Python stuff as well) so I thought of 2 smaller programs that I need to try and write before I will start on the big one.
The first is an image converter. I need to load an image, show what was loaded, convert the image so the inkjet will understand it and then render that image as well, to check for errors.
The second is a serial command terminal. Nothing fancy with automatic baudrate and connections, just, serial connect, send and receive. This proved difficult enough to take a week, simply because I knew practically nothing of python. The second one is is done. I have called it serial commander, and it works good enough that I now have confidence that I can write an interface with both the GRBL and the HP45 controller.
That is all for now. I hope that the image converter will be done a bit quicker (after the coming weekend maybe), after that I can make a proper plan on how to program the Oasis controller, and then start the final coding on that.
The frame is mostly assembled, and the first wiring is in. We just had a few holidays here, so I have to wait on some parts, but there is movement. This movement is coordinated by a GRBL motion controller with 2 TMC2100 motor controllers. Right now my computer is just sending raw gcode through a gcode sender tool. Later I will make the software send these commands. My first prototype of Oasis really screamed when it was moving, this is surprisingly quiet. I might swap the drivers, just for comparison later. The printhead and inkjet will be installed later, when the rest of the wiring is complete.
Speaking of the inkjet controller. I haven't even posted pictures of it yet. Last thing I mentioned was a mistake in the routing. For now I have jumper wired on my PCB to fix the issue. A new revision is ready when I find no more issues. Since then I have started programming the printhead. 2 issues, 1 bad solder joint and 1 programming mistake cost me a day of troubleshooting, but I now have the printhead working mostly the way I want to. I will spend the next week or so adding more blocks that read the encoder and read and buffer the data coming from a PC
That leaves me on software. If I were a wiser person I would have started on it already. I am not. I can't push it ahead of me for much longer though, I am rapidly approaching a point where I need the code that links the motion controller and inkjet controller together. When I finally start on that I will let it know.
First draft of CAD and firmware is now also available for download (still no github :( )
New files are available here: https://ytec3d.com/oasis-download-page/
I made it to the finals. Yay. I was already past the point of no return on this project, but it is nice to have a hard deadline to work towards.
First there is a bit of news on the PCB's. I found a major flaw where a pin that requires digital is hooked up to a pin that only does analog read. I have upped the revision and made the changes, but I will not publish it before I have done a full test of the printhead. Who knows what else I might find. While testing I managed to destroy the microcontroller with dangling wires, which cost me a few days while I was waiting on replacements. I will continue with the PCB's shortly.
All major parts have arrived in the last week. A notable point. The Hiwin linear rails I bought from Reprapworld work fine, but they discovered that the separate carriages they sell are not compatible. I have altered the design to run on one carriage for now. It should be fine, the carriages are plenty strong on their own. Printing is also done. A few tiny issues were resolved after printing, but so far all parts came out great. No support will be needed to print the parts, which is always nice. The parts will be blue. The design was green, but I changed it to a color I liked more.
With all parts in house, I could not help but start assembling. This is a prototype, and not optimized for assembly, so I will not give full instructions right now. For now, my main focus is making this machine work. So with that said, enjoy a few photo's of me assembling Oasis.
One major mistake was found. The gantry is moved with two belts, one on the front (free) side and one on the back (fixed) side. Under the bed runs a shaft that connects the two. On the front side the belt attaches to the gantry on the bottom belt. On the back side the top belt attaches to the gantry. This means that when the motor turns, both belts pull the gantry in opposite directions. In hindsight this is a really stupid mistake, but then most mistakes are stupid in hindsight. I will fix this by redesigning the front side to attach to the top belt as well.
When this booboo is fixed, I will upload the Step files to the printer, but first I want to make sure all parts will work. In the next major log I hope to have movement.
A short log, while I am making a start on the mechanics. The PCB's have arrived. I would have populated the boards and done some tests, but in en extreme case of murphy's law, I have lost the one bag of components I need the most. The missing components are scheduled to be found after I have ordered a new batch of said components somewhere this weekend.
I am also ready to order the big frame pieces, start on 3D printing and some other tiny things I need to do before I can start the assembly. Expect some progress on the frame in the next few weeks as well.
Oasis would not be much without a frame and a gantry that moves the head. The last few weeks, while the PCB's are under the way, I have worked on the frame of Oasis. because 3D design has few milestones that would be log-worthy, it has been quiet. To reiterate, the design is done in Solidworks (2014). I would love to learn fusion 360 or something more open source at one point, but I am not going to learn it for a project of this scale. Solidworks is something I have available and I am good at.
Right now the frame, gantry and some printbed related parts are almost ready. I hope to be ordering the parts somewhere this or next week. The actual hoppers are not done yet. These can be added later and the first few months I can work without a hopper. All green parts are 3D printed and should be supportless.
The printer is designed around a few standard parts. The frame is made from 30x30mm and 30x60mm aluminium extrusion (Slot width 8mm, center hole M8). A lot of other 30mm aluminium extrusion should be compatible. The linear rails are Hiwin MGN12H. The timing belts are GT2, and the stepper motors are Nema 17. Most of these parts are fairly standard in 3D printing land. I also tried to keep as few bolt sizes as possible. Right now I have: DIN 912: M3x10, M3x20, M4x12, M4x20, M4x30, M6x12, (M6x16), M8x30; DIN 963: M3x10, M3x16, M4x16; DIN 7991: M6x12.
The printhead is arguably the most interesting part of this project. Right now I have the 3D printed carriage for the printhead and controller, and the frame and bearings to mount it to the gantry. The gantry moves in the Y-direction. The carriage is mounted to the gantry using 2 Hiwin linear bearings (MGN12H). To lock the printhead in place, I am using a latching mechanism that locks around the printhead when it is moved up. The big arm that reaches to behind the printhead is to mount the encoder and to pick up the cable
The gantry is the frame that moves in the printhead in the X-direction. The center of the gantry is a single 30x60 aluminium extrusion (from Misumi, but others should work too). On either end there are bearing blocks that allow the gantry to move in X, one using 2 linear rail carriages (fixed side), and one using a simple round rod (free side), not to over define the gantry too much. Both sides will have a timing belt. On the aluminium extrusion there is the guide for the carriage cable, and the encoder tape that the carriage uses. Also on the fixed side there is the motor that moves the carriage, both endstops and a cable pickup.
The spreader mounted on the back of the gantry is used to spread the powder from the feed hopper into the build hopper. It is a Misumi rotary shaft. This way I can get a part that is really accurate, but I will try to find an alternative for people without access to either a lathe or Misumi later (remind me if I forget).
The Main frame holds all components and is made from 30x30 and 30x60 aluminium extrusion. I have considered making a frame from a sheet material, but I have done that 3 times now, and I have never been really satisfied with it. The frame has become a bit more complicated than I would have wanted, but for a prototype it is going to be fine.
To mount the gantry, there is a linear rail, mounted upside down on the back. It is this orientation to keep dust out of the rail. In the from is the 12mm round rod that supports the free side of the gantry. The free side rod is under the build surface to protect it from most of the dust. The belt for the X-direction is at the height of the free side. On the fixed side it goes up first, using a set of idler rollers.
A start has been made on the build surface. It will consist of a plate of HPL (or something else rigid 6mm'ish thick). At the end of the build surface is the opening where the...Read more »
I spent the past weekend designing several PCB's. The number on the boards is 3.00, which suggests there are 2 more versions (there are). Both older versions have too many additional components. One is just expensive because of it, the other has given unknown issues that weren't there before. I decided to make a bare bones controller with only the essentials that have worked so far. All boards mentioned are 40x80mm, the smallest I can make the board and make it easily fit behind the printhead. Smaller is possible, but I nether want nor need that right now.
I will try to keep the Files updated when I publish logs. If I forget remind me. For now I will keep the files on my site until I figure out hop to properly use Github.
A download for the PCB's can be found here: https://ytec3d.com/oasis-download-page/
The driver board hold all components that interface with the HP45. There is nothing new compared to the previous log, so I won't go into too much detail. The TLC59213's are the high side drivers used to power the primitives. I have experimented with double driver chips to solve some issues with the number of primitives that can fire at once. Because this did not seem to fix it, I have not included this. The 4017 and 4081 with level shifter is perhaps not the most elegant or compact. solution, but it has worked incredibly well so far. The nozzle test circuit also leaves room for improvement, but I first want to make this printer work, then make the circuit better.
The driver board interfaces with the controller through 2 16 pin headers. The power arrives on the controller board. This is also to easily add some specific features later.
The controller board holds a Teensy 3.2 right now. It can talk over SPI and USB serial through headers or USB port. Normal serial is not connected to the header and can be used, but is not on a header of it's own. The board has all Teensy I/O pins (including the ones on the back of the teensy) broken out to the 2x 16 pin headers. I am not using all these pins right now, but having them on the board might be useful to add stuff later. Also on the board is a 5V regulator to turn the 12V into 5V (So the teensy regulator does not have to struggle). Finally, there is a header for the encoder that is used to synchronize the printhead with the gantry.
Encoder strip used
The encoder used is the Avago HEDS-9740#150 with 150 lines per inch optical strip. I tried a normal encoder but this was way more compact. This stuff is normally used in inkjet plotters, so it should do well in my printer.
While I was at it, I made a breakout board in the same size for future experiments. It directly breaks out all the high side pins to 2 2x20 headers. 1 ground on each header is included.
The inkjet controller will be the first thing to work on. The PCB's will have a lead time of several weeks and other parts of this project interact with the controller. Also it is the one part that can be used separately in other projects. While I myself will not focus on that right now, I encourage others to try. Universal and open control of the HP45 would open a lot of opportunity for other projects.
Features and function of the HP45
First of a bit of information on the HP45. More of this info can also be found here, but a detailed summary:
The HP45 is an early 2000's (*citation needed) printhead, printing at 600DPI with 300 nozzles. The nozzles are arranged in 2 rows of 150 nozzles @ 300DPI, about 4mm apart and offset by 1/600th of an inch. This arrangement makes printing solid imaged more difficult, but probably is for manufacturing reasons. On several occasions I have simply printed with a single side to simplify printing.
The 300 nozzles are internally connected with a multiplexed array. Each nozzle is essentially a fet and a 30 ohm heater resistor, where the gate is rows (Address) and the input side is columns (primitives). The ground is common in the printhead. In total there are 22 addresses and 14 primitives, giving 308 possible combinations. 8 are unused.
To connect to this matrix, the back of the printhead has 52 connection pads, again in 2 rows. 14 primitives, 22 addresses, 14 grounds and 2 feedback pins. A 10x resistor (10x, function a bit vague) and a thermal sense resistor (TSR). The address pads on each row connect to both sides of the nozzles. The primitive pads connect only to the same side of the printhead.
There are 2 ways of connecting to the pads of the HP45. One is an array of 52 miniature pogo pins soldered on a PCB. I did this for a while, but it is fragile and tedious. The other is an HP45 connector. I had to buy them in bulk, and they are spendy, but they are very robust (still tedious though).
To fire a nozzle, first the address must be powered with 12V. This opens the gate of the fet. After a microsecond or so, the primitive can be powered with a high side 12V for about 1.8 microseconds. Exact time can vary by a few hundred nanoseconds. After this time, the primitive can be closed, and a microseconds or two later the address can be closed and the next can be opened. Especially the primitive is challenging, because it is high side and the timing is critical. Most components either do the high side, or do it in a few hundred nanoseconds, but few do both. Officially the voltage for primitives is not exactly 12V, but 9-13V. The printhead is supposed to test it's own ideal temperature. I have not successfully implemented this yet, and will not on this controller. The 12V may reduce lifetime, but it is an order of magnitude simpler to make.
To get temperature back, there are 2 more pads on the head called 10x and TSR. 10x is a bit of a mystery, but probably some calibrated part in the head that is 10x the resistance of the nozzle (10x 30, seems about right at 300 ohm). The TSR is a resistor is also around 300 ohms and rises 11 ohm per 10 degrees. There is some more relation to the 10x resistor, but that is the basics. The TSR also sits really close to the nozzles, responding almost instantly to the nozzles firing or preheating.
This is the schematic so far. Most complex routing is still not done. This is done while making the PCB. Most routing is not really dependent on the exact pin. Also missing is the controller board. I will keep the microcontroller in the form of a Teensy on a separate board, for several reasons. The most important reason being that Teensy's take a huge amount of PCB space. (And I do want to use a Teensy, for personal preference reasons).
The address circuit is at it's core a series of 4017 decade...Read more »
In the previous log I did very little explanation of how powder and inkjet printing (3DP) works. In this log I will give a brief explanation on 3DP in general, and then give an overview of what the Oasis project will and will not be.
3DP printing uses inkjet to print a binder into layers of powder. The binder is usually a fairly inert liquid (due to the nature of the HP inkjet heads) like water with alcohol. The powder is the material that needs to be printed (gypsum, ceramics, sand etc.) combined with a glue (Maltodextrin, PVA). Wherever the binder hits the powder, it locally melts the glue. Once the binder evaporates, the glue binds the powder particles together. Other combinations are possible, but this is the simplest version.
The 3DP printer provides an X/Y gantry for the inkjet printhead. It also has a (build) hopper with a piston that holds the powder. A system that distributes new powder into the build hopper is also required. A simple way is to have another (feed) hopper that holds the to be printed powder. A spreader is then used to spread a new layer of powder in the build hopper.
The order of operation for 3DP printing is as follows:
After printing, the part can be removed and gently cleaned. The part can then either be used directly or processed to increase usefulness.
The first part of the project will be the Oasis printer. This is the mechanical build part of the project. The core will be an aluminium extrusion frame. The frame will house a removable build surface with two hoppers, and a gantry with the printhead. Also on the gantry will be the spreader and an optical encoder tape to synchronize the inkjet head with the motion controller. A raspberry pi will be at the heart of the printer, talking to both the motion controller and the inkjet controller. The motion controller will be an off the shelf GRBL controller using an Arduino Uno.
Below a few WIP images of the printer with and without cover. I will go over the details in future logs, when I am finishing parts, but most of the basics are there.
The inkjet controller will take care of all the inkjet related stuff. It will receive instructions from the raspberry pi. Motion and inkjet are separated because both are fairly resource intensive operations and inkjet is incredibly timing sensitive. A 10us mistake on the HP45 is enough to destroy a nozzle. The pi sends the inkjet lines with coordinates. The encoder on the printer is used by the inkjet controller to determine the position and print the right line at the right time. At this time both USB serial or SPI are considered. The teensy can do both at a high speed.
For more information on the HP45 itself, go to here. The summary is that the HP45 is a multiplexed array of FET's. 12V on the gate of the FET opens the channel. A ±2us pulse of 12V on the nozzle (called primitive) ejects a drop of ink from that nozzle. The printhead is common ground.
The inkjet controller will be built as a separate module with a Teensy microcontroller. Theoretically This means that it can also be used in different projects. However I will not focus on that. I have had 3 versions of this controller die to some degree of feature creep. This inkjet controller will initially only be programmed to be used on Oasis. As with the mechanical side, I will give more details on the specific components and design in future logs.
Printer control software
To control the printer a program with interface will be written in python. This software will interface with...Read more »
This project did not come out of nowhere. There have been several projects leading up to Oasis. Before I start narrowing down the details of this project, I want to give a quick summary of the projects leading up to this one.
TL;DR: 3 printers and 3 inkjet controllers, just watch the videos.
Focus was made 2012-2013. It was made to answer the question how hard SLS can be. It was a poorly researched question at the time, and I was not yet an experienced engineer, but I wanted to try anyway. Focus was designed to be a simple and cheap laser platform. It had a Ramps2560 at it's core. While it was both cheap and simple, it was unreliable and completely failed to do any laser sintering. The pistons wobbled, leaked powder and jammed after an hour of printing. Sintering required way more hardware than Focus had.
Not to let Focus go to waste, I decided to modify it to powder and inkjet (3DP). It requires roughly the same hardware, and the C6602A was already hacked and known about, due to the open source Inkshield project. The C6602A has 12 nozzles at 96DPI. Focus itself did not support real inkjet in the firmware, but the C6602A was hacked so that a single nozzle could trigger repeatedly, based on an external pin.
It was not fast (a new layer took 30 seconds) or precise, but Focus successfully proved that powder and inkjet was a viable technique. Based on the knowledge of Focus, I built a new powder printer.
(The video is printing on paper, there never were good videos of printing in powder, and this shows how it worked better)
Plan B was a response to Focus, fixing all problems Focus had. It was to be faster, more reliable and capable of real inkjet, not just a hacked inkjet head. Initially the controller was a Megatronics V3 (an Arduino Mega based controller). Reliability was indeed a lot better. Plan B could print a lot longer without jamming. To get it to be faster, the complete powder handling hardware was optimized for speed. This meant an odd 2 feed hopper system and a separately driven spreader. A new layer could be dispensed in under 10 seconds.
Plan B fulfilled every goal. It was a LOT faster, and rarely jammed. The firmware was specifically designed for inkjet. The printing speed was around 50mm/s, the fastest the firmware could handle before skipping functions. The software side never really worked reliably, but it did all it needed to do for me. There were problems though. The frame was made of lasered aluminium, something I had easy access to at the time, but is difficult for others. The gantry was designed for speed, but did not allow for any upgrade. Later upgrades were really difficult to implement.
The controller was later upgraded to an Arduino DUE to increase printing speed to 150mm/s, but Plan B was then stopped to give me resources for a new printer. The C6602A printhead was fine for hobby projects, but not for powder and inkjet printers, and I had a lead on a better printhead.
I started working on the HP45. Several meetings and some patent digging gave me enough confidence to start working on it. The HP45 has 300 nozzles at 600DPI. There was quite a bit of mistakes that I will not go in to now, but slowly but surely I got more control over the HP45.
Several controllers were made, mostly based on the Teensy family. Initial controllers used huge arrays of pogo pins to connect to the 52 contacts on the HP45, later I got a big batch of the original connectors. Most controllers had massive feature creep and quickly grew to a size that I had difficulty managing.
Somewhere in this development, the first version of Oasis was built. It was designed around a Teensy 3.6 as the main controller, handling both motion and inkjet. It printed from SD card using Slic3r SVG files that it parsed on board.
This prototype is the best thing I made so far....Read more »