図1は、本実施形態の印刷装置としてのハンドヘルドプリンタを含む印刷システムの構成例を示した図である。ハンドヘルドプリンタ10は、人が片手で持ち運びできる大きさ、重量とされ、ノートや定型用紙等の印刷媒体12上を自由に移動させて、その印刷媒体12上に画像を形成することができるプリンタである。
ハンドヘルドプリンタ10は、インク等の液滴をノズルから吐出して印刷媒体12上に画像を形成するインクジェット方式のプリンタとすることができる。なお、ハンドヘルドプリンタ10は、これに限られるものではなく、細いピンをインクリボンに叩き付けて印刷するドットインパクト方式等を採用することもできる。また、ハンドヘルドプリンタ10は、モノクロプリンタであってもよいし、カラープリンタであってもよい。
ハンドヘルドプリンタ10は、印刷する対象の画像データを受信し、受信した画像データに基づき、印刷媒体12上にインク等を吐出して画像を形成する。画像データは、文字のみからなるテキストデータであってもよいし、図、絵、写真等を含む文書データ、表データ等であってもよい。ハンドヘルドプリンタ10は、画像データとともに、印刷設定情報を受信し、印刷設定情報に基づき画像を形成することができる。印刷設定情報としては、モノクロ/カラーの指定等を挙げることができる。
ハンドヘルドプリンタ10は、赤外線通信、Bluetooth(登録商標)、WiFi(登録商標)等の無線通信により、画像データを保持する機器としてのスマートデバイス11から画像データを受信する。ハンドヘルドプリンタ10は、スマートデバイス11からの画像データを、直接受信してもよいし、アクセスポイント等を介して受信してもよい。ハンドヘルドプリンタ10は、無線通信に限られるものではなく、ケーブル等で接続し、有線通信により画像データを受信してもよい。
スマートデバイス11は、例えば、スマートフォン、タブレット端末、ノートPC等の電子機器とされ、ハンドヘルドプリンタ10と無線通信を行い、自身が保持する画像データをハンドヘルドプリンタ10へ送信する。また、スマートデバイス11は、サーバ等の他の機器から受信して取得した画像データを、ハンドヘルドプリンタ10へ送信することもできる。
スマートデバイス11は、画像データ、その画像データを表示するアプリケーション、OS等を記憶する記憶装置、アプリケーションを実行するCPU、画像を表示する表示装置、その画像の印刷指示を入力する入力装置を備える。なお、表示装置、入力装置は、別個の装置として構成されたものに限らず、これらの機能を備えるタッチパネルとされていてもよい。
ユーザは、スマートデバイス11の電源を入れ、アプリケーションを起動させ、画像データを表示させる。ユーザは、その画像データを印刷したい場合、例えば、タッチパネルに表示された印刷開始ボタンをタップすることにより印刷を指示することができる。この印刷指示を受けて、スマートデバイス11は、その画像データを、無線通信によりハンドヘルドプリンタ10へ送信する。
ハンドヘルドプリンタ10は、スマートデバイス11から印刷対象の画像データを受信する。ユーザは、ハンドヘルドプリンタ10を持ち、印刷媒体12上を自由に移動させる。この間、ハンドヘルドプリンタ10は、各ノズルの位置を算出する。実際には、ハンドヘルドプリンタ10は、各ノズルの位置を、最初に決められた初期位置を基準とした座標位置として算出する。そして、ハンドヘルドプリンタ10は、例えば、受信した画像データを構成する画像要素のデータ(印字データ)の座標位置と算出した座標位置とが一致する場合に、その印字データを、記録ヘッドを制御する制御モジュールに送る。複数のノズルを有する記録ヘッドは、制御モジュールの制御を受けて、その座標位置にあるノズルからインクを吐出させ、印字を行う。ハンドヘルドプリンタ10は、これを繰り返して印刷媒体12上に画像を形成する。
ハンドヘルドプリンタ10は、図1に示すように、箱状のものとされ、インクを吐出するための複数のノズルを有する。ハンドヘルドプリンタ10は、複数のノズルを有する面を、平面状の印刷媒体12に押し当てるようにして使用される。複数のノズルは、押し当てた際に、その先端が印刷媒体12から離間するように配置されている。なお、ノズル先端から印刷媒体12までの距離は、ノズルからインクを吐出して適切に印字することができる距離として予め決定されている。ユーザは、印刷媒体12にハンドヘルドプリンタ10の複数のノズルを有する面を押し当て、印刷媒体12上を左から右へ、一段下げて、右から左へ、というように移動させることにより印刷媒体12に印刷を行う。
図2は、ハンドヘルドプリンタ10のハードウェア構成を示した図である。なお、スマートデバイス11については、通常のPCやスマートフォン等の構成と同様であり、上記で簡単に説明したので、その説明については省略する。ハンドヘルドプリンタ10は、電池等の電源20、各ユニットへ供給する電源を制御する電源回路21を備える。また、ハンドヘルドプリンタ10は、スマートデバイス11から送信された画像データを受け付ける画像データ通信I/F22を備える。
ハンドヘルドプリンタ10は、さらに、メモリ23、2以上のナビゲーションセンサモジュール24、制御モジュール25、操作ユニット(OPU)26、記録ヘッドモジュール27、記録ヘッド駆動回路28を備える。メモリ23は、ハンドヘルドプリンタ10のハードウェア制御を行うファームウェアや記録ヘッドを駆動させるための駆動波形データ等を格納する。
2以上のナビゲーションセンサモジュール24は、詳細は後述するが、ハンドヘルドプリンタ10の初期位置を検出し、初期位置の位置情報として出力する。位置情報は、二次元平面における座標情報である。初期位置の位置情報は、例えば座標(0,0)とされる。また、2以上のナビゲーションセンサモジュール24は、初期位置を基準にして指定された縦横二方向であるX軸方向およびY軸方向への移動距離を算出し、出力する。X軸方向およびY軸方向は、初期位置を検出する際のナビゲーションセンサモジュール(センサ)24の位置を基準とし、その水平方向およびその垂直方向とされる。センサが複数のノズルが並ぶ前後に設けられる場合、ノズルおよびセンサが並ぶ垂直方向がY軸方向とされ、それに垂直な水平方向がX軸方向とされる。
制御モジュール25は、これに限られるものではないが、SoC(System on chip)と、ASIC(Application Specific Integrated Circuit)とから構成することができる。ASICではなく、製造後にユーザが構成を設定できるFPGA(Field Programmable gate alley)を用いてもよい。制御モジュール25は、ハンドヘルドプリンタ10全体の制御を行う。制御の内容については後述する。OPU26は、操作ボタンや液晶ディスプレイ(LCD)等を含む。OPU26は、タッチパネルを備えていてもよい。OPU26は、ユーザからの入力を受け付け、ユーザに対して処理の状況やエラー等を通知することができる。
記録ヘッドモジュール27は、インクを吐出するための複数のノズルを有する記録ヘッドを備える。記録ヘッド駆動回路28は、印刷を行うための印字データと印字タイミングを指示する印字タイミング情報とを受け付ける。記録ヘッド駆動回路28は、印字タイミング情報で指示された印字タイミングに従い、印字データに基づき印刷媒体12にインクの吐出を行うことができるように記録ヘッドの駆動制御を行う。
画像データ通信I/F22が、スマートデバイス11から印刷ジョブ(画像データ)を受信すると、制御モジュール25が、2以上のセンサからの入力情報を基に、記録ヘッド上の各ノズルの位置を算出する。受信した画像データは、メモリ23に格納される。ユーザは、ハンドヘルドプリンタ10を片手で持ち、それを自由に移動させて印刷媒体12上を走査するが、制御モジュール25は、その走査中、各ノズルの位置を算出し続ける。そして、制御モジュール25は、算出した位置に応じた所定領域の画像(周辺画像)のみをメモリ23から取得する。
制御モジュール25は、取得した周辺画像と算出した各ノズルの位置を比較し、1以上のノズルにつき合致と判断した場合、該1以上のノズルに対する印字データを記録ヘッド駆動回路28へ送る。記録ヘッド駆動回路28は、印字タイミング情報も受け付け、記録ヘッドの駆動制御を行い、記録ヘッドにより印刷を実行させる。
ここで、各モジュール等の詳細な構成および機能について説明する。まず、ナビゲーションセンサモジュール24について、図3を参照して説明する。ナビゲーションセンサモジュール24は、ホストI/F30、イメージプロセッサ31、LEDドライブ32、2つのレンズ33、34、イメージアレイ35を含んで構成される。LEDドライブ32は、LED光の照射を制御し、LED光を、レンズ33を介して印刷媒体12に照射する。イメージアレイ35は、印刷媒体12からの反射光を、レンズ34を介して受光する。レンズ33、34は、印刷媒体12の表面に対して光学的に焦点が合うように設置されている。
イメージアレイ35は、受光した光からイメージデータを生成し、イメージプロセッサ31へ出力する。イメージプロセッサ31は、入力されたイメージデータの画像からナビゲーションセンサモジュール24の移動距離を算出する。移動距離は、X軸方向の移動距離dXと、Y軸方向の移動距離dYとして算出される。イメージプロセッサ31は、算出した移動距離を、ホストI/F30を介して制御モジュール25へ出力する。
ここでは、光源として発光ダイオード(LED)を使用しているが、LEDは、表面が粗い印刷媒体12、例えば紙を使用する場合に有用である。これは、表面が粗い場合、影が発生するため、その影を特徴部分として、X軸方向およびY軸方向の移動距離を正確に算出することが可能になるからである。一方、表面が滑らか、あるいは透明な印刷媒体12に対しては、光源としてレーザ光を発生させる半導体レーザ(LD)を使用することができる。LDで、例えば縞模様等を印刷媒体12上に形成することで、特徴部分を作ることができ、それを基に正確に移動距離を算出することができるからである。
次に、ナビゲーションセンサモジュール24の機能について、図4を参照して説明する。ナビゲーションセンサモジュール24は、図4(a)にも示すように、LEDドライブ32、レンズ33、34、イメージアレイ35を備える。LEDドライブ32からの光は、レンズ33を介して印刷媒体12の表面に照射される。印刷媒体12の表面は、拡大してみると、図4(a)に示すように様々な形状の凹凸を有している。このため、様々な形の影が発生する。
イメージプロセッサ31は、予め決められたサンプリングタイミング毎に、レンズ34およびイメージアレイ35を介して反射光を受光し、イメージデータを生成し、生成したイメージデータの画像を、規定の分解能単位でマトリクス化する。すなわち、画像を複数の矩形領域に分割する。そして、イメージプロセッサ31は、前回のサンプリングタイミングで得られた画像と、今回のサンプリングタイミングで得られた画像とを比較し、その差分を検出し、それを移動距離として算出する。
図4(b)に示すような画像が、サンプリングタイミングSamp1、Samp2、Samp3で、この順に得られたものとする。この図4(b)を参照すると、画像中、黒、グレイで表された影である特徴部分の4つの矩形領域が向かって右から左へ1分解能ずつ移動していることが分かる。したがって、Samp1を基準とすると、Samp2では、X軸方向にのみ1分解能移動していることから、その出力値(dX,dY)は、(1,0)となる。また、Samp2を基準とすると、Samp3では、X軸方向にのみ1分解能移動しているため、この出力値も(1,0)となる。
dX、dYは、センサ自体の向きを基準としたX軸方向およびY軸方向の移動距離であり、センサは、これらの移動距離を出力する。したがって、ユーザによりハンドヘルドプリンタ10が印刷媒体12上で左右いずれかの方向へ回転され、それに従ってナビゲーションセンサモジュール24も回転したとしても、その回転成分を検知することはできない。ちなみに、上記の移動距離の単位は、デバイスに依存するが、プリンタを想定した場合、例えば1200dpi程度の分解能が必要である。
次に、制御モジュール25の詳細な構成および機能について、図5を参照して説明する。制御モジュール25は、SoC40と、ASIC50とから構成される。SoC40は、ハンドヘルドプリンタ10全体の制御を行うCPU41と、メモリ23を制御するメモリコントローラ(CTL)42と、センサの位置や各ノズルの位置を算出する位置算出回路43とを含む。これらは、バス44に接続され、バス44を介してデータ等のやりとりを行う。
ASIC50は、ナビゲーションセンサI/F51と、タイミング生成回路52と、記録ヘッド制御回路53と、イメージRAM54、DMAC(Direct Memory Access Controller)55と、回転器56と、割り込み回路57とを含む。これらは、バス58に接続され、バス58を介してデータ等のやりとりを行う。なお、バス58は、バス44とも接続され、SoC40とASIC50はこれらバス44、58を介してデータ等のやりとりを行う。
ナビゲーションセンサI/F51は、センサと通信し、そのセンサからの出力値であるdX、dYを受信し、その値を内部メモリである内部レジスタに格納する。タイミング生成回路52は、センサが光を照射し、印刷媒体12からの反射光をイメージデータとして取得するタイミングの情報を生成し、その情報をナビゲーションセンサI/F51に通知する。すなわち、タイミング生成回路52は、印刷媒体12を読み取るタイミングを指示する。また、タイミング生成回路52は、記録ヘッドを駆動するタイミングの情報を生成し、その情報を記録ヘッド制御回路53に通知する。すなわち、タイミング生成回路52は、印刷を行うために複数のノズルからインクを吐出させるタイミングを指示する。
DMAC55は、位置算出回路43が算出した位置情報を基に、記録ヘッドが備える各ノズルの周辺画像の画像データを、メモリ23から読み出す。イメージRAM54は、DMAC55が読み出した周辺画像の画像データを一時的に格納する。回転器56は、周辺画像を、ユーザにより指定されたヘッド位置や傾きに応じて回転させ、それを記録ヘッド制御回路53へ出力する。回転器56は、例えば、位置算出回路43が位置座標を算出する際に算出した回転角度を取得し、その回転角度を用いて周辺画像を回転させることができる。
記録ヘッド制御回路53は、上記の記録ヘッドを駆動するタイミングの情報から制御信号を生成し、回転器56から出力された周辺画像の画像データを受け付け、どのノズルからインクを吐出させるか判断する。記録ヘッド制御回路53は、判断結果およびタイミングの情報に応じて、インクを吐出させるノズルの情報、印字データを記録ヘッド駆動回路28に出力する。
割り込み回路57は、ナビゲーションセンサI/F51がナビゲーションセンサモジュール24との通信を終了した際、SoC40にその旨を通知し、また、エラー等のステータス情報を通知する。
次に、記録ヘッドモジュール27および記録ヘッド駆動回路28の詳細な構成および機能について、図6および図7を参照して説明する。図6に示す記録ヘッドモジュール27および記録ヘッド駆動回路28の構成は、インクジェット方式のプリンタで一般に採用されている構成である。記録ヘッドモジュール27は、複数のノズルを備え、各ノズルには、アクチュエータ60が設けられている。アクチュエータ60は、サーマル式、ピエゾ式のいずれであってもよい。サーマル式は、ノズル内のインクに熱を与えて膨張させ、この膨張によりノズルからインク滴を吐出させるものである。ピエゾ式は、圧電素子によりノズル壁を押し、内部のインクを押し出すことによりインク滴を吐出させるものである。
記録ヘッド駆動回路28は、アナログスイッチ61と、レベルシフタ62と、階調デコーダ63と、ラッチ64と、シフトレジスタ65とを備えている。記録ヘッド制御回路53は、記録ヘッド駆動回路28に対し、記録ヘッドのノズルの数(アクチュエータ60の数も同じ)分のシリアルデータである画像データSDを、画像データ転送クロックSCKによってシフトレジスタ65内に転送する。転送が終了すると、記録ヘッド制御回路53は、画像データラッチ信号SLnによりノズル毎に設けられたラッチ64に各画像データSDを記憶させる。
記録ヘッド制御回路53は、画像データSDをラッチさせた後、アナログスイッチ61へ各階調値のインク滴を各ノズルから吐出させるためのヘッド駆動波形Vcomを出力する。このとき、記録ヘッド制御回路53は、階調デコーダ63に対してヘッド駆動マスクパターンMNを階調制御信号として与えるが、そのヘッド駆動マスクパターンMNを駆動波形のタイミングに合わせて選択するように遷移させる。階調デコーダ63は、階調制御信号MNとラッチされた画像データとを論理演算し、レベルシフタ62は、論理演算した得られた論理レベル電圧信号を、アナログスイッチ61を駆動できる電圧レベルまで昇圧する。
アナログスイッチ61は、昇圧された電圧信号を受け付け、ON/OFFすることにより、記録ヘッド内のアクチュエータ60へ供給する駆動波形VoutNが各ノズルで異なる波形となる。記録ヘッドは、この駆動波形に基づきインク滴を吐出させ、印刷媒体12上に画像を形成する。
記録ヘッド駆動制御は、図7に示すタイミングで行われる。すなわち、画像データ転送クロックSCKに従って時間t1の間に各ノズルに対する画像データSDが転送される。転送後の時間t2の間に画像データSDがノズル毎にラッチされる。ラッチ後、時間t3の間に階調制御信号MN、ヘッド駆動波形Vcomが入力され、それらにより上記の演算等が行われ、画像データに基づいたインクの吐出が行われる。図7では、4つの階調制御信号MN[0]、MN[1]、MN[2]、MN[3]が階調デコーダ63に入力されている。
これまで印刷システムが備えるハンドヘルドプリンタ10のハードウェア構成およびその機能について説明してきた。実際に、この印刷システムにより実行される処理について、図8を参照して説明する。ステップ800からこの処理を開始し、ステップ801では、ユーザがスマートデバイス11の電源ボタンを押下し、スマートデバイス11はそれを受け付け、電池等から電源が供給されて起動する。ハンドヘルドプリンタ10も電源をONにして起動しておく。ステップ802では、ユーザがスマートデバイス11上で印刷する画像を選択し、スマートデバイス11はその画像の選択を受け付ける。ステップ803では、ユーザが選択した画像の印刷を指示し、スマートデバイス11が印刷ジョブの実行をハンドヘルドプリンタ10に対して要求する。この要求で画像データがハンドヘルドプリンタ10へ送信される。
ユーザは、ハンドヘルドプリンタ10を持ち、印刷したい媒体、例えばノートの上で初期位置を決め、ハンドヘルドプリンタ10の印刷開始ボタンを押下する。ステップ804では、ハンドヘルドプリンタ10が、その印刷開始ボタンの押下を受け付け、ステップ805で、即座にその初期位置を検出し、センサの移動距離の算出を開始する。ステップ806では、ユーザにより自由に移動されるハンドヘルドプリンタ10において、センサの位置を検出し、センサの位置から各ノズルの位置を求め、画像データの位置座標と比較してインクを吐出させるかどうかを判断する。吐出させると判断したノズルからインクを吐出させるために印字データを送り、印刷媒体12への印刷を実行する。印刷媒体12への印刷が終了したところで、ステップ807でこの処理を終了する。
次に、図9を参照して、ハンドヘルドプリンタ10において実行される詳細な処理について説明する。ステップ900からこの処理を開始し、ステップ901では、ハンドヘルドプリンタ10の電源ボタンの押下(電源ON)を受け付け、電池等から電源を供給して起動する。
ステップ902では、ハンドヘルドプリンタ10は、ハンドヘルドプリンタ10に内蔵されるセンサ等の各デバイスを立ち上げ、各デバイスの初期化を行う。初期化では、ユーザが印刷を行うことができるように各種の設定値の設定等が行われる。また、ハンドヘルドプリンタ10とスマートデバイス11との間の通信を確立する。ステップ903では、初期化が完了したかどうかを判断し、完了していない場合はこの判断を繰り返す。完了したと判断した場合、ステップ904へ進み、例えばLED点灯によりユーザに印刷可能な状態であることを通知する。
ステップ905では、ハンドヘルドプリンタ10が、スマートデバイス11から画像データの入力を受け付け、画像が入力された旨をLED点滅等によりユーザに対し通知する。ステップ906では、入力された画像データをメモリ23に格納する。ハンドヘルドプリンタ10は、ステップ907で、印刷開始の指示を受け付けると、ステップ908で、センサによる読み取り、内部メモリへの格納を開始する。
ステップ909では、SoC40が、センサの位置情報を読み取る(リードする)よう、ASIC50内のナビゲーションセンサI/F51に通知する。ナビゲーションセンサI/F51は、センサと通信を行い、センサが格納した位置情報をリードする。ステップ910では、SoC40は、リードした位置情報を初期位置とし、例えば座標(0,0)として格納する。
ステップ911では、ASIC50内のタイミング生成回路52が時間計測を開始し、ステップ912では、予め設定されたセンサのリードタイミングに達したかを判断する。センサリード時間に達した場合は、ステップ913へ進み、ナビゲーションセンサI/F51が、センサが内部メモリに格納した移動距離の情報をリードする。リードタイミングは、記録ヘッドの駆動周期に合わせたタイミングとすることができる。
ステップ914では、SoC40は、ASIC50から移動距離の情報をリードし、位置算出回路43が、前回算出した位置(X,Y)と、今回リードした移動距離(dX,dY)から、現在の位置を算出し、格納する。初期位置のみで、前回算出した位置がない場合は、初期位置と、今回リードした移動距離から現在の位置を算出する。この現在の位置の算出方法については後述する。
ステップ915では、SoC40が、算出した現在のセンサの位置情報をASIC50に通知する。そして、ASIC50が、予め決められているセンサと記録ヘッドの各ノズルの組み付け位置との関係から、各ノズルの位置座標を算出する。この各ノズルの位置座標の算出方法についても後述する。ステップ916では、回転器56が、算出した各ノズルの位置情報を基に、各ノズルの周辺画像の画像データをメモリ23からイメージRAM54へリードする。そして、回転器56が、ユーザにより指定されたヘッド位置およびヘッドの傾きに応じて、その画像データにおける画像を回転させる。周辺画像の画像データ、位置情報についての詳細については後述する。
ステップ917では、ASIC50が、回転させた周辺画像を構成する各画像要素の位置座標と、各ノズルの位置座標とを比較し、ステップ918では、予め設定されたインクの吐出条件を満たすかどうかを判断する。吐出条件は、例えば画像要素の位置座標とノズルの位置座標が一致する場合等である。吐出条件を満たさない場合は、ステップ912に戻り、吐出条件を満たす場合は、ステップ919へ進む。ステップ919では、インクを吐出させるために、記録ヘッド制御回路53へ吐出条件を満たす画像要素の印字データを出力する。この吐出条件、その判断方法、記録ヘッド制御方法についても後述する。
ステップ920では、全印字データを出力したかを判断する。出力していない場合は、ステップ912からステップ919までの処理を繰り返す。出力した場合は、ステップ921へ進み、SoC40は、例えばLED点灯等によりユーザに印刷が終了したことを通知する。なお、全印字データを吐出しなくても、ユーザが十分と判断した場合には、印刷完了ボタンを押下し、SoC40がそれを受け付けて、印刷を完了したと判断してもよい。その通知後、ステップ922へ進み、ハンドヘルドプリンタ10による印刷を終了する。ハンドヘルドプリンタ10は、印刷終了後、ユーザが電源をOFFにすることもできるし、印刷が終了した時点で、自動で電源がOFFにされるようになっていてもよい。
この実施形態では、SoC40とASIC50とが分担して処理を行っているが、CPU41の性能やASIC50の回路規模等により、その役割の切り分けは自由に実施することができる。
各ノズルの位置座標の算出方法を説明する前に、センサと各ノズルの組み付け位置の関係について、図10を参照して説明する。センサは、2以上設けられる。具体的には、図10に示すように、等間隔で一列に並ぶノズル70の配列方向の前後に少なくとも1つずつ設けられる。ちなみに、センサ71a、71b間の距離cは、長い程良い。これは、センサ71a、71bの位置を算出する際にその演算誤差が小さくなるからである。
図10では、2つのセンサ71a、71bが設けられている。このとき、センサ71aの中心から記録ヘッド72の一端までの距離は距離a、センサ71bの中心から記録ヘッド72の他端までの距離は距離bで表すことができる。また、記録ヘッド72の両端から該両端に最も近いノズル70までの距離はそれぞれ距離d、各ノズル70間の距離は距離eで表すことができる。これらの距離a〜eは、予め決められた距離であり、センサ71a、71bの位置座標を算出することで、各ノズル70の各位置座標を算出することができる。
印刷媒体12の横方向をX軸、縦方向をY軸とし、センサ71a、71bの出力軸も同様とする。図10に示すように、ハンドヘルドプリンタ10がユーザによる走査で角度θほど傾いた場合、センサ71a、71bの出力値は、XY軸を基準としたものではなく、角度θほど傾いたX’Y’軸を基準としたものになる。このため、センサ71a、71bの出力値は、X’Y’軸の水平方向、垂直方向へ移動した移動距離となり、印刷媒体12のXY軸の水平方向、垂直方向へ移動した移動距離ではなくなる。このような場合でも、得られた移動距離から逐次、印刷媒体12のXY軸に対する座標位置を算出し、その座標位置を格納するようにしておけば、正常な座標位置を把握することができる。
センサ71a、71bの座標位置を算出する方法について、図11を参照して説明する。図11では、ハンドヘルドプリンタ10が印刷媒体12のXY軸に対して角度θだけ回転していて、さらに走査した際、角度dθだけ回転したところを示している。向かって左側のハンドヘルドプリンタ10は、走査前のプリンタを、向かって右側のハンドヘルドプリンタ10は、走査後のプリンタを示している。
走査前のプリンタが備える2つのセンサ71a、71bの位置座標を(X0,Y0)、(X1,Y1)とし、2つのセンサ71a、71b間の距離をLとする。センサ71aが、印刷媒体12に対して、走査前の位置座標(X0,Y0)から走査後の位置座標に移動するX軸方向への移動距離をdX0、Y軸方向への移動距離をdY0とする。センサ71aが基準とする角度θで傾いたX’軸方向への移動距離をdXS0、Y’軸方向への移動距離をdYS0とする。センサ71bが基準とする角度θで傾いたX’軸方向への移動距離をdXS1、Y’軸方向への移動距離をdYS1とする。
位置座標の算出は、回転移動成分と並行移動成分の2つに分けて考える。回転移動成分は、センサ71aとセンサ71bのX’軸方向の差分から、下記式1により算出することができる。
並行移動成分は、印刷媒体12に対するハンドヘルドプリンタ10の傾きθを保持し、三角関数を用いて、下記式2によりセンサ71aの移動距離dX0、dY0として算出することができる。
このことから、センサ71aの走査後の位置座標は、(X0+dX0,Y0+dY0)として算出することができる。算出した後は、その走査後の位置座標を(X0,Y0)とし、同様の方法で、さらに走査した後の位置座標を算出することができる。
センサ71aの走査後の位置座標を算出した際、センサ71bの走査後の位置座標(X1,Y1)は、下記式3により算出することができる。走査後の位置座標は(X1,Y1)として、次の走査後の位置座標を算出するため、ここでは走査後の位置座標も走査前と同様、(X1,Y1)としている。
これまでの位置座標の算出では、三角関数を使用した例を示した。センサ71a、71bで移動距離を算出し、それから記録ヘッドの各ノズルの座標位置を算出する際、角度dθは無視できるほど小さい値となる。例えば、L=1inch、400mm/sという高速で走査を行い、そのサンプリング周期が100μsであった場合、1サンプリング周期で移動できる距離は40μm、回転できる角度dθは0.0015程度である。このようなdθ<<1ような条件の下では、dθ=sindθ=tandθが成立する。そこで、上記式2は、上記式1および加法定理を使用して、下記式4のように書き換えることができる。
上記式4では、走査前に比較して走査後がどれだけ回転したかを示すdθを使用してsin(θ+dθ)、cos(θ+dθ)を求める必要はなく、sinθ、cosθの値があれば、位置座標を算出することができる。このため、sinθ、cosθを直接管理することができる。この演算は、角度dθが無視できるほど小さい値であることを条件とし、前回算出した位置座標とその移動距離とから位置座標を算出するため、サンプリング周期毎に実施し続ける必要がある。なお、この位置座標の算出をサンプリング周期毎に実施することにより、2つのセンサ71a、71bの印刷媒体12に対する二次元座標を逐次把握することが可能となる。
次に、図12を参照して各ノズル70の位置座標の算出方法について説明する。上述したように、センサ71aの中心から記録ヘッドの一端までの距離は距離a、センサ71bの中心から記録ヘッドの他端までの距離は距離bで表される。また、記録ヘッドの両端から該両端に最も近いノズル70までの距離はそれぞれ距離d、各ノズル70間の距離は距離eで表される。これらの距離a〜eは、予め決められた距離である。センサ71aの位置座標は(X0,Y0)であり、センサ71bの位置座標は(X1,Y1)である。
各ノズル70の座標位置NZLN_X、NZLN_Yは、センサ71a側から配列するノズル70の順番をNとすると、次の式5により算出することができる。
記録ヘッドは、一列にノズル70が並ぶものに限らず、カラー印刷を行うために、二列以上にノズル70が並ぶものであってもよい。センサ71a、71bを結ぶ直線上に配列するノズル70は、上記式5を使用してその位置座標を算出することができる。一方、図13に示すように、その直線上にはないノズル70については、ノズル列間の距離fを用いて、次の式6により座標位置NZLC-N_X、NZLC-N_Yを算出することができる。
各ノズル70の位置座標は、上記式5および式6に示すように三角関数を用いて計算することができるが、三角関数を用いると、処理時間がかかる。図14に示すように、一般にノズル列内のノズル間の距離eはいずれのノズル間でも等しい。先頭ノズル70の位置座標を(XS,YS)、後尾ノズル70の位置座標を(XE,YE)とすると、次の式7に示す単純な比例演算により各ノズル70の位置座標NZLNX、NZLNYを算出することができる。なお、式7中、Eはノズルの数であり、Nは先頭ノズル70から後尾ノズル70へ向けたノズルの順番を示す。
位置座標を、三角関数を用いずに算出する方法としては、上記式7に限らず、下記式8を用いて算出することもできる。下記式8では、ノズル列内の先頭ノズル70の位置座標を(XS,YS)とし、ノズル列を示す直線上の記録ヘッド72から離れた後尾側に仮想点を設け、その仮想点の位置座標を(XE,YE)として使用している。
図15では、ノズル70は一列に192個設けられ、それぞれが距離eで等間隔に設けられている。仮想点は、257番目のノズルの位置座標となる上記の直線上に設けられている。これにより、上記式7より簡単な、2の倍数での単純な演算で各ノズル70の位置座標NZLNX、NZLNYを算出することができる。
次に、図16を参照して各ノズル70の位置座標を算出してからインクを吐出するまでのタイミングについて説明する。タイミング生成回路52は、時間を計測し、予め設定されたリードタイミング、すなわち内部トリガのtim_timerに従ってナビゲーションセンサI/F51でセンサの移動距離dX、dYをリードする(Sens TXD, Sens RXD)。そのリードした移動距離をレジスタ(REG_SENS_RXD)に格納する。図16中、tSCYCは、センサの移動距離を該センサからリードするセンサ読み出しの周期である。また、tSREADは、センサ読み出しに要する時間である。
センサへのリードが完了すると、割り込み回路57が、センサ読み出し完了の割り込み通知(sens_int)を発行する。SoC40は、その通知を受け、位置算出回路43が、レジスタ(REG_SENS_RXD)に格納された移動距離のリードを開始し、リードした移動距離と、前回の位置座標とを基に、現在のセンサの位置座標の算出を開始する。位置座標の算出が終了すると、その算出結果をレジスタ(REG_HEAD_POS)に格納する。図16中、tCALは、1周期当たりのソフトウェア処理時間であり、tSCYC未満の時間とされる。
算出した位置座標に基づき、ASIC50がメモリコントローラ42を介してメモリ23から周辺画像の画像データをリードする(Mem Read)。図16中、tMEMは、CPU41よりヘッド位置の予測値を受けてから、最初の吐出までの印字データを準備するのに要する時間である。記録ヘッド制御回路53は、記録ヘッド駆動周期のトリガ(tim_enctrg)に従い、記録ヘッド駆動回路28へ印字データを転送する(IJ_TXD)。図16中、tJCYCは、記録ヘッド駆動周期であり、tDRVは、記録ヘッド駆動波形(Vcom)中の実際に駆動波形を与える時間である。tJETは、駆動波形が与えられてインクが印刷媒体に着弾するまでの時間で、tPREDICTは、位置情報を読み取ってから、最初のドット出力までの時間、すなわちSoC40により位置予測する時間である。
次に、図17を参照して、印刷対象の画像を紙面に印刷する際の配置、印字データの位置座標、メモリ23への印字データの格納アドレスについて説明する。ここでは、印刷対象の画像が「H」という文字とされている。画像データは、SoC40により入力されると、メモリ23に格納する際、図17(a)に示すように、複数のLineに分割されて格納される。Lineは、1ドット×1行分のブロックサイズを有する画像領域である。ここでは、複数のLineに分割しているが、これに限られるものではない。
ASIC50のDMAC55は、記録ヘッド全体を含む複数Line分の画像領域の画像データを、一定のマージンと合わせてイメージRAM54に格納する。ASIC50のDMAC55は、Line 1からLine Nまでの画像データを、図17(b)に示すように、アドレスが割り振られたメモリ領域のそれぞれに格納する。
記録ヘッド駆動周期の1周期当たりに進む座標値を、図18を参照して説明する。フリーハンド走査の最大速度を400mm/s、インク吐出周期、すなわち駆動周期を100μs、データ階調を1ドット当たり2ビットとし、印字解像度を600dpiとする。この条件を用い、1駆動周期内(1ドットを吐出する間隔)で移動する際に必要なデータ量を算出すると、一方向のデータであれば1.9ビット、周辺8方向のデータであれば15.2ビットが必要とされる。これを、600dpi座標換算すると、0.95となり、0.95ドット間隔で吐出可能ということになる。すなわち、得られた値が1ドット間隔未満であるため、1ドット移動する間に十分にインクを吐出させることができる。
1つのノズルからインクを吐出させる際に必要なデータ量は、一方向にのみ移動するわけではなく、上下左右、斜めのいずれにも移動する可能性があることから、8方向のデータ量が必要となる。この例では、記録ヘッドに192個のノズルを備えるため、1.9×8×192=2918.4ビットのデータ量が少なくとも必要である。
DMAC55が印字データを記録ヘッド制御回路53へ転送する際は、記録ヘッドが複数のLineに跨っていることから、複数のLine分のデータを転送する必要がある。図19では、4つのLineに跨っているため、4つのLineに対応したブロックデータを、メモリ23からリードし、転送する。なお、ユーザによりハンドヘルドプリンタ10の走査で、常に4つのLine上を走査することができるとは限らない。このため、上下1Lineずつ余分にメモリ23からリードし、転送することができる。これにより、上下に1Lineずれたとしても、転送された画像データに基づき印刷を行うことができる。
フリーハンド走査を行い、印刷を行う場合、1回の走査で印刷を行うことができるとは限らない。これは、算出したノズルの位置座標と、転送された印字データの位置座標とが合致しない場合にはインク吐出を行わないからである。このため、定期的に印刷済みデータと印刷データとを比較し、全データをリードしてインクを吐出させたかを判断する必要がある。この比較は、リアルタイム性を要求するものではなく、処理負荷を軽減するため、秒オーダで実施することができる。
この比較は、例えば、最初に印刷データのイメージを作成し、インクを吐出した箇所を白色で書き戻していき、印刷済みの箇所と、白色で書き戻した箇所とを比較することにより実施することができる。これは一例であるため、その他の方法を採用することも可能である。
最後に、ノズル70からインクを吐出させるか否かを判定する方法について、図20を参照して説明する。印刷対象の画像は、例えば1200dpiのドット密度で印刷される。画像は、印字すべきと判定した画像座標にノズルからインクを吐出することにより形成していくが、吐出条件として、ノズルの位置座標と画像座標とが一致した場合にインクを吐出させると判定することができる。
図20に示す例では、白丸で示される画像座標73のうち黒丸で示される画像座標74と、記録ヘッドの先頭ノズル70の位置座標とが一致しているため、その先頭ノズルからインクを吐出させると判定する。その他のノズルについても、画像座標と一致していれば、そのノズルからインクを吐出させると判定する。一方、一致していないノズルについては、そのノズルからインクを吐出させないと判定する。インクを吐出させると判定したノズルに対してのみ印字データを出力し、そのノズルからインクを吐出させて画像を形成する。
フリーハンド走査の軌道はユーザによるため、複数回繰り返して同じ部分をスキャンすることで画像を形成することをベースとしている。ただし、印字解像度に対して、ノズルピッチが極端に短い場合は、複数の画像座標と複数のノズルの位置座標とが一致するケースが多くなるため、1スキャンで画像を形成することが可能である。
図20に示すように、ノズル70からインクを吐出させるか否かは、基本的に画像座標とノズルの位置座標とが一致するかどうかにより判定することができる。ハンドヘルドプリンタ10で低速で印刷を行う場合はこのような判定でもよいが、高速で印刷を行う場合は一致しないケースが増えてくる。これでは、何度もスキャンしなければならない。そこで、スキャン回数を減らすため、画像座標に一定のマージンを持たせる。すなわち、吐出条件として、ある一定の領域を設定し、その領域内にノズルの位置座標があれば、インクを吐出させると判断できるようにする。
例えば、図21に示すように点線で示される各画像座標を含む領域に分けることができる。図21では、先頭ノズル70が、右下の画像座標74を含む領域内にあることから、その画像座標74の画像を現ノズル位置で吐出させると判定し、インクを吐出させる。この場合、画像座標74に一致する場合に吐出していないため、画像座標74からずれた位置にインクが吐出されることになる。このときの最大のずれ量δmaxは、下記式9により算出することができる。式9中、Dは、印字解像度1ドット分の幅である。
この方法では、多少のずれは生じるが、高速で印刷を行うことができる。この方法は、写真等の印刷に適用することは望ましくないが、可読な文字を印刷する場合は、生産性が高くなるので望ましい。
以上のように、本発明の印刷装置、その印刷装置を含む印刷システムおよび印刷方法を提供することにより、フリーハンド走査における正確な二次元位置を検知することができ、それに連動した印字制御を実現できる。また、回転移動成分と並行移動成分に分け、回転移動成分を先に算出することで、演算誤差を軽減することができる。
2つのセンサのうち、回転移動成分が大きいセンサの位置を優先的に算出し、その値を基にもう一方のセンサの位置を算出することで、演算誤差を軽減することができる。また、光源としてLEDを用いる例について説明したが、LEDを用いることで、表面の粗い印刷媒体、例えば紙の検知精度を向上させることができる。一方、表面が滑らかなガラス等の光沢のあるものについては、光源にレーザダイオード(LD)を用いることで検知することができ、使用可能な印刷媒体の幅を広げることができる。
これまで本発明を、印刷装置、印刷システムおよび印刷方法として上述した実施の形態をもって説明してきた。しかしながら、本発明は上述した実施の形態に限定されるものではなく、他の実施の形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができるものである。また、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。