The current printer is powered by pressurized air from an air compressor and vacuum from a vacuum pump. Both the pressurized air and vacuum are used to move the ink around.
Pneumatic-Powered Printer
The pressurized air pushes the ink from the ink tank to the printhead and through the nozzle forming the ink stream that hits the opening of the gutter. From there the ink gets drawn into the reservoir tank by vacuum. It gets collected there until the ink tank needs to be refilled. Then the ink gets drawn from the reservoir tank into the pump tank by vacuum. When the pump tank is filled, pressurized air with a higher pressure than that of the ink tank is applied to the pump tank to pump the ink from the pump tank into the ink tank.
Compared to that, the new hydraulic-powered printer is much simpler since it uses ink as a hydraulic fluid. This way the pressurized ink can be taken from the hydraulic system which can also generate the vacuum that is needed for drawing the ink back into the system by the use of a hydraulic-powered venturi pump.
Because of that, there is no need for a separate vacuum pump or air compressor which will make the printer cheaper, less complex, and more compact.
All it needs is a powerful ink pump and a low-pressure air pump to power the hydraulic-powered printer.
For that, I used a Fluid-O-Tech rotating vane pump (200l/h) and an AquaForte v30 pond air pump.
Hydraulic-Powered Printer
Until lately, I didn't know anything about hydraulic systems and so I thought the pump's output would have to go directly to the nozzle, which would have made finding a suitable pump very hard, but just a few weeks ago I read an article about RC hydraulic systems where they used a relief valve for limiting the hydraulic pressure by feeding some of the pump's output back to the tank.
This makes everything easier because, by the use of such a relief valve, a pump running at a constant speed and a much higher flow rate than that what is used by the ink stream can be used for powering the system.
The same can also be done by the use of fixed restrictions and a PWM-controlled pump, but since the constant flow pump + relief valve were cheaper, I used this method.
After reading about the relief valve I looked for such a valve, but since hydraulic system relief valves are usually designed to work at high pressures e.g. from 10 to 200 bar I had to look for a relief valve that is designed to work at low pressures and so I bought a water relief valve that is designed to work from 2 to 8 bar.
Relief Valve
The valve I got works by opening up just enough to keep the pressure before the valve at the set level. When now some valve opens up to supply e.g. the venturi pump, printhead, or viscosimeter with ink, the relief valve restricts the flow out of it to keep the pressure of the system at the set level. It has a "screw" at the top that compresses a spring for setting the pressure.
The valve was the first element of the new printer design and after confirming that it worked the way I thought it would, I ordered a venturi pump for testing both together to see if I could get the set system pressure and the needed vacuum for the printer from those two parts.
Venturi pumpInner Structure of the Venturi Pump
The venturi pump can generate a vacuum by the use of a gas or fluid that "draws" the air with it when it is ejected from a small nozzle into a narrowing and then expanding tube.
I was a bit worried if it would work at all since the type of venturi pump I used is intended to be used with pressurized air, but it turned out to work pretty well with water when I tested it out.
With that, I could confirm that just a supply of fluid at the right pressure and flow rate can be used to power the printer.
A few Parts of the Printer
After testing out the relief valve and venturi pump, next up was finding the right ink pump.
This was not that easy, because the pump has to provide some capabilities to be suitable for the task:
- It has to provide at least 40 psi of pressure.
- It has to provide a flow high enough to power the venturi pump, printhead, and viscosimeter.
- It needs to be able to run continuously for a long time.
- It needs to be able to handle solvents and flammable liquids like ethanol-based ink.
First, I thought about using a multi-chamber diaphragm pump, because these pumps are not that noisy and can provide the needed pressure, but since all pumps, I could find claim to be not suitable for flammable liquids, they were not an option.
Later, I found out that there are specialized diaphragm pumps for lab and industry use that can handle flammable and corrosive liquids, but they are also very expensive.
After more searching, I ordered two hydraulic pumps, one RC hydraulic pump driven by a BLDC motor and another hydraulic pump without a motor.
RC Hydraulic Pump with BLDC Motor
After getting everything ready for running the pump I connected the pump to the relief valve, set the pressure to 40 psi, and let it run for a while.
At first, it looked very promising, but it didn't take long until it became visible that the gears were wearing down rapidly.
The water got darker from metal particles, the pump started stalling from time to time until it finally failed.
So, it seems like this pump can only be used with hydraulic oil and not with water or ethanol.
Top 11A Pump
For testing out the second hydraulic pump I connected it to the relief valve, set the pressure to 40 psi, and connected it to a small AC motor with a GT2 belt. Shortly after, I realized that this pump stalls as soon as there is force applied to the side of the shaft (by the belt in this case).
So, I tried driving it with the AC motor directly, which unfortunately was not able to drive the pump.
Because of that I tried driving the pump with a small DC motor, which could drive the pump, but was also a bit weak so that the speed at the point of highest resistance in the rotation was a bit lower so that the pressure was varying a lot.
Later, I found out that the motor that is usually used for driving this kind of pump is much more powerful than the motors I used for testing.
Shaft of the Pump with a GT2 Pulley
What I learned from this test and the search for the pump is that pumps like these are sold in two ways, separately and also together with the right motor. I think this is done so you don't have to buy both the pump and the motor if only the pump needs to be replaced.
While testing out the last hydraulic pump, I was worried about corrosion, since the one I got seemed to be made out of cast iron, and while the ink with the sodium acetate is no longer that corrosive against brass, aluminum, and copper, it still is corrosive against iron which even starts rusting when it comes in contact with tap water.
Because of that, I searched for other pumps and saw that there are rotating vane pumps available made out of either stainless steel or brass which can provide the needed pressure, flow, and chemical resistance while at the same time being able to run continuously and being able to handle flammable liquids like gasoline and ethanol.
Rotating Vane Pump
The problem at this point was that I did not know where to get the motor for these since I found the pump by accident and never saw the pump + motor assembled.
So, I spent some more time searching until I finally found the same pump type used in portafilter coffee machines.
With this in mind, I searched for a used portafilter coffee machine pump and ordered a cheap one.
After a few days, the pump arrived, but something was wrong... the motor got delivered without its capacitor.
The Motor's Label
So, I ordered a new capacitor and started the motor, but there was still something wrong...
the pump connected to the motor was broken.
Something was broken inside the Pump
Now the knowledge about the offer for the pump I saw before came in handy. I compared the dimensions of the pumps' "mounting rings" and they seemed to be identical.
So, I ordered the pump I saw before.
Motor with new Pump
When I then mounted the new pump and started the motor it finally worked.
The pump is now able to run continuously without overheating and can deliver the needed flow and pressure. Together with the relief valve and venturi pump it can supply all that's needed for running the printer, so I could finally start building the new hydraulic-powered printer.
Working on the new PrinterAll Parts Together
One note on the green thing at the bottom of the plumbing, the gauge, and the pressure regulator before it:
Since there are parts of the printer that apply varying loads on the system like the viscosimeter and especially the venturi pump, the pressure in the system is not perfectly stable. Because of that I used a higher pressure for the system pressure (50 psi) as for the ink stream pressure (40 psi) and added a beer filter with a small green tennis ball inside to the ink line for further stabilization. The air inside the tennis ball gets compressed by the ink and pushes against it. This way it acts like a capacitor and can stabilize the pressure of the ink stream.
The pond air pump I mentioned at the start of this build log is used to pressurize the MakeUp (Solvent) bottle. This is done to make it easier to feed the MakeUp into the vacuum line and it's also used for cleaning the Nozzle with MakeUp.
Bottles for Ink and MakeUp
My current plan is to clean the nozzle at shutdown in an automatic process:
When the printer is turned off, first the ink to the nozzle is turned off. After enough time has passed to empty the gutter line, the vacuum to the gutter is turned off. Then the vacuum to the waste ink tank is turned on and the valve for cleaning the nozzle is opened to draw the ink from the nozzle into the waste ink tank. After some time has passed the vacuum to the waste ink tank gets turned off and the waste ink tank gets vented. Then the MakeUp valve gets turned on and a bit of pressurized MakeUp gets pushed through the nozzle to clean it. After some time the MakeUp valve gets turned off and the vacuum to the waste ink tank gets turned on for some time to dry the line from the nozzle to the waste ink tank.
When this is done, the nozzle should be clean and the ink pump + air pump should be turned off.
The waste ink tank also has a sensor to detect when it's full and a valve to drain it. I think I will keep the draining of the waste ink tank a manual operation to not accidentally spill the waste ink on the floor when no cup is placed under it.
Latest Progress of the Printer
And this is it so far.
Currently, I have all valves and the waste ink sensor wired and the next thing is adding the viscosimeter back to the printer and connecting the temperature, conductivity, and pressure sensor to the Arduino.
When then everything is up and running, I can do a parts description and a building instruction for the fluid system of the new design.
I think this time I will keep the fluid system and the electronics for printing two separate things since the fluid system is mostly finished and there is still a lot of work to do on the printing electronics.
Thank you very much for your interest in my project :)
For the project, I'm currently using an ink made out of ethanol and polyvinyl butyral (PVB) with an additive for increasing its conductivity (sodium acetate).
Until now, I used PVB powder for it and while it can be used for ink without problems, I'm still a bit concerned about using it, because it is not a commonly used item, so it can be a little hard to find a shop that sells it.
PVB Powder
Because of that, I tried to find something else and saw that there is PVB-based 3D printing filament available almost everywhere you can buy filament.
So, I ordered a spool of PVB filament to test out if it dissolves in ethanol while increasing its viscosity.
PVB Filament (Polymaker Polysmooth)
For the test, I wrapped some filament around my hand and cut the windings together to get a few equal-sized pieces that could stand upright inside the cup like spaghetti noodles.
This way the filament dissolved better than when it was cut into shorter pieces or when PVB in powder form was used.
The shorter pieces stuck to the wall or bottom of the cup, and the powder formed clumps that only came in contact with the ethanol on the surface and stayed dry inside so it took a long time until they dissolved whitout constantly breaking them apart with a spoon.
At the same time, the longer pieces came in contact with the ethanol over the whole length and dissolved in about an hour without further ado.
Long Filament Pieces
Filament Spool and Ink from Filament
Filament and InkGlass with PVB Ink
By heating the ethanol before adding the filament the time it takes to dissolve can be reduced even further.
PVB Ink on a Magnetic Stirrer with Heated Plate
After the filament was completely dissolved, I checked the viscosity of the mix with the Zahn 1 cup and saw that its viscosity had increased from around 26s of pure ethanol to over 30s with the filament mixed in.
It also gave the mix a nice color so that no separate color pigments were needed to add color to the mix. It could still be, that on paper it would appear rather white than blue since the color is not as intense as the color of ink pigments.
One disadvantage of the filament compared to the powder could be its purity. While the powder is only made out of PVB, the filament may also contain other substances that could clog the nozzle or the filter, so it's important to keep an eye on that.
Overall, I think the PVB filament can be used to mix PVB ink and if it's easier to get than PVB powder it should be an suitable alternative.
Great thanks to Robert and @Paulo Campos for helping me with this :)
To measure the viscosity of the ink more reliably I replaced the drain time counter with a falling ball viscosimeter, another viscosity measuring method that is also used by many commercial CIJ printers.
9mm Steel Ball
The falling ball viscosimeter works by counting the time a (steel) ball takes to fall a certain distance inside a tube that is filled with the fluid of which the viscosity should be measured.
The size and weight of the ball and the distance never change, but the time reading will change with viscosity. The fall time increases when the viscosity gets higher and decreases when the viscosity gets lower.
I did a lot of testing with it and as long as the fluid inside the tube doesn't move, the time readings are quite stable.
Here is my progress on it in chronological order:
I had the idea of building it in late AugustPossible mounting LocationFirst Prototype
First test of the Viscosimeter
Prototype with Electromagnet Lifter and Stepper Motor
Test of the Stepper Motor Lifter
Testing out a Pump for lifting the Steel Ball
Test of the Pump Lifter
Viscosimeter with optical Switches and new Tube
Test of the optical Sensors and Pump
PVB for increasing ViscosityEthanol and PVB
Standalone Falling Ball Viscosimeter for Long Term Testing of different ViscositiesNew inductive Proximity Sensors
Finished Viscosimeter
Filter and Check Valve to prevent Backflow
Relay for the Pump and Optocouplers for using the 12V Inductive Sensors together with an Arduino
I didn't cut the Cables - To keep the Sensors ready for possible Modifications of the Setup in the Future
Sensor Type and Pinout on the Label
View from the Side
Small Gear Pump for lifting the Steel Ball
6mm Steel Ball used in the 3/8 inch PE Tube if the ViscosimeterViscosimeter implemented into the GUI Continuous Testing - No Pause between Readings
In commercial CIJ printers, the viscosimeter is calibrated by selecting the ink type that is used and doing some test readings with it. Based on the test readings the printers can calculate the relation between measured time and viscosity. This is possible because the exact viscosity of the used commercial ink type is known and always the same. Over time, some of the solvent in the ink bottle can evaporate which increases viscosity, so it's recommended to always use a fresh ink bottle for calibration. With the right calibration, the printers can show the actual kinematic viscosity reading in cPs.
In theory, it would be possible to use this method for this DIY CIJ printer - ordering some ethanol based CIJ printer ink and using it for calibrating the viscosimeter. The problem with it, besides the high price of CIJ printer ink, is that the ink's viscosity is not shared with the public so there would be no reliable values for calculation. It's stated that the ink's viscosity is usually around 5 cPs, but for calculating a precise conversation value it would be no bad idea to get the exact viscosity from the ink's manufacturer. With some luck, it could still be possible to find one ink that has a datasheet that mentions its viscosity. In this case, this ink could easily be used for calibrating the viscosimeter and also for printing if the price tag doesn't make it unattractive compared to self mixed ink.
Another way would be buying some calibration oil (oil with known viscosity) which probably could provide reliable values for calculation. The problem with it would be that for the calibration all lines would have to be cleaned from ink, then filled with oil for calibration, then cleaned again, and then filled with ink again to prevent mixing of both fluids and contamination of the ink. So, with some effort, this could also be a way to get readings in cPs from the viscosimeter.
If no ink or oil is used for calibration it should also be possible to find out the optimal viscosity by keeping the ink pressure steady and looking at the feedback signal while increasing and decreasing the viscosity. The breakup and charging should be the best at the optimal viscosity and should get worse when it's too high or too low. This way it should be possible to only use the time reading of the viscosimeter without calibration.
My personal guess would be that the time count will be enough to keep the printer working.
I'm currently working on the feedback signal analysis and also looking if I can replace the pneumatic based setup with a pump based setup to reduce the complexity of the printer.
Keeping the ink at the right viscosity is essential for getting a stable ink stream breakup and with that stable charging and deflection of the ink droplets.
In the initial design, I counted the time it takes until the ink level of the pressurized tank has dropped from full to empty.
Counter added in November 2022
After using just tap water for a while I tried using Vegetable Glycerin instead of water since it has a higher viscosity.
To measure its viscosity and compare it to the drain time counter I got a Zahn Cup 1 and a Stopwatch.
Stopwatch for counting the drain time of the Zahn Cup
Zahn Cup 1
These cups have a hole on the bottom for fluid to leak out and are used by completely submerging them into a fluid, then lifting them and counting the time until the solid fluid stream from the bottom of the cup starts dripping.
By using the corresponding conversation formula, it's possible to calculate the kinematic viscosity of the measured fluid.
Chart for calculating Kinematic Viscosity
While testing I saw, that the values lined up to some point:
When I added VG to the water, the drain time got longer, when I added water the drain time got shorter.
It worked ok, but since I'm constantly changing parts of the fluid lines that are filled with ink it's hard to prevent that some of it hits the desk or floor, and because Vegetable Glycerin is an oily fluid that not evaporates (in contrast to water), it turned out to be pretty messy to work with and I switched back to water after this test.
The next update to the printer was adding a PPM meter and a temperature sensor for measuring conductivity and temperature.
Since viscosity changes with temperature, I thought it would be a good idea to not only keep track of the viscosity but also of the temperature.
Temperature in ⁰C, Conductivity in ppm
While the conductivity is not related to viscosity it's still important because the ink needs to be conductive for charging.
PPM sensor on the left, temperature sensor on the rightPPM Sensor Amplifier
To increase conductivity I used different additives over time:
For water, I tried out:
- Table Salt
- Baking Soda
- Citric Acid
- Cleaning / Washing Soda
- Sodium Propionate
- Fountain Pen InkFountain Pen Ink mixed with Water for increasing Conductivity and for adding Color to the Ink
There are likely many more additives that are soluble in water, but since I switched from water to ethanol to get a fast drying and water resistant ink, I didn't test out more of them.
Bio Ethanol - Normally used for Heating
Since not every salt that is well soluble in water is also well soluble in ethanol, it was needed to start searching for ethanol soluble salts.
Sodium Propionate
First I tried using Sodium Propionate, which was able to increase the conductivity but added an unpleasant smell to the ink and was quite corrosive on the metal parts.
Measuring Conductivity with another PPM Sensor
I still used it for a decent amount of time.
Because of the corrosion on aluminum, copper, and brass parts that was caused by the sodium propionate and the former used additives, I replaced almost all feed lines and metal parts with either plastic or stainless steel at some point, to make the printer as corrosion resistant as possible.
Old Printhead with Signs of Corrosion on the Brass PartsNew Printhead made of Stainless Steel
To get rid of the unpleasant smell and oily residue of the sodium propionate I searched for another ethanol dissolvable salt and found out that the Calcium Chloride from air dehumidifiers is also soluble in ethanol.
Air DehumidifierCalcium Chloride742ppmIt added a white Color to the Ink
The Sodium Chloride was good for increasing conductivity, but after working with it for a while I saw that it was also very corrosive on the brass, copper, and aluminum parts of the printhead that I could not replace with the last update.
Since it is used for dehumidifying, it is very hygroscopic and forms a closed layer with water underneath it wherever it gets spilled while testing. So it was very corrosive and was somehow dirt attracting with its wet and flaky appearance.
Rust on some of the Stainless Steel Parts, Printhead Bottom covered with Calcium Chloride Calcium Chloride Flakes on every Surface.
So another salt was needed.
After some searching, I found out that Sodium Acetate is also soluble in ethanol so I ordered 1kg of it.
It turned out to be a lot less corrosive than all salts I tried before and it was well soluble in ethanol. The vinegar like smell is also minimal when mixed with ethanol.
An important thing while working with it is that even though it dissolves very well, not that much of it dissolves in ethanol, and if the solution gets saturated, it tends to crystallize and settle on the bottom, which can cause problems at places that are not always filled with ink like vacuum lines and solenoid valves.
Sodium Acetate CrystalsSodium Acetate CrystalsA few Crystals on the grey Parts
In contrast to Calcium Chloride, it's easy to wash it away with ethanol or water to clean the printhead.
At the time I'm writing this, I'm still using the Sodium Acetate without any major problems.
For now, there are:
- The Temperature in ⁰C
- The Conductivity in ppm
- The Viscosity in seconds for draining
While the conductivity and temperature readings give you the current temperature in ⁰C and conductivity in ppm, the viscosity reading is just a number that equals an unknown viscosity without a calibration factor. It still shows a rise or fall of the counted time if the viscosity rises or falls and can be used to keep the viscosity steady.
After working for some time with this viscosity measuring method, I noticed that the time count varies if some dirt particle enters the nozzle without blocking the stream. When this happens the stream is still present, but the orifice size gets slightly reduced which leads to a longer drain time without a change in viscosity.
This measuring method would also no longer be possible if I would switch to a pump feed system instead of a pressurized air feed system, in the future, since this would no longer have a pressurized tank.
Because of these drawbacks, I replaced it with a falling ball viscosimeter which they also use in some commercial CIJ Printers.
Falling Ball Viscosimeter6mm Steel Ball
The falling ball viscosimeter works by lifting a steel ball in a fuild filled pipe and dropping it while counting the time it needs to fall.
I will write more about it in the next build log.
Polyvinylbutyral
For mixing a real ink, that can be used for printing, there needs to be something in it that remains when the ethanol evaporates. While the sodium acetate crystals also remain when the ethanol drys up, they do not stick to the surface very well and they would dissolve again if the surface gets wiped with water.
By adding polyvinylbutyral to the ethanol + sodium acetate mix, not only the viscosity can be modified to fit your needs, but the PVB also sticks nice to the surface and forms a smooth and water resistant coating.
So, it's possible to mix a clear ink from only these 3 ingredients, and by adding some pigments it would also be possible to mix a colored ink.
I think, with that, the ink should be ready for printing without further modifications and as soon as the printing process is working it could actually be used.
Over the last few days, I worked on a new printhead that is more resistant to corrosion than the last one.
Here, you can see the latest prototype which is specially designed for charge testing and has therefore no high voltage electrode and a too-wide gutter which will be replaced when the charging works reliably:
New Printhead with Stainless Steel Bottom and Mounting Rails
In addition to the stainless steel bottom, which I just took from the last printhead prototype, I also replaced the 2040 profiles with 26*18mm stainless steel mounting rails so that the printhead body (including screws and nuts) is now completely made out of stainless steel.
Starting from the back:
- The brass valves were replaced by the same valves as on the printer grid.
- The nozzle assembly is now made out of a plastic 1/4 inch fitting which can in contrast to a metal one come in contact with the "hot/powered" elements of the nozzle assembly, so no isolators are needed.
Piezo Ring and Contacting Plates
New minimalistic Nozzle Assembly
- The charge electrode is now made out of a stainless steel 1/4 inch fitting with a slit cut in it and a hole at the bottom for the strobe LED that illuminates the ink stream to make the breakup visible.
New Charge Electrode with LED
- The phase detector antenna/feedback sensor is now mounted onto a stainless steel bracket.
Phase Detection Antenna
- The high voltage electrode is currently missing.
- The Gutter is now made out of a 1/4-inch stainless steel fitting and a plastic elbow fitting mounted on a stainless steel bracket.
New Gutter
In addition to that I'm currently trying out Sodium Acetate as a "conductivity-increasing agent" which seems to be a lot less corrosive than the salts I tried before.
Sodium Acetate
With the new upgrades the printhead should no longer have the corrosion problems from before and is now ready for a new series of testing.
Here is an image of the whole setup:
The next update will be about the new viscosimeter which I'm currently working on.
Thank you very much for your interest in my projects :)
While testing I realized that the ink that I used caused a lot of corrosion on steel, copper, aluminum, and brass parts:
Corrosion on the Printhead
Corrosion on the Piezo Ring and Contact Plates
Salt Crystals on the Aluminum Profile
Corrosion inside a Fitting
Corrosion on the Charge Electrode, Deflection Plate, and Gutter
I assume this is caused by the sodium propionate that I used for increasing the conductivity of the ink.
Since the ink has to be conductive for the CIJ printing process, it needs to contain something that makes it this way and since all salts that I know so far can cause corrosion on metals like steel, copper, aluminum, and brass, these materials have to be replaced by other corrosion resistant materials like stainless steel, rubber, and plastic to prevent corrosion of the printer and also contamination of the ink.
Fresh Ink on the left, Used Ink on the right
So, I searched for corrosion-resistant fittings to replace all the brass fittings and ultimately stumbled across the Reverse Osmosis plumbing system of white fittings of all sorts + white 1/4 inch and 3/8 inch PE tubing.
Old Setup at the bottom, New Setup at the top
Top Cap of the Vacuum Tank made out of Stainless Steel with Plastic FittingsVacuum Buffer/Overflow Tank, Valves for Draining the Tank, Ink Pressure Regulator in grey, Stainless Steel Vacuum Pump Exhaust Suppressor, Ink FilterFrom left to right: Ink Pressure Tank, Ink Pump Tank, Ink Pressure Overflow Tank + New Plastic Check Valves and Solenoid ValvesVacuum TankValves for Ink and MakeUp at the bottom, Valves for Pump Pressure and Venting at the top, Ink Pressure Regulator on the left, and Pump Pressure Regulator on the rightBesides the Pressure Regulators/Gauges and Vacuum/Pressure Switches, all Parts were replaced by either Stainless Steel or Plastic on the Printer
I think with all brass parts replaced by plastic or stainless steel the printer should now no longer have problems with corrosion caused by a small amount of salt in the ink.
While the printer hydraulics should be fine now, the printhead is still made out of brass, copper, and aluminum and will also need an upgrade to withstand corrosion.
I'm currently working on the feedback signal of the phase detection feature. This signal gets read from the ink droplets which get charged by the phase detection signal.
It took me multiple months until I was able to read anything from the ink droplets. My problem was that I couldn't find anything similar to the "reading of charge on small fast flying droplets".
I read in multiple papers that they used a lock-in amplifier for reading the droplet's charge, which is a pretty expensive instrument that can filter very small signals out of the surrounding ambient noise, by searching for it with the help of a reference signal with the same frequency.
Unfortunately, such an instrument would cost more than all other parts of the project and there also was no IC or ready-to-use module with similar capabilities (besides one from China with a long shipping time).
Another time where @Paulo Campos helped me by giving me the circuit of a CIJ printer's phase detection amplifier.
Thanks a lot, my friend :)
It turned out that the circuit only contained a TL072 Opamp as an amplifier and some filtering - so no lock-in amplifier was needed.
After building and testing the circuit 1:1 which didn't work with my DIY printer, I tried using an "AD620 small signal amplifier module" in combination with a self-built bandpass filter designed for 50kHz, which finally gave me a signal.
AD620 Small Signal Amplifier
50kHz Bandpass Filter
For the sensor or probe for reading the signal, I used a long SMA solder connector, from which I cut off and sanded down the legs to get a flat surface with the shielding on the outside and the probe pin in the middle. For the sensor, shielding is very important, because the signal that gets read from the droplets is smaller than the ambient noise and also smaller than the phase detection signal itself, which gets radiated out from the charge electrode.
Without good shielding, the sensor would pick up the signal from the charge electrode instead of the signal from the droplets.
Sanded down SMA solder connector as Sensor/Probe
Phase Detection Sensor on the Printhead
With the new setup, I could finally get some signal that reacts to the presence of the ink droplets.
Trigger Signal in blue, Feedback Signal in yellow
When I stopped the ink stream by blocking the nozzle with my finger, the signal disappeared and when I turned off the piezo, the signal got replaced by noise. The amplitude of the signal got decreased when the ink droplets passed the sensor at a higher distance and got increased when the ink droplets passed the sensor at a lower distance.
So, it should be the signal I'm looking for since November last year :)
But the signal is not perfect, yet. Normally the phase detection feedback signal has the shape of a hedgehog with the highest voltages in the middle and the lowest voltages on the outside. It shouldn't go negative either and it should also be more stable.
So, there will be some improvement needed until it can be used for selecting the right phase based on it.
However, having this signal gives me something to look at while adjusting things on the printer and doing improvements. I can change something and look at how it affects the signal which gives me a way of feedback that I never had before.
Here are some videos about ink stream detection testing based on the feedback signal:
It's nice to have something to show about this project, again.
Here is another test:
This time with 48V instead of 24V piezo drive voltage. In the video you can see that by adjusting the drive voltage the feedback signal also changes.
Thank you very much for your interest in my project :)
At the time when I started working on the phase detection signal generation, I used an AD9833 for generating a sine wave that drives the piezo and an LM393 Schmitt trigger circuit that converts it to a square wave, which drives the strobe LED that makes the droplet formation visible to the naked eye.
LM393 Schmitt Trigger on the left, AD9833 Signal Generator on the right
Unfortunately, this setup was not suitable for generating the phase detection signal, so I had to find another solution.
Commercial CIJ printers use FPGAs for their signal processing and generation, so I started by buying a beginner FPGA board - the BASYS 3.
BASYS 3 FPGA Development Board
After trying out some tutorials and examples, I quickly realized that using an FPGA is not the best choice for a "low-cost, easy-to-build" open-source project, because of its cost and complexity.
So, another solution was needed.
A photo of all microcontroller boards that I tried out for Signal Generation
After the FPGA, I tried out multiple other microcontroller boards until I tried out the ESP32, which was able to generate pulse sequences like the phase detection signal with its RMT feature.
Unfortunately, I couldn't start different output channels at the same time with it. Even if there seems to be a synchronization manager feature for RMT, I couldn't find out how to get it working.
While searching on the web for infos about the ESP32's RMT feature, I read about the Raspberry Pi Pico's PIO (Programmable IO) feature, which turned out to be a better solution for signal generation than the ESP32's RMT feature.
The PIO feature of the Pico is intended to be used for coding your own communication interfaces to add functionalities to the Pi that it doesn't have out of the box.
The Pico features 8 so-called "state machines" with each of them being able to perform simple operations independently from the main CPU and other state machines.
They run a custom instruction set (no C++ or micropython) of which each instruction takes one clock cycle to be performed, which makes them ideal for time-critical tasks like communication or signal generation for this printer project.
They also can be synchronized, so that all signals needed for the printer's operation can have the same clock source and starting time.
Raspberry Pi Pico and RC Filter for generating a Sine Wave out of a Square Wave
With the PIO feature, I generated the following 4 signals:
- Piezo Drive Signal 50kHz 20us
- Strobe LED Signal 50kHz 20us
- Phase Detection Signal 1.47kHz 680us
- Oscilloscope Trigger Signal 1.47kHz 680us
Because the output of the Raspberry Pi Pico is a digital signal with either around 0V or around 3.3V it was needed to filter the piezo drive signal with an RC filter to get a "close-to-sine-wave-shaped" signal.
In yellow 0V to 3.3V Phase Detection Signal, In green Piezo Signal when it exits the RC Filter
At the current state of the project, the piezo signal gets fed into a 24V 100W audio amplifier, which amplifies it and sends it to the piezo ring at the nozzle.
24V 100W Audio Amplifier for Driving the Piezo
Maybe I will replace the audio amplifier with a dedicated piezo driver, later in the project to get a better drive signal. The square-to-sine wave RC filter is also not optimal and could later be replaced by something else.
Something like a circuit where you can feed in a 0V to 3.3V square wave and get a 100+V sine wave out would be perfect...Maybe later...
For the strobe LED I'm currently using a dedicated pin, which isn't really needed, because I could also just use the piezo signal. Both signals are the same when they exit the Raspberry Pi.
Strobe LED Signal in yellow, Phase Detection Signal in green
However, at the moment the output is not needed for something else and so it's possible to connect the strobe LED directly to the pin without additional wiring.
Strobe LED for making Droplet Formation visible
The phase detection signal is passed to an inverting amplifier circuit that amplifies and inverts it from 0V to 3.3V to around 0V to -12V.
Inverting Amplifier Circuit using a TL082 OpAmpPhase Detection Signal after the Inverting Amplifier
I added the trigger signal because my oscilloscope can not trigger the phase detection signal right - it keeps jumping back and forth.
The trigger signal is just a simple square wave with the same period as the phase detection signal of 680us, which is suitable for triggering the oscilloscope without any jumping.
Trigger signal in yellow, Phase Detection Signal in blue
At the moment I'm just using these 4 signals, which leaves me with another 4 PIOs for performing other tasks.
One will be needed for the feedback signal of the phase detection feature, about which I will write more in the next log and another one will be needed for the timing of the charging signal that charges droplets with a high voltage for printing.
I have no final plan, yet, for how the selection of the right voltage for print charging should work in the end. There are also other things that have to work first before I can start working on this.
But my idea at the moment is to send a timing pulse from the Raspberry Pi Pico's PIO output with the correct phase setting when it gets triggered from the main CPU.
It's not essential that the droplets which print a vertical line are droplets that form right after each other. It would be beneficial for printing speed, but it is more important to get it working at all, so if there would be "spaces" of uncharged droplets between charged droplets, it wouldn't be a problem, either.
So, the Pi has to get the vertical line pattern via serial from a PC or printer controller. Then it has to convert and send them for example via SPI or I2C to a digital potentiometer which controls the gain of an amplifier which controls the print charging voltage. Finally, it has to trigger the PIO which sends the trigger pulse to a transistor which then charges a single droplet.
If this process would take longer than 20us (better 15us, to have some margin) it would miss the opportunity to charge the following drop, which like I said before, wouldn't be a problem, either.
This was just a thought and the final solution for that could look completely different...
More about the Phase Detection Feedback Signal in the next Log.
I started my work on the phase detection feature by reading the manual of a Videojet Excel 170i which I bought for testing. I read that it uses a 420us long 10VDC pulse for charging 28 droplets, which later get analyzed for selecting the right phase. This printer is using a piezo frequency of 66kHz which has a period of around 15us. 420 divided by 15 equals 28 which explains the numbers. This printer can select between 4 phase settings. It uses the gutter instead of a dedicated probe for reading the charge of the droplets. Unfortunately, it was not described how the printer analyzes the signal, so this did not help me much.
At least I learned from it that phase detection is an important part of CIJ printing and that it is done by sending a signal to the charge electrode which later gets read from the droplets to get a feedback system.
The remaining question at this point was, what a phase actually is and how the signal could help find out the right phase.
Fortunately, @Paulo Campos could help by telling me about an improved method that uses 16 instead of 4 possible phase settings and a phase detection sensor/probe instead of the gutter.
Thank you Paulo for helping me again :)
Now I had to implement Paulo's method into my DIY printer, which is no 1:1 copy of another printer, but my own design, so there was some work needed to get it going.
Phase Detection Signal Properties
The signal has to be a sequence of sixteen -12V pulses with each pulse starting with a different phase shift to the piezo's sine wave signal.
This is done to get 16 successive droplets each having a different phase shift setting. These droplets get analyzed by the printer to find out which droplet got the most charge from the -12V pulse for selecting the best phase shift setting, in short phase.
By doing so the printer can choose from Phase 1 with 0⁰ phase shift to Phase 16 with 337.5⁰ phase shift to get the best possible charging quality.
Piezo Signal
Starting with the sine wave that drives the piezo:
For my printer, I chose 50kHz for driving the piezo, because this frequency is compatible with the 40kHz piezo rings, that you can find in ultrasonic cleaners and because it has a period of 20us which makes calculations with it easier than using an odd number.
Common 40kHz Ultrasonic Transducer with two Piezo Rings
A single Piezo Ring
Before talking about the phase detection signal's waveform it's worth mentioning, that droplet formation happens over the whole sine wave period while on the other hand, the charging puls can be pretty short, but has to happen at exactly the right moment of the droplet formation process.
The phase detection feature finds the right moment by looking after the phase with the highest charge so that future charging pulses can be executed with this phase setting.
If parameters like ink pressure or viscosity change, the right moment for charging also changes which gets detected by the phase detection feature, which then selects another phase, that fits better to the new parameters.
Phase Detection Signal Waveform
Given that the piezo frequency is 50kHz with a period of 20us and the goal is to design a phase detection signal that completes a complete 360⁰ phase shift in 16 pulses I used a period of 21.25us for these pulses.
My assumption was:
20us / 16 = 1.25us
21.25us * 16 = 340us
20us * 17 = 340us
So, 16 pulse periods take as long as 17 sine wave periods which means that every pulse starts 1.25us later in the sine wave than the one before. The phase detection signal and the sine wave have to start at the same time and after 17 sine wave cycles / 16 pulse cycles, both waves are in sync again.
For the pulse, I just used a 50% duty cycle square wave, but I could just change the duty cycle if it turns out that another duty cycle would be better, just the period has to stay the same, so that 360⁰ phase shift takes 16 pulse cycles.
I added a 340us pause after the phase detection signal so that the period of the whole signal is 680us (340us signal, 340us pause) which equals a frequency of around 1.47kHz.
Piezo Signal in yellow, Phase Detection Signal in green
An older Picture of both WavesHere you can see a Measurement of the Phase Detection Signal
With that, the signal design was completed.
The next task was generating the signal which I will tell you more about in the next log.
In many CIJ printer manuals and papers about CIJ printing it is described that CIJ printers use a closed loop system to monitor droplet breakup. It works by charging some of the droplets with a test signal, measuring the charge of these droplets and analyzing which one got the best charge from the test signal to choose the right timing for droplet charging.
Until lately, I often read that, but didn't fully understand how exactly the printers do that.
Great thanks to @Paulo Campos for helping me understand how Phase Detection works.
Here is my description of it:
A CIJ printer works by using a piezo for breaking up an ink stream into equal-sized droplets. These droplets get charged to a certain voltage level when they fly through a charge electrode and get deflected out of the stream's flight path according to their charge when they pass by a high voltage deflection plate. According to their deflection angle they hit the surface at a lower or higher position of the vertical line that the printhead can reach from it's position.
For droplet charging the right timing is crucial. The charging pulse needs to take place at a certain moment in the droplet formation process.
That's where phase detection comes into play:
The droplet formation process is based on the piezo's vibration which is based on the piezo's drive signal which is a high frequency sine wave. That means that different stages of drop formation occur at different phase angles of the sine wave. To find out at which phase angle of the sine wave the droplets receive the most charge, a phase detection test is used.
The phase detection test signal is applied to the charge electrode whenever the charge electrode is not used for the charging of droplets that are meant for printing.
The phase testing signal is a burst of 16 pulses that cover 0 to 360 degrees in 22,5-degree steps of the piezo signal's sine wave so that each pulse starts at another phase of the sine wave.
This is done to charge 16 successive droplets with different timings/phase settings which will later be read by a phase detection circuit and the printer controller which then can select the best timing/phase setting to get the best possible droplet charging.
In contrast to print charging, test charging usually uses a low negative voltage instead of a high positive voltage to make sure the ink droplets that are used for testing hit the gutter instead of the printing target and to make it easier for the printer controller to differentiate between both types of charge signals.
A positive voltage leads to negatively charged droplets and a negative voltage leads to positively charged droplets. With that, the printer controller sees the positively charged phase detection droplets as positive spikes and the negatively charged printing droplets as negative spikes and can easily differentiate between them. The duration of the measured spikes is dependent on the time of flight of the ink droplets - It shows how long the ink droplet is present to the sensor.
The signal that gets read from the phase detection sensor usually has the shape of a hedgehog, with the highest charge droplets in the middle and the lowest charge droplets on the outside.
The printer controller then selects the phase setting with the highest charge on its droplet and applies it to the charge pulse when printing.
And that's basically it.
It's worth mentioning, that every changing parameter like ink pressure, viscosity, conductivity, dirt in the nozzle and environmental conditions has more or less effect on breakup or charging, so it's likely that the best phase for charging doesn't stay the same during printing what makes a phase detection function essential for operation.
It's also very useful to have the signal from the charged ink droplets on an oscilloscope screen while adjusting parameters on the printer to see which effect they have on breakup and charging.
To date, I could successfully generate the phase testing signal and just recently I could make some progress on the feedback signal reading.