• A start on the inkjet controller

    Yvo de Haas4 days ago 1 comment

    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).

    On the left, the custom pogo pin circuit, on the right, the HP45 connector (of which I own way too many)

    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).

    Address circuit

    The address circuit is at it's core a series of 4017 decade...

    Read more »

  • An introduction into 3DP and Oasis

    Yvo de Haas03/14/2018 at 11:51 0 comments

      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

      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:

      1. The inkjet head deposits binder wherever the needs to be;
      2. The build piston lowers by the layer thickness, the feed piston raises enough to fill the build area;
      3. The spreader spreads the powder from the feed hopper to the build hopper;
      4. Go to step 1 and repeat until part is done.

      After printing, the part can be removed and gently cleaned. The part can then either be used directly or processed to increase usefulness.

      Oasis Mechanics

      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.

      Inkjet controller

      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 »

  • A bit of background

    Yvo de Haas03/13/2018 at 20:05 0 comments

    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

    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.

    HP45 controllers

    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.

    Oasis prototype

    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 »