以下に本発明の実施例について、図面と共に説明する。
(1)画像読取装置1の全体構成
図1は、本発明が適用された画像読取装置1の電気的構成を表すブロック図である。本実施例の画像読取装置1は、各種演算処理を実行するCPU11、各種プログラムやデータ等を記憶するROM12、及び、CPU11による演算時に作業領域として使用されるRAM13を備え、CPU11にて各種プログラムを実行して、装置全体を統括制御し、スキャナ機能等を実現する。
この画像読取装置1は、更に、CCDラインセンサ20と、CCDラインセンサ20を制御する読取制御部21と、モータMT1,MT2を制御する駆動制御部17と、エンコーダEN1,EN2からのパルス信号に基づく処理を実行するエンコーダ処理部15と、外部インタフェース23と、を備え、外部インタフェース23を介して、外部機器と通信可能な構成にされている。外部インタフェース23としては、例えば、USBインタフェースや、LANインタフェースを挙げることができる。
CCDラインセンサ20は、ライン状に配列された受光素子(フォトダイオード)群20a及びCCDアナログシフトレジスタ20bを備えるものであり(図7参照)、読取制御部21に制御されて、ラインスタート信号が入力される度、受光素子にて蓄積された画素情報を表す信号電荷を、CCDアナログシフトレジスタ20bに入力し、次のラインスタート信号が入力されるまでの期間に、このCCDアナログシフトレジスタ20bの出力端から、転送クロック信号に従って、順次画素信号を出力する。
読取制御部21は、このCCDラインセンサ20にラインスタート信号及び転送クロック信号を入力して、CCDラインセンサ20を制御し、CCDラインセンサ20に、読取対象である原稿の画像情報を読み取らせ、CCDラインセンサ20から出力される読取結果としての画素信号を、ディジタルの画素データに変換する。そして、各画素データを配列してライン画像データを生成し、これをRAM13に書き込む。
このCCDラインセンサ20は、自動搬送読取機能の作動時、所定の読取位置に固定され、読取制御部21の制御を受けて、ADF装置150(図2参照)の動作により読取位置を通過する原稿を読み取る。また、CCDラインセンサ20は、静止原稿読取機能の作動時、駆動制御部17が制御する読取モータMT1の回転力を、キャリッジを介して受けて、原稿が載置されたプラテン102A下で、画像読取方向に移動し、その移動と共に、原稿の画像情報を、ライン毎に読み取る。
詳述すると、画像読取装置1の筐体には、図2に示すように、静止原稿読取機能用の画像読取窓(以下、静止読取窓という。)102、及び、自動搬送読取機能用の画像読取窓(以下、自動読取窓という。)103が設けられている。これら両読取窓102,103は、ガラスやアクリル等の透明なプラテン102A、103Aにて閉塞されている。図2は、本実施例の画像読取装置1の機械的構成を示す断面図である。
この画像読取装置1においては、更に、装置本体101の上面側に、両読取窓102,103を覆う原稿カバー104が揺動可能に組み付けられており、静止読取窓102にて原稿読取が行われる場合には、使用者により、この原稿カバー104が手動操作にて上方側に開かれ、読取対象の原稿が静止読取窓102に載置される。
一方、装置本体101の内部には、両読取窓102、103の直下において、原稿に照射されて反射した光を受光し、その受光した光に基づいて画素信号を生成する上述のCCDラインセンサ20が、移動可能に設けられており、このCCDラインセンサ20は、長手方向(換言すると受光素子配列方向)が、CCDラインセンサ20の移動方向とは、垂直な方向に延びている。
具体的に、このCCDラインセンサ20は、キャリッジ106を介して装置本体101の長手方向(図2の左右方向)に移動可能に組み付けられており、自動搬送読取機能の作動時、自動読取窓103の直下に停止配置される。一方、静止原稿読取機能の作動時には、静止読取窓102の直下で、駆動制御部17に制御されて、定速移動する。
尚、本実施例では、キャリッジ106が、駆動プーリ107及び従動プーリ108に掛けられたベルト109に連結されており、このベルト109には、ギヤを介して、DCモータで構成される読取モータMT1が接続されている。
即ち、静止原稿読取機能の作動時、CCDラインセンサ20は、読取モータMT1の回転力をベルト109を介して受け、ベルト109と平行に設置されたガイド軸111に案内されながら、装置本体101の長手方向を真っ直ぐ移動する。図3は、CCDラインセンサ20の移動態様を表す説明図である。
読取モータMT1の回転軸には、読取エンコーダEN1が設けられており、読取エンコーダEN1は、読取モータMT1が所定角度回転する度に、パルス信号(A相信号、B相信号)を出力するロータリーエンコーダとして構成されている。画像読取装置1は、読取モータMT1が所定角度回転すると、CCDラインセンサ20が、所定距離を移動する構成にされており、本実施例では、この読取エンコーダEN1のパルス信号に基づき、エンコーダ処理部15にて、CCDラインセンサ20の位置や移動速度を検出し、更に、A相信号及びB相信号に基づき、モータの回転方向を検出する。
そして、画像読取装置1は、この検出結果に基づき、駆動制御部17にて、読取モータMT1を制御し、CCDラインセンサ20を定速で、ガイド軸111に沿って移動させつつ、読取制御部21にて、CCDラインセンサ20を制御し、静止画像読取機能を実現する。
この他、読取対象の原稿を自動読取窓103に搬送するADF装置150は、原稿カバー104における自動読取窓103に対応する部位に、設けられており、自動搬送読取機能の作動時において、ユーザにより原稿トレイ165に積層載置された原稿を、分離して、読取位置である自動読取窓103に、搬送する。
このADF装置150は、積層された原稿を1枚ずつ分離する分離機構として、最上層に載置された原稿に搬送力を付与する分離ローラ153と、分離ローラ153に対して対向配置されて分離ローラ153の反対側から原稿に接触し所定の搬送抵抗を付与する分離パッド154と、原稿トレイ165に積層された原稿を吸引するようにして分離ローラ153に原稿を送り出す吸入ローラ155と、を備える。
また、ADF装置150は、分離機構にて分離された原稿を自動読取窓103に搬送する搬送機構として、分離機構から分離搬送されてきた原稿の搬送方向を自動読取窓103側に向けて転向させながら搬送力を付与する給紙ローラ159と、原稿を給紙ローラ159に押し付ける一対のピンチローラ160と、原稿押さえ161と、排紙ローラ162と、原稿センサアクチュエータ164と、を備える。
尚、ADF装置150を構成する各ローラは、読取搬送モータMT2の回転力を受けて回転し、原稿を、原稿トレイ165から排紙トレイ166へと搬送する構成にされており、画像読取装置1では、読取搬送モータMT2が所定角度回転すると、読取対象の原稿が、所定距離移動する。
原稿押さえ161は、搬送されてきた原稿を自動読取窓103側に押さえるものである。CCDラインセンサ20は、自動搬送読取機能の作動時、この原稿押さえ161の下方に配置された状態で、この地点を通過する原稿を読み取る。
また、原稿センサアクチュエータ164は、原稿押さえ161の上流に配置され、原稿が通過したか否かを検出するものである。即ち、本実施例では、原稿センサアクチュエータ164からのオン/オフ信号と、DCモータで構成される読取搬送モータMT2の回転軸に設置された読取搬送エンコーダEN2からのパルス信号とに基づき、エンコーダ処理部15にて、原稿の搬送位置を検出する。尚、読取搬送エンコーダEN2は、読取搬送モータMT2が所定角度回転する度に、パルス信号(A相信号、B相信号)を出力するロータリーエンコーダである。
そして、画像読取装置1は、この検出結果に基づき、駆動制御部17にて、原稿の搬送を制御し、原稿を読取位置へ一定速度で搬送すると共に、読取制御部21にて、CCDラインセンサ20を制御し、自動搬送読取機能を実現する。
尚、静止原稿読取機能は、原稿トレイ165に原稿が未載置の状態で、当該画像読取装置1に設けられた読取キー(図示せず)が押下操作されたり、外部インタフェース23を通じて読取指令が入力されると、CPU11が実行するプログラムにより作動を開始する。この作動により、画像読取装置1では、静止読取窓102に載置されている原稿が読み取られる。
一方、自動搬送読取機能は、原稿トレイ165に原稿が載置された状態で、読取キーが押下操作されたり、外部インタフェース23を通じて読取指令が入力されると、CPU11が実行するプログラムにより作動を開始する。画像読取装置1では、原稿トレイ165に載置された原稿が空になるまで、この自動搬送読取機能が繰返し動作し、原稿トレイ165に載置されている各原稿が、順次読み取られる。尚、原稿トレイ165に原稿が未載置であるか否かは、原稿トレイ165に設けられた図示しないセンサの検出信号に基づき、判断することができる。
(2)エンコーダ処理部15及び駆動制御部17の詳細構成
続いて、エンコーダ処理部15及び駆動制御部17の詳細構成について、図4〜図6を用いて説明する。図4は、エンコーダ処理部15及び駆動制御部17の構成を表すブロック図である。
(2.1)エンコーダ処理部15の構成
本実施例のエンコーダ処理部15は、エンコーダEN1,EN2の夫々に対して、エンコーダエッジ検出部31及び位置カウンタ33及び周期カウンタ35の組を有し、これらの組により、エンコーダEN1,EN2が設置されたモータMT1,MT2の回転量、結果的には、搬送対象の移動量を検出する。
具体的に、エンコーダ処理部15のエンコーダエッジ検出部31は、対応するエンコーダEN1,EN2から入力されるパルス信号の立ち上がりエッジ(例えば、A相信号の立ち上がりエッジ)を検出し、このエッジの検出毎に、エッジ検出信号を出力する構成にされている。このエッジ検出信号は、対応する組の位置カウンタ33及び周期カウンタ35に入力される。
尚、読取エンコーダEN1からのパルス信号(エンコーダ信号)が入力される読取エンコーダEN1用のエンコーダエッジ検出部31から出力されるエッジ検出信号は、読取エンコーダEN1用の位置カウンタ33及び周期カウンタ35に入力されると共に、静止原稿読取機能の作動時、読取制御部21が備える駆動停止指令生成部49、時間計測部55、及び、強制同期指令生成部59に入力される。
また、読取エンコーダEN1用の位置カウンタ33から出力される値enc_cnt及び読取エンコーダEN1用の周期カウンタ35から出力される値enc_cycは、駆動制御部17に入力される。また、読取エンコーダEN1用の位置カウンタ33から出力される値enc_cntは、静止原稿読取機能の作動時、読取制御部21が備える搬送量算出部51、及び、強制同期指令生成部59にも入力される。
この他、読取搬送エンコーダEN2からのパルス信号が入力される読取搬送エンコーダEN2用のエンコーダエッジ検出部31から出力されるエッジ検出信号は、読取搬送エンコーダEN2用の位置カウンタ33及び周期カウンタ35に入力されると共に、自動搬送読取機能の作動時、読取制御部21が備える駆動停止指令生成部49、時間計測部55、及び、強制同期指令生成部59に入力される。
また、読取搬送エンコーダEN2用の位置カウンタ33から出力される値enc_cnt及び読取搬送エンコーダEN2用の周期カウンタ35から出力される値enc_cycは、駆動制御部17に入力される。また、読取搬送エンコーダEN2用の位置カウンタ33から出力される値enc_cntは、自動搬送読取機能の作動時、読取制御部21が備える搬送量算出部51、及び、強制同期指令生成部59にも入力される。
尚、周期カウンタ35は、画像読取装置1がオンされると、図5(b)に示すように、対応するエンコーダエッジ検出部31からエッジ検出信号が入力される度、そのエッジ検出信号の入力時間間隔(今回エッジ検出信号が入力された時点と前回エッジ検出信号が入力された時点との時間間隔)を検出して、検出した入力時間間隔を、上記値enc_cycとして、出力する構成にされている。このような動作により、読取エンコーダEN1用の周期カウンタ35は、読取モータMT1が一定角度回転するのに要した時間、結果的には、CCDラインセンサ20の単位距離当たりの移動時間を検出する。同様に、読取搬送エンコーダEN2用の周期カウンタ35は、原稿の単位距離当たりの移動時間を検出する。尚、上記移動時間の逆数は、速度を表し、駆動制御部17では、この速度情報を用いて、制御対象のモータを制御する。
また、位置カウンタ33は、画像読取装置1がオンされると、図5(a)に示す処理を開始し、以後、継続的に、値enc_cntを更新する。図5(a)は、位置カウンタ33が実行する処理を表すフローチャートである。ここでは、読取エンコーダEN1用の位置カウンタ33が実行する処理について、図5(a)を用いて説明するが、読取制御エンコーダEN2用の位置カウンタ33においても、読取エンコーダEN1用の位置カウンタ33と、同様の処理が行われる。
位置カウンタ33は、図5(a)に示す処理を開始すると、まず、搬送対象(CCDラインセンサ20)が所定の原点位置(ホームポジション)に配置されていることを条件として、変数enc_cntをゼロにリセットし(S110)、その後、エッジ検出信号が、読取エンコーダEN1用のエンコーダエッジ検出部31より入力されるまで待機する(S120)。そして、エッジ検出信号が入力されると、対応する読取モータMT1の回転方向を判断し(S130)、読取モータMT1の回転方向が順方向である場合、変数enc_cntを1加算し(S140)、その後、S120に移行する。一方、読取モータMT1の回転方向が逆方向である場合には、変数enc_cntを1減算し(S150)、S120に移行する。尚、エンコーダ処理部15には、各エンコーダについて、エンコーダから入力されるA相信号及びB相信号に基づき、対応するモータの回転方向を識別する機能が設けられているものとする。
このようにして、位置カウンタ33は、モータが順方向に回転している場合、エッジ検出信号が入力される度に、変数enc_cntをカウントアップし、モータが逆方向に回転している場合、エッジ検出信号が入力される度に、変数enc_cntをカウントダウンする。これにより読取エンコーダEN1用の位置カウンタ33では、CCDラインセンサ20の位置が検出され、読取搬送エンコーダEN2用の位置カウンタ33では、原稿の搬送位置が検出される。
(2.2)駆動制御部17の詳細構成
続いて、駆動制御部17の構成について説明する。駆動制御部17は、図4に示すように、読取モータMT1及び読取搬送モータMT2を、駆動回路37を介して制御するモータ制御部39を備える。モータ制御部39は、制御対象のモータに取り付けられたエンコーダに対応する位置カウンタ33及び周期カウンタ35の出力enc_cnt,enc_cycに基づき、制御対象のモータMT1,MT2を制御する。
詳述すると、モータ制御部39は、エンコーダ処理部15が有する読取エンコーダEN1用の位置カウンタ33及び周期カウンタ35からの値enc_cnt,enc_cycに基づいて、読取モータMT1を制御する共に、読取搬送エンコーダEN2用の位置カウンタ33及び周期カウンタ35からの値enc_cnt,enc_cycに基づいて、読取搬送モータMT2を制御する。
具体的に、このモータ制御部39は、読取機能が作動すると、CPU11からの指令を受け、制御対象として読取モータMT1及び読取搬送モータMT2のいずれか一方を選択し、選択した制御対象を制御するために、図6に示す処理の実行を開始する。尚、静止原稿読取機能の作動時には、制御対象として読取モータMT1を選択し、自動原稿読取機能の作動時には、制御対象として読取搬送モータMT2を選択する。
その他、モータ制御部39は、読取対象の読取終了前に、モータ停止指令信号としてのmtstop信号(詳細後述)に基づき、図6に示す処理を終了した場合、CPU11から読取再開指令が入力されたときに限って、再び、図6に示す処理の実行を開始する。
図6は、モータ制御部39が実行する処理を表すフローチャートである。
モータ制御部39は、図6に示す処理を開始すると、モータ駆動設定を行い、モータ回転方向を順方向(画像読取方向)に設定する(S310)。また、S310では、読取解像度に応じて、モータの目標回転速度を設定する。
また、この処理を終えると、モータ制御部39は、先駆けてS310で行った駆動設定の内容に従い、制御対象のモータを制御する(S320)。具体的に、S320では、設定された目標回転速度周辺まで、モータの回転を加速させ、その後、搬送負荷によらず、モータの回転速度が目標回転速度となるように、モータの制御を行う。本実施例では、このようにして、搬送対象を一定速度で画像読取方向に移動させる。
また、当該制御の実行中には、読取終了信号(詳細後述)が入力されているか否かを判断し(S330)、読取終了信号が入力されていない場合には(S330でNo)、駆動停止指令生成部49から入力されるmtstop信号が値1であるか否かを判断する(S340)。そして、読取終了信号が入力されておらず(S330でNo)、mtstop信号が値1でない場合には(S340でNo)、S330,S340での判断を行いながら、モータの制御を継続的に実行する。
一方、mtstop信号が値1に切り替わると、制御対象のモータを減速・停止させる処理を行う(S350)。そして、モータが停止した後には、モータ駆動設定を行い、モータ回転方向を画像読取方向とは逆方向に設定すると共に、モータの目標回転速度及び回転時間を、予め定められた所定値に設定する(S360)。尚、S360では、モータの目標回転速度及び回転時間として、「S350でモータが減速・停止するまでに要する回転量の最大値に、S320でモータを目標回転速度に収束させるのに必要十分なモータ回転量を加算した量を、モータが回転する」のに必要な値が設定される。この所定値は、本実施例において、設計段階で予め定められているものとする。
また、この処理を終えると、モータ制御部39は、モータを、駆動設定時の設定内容に従い、所定時間、逆方向に回転させる(S370)。この動作によって、モータの回転力により搬送される搬送対象(CCDラインセンサ20又は読取対象の原稿)は、mtstop信号が値1に切り替わった時点にいた地点よりも、加速に十分な前の地点(詳細には、搬送対象が、後述する読取再開基準位置restart_cntに到達するまでに定速走行可能な地点)に、後退させられる。そして、S370におけるモータの回転・停止が完了すると、一旦休止する。
一方、モータ制御部39は、読取終了信号が入力されると(S330でYes)、作動中の読取機能が静止原稿読取機能であるか否かを判断する(S380)。そして、静止原稿読取機能である場合には(S380でYes)、制御対象のモータを減速・停止させる処理を行い(S390)、モータが停止した後には、モータ駆動設定を行って、モータ回転方向を画像読取方向とは逆方向に設定する(S400)。
また、この処理を終えると、モータ制御部39は、制御対象のモータ(読取モータMT1)を駆動して、搬送対象(CCDラインセンサ20)を、ホームポジションまで搬送する(S410)。そして、CCDラインセンサ20をホームポジションまで搬送すると、一旦休止する。尚、CCDラインセンサ20のホームポジションは、本実施例において、自動原稿読取機能作動時のCCDラインセンサ20の固定位置に設定されている。
その他、作動中の読取機能が自動搬送読取機能である場合(S380でNo)、モータ制御部39は、制御対象のモータ(読取搬送モータMT2)を、搬送中の原稿が排紙トレイ166に排出されるまで駆動し、原稿の排出が終了した時点で、モータの回転を止めて(S420)、一旦休止する。
(3)読取制御部21の詳細構成
続いて、読取制御部21の詳細構成について説明する。図7は、読取制御部21の詳細構成を表すブロック図である。
図7に示すように、読取制御部21は、読取フロントエンド41、画データ処理部43、ローカルRAM45、駆動停止指令生成部49、搬送量算出部51、読取長算出部53、時間計測部55、再開位置設定部57、及び、強制同期指令生成部59を構成要素として備え、これら各部を用いて、本発明特有の読取制御を実現する。以下、各部の詳細について、個別に説明する。
(3.1)読取フロントエンド41の詳細
本実施例の読取制御部21が備える読取フロントエンド41は、CCDラインセンサ20に接続され、CCDラインセンサ20に対する制御信号を入力すると共に、CCDラインセンサ20から入力される読取結果としての画素信号を受け付けて、処理するものである。
この読取フロントエンド41は、ラインスタートトリガ信号生成部41a、ラインスタート信号生成部41b、及び、転送クロック信号生成部41cを備え、ラインスタートトリガ信号生成部41aにて周期的にラインスタートトリガ(l_start_trg)信号を生成し、このラインスタートトリガ信号に基づいて、CCDラインセンサ20にライン画像の読取タイミングを指定するためのラインスタート信号を入力する。
ラインスタートトリガ信号は、ラインスタート信号の出力タイミングを規定する信号であり、CCDラインセンサ20に入力されるべきラインスタート信号の入力周期で、ラインスタートトリガ信号生成部41aにより生成され、ラインスタート信号生成部41bに入力される。
尚、ラインスタートトリガ信号生成部41aは、読取機能が作動すると、強制同期指令生成部59からの同期指令を受けるまで待機し、強制同期指令生成部59からの同期指令を受けると、その指令入力のタイミングで、ラインスタートトリガ信号を出力し、以後、周期的に、ラインスタートトリガ信号を出力する(図20(a)参照)。これにより、本実施例では、所定の読取開始位置init_posから、CCDラインセンサ20での読取動作が開始される。
また、ラインスタート信号生成部41bは、ラインスタートトリガ信号の入力タイミングで、CCDラインセンサ20に適合する規定のパルス幅のラインスタート信号を、CCDラインセンサ20に入力するものである。このラインスタート信号が入力されるとCCDラインセンサ20では、受光素子に蓄積された信号電荷がCCDアナログシフトレジスタ20bに入力され、ラインスタート信号の当該入力以前に読み取った画像情報がCCDアナログシフトレジスタ20bに記憶保持される。また、このタイミングで、受光素子では、信号電荷がリセットされ、光電効果を利用した新たな読取動作が行われる。
また、転送クロック信号生成部41cは、CCDアナログシフトレジスタ20bに画素信号を出力させるための転送クロック信号を生成するものであり、この転送クロック信号は、CCDラインセンサ20に入力される。
この転送クロック信号の入力により、CCDアナログシフトレジスタ20bに記憶された1ライン分の画像情報は、画素信号として、次のラインスタート信号が入力されるまでの期間に、CCDアナログシフトレジスタ20bから一通り出力される。
また、CCDアナログシフトレジスタ20bから読取フロントエンド41に入力される画素信号は、読取フロントエンド41が有するA/D(アナログ/ディジタル)変換器41d(図8参照)にてディジタルの画素データに変換され、各画素データは、一ライン分、シリアルに配列されて、ライン画像データとして、画データ処理部43に転送される。
尚、このように構成された読取フロントエンド41は、ラインスタートトリガ信号生成部41aから出力されるラインスタートトリガ信号を、搬送量算出部51及び読取長算出部53及び時間計測部55にも入力する。
また、読取フロントエンド41は、停止指令信号としてのstop_sig信号が値0から値1に切り替わった時点で、ラインスタートトリガ信号及びラインスタート信号の出力を休止すると共に、この時点でCCDアナログシフトレジスタ20bに記憶保持されている画像情報が、画素信号として一通り出力されるまで、転送クロック信号の出力を継続し、その後、画素信号が一通り出力されると転送クロック信号の出力を休止する。即ち、読取フロントエンド41は、stop_sig信号が値0から値1に遷移すると、その時点でCCDアナログシフトレジスタ20bに画像情報が記憶保持されているラインのライン画像データまでを、画データ処理部43に転送し、このラインを、読取完了ラインとする。
その後、読取フロントエンド41は、強制同期指令生成部59から上記同期指令が入力されるまで待機し、同期指令が入力されると、その時点から、再び、ラインスタートトリガ信号、ラインスタート信号及び転送クロック信号の出力を再開する。
即ち、ラインスタートトリガ信号生成部41aは、読取対象の読取終了前に、ラインスタートトリガ信号の出力を休止すると、強制同期指令生成部59からの同期指令待ち状態に遷移して、強制同期指令生成部59からの同期指令を受けるまで待機する。そして、強制同期指令生成部59からの同期指令を受けると、その指令入力のタイミングで、ラインスタートトリガ信号の出力を再開し、以後、周期的に、ラインスタートトリガ信号を出力する(図20(a)(b)参照)。
(3.2)画データ処理部43の詳細
続いて、画データ処理部43の詳細について、図7〜図10を用いて説明する。
画データ処理部43は、読取フロントエンド41から入力されるライン画像データを、順次、ローカルRAM45に設けられたFIFOメモリとしてのバッファ45aに書き込むと共に、バッファ45aに蓄積された各ライン画像データに対し、シェーディング補正、ガンマ補正等の画像処理を施し、画像処理後の各ライン画像データを、メモリコントローラ63を通じて、RAM13に書き込むデータ処理機能を有する。
また、この画データ処理部43は、バッファ45aの空き容量に基づき、読取フロントエンド41からのライン画像データの転送を一時停止させるための停止指令信号(stop_sig信号)を出力すると共に、ライン画像データの転送を再開させるための再開指令信号(restart_sig信号)を出力する停止再開制御機能を有する。
図8は、画データ処理部43で実現される上記データ処理機能に係る説明図である。
画データ処理部43は、データ処理機能を実現するための構成として、データ書込部43a、画像処理部43b、及び、データ転送部43cを備え、読取フロントエンド41から、1ライン分の画像データとしてのライン画像データが入力される度、データ書込部43aにて、このライン画像データを、バッファ45aに書き込む。
また、画データ処理部43は、画像処理部43bにて、バッファ45aの読出位置に記録されたライン画像データを読出し、このライン画像データに対してシェーディング補正やガンマ補正等の画像処理を施し、この画像処理後のライン画像データを、ローカルRAM45内の処理データ記憶部45bに一時保存する。また、画データ処理部43は、処理データ記憶部45bに蓄積された各ライン画像データを、データ転送部43cを通じて、RAM13に書き込み、読取画像を表す画像データを、RAM13上に生成する。
また、図7に示す画データ処理部43内の機能ブロックは、上記停止再開制御機能に係る機能ブロックを示したものである。
図7に示すように、画データ処理部43は、停止指令信号としてのstop_sig信号を出力する停止信号生成部43dと、再開指令信号としてのrestart_sig信号を出力する再開信号生成部43eと、を備える。
停止信号生成部43dは、具体的に、図9に示す処理を実行して、出力するstop_sig信号の状態を切り換える。図9は、読取機能の作動時に、停止信号生成部43dが実行する処理を表すフローチャートである。
停止信号生成部43dは、図9に示す処理を開始すると、stop_sig信号を値ゼロに設定し(S510)、その後、読取フロントエンド41から入力された画像データのライン数に基づき、最終ラインまでのライン画像データの取得が完了したか否かを判断する(S520)。そして、最終ラインまでのライン画像データの取得が完了している場合には(S520でYes)、読取終了信号を出力して、読取終了の旨を各部に通知した後(S560)、図9に示す処理を終了する。
一方、最終ラインまでのライン画像データの取得が完了していない場合には(S520でNo)、バッファ45aの空き容量rem_bufが、予め定められた閾値B_lim以下であるか否かを判断する(S530)。そして、バッファ45aの空き容量rem_bufが閾値B_limより大きい場合には(S530でNo)、ライン画像データの書込に十分な空き容量があるとして、S510に移行し、stop_sig信号を値ゼロに設定する。
これに対し、バッファ45aの空き容量rem_bufが、閾値B_lim以下である場合(S530でYes)、停止信号生成部43dは、今後書き込む必要のある最終ラインまでのライン画像データの総量rem_linがバッファ45aの空き容量rem_buf以下であるか否かを判断し(S540)、総量rem_linが、空き容量rem_buf以下である場合には(S540でYes)、読取終了までにバッファ45aが一杯になることがないとして、S510に移行し、stop_sig信号を値ゼロに設定し、読取フロントエンド41からのライン画像データの出力が停止しないように制御する。
一方、総量rem_linが、空き容量rem_bufよりも大きい場合(S540でNo)、停止信号生成部43dは、stop_sig信号を値ゼロから値1に設定変更し、読取フロントエンド41からのライン画像データの出力が停止するようにする(S550)。その後、S520に移行する。尚、このようにして状態が切り替えられるstop_sig信号は、読取フロントエンド41、駆動停止指令生成部49、及び、読取長算出部53、再開位置設定部57に入力される。
この他、再開信号生成部43eは、図10に示す処理を実行して、restart_sig信号の状態を切り替える。図10は、読取機能の作動時に、再開信号生成部43eが実行する処理を表すフローチャートである。
再開信号生成部43eは、図10に示す処理を開始すると、まずrestart_sig信号を値ゼロに設定し(S610)、その後、読取フロントエンド41から入力された画像データのライン数に基づき、最終ラインまでのライン画像データの取得が完了したか否かを判断する(S620)。そして、最終ラインまでのライン画像データの取得が完了している場合には(S620でYes)、休止する。
一方、最終ラインまでのライン画像データの取得が完了していない場合には(S620でNo)、バッファ45aの空き容量rem_bufが、予め定められた閾値B_th以上であるか否かを判断する(S630)。そして、空き容量rem_bufが、閾値B_th以上である場合には(S630でYes)、バッファ45aの空き容量rem_bufが再開に十分な量あるとして、restart_sig信号を値1に設定変更する(S650)。その後、S620に移行する。尚、閾値B_thは、閾値B_limよりも大きい値に設定されているものとする(B_th>B_lim)。
また、再開信号生成部43eは、バッファ45aの空き容量rem_bufが、閾値B_th未満である場合(S630でNo)、バッファ45aの空き容量rem_bufが、今後書き込む必要のある最終ラインまでのライン画像データの総量rem_lin以上であるか否かを判断し(S640)、空き容量rem_bufが総量rem_lin以上である場合には(S640でYes)、バッファ45aの空き容量rem_bufが再開に十分な量あるとして、restart_sig信号を値ゼロから値1に設定変更する(S650)。その後、S620に移行する。
これに対し、バッファ45aの空き容量rem_bufが、閾値B_th以上でもなく、総量rem_lin以上でもない場合、再開信号生成部43eは、バッファ45aの空き容量rem_bufが再開に十分な量ないとして、S610に移行し、restart_sig信号を値ゼロに設定する。その後、S620に移行する。
尚、このようにして状態が切り替えられるrestart_sig信号は、CPU11に入力される。また、CPU11は、常時restart_sig信号を監視しており、restart_sig信号が値0から1に切り替わると、モータ制御部39に対して読取再開指令を入力し、モータ制御部39に図6に示す処理をS310から実行させると共に、読取長算出部53及び再開位置設定部57及び強制同期指令生成部59に対して読取再開指令を入力する。
(3.3)駆動停止指令生成部49の詳細
続いて、駆動停止指令生成部49の詳細について、図11を用いて説明する。図11は、駆動停止指令生成部49が実行する処理を表すフローチャートである。
駆動停止指令生成部49は、モータ停止指令信号としてのmtstop信号をモータ制御部39に出力するものであり、読取機能の作動時に、図11に示す処理を開始して、画データ処理部43から入力されるstop_sig信号に基づき、mtstop信号の状態を切り替える。
駆動停止指令生成部49は、この処理を開始すると、mtstop信号を値ゼロに設定すると共に(S810)、画データ処理部43から読取終了信号が入力されているか否かを判断することにより、読取対象の読取(原稿1枚分の読取)が終了しているか否かを判断する(S820)。そして、読取が終了している場合には(S820でYes)、再度、mtstop信号を値ゼロに設定した後(S830)、休止する。
一方、読取が終了していない場合(S820でNo)、駆動停止指令生成部49は、読取が終了するか、画データ処理部43から入力されるstop_sig信号が値1となるまで、mtstop信号を値ゼロに維持する。そして、stop_sig信号が値1に遷移すると(S840でYes)、その後、エッジ検出信号が入力された時点で(S850でYes)、mtstop信号を値1に変更する(S860)。その後、S820に移行し、stop_sig信号が値1である期間には、mtstop信号を値1に保持し、stop_sig信号が値0に遷移すると、mtstop信号を値0に切り替える。
このように、mtstop信号が値1に切り替わると、モータ制御部39では、上述したように、モータの減速が開始される。図12は、mtstop信号が値1に切り替わる時点前後の各種信号の状態を表すタイムチャートである。
(3.4)搬送量算出部51の詳細
続いて、搬送量算出部51の詳細について、図13を用いて説明する。図13は、搬送量算出部51が実行する処理を表すフローチャートである。
搬送量算出部51は、再開位置設定部57に対し、読取再開基準位置restart_cntを設定するために必要な、変数position及び変数q_transの値を出力するものである。この変数q_transは、読取開始位置init_posから現在までの搬送対象の搬送量を表すものである。搬送量算出部51は、読取機能の作動時に、図13に示す処理を開始して、読取フロントエンド41からラインスタートトリガ信号が入力される度、変数q_trans及び変数positionの値を更新する。
図13に示す処理を開始すると、搬送量算出部51は、読取終了信号が入力されているか否かを判断し(S910)、読取終了信号が入力されていない場合には(S910でNo)、ラインスタートトリガ信号が入力されているか否かを判断する(S920)。
そして、読取終了信号、及び、ラインスタートトリガ信号のいずれもが入力されていない場合には、これらの信号のいずれかが入力されるまで待機する。
そして、ラインスタートトリガ信号が入力されると(S920でYes)、その時点での位置カウンタ33の出力値enc_cntを、変数positionに設定することで、当該ラインスタートトリガ信号入力時点より前、最後にエッジ検出信号が入力された時点での搬送対象の位置を記憶保持する(S930)。尚、ラインスタートトリガ信号と同時にエッジ検出信号が入力されたときには、当該エッジ検出信号により更新された値enc_cntを、変数positionに設定する。
また、搬送量算出部51は、更新した変数positionの値を用いて、変数q_transの値を更新する。具体的には、読取機能の作動前に、予めCPU11の動作により、レジスタRG1に設定されたパルス距離δ及びレジスタRG2に設定された読取開始位置init_posと、現在の変数positionの値とを、用いて、搬送量q_transを次のように算出する(S940)。
q_trans=(position−init_pos)・δ
尚、ここでいうパルス距離δとは、エンコーダのパルス1周期分に対応する搬送対象の移動距離のことである。搬送対象が所定量A移動する度に、エッジ検出信号がエンコーダエッジ検出部31から出力される場合には、パルス距離δ=Aである。
また、このようにして、搬送量q_transを更新すると、搬送量算出部51は、S910に移行して、ラインスタートトリガ信号が入力される度、変数q_trans及び変数positionの値を更新する。そして、読取終了信号が入力されると(S910でYes)、休止する。
(3.5)読取長算出部53の詳細
続いて、読取長算出部53の詳細について、図14を用いて説明する。図14は、読取機能の作動時に、読取長算出部53が実行する処理を表すフローチャートである。
読取長算出部53は、stop_sig信号が値0から値1に遷移して読取機能に係る処理が中断する際、その中断時点までで読取が完了したライン数(読取完了ライン数)fn_lineの情報に基づき、読取長read_lを算出し、この値を、再開位置設定部57に出力するものである。尚、ここでいう読取長とは、先頭ラインから読取完了ラインまでの読取画像データの画像読取方向の長さをいう。
例えば、先頭ラインを1番目として、読取完了ラインが、M番目のラインである場合には、ライン距離line_dを用いて、読取長read_lは、read_l=M・line_dで算出することができる。尚、ライン距離line_dとは、読取対象1ライン分の画像読取方向の長さのことをいい、例えば、ラインスタート信号を、周期ZでCCDラインセンサ20に入力しつつ、搬送対象を速度Vで定速走行させて、ライン毎の読取動作をCCDラインセンサ20に実行させる場合、ライン距離line_dは、line_d=V・Zとなる。
また、本実施例では、上述したように、レジスタRG2に設定された読取開始位置init_posを、先頭ラインの読取動作の開始位置として取り扱い、この読取開始位置init_posを搬送対象が通過する時点から、ラインスタートトリガ信号を出力して、ラインスタート信号をCCDラインセンサ20に入力し、更に、stop_sig信号が値1に遷移した時点でラインスタートトリガ信号の出力を一旦停止するので、この動作を利用して、図14に示す処理内容で、読取長を算出する。
図14に示す処理を開始すると、読取長算出部53は、フラグ(flag)を値0にリセットすると共に、読取完了ライン数fn_lineを値0に設定し(S1010)、その後、読取終了信号が入力されているか否かを判断する(S1020)。そして、読取終了信号が入力されていない場合には(S1020でNo)、ラインスタートトリガ信号が入力されているか否かを判断する(S1030)。
そして、ラインスタートトリガ信号が入力されている場合には(S1030でYes)、読取完了ライン数fn_lineを1加算した値に更新した後(S1035)、S1040に移行する。一方、ラインスタートトリガ信号が入力されていない場合には(S1030でNo)、S1035の処理を実行せず、S1040に移行する。このようにして、読取長算出部53は、ラインスタートトリガ信号が入力される度、変数fn_lineの値を更新する。
また、S1040では、画データ処理部43から入力されるstop_sig信号が値1に設定されているか否かを判断する。
ここで、stop_sig信号が値0に設定されている場合(S1040でNo)、読取長算出部53は、読取再開指令がCPU11から入力されているか否かを判断し(S1050)、読取再開指令が入力されていない場合には(S1050でNo)、S1055の処理を実行せずに、S1020に移行するが、読取再開指令が入力されている場合には(S1050でYes)、フラグ(flag)を値0にリセットした後、S1020に移行する。
一方、stop_sig信号が値1に設定されている場合(S1040でYes)、読取長算出部53は、フラグ(flag)が値0であるか否かを判断し(S1060)、フラグ(flag)が値1である場合(S1060でNo)、S1070以降の処理を実行せずに、S1020に移行する。
これに対し、フラグ(flag)が値0である場合には(S1060でYes)、読取完了ライン数fn_lineを1減算して(S1070)、stop_sig信号が値1に遷移した時点での読取完了ライン数fn_lineを確定する。尚、このように、読取完了ライン数fn_lineを1減算するのは、stop_sig信号が値1に遷移する直前に入力されるラインスタートトリガ信号は、読取中断ラインに対応するラインスタートトリガ信号であり、この読取中断ラインの読取動作は、読取再開後にやり直されるためである。
また、このようにして、読取完了ライン数fn_lineを確定すると、この読取完了ライン数fn_lineの情報と、読取機能の作動前に、予めCPU11の動作により、レジスタRG3に設定されたライン距離line_dの情報と、に基づき、読取長read_lを、次のように算出し(S1080)、この算出値を再開位置設定部57に出力する。
read_l=fn_line・line_d
また同時に、読取長算出部53は、フラグ(flag)を値1に設定する(S1090)。また、この処理を終えると、読取長算出部53は、S1020に移行する。
本実施例では、このようにして、読取完了ライン数fn_lineを検出し、この値を、再開位置設定部57に入力する。そして、読取終了信号が入力されると(S1020でYes)、図14に示す処理を終了する。
(3.6)時間計測部55の詳細
続いて、時間計測部55の詳細について、図15を用いて説明する。図15は、読取機能の作動時に、時間計測部55が実行する処理を表すフローチャートである。
時間計測部55は、再開位置設定部57に対し、読取再開基準位置(restart_cnt)を設定するために必要な、変数time_pの値を出力するものである。この時間計測部55は、計時カウンタを内蔵しており、計時カウンタを用いて、時間計測する。
図15に示す処理を開始すると、時間計測部55は、画データ処理部43から読取終了信号が入力されているか否かを判断し(S1110)、読取終了信号が入力されていない場合には(S1110でNo)、エッジ検出信号が入力されている否かを判断し(S1120)、エッジ検出信号が入力されていない場合には(S1120でNo)、ラインスタートトリガ信号が入力されているか否かを判断する(S1130)。
そして、読取終了信号、エッジ検出信号、及び、ラインスタートトリガ信号のいずれもが入力されていない場合には、これらの信号のいずれかが入力されるまで待機する。
そして、エッジ検出信号が入力されると(S1120でYes)、計時カウンタによる計時を開始し(S1125)、計時カウンタに、このエッジ検出信号の入力時点からの経過時間を計測させる。尚、計時の開始に先駆けては、計時カウンタの値CNをゼロにリセットする。また、計時を開始すると、S1130に移行し、ラインスタートトリガ信号が入力されているか否かを判断する。そして、ラインスタートトリガ信号が入力されていない場合には(S1130でNo)、S1110に移行し、入力されている場合には(S1130でYes)、S1140に移行する。
また、ラインスタートトリガ信号が入力されると(S1130でYes)、時間計測部55は、計時カウンタの値CNを、変数time_pに設定することで(S1140)、最後にエッジ検出信号が入力されてから当該ラインスタートトリガ信号が入力されるまでに要した時間の情報を、変数time_pに設定し、この値を、再開位置設定部57に出力する。その後、S1110に移行し、読取終了信号、エッジ検出信号、及び、ラインスタートトリガ信号のいずれかが入力されるまで待機する。
そして、読取終了信号が入力されると(S1110でYes)、読取対象の読取(原稿1枚分の読取)が終了したとして、図15に示す処理を終了する。
このようにして、時間計測部55は、エンコーダ処理部15から入力されるエッジ検出信号及び読取フロントエンド41から入力されるラインスタートトリガ信号に基づいて、エッジ検出信号が入力されてからラインスタートトリガ信号が入力されるまでの時間長さtime_pを計測し、これを再開位置設定部57に出力する。
(3.7)再開位置設定部57の詳細
続いて、再開位置設定部57の詳細について、図16を用いて説明する。図16は、再開位置設定部57が実行する処理を表すフローチャートである。
再開位置設定部57は、画データ処理部43から出力されるstop_sig信号が値1に遷移し、読取機能に係る処理が中断される際に、その後再開される読取動作のために、読取再開基準位置(restart_cnt)及びオフセット時間(offset)を設定し、この値restart_cnt,offsetを、強制同期指令生成部59に入力することにより、強制同期指令生成部59に対して、読取再開位置を設定するものである。
具体的に、再開位置設定部57は、読取機能の作動時、図16に示す処理の実行を開始する。更に、CPU11から読取再開指令が入力された場合にも、図16に示す処理の実行を開始する。
図16に示す処理を開始すると、再開位置設定部57は、画データ処理部43から出力されるstop_sig信号が値0から値1に遷移するまで待機し(S1210)、stop_sig信号が値1に遷移すると(S1210でYes)、S1220に移行する。
また、S1220では、当該stop_sig信号の遷移に伴って読取長算出部53で実行されるS1080の処理の終了を待って、当該S1080で算出された読取長read_lの値を取得すると共に、搬送量算出部51から出力される搬送量q_transの値を取得し、これらの取得値に基づいて、最後にラインスタートトリガ信号が入力された時点での読取長read_lと搬送量q_transとの誤差μを算出する。
μ=read_l−q_trans
同時に、最後にラインスタートトリガ信号が入力された時点で搬送量算出部51にて更新された値positionを、変数X[0]に設定すると共に、変数X[1]に、値positionより1大きい値(position+1)を設定する(S1220)。
そして、誤差μの絶対値|μ|が予め定められた閾値以下であるか否かを判断する(S1230)。
ここで、誤差μの絶対値|μ|が予め定められた閾値以下であると判断すると(S1230でYes)、再開位置設定部57は、変数restart_cntに、値X[0]を設定し、この値を強制同期指令生成部59に入力すると共に(S1240)、変数offsetに、時間計測部55から入力される値time_pを設定し、この値を強制同期指令生成部59に入力する(S1250)。これにより、強制同期指令生成部59に対して、読取再開基準位置をX[0]に設定し、オフセット時間を値time_pに設定する。その後、図16に示す処理を終了する。
図17は、値|μ|が閾値以下であるときの読取再開基準位置及びオフセット時間の設定方法を視覚化した説明図である。本実施例において、値|μ|が閾値以下であるときには、読取中断ラインに対応するラインスタート信号がCCDラインセンサ20に入力された時点TSを含む当該時点TSより過去において、最後にエッジ検出信号が入力された時点TPで搬送対象が存在した地点X[0]を、読取再開基準位置restart_cntに設定し、その時点TPから時点TSまでの経過時間time_pを、オフセット時間offsetに設定する。
また、この設定を受けて、強制同期指令生成部59は、読取再開時に搬送対象が読取再開基準位置restart_cntに到達すると、その時点からオフセット時間offsetが経過した時点で、同期指令をラインスタートトリガ信号生成部41aに入力して、この時点からCCDラインセンサ20で読取動作が再開されるようにする(詳細後述)。
即ち、ここでは、強制同期指令生成部59に対して、読取再開基準位置をX[0]に設定し、オフセット時間を値time_pに設定することにより、読取中断位置を、読取再開位置に設定する。
但し、読取再開位置は、上述したように、地点X[0]を基準として、オフセット時間により定められるため、読取中断時及び読取再開時の夫々において、搬送対象が、同一の速度で走行していれば、読取再開位置は、正確に読取中断位置に一致するものの、実際には、モータを定速制御しても制御誤差を原因として、搬送対象は、読取中断時及び読取再開時の夫々において、同一の速度で走行しないので、読取再開位置と読取中断位置との間には、ズレが生じることとなる。
そして、このズレが蓄積されると、読取対象の読取領域の実寸よりも、全ライン分の画像読取動作が完了したときの読取長、即ち、全ライン分の画像読取動作を完了して完成する全ライン分の読取画像の長さが、画像読取方向に長くなったり、短くなってしまい、画像データの画質が劣化する。
そこで、本実施例では、値|μ|が閾値を超えるとき、読取再開位置と読取中断位置との間にズレが生じているとして、誤差μがゼロに収束する方向に、読取再開位置を補正するようにしている。即ち、再開位置設定部57は、値|μ|が閾値を超えている場合(S1230でNo)、誤差μがゼロ以下であるか否かを判断することにより、読取長が搬送量以下であるか否かを判断する(S1260)。
そして、誤差μがゼロ以下である場合には(S1260でYes)、変数restart_cntに、値X[0]を設定し、この値を強制同期指令生成部59に入力する(S1270)と共に、変数offsetに値0を設定し、この値を強制同期指令生成部59に入力する(S1290)ことにより、強制同期指令生成部59に対して、読取再開基準位置をX[0]に設定し、オフセット時間を値0に設定する。その後、図16に示す処理を終了する。
これにより、再開位置設定部57は、読取長が搬送量以下である場合、読取中断ラインに対応するラインスタート信号がCCDラインセンサ20に入力された時点TSを含む当該時点TSより過去において、最後にエッジ検出信号が入力された時点TPで搬送対象が存在した地点X[0]を、読取再開位置に設定し、この地点からCCDラインセンサ20による読取動作が再開されるようにする(図18(a)参照)。
一方、読取長が搬送量よりも大きく、誤差μがゼロより大きい場合には(S1260でNo)、変数restart_cntに、値X[1]を設定し、この値を強制同期指令生成部59に入力する(S1280)と共に、変数offsetに、値0を設定し、この値を強制同期指令生成部59に入力する(S1290)ことにより、強制同期指令生成部59に対して、読取再開基準位置をX[1]に設定し、オフセット時間を値0に設定する。その後、図16に示す処理を終了する。
これにより、再開位置設定部57は、読取長が搬送量を超える場合、時点TSより過去において、最後にエッジ検出信号が入力された時点TPの経過後、最初にエッジ検出信号が入力された時点TFで搬送対象が存在した地点X[1]を、読取再開位置に設定し、この地点からCCDラインセンサ20による読取動作が再開されるようにして、誤差μがゼロに収束する方向に読取再開位置を補正する(図18(b)参照)。
このようにして、再開位置設定部57は、値|μ|が閾値を超えるとき、誤差μがゼロに収束する方向に読取再開位置を補正する。
例えば、図18(a)に示すように、読取長read_lが搬送量q_transよりも短い場合に、読取再開位置をX[0]に設定すれば、読取再開位置が、真の読取中断位置より手前となる。
同様に、図18(b)に示すように、読取長read_lが搬送量q_transよりも長い場合に、読取再開位置をX[1]に設定すれば、読取再開位置が、真の読取中断位置より画像読取方向に進んだ位置となる。従って、誤差μがゼロに収束するのである。
このような原理で、本実施例では、誤差|μ|が小さいときには、読取中断位置から読取動作が再開されるように、読取再開位置を設定し、誤差|μ|が大きいときには、誤差μがゼロに収束するように、読取再開位置を設定して、全ライン分の読取動作完了時点で完成する画像データの画質が、読取中断動作の繰返しで劣化しないようにする。
(3.8)強制同期指令生成部59の詳細
続いて、強制同期指令生成部59の詳細について、図19及び図20を用いて説明する。図19は、強制同期指令生成部59が実行する処理を表すフローチャートである。尚、強制同期指令生成部59は、ラインスタート信号の強制同期をとるためのものであり、読取機能が作動すると、図19に示す処理の実行を開始する。
強制同期指令生成部59は、図19に示す処理を開始すると、エッジ検出信号が入力される度(S1410でYes)、当該エッジ検出信号の入力により更新された位置カウンタ33の出力値enc_cntが、レジスタRG2に設定された読取開始位置init_posより一つ手前の値(init_pos−1)に一致するか否かを判断し(S1420)、一致しない場合には、上記判断を繰返し、一致すると(enc_cnt=init_pos−1:S1420でYes)、S1430に移行する。
その後、強制同期指令生成部59は、新たにエッジ検出信号が入力された時点で(S1430でYes)、搬送対象が、読取開始位置init_posに到達したとして、同期指令を、ラインスタートトリガ信号生成部41aに入力し(S1440)、その時点でCCDラインセンサ20にラインスタート信号が入力されるようにする。
尚、図20(a)及び図20(b)は、同期指令の入力態様を表すタイムチャートである。読取開始位置init_pos=kに設定されている場合には、S1410〜S1440の処理により、図20(a)に示すように、enc_cnt=kとなった時点で同期指令をラインスタートトリガ信号生成部41aに入力して、搬送対象が読取開始位置init_posに到達した時点から、CCDラインセンサ20に対するラインスタート信号及び転送クロック信号の入力が読取フロントエンド41で開始されるようにする。このようにして、読取開始位置init_posから、CCDラインセンサ20にて、ライン毎の読取動作が実行されるようにする。
但し、同期指令の入力に伴って、CCDラインセンサ20に、ラインスタート信号が入力されてから、次のラインスタート信号が入力されるまでの期間に、CCDアナログシフトレジスタ20bから出力される画素信号は、読取フロントエンド41で破棄するものとする。
そして、同期指令の入力を終了すると、強制同期指令生成部59は、読取終了信号又は読取再開指令が入力されるまで待機し(S1450,S1455)、読取終了信号が入力されると(S1450でYes)、当該処理を終了する。
一方、stop_sig信号が値0から値1に遷移することにより、読取機能に係る処理が中断し、その後、CPU11から読取再開指令が入力された場合には(S1455でYes)、S1460に移行する。
そして、エッジ検出信号が入力される度(S1460でYes)、当該エッジ検出信号の入力により更新された位置カウンタ33の出力値enc_cntが、再開位置設定部57により設定された読取再開基準位置restart_cntより一つ手前の値(restart_cnt−1)に一致するか否かを判断し(S1470)、一致しない場合には、上記判断を繰返し、一致すると(enc_cnt=restart_cnt−1:S1470でYes)、S1475に移行する。
また、S1475に移行すると、強制同期指令生成部59は、再開位置設定部57により設定されたオフセット時間offsetが値0であるか否かを判断し、値0である場合には(S1475でYes)、S1480に移行し、値0ではない場合には(S1475でNo)、S1500に移行する。
また、S1480に移行すると、強制同期指令生成部59は、新たにエッジ検出信号が入力されるまで待機し、新たにエッジ検出信号が入力された時点で(S1480でYes)、搬送対象が、読取開始位置(=読取再開基準位置restart_cnt)に到達したとして、同期指令を、ラインスタートトリガ信号生成部41aに入力し、その時点でCCDラインセンサ20にラインスタート信号が入力されるようにする(S1490)。
例えば、読取再開基準位置restart_cnt=kに設定されている場合には、S1460〜S1490の処理により、図20(a)に示すように、enc_cnt=kとなった時点で同期指令をラインスタートトリガ信号生成部41aに入力して、搬送対象が読取再開基準位置restart_cnt=kに到達した時点から、CCDラインセンサ20に対するラインスタート信号及び転送クロック信号の入力が読取フロントエンド41で開始されるようにする。
このようにして、強制同期指令生成部59は、オフセット時間が値0に設定されている場合、搬送対象が読取再開基準位置restart_cntに到達した時点から、ラインスタート信号がCCDラインセンサ20に、周期的に入力されるようにし、読取再開基準位置restart_cntから、CCDラインセンサ20にて、ライン毎の読取動作が実行されるようにする。
そして、同期指令の入力を終了すると、強制同期指令生成部59は、S1450に移行して、再び、読取再開指令が入力されるまで待機する。
一方、S1500に移行すると、強制同期指令生成部59は、新たにエッジ検出信号が入力されるまで待機し、新たにエッジ検出信号が入力されると(S1500でYes)、その時点からの経過時間の計測を開始して、その時点から、予め再開位置設定部57により設定されたオフセット時間offsetが経過するまで待機する(S1510)。
そして、オフセット時間offsetが経過した時点で(S1510でYes)、搬送対象が、読取再開位置に到達したとして、同期指令を、ラインスタートトリガ信号生成部41aに入力し、その時点でCCDラインセンサ20にラインスタート信号が入力されるようにする(S1520)。そして、同期指令の入力を終了すると、強制同期指令生成部59は、S1450に移行して、再び、読取再開指令が入力されるまで待機する。
このようにして、強制同期指令生成部59は、オフセット時間が値0より大きい値に設定されている場合、図20(b)に示すように、搬送対象が読取再開基準位置restart_cntに到達した後、オフセット時間offsetを経過した時点で同期指令を入力して、当該時点から、ラインスタート信号がCCDラインセンサ20に、周期的に入力されるようにし、読取中断位置から、CCDラインセンサ20にて、ライン毎の読取動作が実行されるようにする。また、同期指令の入力により、CCDラインセンサ20への転送クロック信号の入力を、読取フロントエンド41に開始させ、CCDアナログシフトレジスタ20bから読取フロントエンド41に画素信号が出力されるようにする。
(4)画像読取装置1が奏する効果
以上、本実施例の画像読取装置1の構成について説明したが、この画像読取装置1によれば、読取長と搬送量との誤差|μ|が小さくなるように、読取再開位置を設定する一方で、読取長と搬送量との誤差|μ|が小さい内は、読取中断位置から読取が再開されるように、オフセット時間を設定するので、読取画像の寸法を、読取対象の寸法に整合させて、高画質な読取画像データを生成することができる。従って、本実施例によれば、高速に読取可能で高画質な画像データを生成することが可能な画像読取装置1をユーザに提供することができる。
尚、本発明の読取ユニットは、CCDラインセンサ20に相当し、搬送機構は、読取モータMT1の回転力を受けてCCDラインセンサ20を移動させる機構、及び、読取搬送モータMT2の回転力を受けて読取対象の原稿を移動させるADF装置150に相当する。また、事象発生信号出力手段は、読取エンコーダEN1及び読取搬送エンコーダEN2に相当する。
また、読取制御手段は、モータ制御部39におけるS320の処理及び読取制御部21にて実現され、中断判定手段は、停止信号生成部43dにおけるS530,S540の処理にて実現され、停止制御手段は、停止信号生成部43dにおけるS550の処理にて実現されている。
その他、位置検出手段は、位置カウンタ33にて実現され、第一基準位置設定手段は、再開位置設定部57におけるS1240の処理にて実現され、オフセット設定手段は、S1250の処理にて実現されている。
また、読取長検出手段は、読取長算出部53にて実現され、搬送量検出手段は、搬送量算出部51にて実現され、第二基準位置設定手段は、再開位置設定部57におけるS1260〜S1280の処理にて実現されている。この他、作動制御手段は、S1230の処理にて実現されている。
また、後退制御手段は、モータ制御部39のS350〜S370の処理にて実現され、再開判定手段は、再開信号生成部43eにて実現されている。
(5)その他
以上、本発明の実施例について説明したが、本発明は、上記実施例に限定されるものではなく、種々の態様を採りえる。
例えば、上記実施例では、読取ユニットとして、CCDラインセンサ20を用いたが、読取ユニットとしては、コンタクトイメージセンサ(CIS:Contact Image Sensor)を用いても良い。その他、本実施例では、エンコーダEN1として、ロータリーエンコーダを用いたが、ロータリーエンコーダに代えて、リニアエンコーダを用いてもよい。
また、上記実施例の画像読取装置1は、複写機として構成されてもよいし、ファクシミリ装置として構成されてもよいし、スキャナ機能を有する複合機として構成されてもよい。