Xaar 128 Printhead Driver

The Xaar 128 is a piezoelectric inkjet printhead used in large format vinyl sign-making. It *might* be useful in 3d printing, conductive ink, or masking applications.

Why piezo? TLDR: Most inkjet printheads are “thermal”: They work by superheating a fraction of the ink in a chamber, turning it into gas, which expands to force the remainder of the ink out of a nozzle. Superheating limits the range of materials that can be used in these printheads. Piezoelectric printheads are less common, and since they use a mechanical operation to force fluid out of a nozzle, they don’t have to modify the state of the fluid to operate, and can work with a broader range of materials.

More details on the Rep Rap wiki.

Starter source code on GitHub.


  • While I planned to try some different materials with the Xaar 128, I started out with the Solvent Ink that it’s built for. I was mostly using used printheads that I could buy inexpensively on eBay, since new Xaar 128s are pretty expensive. Nozzle clogs were a big problem. I had to flush the nozzles every time I sat down to work. This wasn’t really compatible with an after-hours hacking schedule.
  • I used flexible flat cable (FFC or FPC) to connect my board to the printhead. I’ve been burnt by overflexing ribbon cable before, so I thought this was a good idea. But I didn’t properly anchor the connection points. After some use, I started getting erratic behavior and stalling from the printhead. After a lot of debugging, I found that the leads on one end of my cable had overflexed and would break contact at certain points in the movement. Lesson: anchor connection ends so that no flexing happens near the exposed leads.
  • I was never able to consistently push anything more viscous than solvent ink through the printheads. Epoxy or photo curing resin is much more viscous (eg. ~1000-2000+ cp vs ~10-20). This means these heads may be useful for something like depositing a low viscosity binder for powder printing, but probably not for depositing a material that can harden into a solid by itself. I’d love to find a printhead that can.

13 Replies to “Xaar 128 Printhead Driver”

  1. Hello Kyle,

    I am interested in driver for Xaar 128. because I am going to make a DIY using Xaar 500. Can you send me information ? Thanks

  2. Hi Kyle : There are low viscosity uv curing inks which are likely compatible with Xaar, certainly the Xaar ceramic printing heads. Please reply and I will send you some sample starting formulations.

  3. Hi Kyle : I wish to buy several of these. Please contact me for more information, pricing. Thanks All*n

  4. Hi,
    I want to check Xaar 128 p/h (80 pl-Solvent Inks) for electronics failure. Can anyone suggest me how to procure the testing jig or something similar ? Appreciate your help in advance.

  5. Hi Kyle,

    In your code, does the XVDD output control a relay that switches VDD from the Arduino? I noticed that you only have two relays for the 35V lines but others I have seen are using three relays? Wasn’t sure if you were using a transistor for the 5V Vdd?

    I appreciate the help!

      1. Thanks for the quick reply! When I test the print head I can hear a faint and quick chirp and then silence. I do not have ink so am trying to test the print head with IPA for now. Do you think I could have fried the head? Or is it possible that its not working because the IPA is not viscous enough? The only other thing I think of is I did not put in the diodes that you have but I thought that would only effect performance.

        Thanks again

        1. That “chirp” should be the piezo and if you are hearing it, it’s good sign. Some thoughts:

          Maybe it’s working? The drops from the Xaar 128 nozzles are very small. What’s under your printhead? Paper? How far away is it? When I have used IPA in these printheads, I could see it briefly if I printed onto a glass surface (the face of my phone), about 2mm from the print head. It evaporated within a couple of seconds.

          How many cycles are you trying to execute (how many times are you expecting to “fire” the nozzles?)? Is there any delay between cycles (eg. a timed delay or time taken to move a gantry)? Does it makes sense that the duration of the chirp you here represents the entire operation?

          If not, do you have a logic analyzer? Can you confirm that the printhead is returning to the READY state after each firing?

          If the logic trace looks like the image I’ve shared on github and nothing is coming out of the nozzles, some other possible issues: Nozzles may be clogged. There may be air bubbles in the printhead and/or supply line. There may be too much negative pressure in your fluid supply (eg. if feeding from a reservoir, it may be placed too low relative to the printhead). For these latter issues, there’s some discussion about fluid supply setups in the operations manual.

          Hope this helps.

          1. Hey Kyle,

            Thanks for all your help! I think it might be working but I just need to get the ink supply system working correctly. When I run 10 cycles, I can hear the “chirp” for about 10 times as long so I think it must be it firing.

            My last question for you is, how loud is the print head? All the videos I have seen have stepper motors running at the same time so I am not sure how loud the actual print head is. Im only asking because the “chirp” is just quieter then I thought it would be.

          2. Hi Brandon, That’s good news. I recall it being quiet enough that it was hard to hear in a room with ambient noise. Good luck with your fluid supply.

  6. Hey Kyle,

    I have the print head firing but it seems the quite a lot of IPA comes out (enough that I can see a visible stream through each nozzle while the print head is held an inch or two above the glass surface and a small pool accumulates). I was wondering if this could be caused from not having enough negative pressure on the ink delivery system or If this could be controlled in software?

Leave a Reply

Your email address will not be published. Required fields are marked *