INK JET PRINTING SYSTEMS
We describe a method of generating data for driving an ink jet print head having a plurality of nozzles to print a portion of an image comprising a plurality of pixels, the method comprising: storing nozzle position data defining spatial positions of said nozzles with respect to said print head in terms of pixel offsets from a reference position on said print head; reading image data for said image, said image data comprising data for said plurality of pixels; inputting head position data defining a position for said print head; and processing said image data using said head position data and said nozzle position data to determine nozzle firing data for controlling said print head to deposit ink at said spatial positions of said nozzles with respect said head position in accordance with said image data.
The present invention is a continuation of U.S. patent application Ser. No. 12/300,904, filed Nov. 14, 2008, which is incorporated in its entirety herein.
FIELD OF THE INVENTIONThe invention is concerned generally with ink jet printing, in particular to methods and apparatus for printing using print heads having a plurality of nozzles and to related print engines.
BACKGROUND TO THE INVENTIONInk jet printers are known in the art for printing images onto a medium (e.g. paper) using a variety of different inks. Ink jet printers also have applications in materials deposition, including functional and non-functional materials (e.g. for fabricating circuits and/or display devices on a variety of substrates). They have many advantages over other forms of printing, in particular they may be configured to print large areas in colour or black and white relatively quickly and they are relatively inexpensive compared with other printing technologies. Background prior art can be found in US 2003/0030715; US 2005/0018032; and U.S. Pat. No. 5,049,898.
It would be advantageous to provide an ink jet printer where the controller software may be configured to accept different print heads and/or different print head orientations, and whereby the printer may be reconfigured for a new print head or print head orientation without replacing the controller software. This would allow the user more choice in terms of print quality versus volume for the same print head, and/or the choice of different sized print heads (and different shapes) for different purposes (and different budgets) and reduce support costs for manufacturers.
SUMMARY OF THE INVENTIONAccording to an aspect of the present invention, there is provided a method of generating data for driving an ink jet print head having a plurality of nozzles to print a portion of an image comprising a plurality of pixels, the method comprising storing nozzle position data defining spatial positions of said nozzles with respect to said print head in terms of pixel offsets from a reference position on said print head, reading image data for said image, said image data comprising data for said plurality of pixels, inputting head position data defining a position for said print head, processing said image data using said head position data and said nozzle position data to determine nozzle firing data for controlling said print head to deposit ink at said spatial positions of said nozzles with respect said head position in accordance with said image data.
Preferably the image data is stored in a memory in pixel order in the image memory space, by using a memory location for each pixel. For example 8 bits per pixel for an 8 bit wide memory (e.g. for a monochrome printer) or 32 bits per pixel for a 32 bit wide memory (e.g. for a colour printer). Alternatively, more than one pixel may be stored in each memory location, according to the number of bits per pixel and the width of the memory. 4 bits, 2 bits and 1 bit per pixel may be particularly suitable, because the extra conversion is a shift. Some processor architectures are highly optimised for bit shifting, for example the ARM processor, and may perform a shift in the same instruction as a load or add. Preferably the processing comprises using the nozzle position data as a pointer into the image memory space to read pixel data for each nozzle from the memory. Preferably print resolution data is read, for example a number in dots per inch, and the image is converted into pixelated image data at that resolution by scaling the image up or down in size according to the magnitude of the print resolution and the native resolution of the printer, this pixelated image data being stored in the image memory space.
The head position data may be provided in terms of a pixel position, thereby allowing a direct reference to the image data without first converting the head position data into a pixel position.
Preferably the nozzle position data describes the spatial position of the nozzles on the print head with respect to a known reference, for example a sweep direction of the print head or a line feed direction of the printer mechanism, and the print head is oriented neither parallel nor perpendicular to either of these references, but at another angle such as between 5 and 85 degrees, for example 15, 30 or 45 degrees. Preferably the method further comprises inputting print head data for a succession of print head positions, for example as the print head sweeps across the page, and outputting firing data for each position to control the ink jet printer to print the portion of the image. Alternatively the method may comprise inputting clock data from the printer, indicating a succession of print head positions, and outputting firing data for those positions. Preferably the succession of print head positions defines a raster scan for printing by the print head.
This allows generating data for a multiple head ink jet printer, by generating data for driving each head using the previous method, and printing multiple portions of the image using the multiple print heads from the same image data. Alternatively, the print heads may be locked at a fixed distance relative to one another, and a single nozzle position matrix may be used having position data for both print heads.
The invention further provides a method of printing using an ink jet print head having a plurality of nozzles to print at least a portion of an image comprising a plurality of pixels, the method comprising: storing nozzle position data prior to said printing, said nozzle position data defining spatial positions of said nozzles with respect to said print head in terms of pixel offsets from a reference position on said print head; and afterwards printing said portion of said image by: reading image data for said image, said image data comprising data for said plurality of pixels; inputting head position data defining a position for said print head; processing said pixel image data using said head position data and said nozzle position data to determine nozzle firing data for controlling said print head to deposit ink at said spatial positions of said nozzles with respect said head position in accordance with said image data, said processing including associating said nozzle position data in terms of pixel offsets with said pixels of said image; and driving said print head using said determined nozzle firing data.
Embodiments of the above-described methods may further comprise measuring and correcting for one or both of substrate rotation and substrate offset during printing.
The invention further provides processor control code to implement the above-described methods, for example on a general purpose computer system or on a digital signal processor (DSP). The code may be provided on a carrier such as a disk, CD- or DVD-ROM, programmed memory such as read-only memory (Firmware), or on a data carrier such as an optical or electrical signal carrier. Code (and/or data) to implement embodiments of the invention may comprise source, object or executable code in a conventional programming language (interpreted or compiled) such as C, or assembly code. The above described methods may also be implemented, for example, on an FPGA (field programmable gate array) or in an ASIC (application specific integrated circuit). Thus the code may also comprise code for setting up or controlling an ASIC or FPGA, or code for a hardware description language such as Verilog (Trade Mark), VHDL (Very high speed integrated circuit Hardware Description Language), or RTL code or SystemC. Typically dedicated hardware is described using code such as RTL (register transfer level code) or, at a higher level, using a language such as C. As the skilled person will appreciate such code and/or data may be distributed between a plurality of coupled components in communication with one another.
According to another aspect of the present invention, there is provided a method of generating nozzle position data for a print head, said nozzle position data defining spatial positions of said nozzles with respect to said print head in terms of pixel offsets from a reference position on said print head, and wherein said pixel offsets are defined with reference to a pixel spacing corresponding to a defined spatial resolution of an image to be printed by said print head.
According to a further aspect of the present invention, there is provided a carrier carrying a memory array storing nozzle position data for a print head, said nozzle position data defining spatial positions of said nozzles with respect to said print head in terms of pixel offsets from a reference position on said print head; and wherein said pixel offsets are defined with reference to a pixel spacing corresponding to a defined spatial resolution of an image to be printed by said print head.
The carrier may comprise a memory chip such as a read only memory (ROM), a flash memory or a battery-backed up static RAM. The memory chip may have a parallel interface or, preferably, a serial interface for a smaller number of connections to the memory.
According to a yet further aspect of the present invention, there is provided an image processing engine for generating data for driving an ink jet print head having a plurality of nozzles to print a portion of an image comprising a plurality of pixels, said image processing engine being configured to: store nozzle position data defining spatial positions of said nozzles with respect to said print head in terms of pixel offsets from a reference position on said print head; read image data for said image, said image data comprising data for said plurality of pixels; input head position data defining a position for said print head; and process said image data using said head position data and said nozzle position data to determine nozzle firing data for controlling said print head to deposit ink at said spatial positions of said nozzles with respect said head position in accordance with said image data.
Features of the above-described aspects and embodiments of the invention may be embodied in any permutation.
These and other aspects of the invention will now be described in further detail, with reference to the accompanying drawings, in which:
Note that the nozzles, when swept across the page, print in a series of lines. However, they do not all reach the start of the page at the same time when the print head sweeps from left to right; indeed a print head position when the top-most nozzle is over the left-hand edge of the page is different from a print head position when the bottom-most nozzle is over the left-hand edge of the page. This is the case for two reasons; firstly the print head is oriented at an angle to the page, and secondly the nozzles are staggered along the print head. Staggering is often done because the nozzle connections to the mechanism controlling the firing of the nozzles often occupy more space than a droplet size from the nozzle on the printed page, so it is difficult or impossible to arrange the nozzles in a straight line. However, this means that a controller driving the print head may send data for the first pixel on the left edge of the page at different times for each nozzle, thereby increasing the complexity of the controller.
The controller receives image data to be printed and optionally a resolution (e.g. dots per inch) in which the image should be printed. By default it may assume a one-to-one relationship—e.g. one printed dot per pixel in the image. Alternatively it may scale the image up or down by calculating, for each pixel position on the page, which is the nearest pixel in the image data. This image data is then converted into nozzle firing data for sending to the print head, including information on the density of the dot required at each printing position and also whether or not a firing pulse should be sent to the nozzle at each printing position. Because the controller software is written for one particular print head and print head orientation, it may only be useful for that particular printer, and in particular it means that the controller software must be rewritten whenever a different print head is used or a different print head orientation is used. Providing a printer with a range of interchangeable print heads or with user-adjustable print head orientations becomes troublesome because the controller must be reconfigured for each combination, which may involve uploading different firmware to the printer each time the print head configuration is changed. Manufacturers would be more likely not to offer this flexibility, due to the extra volume of support calls it could create.
Instead of providing dedicated controller software for each combination of printer mechanism, print head and print head orientation, we will describe separating out the code portions of the controller software from the nozzle data portions. These may be supplied separately to the printer, with the controller software being provided with the mechanism as part of the printer and the print head nozzle data being provided with the print head, for example on a carrier such as a read only memory chip. We will describe a raster image processor suitable for use with such a print head.
AN=AR+D·OX+D·W·OY
Thus, the pixel data for the nozzles may be obtained using the present location of the print head, which may be known because the mechanism is under the control of the controller software, the bit depth of the image, which depends on the image data sent to the printer, the width of the image, which depends on the image data sent to the printer and optionally the resolution desired, and the matrix of pixel offset values.
These calculations may be performed very quickly using modern processor hardware, and depending on the size a memory access pattern generated by this method, memory accesses may fit within a cache size of the processor, improving the overall performance of the system. Optionally bounds checking may be performed after adding D.OX and again after adding D.W.OY in order to check that the particular nozzle is not out of range of the image (e.g. outside the printing area of the page). This may be omitted if it is known that the nozzles will not need to be fired when one is outside the printing area (for example with a print head aligned to either side of the image). Alternatively the expression D.OX+D.W.OY may be precalculated for each nozzle to obtain a single nozzle offset NO which may be added to AR to yield AN for that nozzle. This means that each pixel look-up may be performed with just an add operation and a memory fetch. In order to prevent memory accesses occurring out of bounds when the print head is at one of the edges of the image (so that, for example, some of the nozzles are off the edge of the image), the image data may be padded with a border at one or more of the sides (left, right, top and bottom). The width parameter W may be adjusted to include any side borders and the method may fetch data indicating no printing is to take place for those nozzles.
Scalar multiplication and matrix multiplication may be used, respectively, for this purpose. The operations may be carried out in the reverse order, making no difference to the result, because scalar multiplication is commutative.
A graphical user interface (GUI) may be provided to configure the inputs to this method. For example, in printers with an adjustable print head orientation, the user may set the orientation (θ) and then configure the printer using a GUI for entering the print head orientation. Alternatively, the print head mechanism may detect the orientation of the print head automatically and send the result to the printer for generating the nozzle offset data accordingly. The interface may also provide an adjustable print resolution control, for configuring the image resolution (R) in this method.
Finally the results are stored as an array, for example in RAM in the printer, or in ROM on a memory chip associated with the print head. Contacts for reading out the contents of the memory chip may be provided on the print head interface along with contacts for sending data to the nozzle drivers. Serial memory chips such as EEPROMs are particularly suitable for this purpose as they have only a small number of electrical contacts (e.g. 8) and occupy a small area on a circuit board, and their relatively small size may be more than sufficient for storing the nozzle offset array data.
No doubt many other effective alternatives will occur to the skilled person. It will be understood that the invention is not limited to the described embodiments and encompasses modifications apparent to those skilled in the art lying within the spirit and scope of the claims appended hereto.
Claims
1. A method of printing using an ink jet print head having a plurality of nozzles to print at least a portion of an image comprising a plurality of pixels, the method comprising:
- reading nozzle position data from said print head prior to said printing, said nozzle position data defining spatial positions of said nozzles in terms of pixel offsets from a reference position on said print head; and afterwards printing said portion of said image by:
- reading image data for said image, said image data comprising data for said plurality of pixels;
- inputting head position data defining a position for said print head;
- processing said pixel image data using said head position data and said nozzle position data to determine nozzle firing data for controlling said print head to deposit ink at said spatial positions of said nozzles with respect said head position in accordance with said image data, said processing including associating said nozzle position data in terms of pixel offsets with said pixels of said image; and
- driving said print head using said determined nozzle firing data.
2. A method as claimed in claim 1, further comprising storing said nozzle position data in said print head prior to said printing.
3. A method of printing using a multiple head ink jet printer, the method comprising generating nozzle firing data for driving each head according to the method of claim 1 using a common portion of said image data.
4. A method as claimed claim 1 further comprising, during printing with said ink jet print head, measuring one or both of a substrate rotation and substrate offset and correcting for one or both of said substrate rotation and substrate offset.
5. A method of printing as claimed in claim 1 further comprising generating said nozzle position data for said print head, said nozzle position data defining spatial positions of said nozzles in terms of pixel offsets from a reference position on said print head; and wherein said pixel offsets are defined with reference to a pixel spacing corresponding to a defined spatial resolution of an image to be printed by said print head.
6. A carrier carrying processor control code to, when running, implement the method of claim 1.
7. An image processing engine for generating data for driving an ink jet head having a plurality of nozzles to print a portion of an image comprising a plurality of pixels, said image processing engine being configured to:
- read nozzle position data from said print head prior to said printing, said nozzle position data defining spatial positions of said nozzles in terms of pixel offsets from a reference position on said print head;
- read image data for said image, said image data comprising data for said plurality of pixels;
- input head position data defining a position for said print head;
- process said pixel image data using said head position data and said nozzle position data to determine nozzle firing data for controlling said print head to deposit ink at said spatial positions of said nozzles with respect said head position in accordance with said image data, said processing including associating said nozzle position data in terms of pixel offsets with said pixels of said image; and
- drive said print head using said determined nozzle firing data.
8. An ink jet printing system including the image processing engine of claim 7.
9. A print head for use in the ink jet printing system of claim 8, comprising a data store configured to store nozzle position data for said print head, said nozzle position data defining spatial positions of said nozzles in terms of pixel offsets from a reference position on said print head.
10. A print head as claimed in claim 9, wherein said pixel offsets are defined with reference to a pixel spacing corresponding to a defined spatial resolution of an image to be printed by said print head.
11. A method of generating data for driving an ink jet print head having a plurality of nozzles to print a portion of an image comprising a plurality of pixels, the method comprising:
- reading nozzle position data from said print head defining spatial positions of said nozzles in terms of pixel offsets from a reference position on said print head;
- reading image data for said image, said image data comprising data for said plurality of pixels;
- inputting head position data defining a position for said print head;
- reading said nozzle position data from said print head; and
- processing said image data using said head position data and said nozzle position data to determine nozzle firing data for controlling said print head to deposit ink at said spatial positions of said nozzles with respect to said head position in accordance with said image data;
12. A method as claimed in claim 11, further comprising storing said nozzle position data in said print head.
13. A method as claimed in claim 11, further comprising storing said image data in pixel order in an image memory space using a memory location for each pixel, and wherein said processing comprises using said nozzle position data as a pointer to said image memory space storing said image data to read pixel data for each said nozzle from said memory space.
Type: Application
Filed: Nov 22, 2011
Publication Date: Mar 15, 2012
Inventors: MATTHEW PYNE (Cambridge), Frederick Cheung (Cambridge)
Application Number: 13/302,133
International Classification: B41J 29/38 (20060101);