以下、本発明の実施形態について添付図面を参照して詳細に説明する。図1は、本発明の実施形態に係るモータ駆動ユニット100の外観構成を示す斜視図である。モータ駆動ユニット100は、ステッピングモータ101、ロータ軸102、ch0フォトインタラプタ103、ch1フォトインタラプタ104およびスリット回転板105を備える。
モータ駆動ユニット100において、スリット回転板105は、ロータ軸102に取り付けられており、明領域と暗領域との角度比率が50:50となるように設計されている。ステッピングモータ101を駆動すると、スリット回転板105が回転し、ch0フォトインタラプタ103とch1フォトインタラプタ104の出力信号は、後述の通りに変化する。
図2は、モータ駆動ユニット100の構成を説明するブロック図である。図2に示す符号101〜105は、図1に示す符号101〜105に対応する。ステッピングモータ101は、A相用コイル113、B相用コイル114、A相+側ステータ115、A相−側ステータ116、B相+側ステータ117、B相−側ステータ118およびロータマグネット119(以下「ロータ119」という)を備える。A相用コイル113またはB相用コイル114に通電することで、ロータ119は回転する。なお、以下の説明において、A相+側ステータ115、A相−側ステータ116、B相+側ステータ117およびB相−側ステータ118を総じて、適宜、ステータと称する。
コンパレータ106は、ch0フォトインタラプタ103とch1フォトインタラプタ104から出力されるアナログ信号を受信し、予め設定された閾値電圧によって2値化された信号を後段のエンコーダ回路107へ出力する。本実施形態では、ステッピングモータ101を回転ムラなく一定の回転速度で回転させたときに、コンパレータ106の出力におけるHighとLowの比率が50:50となるように、閾値電圧が予め設定されている。以下、ch0フォトインタラプタ103の信号を2値化した信号をENC0信号と称呼し、ch1フォトインタラプタ104の信号を2値化した信号をENC1信号と称呼する。本実施形態では、ch0フォトインタラプタ103、ch1フォトインタラプタ104、スリット回転板105、コンパレータ106およびエンコーダ回路107が信号出力手段に対応する。また、ch0フォトインタラプタ103およびch1フォトインタラプタ104の分解能は、前述の通りに、コンパレータ106による2値化が可能な範囲で、正弦波発生器109の分解能よりも低いものを用いる。
エンコーダ回路107は、ENC0信号とENC1信号の出力タイミングの取得と、信号による位置カウントと、信号周期カウントとを行う。エンコーダ回路107は、ENC0信号のLowからHighへの変化およびHighからLowの変化と、ENC1信号のLowからHighの変化およびHighからLowの変化との4種の信号出力タイミングを取得可能である。CPU108は、エンコーダ回路107の4種の信号出力タイミングに合わせて割り込み処理をかけることができる。その際に、CPU108は割り込み要因の4つの信号種別を判別する。
CPU108は、予め保存されているプログラムを実行する機能を備え、また、CPU108は、バス110を介してエンコーダ回路107、PWM発生器111に対してアクセスすることができる。
正弦波発生器109は、正弦波を発生させるものであって、発生させる正弦波1周期を512分割したテーブルを備えている。正弦波発生器109は、0から511までのテーブル番号に対応するPWM値をPWM発生器111に送る、PWM発生器111は、PWM信号をモータドライバ112に出力する。モータドライバ112は入力されたPWM信号を増幅させてステッピングモータ101のコイル(A相用コイル113およびB相用コイル114)に供給する。
正弦波発生器109からステッピングモータ101への駆動信号の供給に関して、図4および図5を参照して詳細に説明する。図4は、モータドライバ112の動作を説明する図である。図4(a)には、スイッチ401〜404を介して、A相用コイル113が接続されている状態が示されている。PWM発生器111から出力されるA相用のPWM信号がHigh信号である場合、スイッチ401とスイッチ404が閉じられ、図4(b)の状態となる。この状態では、A相用コイル113の両端にはA側を高電位としてモータドライバ112に供給されている電圧Vcc分の電位差が生じる。このとき、A相用コイル113のB側に対するA側の電位は、図4(f)に図示するように、+Vccとなる。また、このとき、A相用コイル113を流れる電流は、図4(i)に図示するように、+Iになる。
一方、PWM発生器111から出力されるA相用のPWM信号がLow信号である場合、スイッチ402とスイッチ403が閉じられ、図4(c)の状態となる。このとき、A相用コイル113の両端にはB側を高電位としてモータドライバ112に供給されている電圧Vcc分の電位差が生じる。このとき、A相用コイル113のB側に対するA側の電位は、図4(g)に図示するように、−Vccになる。また、このとき、A相用コイル113に流れる電流は、図4(j)に図示するように、−Iになる。
図4(d),(e)は、図4(b),(c)の状態を短時間で繰り返した場合を示している。図4(h)は、図4(d),(e)の状態におけるA相用コイル113のB側に対するA側の電位を示す図である。図4(k)は、図4(d),(e)の状態におけるA相用コイル113を流れる電流を示す図である。図4(d),(e)の状態を等しい時間間隔で繰り返すと、図4(h)に示されるように、−Vccと+Vccの2値の矩形波状の電圧信号が発生する。この矩形波状の電圧信号がA相用コイル113に印加されると、コイルの電流遅れ成分により、電圧信号が平滑化された形で電流波形が現れ、−Vccと+Vccとがそれぞれ50%の場合には、電流が実効的に0(ゼロ)となる。従って、PWM信号のHigh信号率(以下、DUTY比率という)が50%のときに出力が0Vの定常電圧、100%のときに+Vccの定常電圧、75%のときに+Vcc/2の定常電圧が掛かっているのと等価として扱うことができる。
そこで、正弦波発生器109には、512個のテーブル番号のそれぞれにPWM信号のDUTY比率(%)の値が格納されている。図5は、正弦波発生器109に格納される0から511までのテーブル番号を説明する図である。図5に図示するように、正弦波の0°(度)位相にテーブル番号0、正弦波の180°位相にテーブル番号256が対応する。テーブル番号0および256には、DUTY比率50%の値が格納され、その後のテーブル番号には正弦波の位相に応じてPWM信号のDUTY比率の値が格納されている。図5に図示するように、本実施形態では、N極励磁のピークとなるテーブル番号128にDUTY比率100%より小さな値を格納し、S極励磁のピークとなるテーブル番号384にDUTY比率0%より大きな値を格納している。もし、N極励磁のピークとなるテーブル番号128にDUTY比率100%の値を格納すると、正弦波発生器109がテーブル番号128を出力するときには、PWM発生器111に+Vccの値を出力することになり、正弦波のゲインを変更することができない。このような点を考慮して、本実施形態では、N極励磁のピークとなるテーブル番号128はDUTY比率100%より小さな値に設定している。
図4および図5にて説明したように、ステッピングモータ101のコイル(A相用コイル113およびB相用コイル114)に正弦波状の電圧信号を印加することができる。すなわち、本実施形態では、ステッピングモータ101をマイクロステップ駆動している。以下の説明では、A相用コイル113およびB相用コイル114に印加される電圧信号は正弦波であるとする。
本実施形態では、正弦波発生器109、PWM発生器111およびモータドライバ112が駆動手段に対応し、A相用コイル113およびB相用コイル114に印加される正弦波状の電圧信号が周期的に変化する駆動信号に対応する。また、本実施形態では、正弦波発生器109が正弦波1周期を512分割しているので、ステッピングモータ101が1回転する間にA相用コイル113およびB相用コイル114に印加される正弦波状の電圧信号の状態が512回変化する。すなわち、ステッピングモータ101が1回転する間にコンパレータ106がENC0信号およびENC1信号を出力する回数は、ステッピングモータ101が1回転する間にA相用コイル113およびB相用コイル114に印加される正弦波状の電圧信号の状態が変化する回数よりも少ない。
図2の説明に戻る。A相用コイル113は、正弦波状の電圧信号を受けて、A相+側ステータ115およびA相−側ステータ116に磁極をそれぞれ励磁する。同様に、B相用コイル114は、正弦波状の電圧信号を受けて、B相+側ステータ117およびB相−側ステータ118に磁極をそれぞれ励磁する。A相用コイル113に印加される電圧信号とB相用コイル114に印加される電圧は互いに位相が異なっている。図3および図6を参照して、A相用コイル113に印加される正弦波状の電圧信号、B相用コイル114に印加される正弦波状の電圧信号、ステータに励磁される磁極、ロータ119の停止位置およびスリット回転板105の位置の関係について説明する。
図3(a)は、ステッピングモータ101の構成を説明する図である。ロータ119は、自由に回転可能であり、ロータ119の周囲には物理角で18°毎にステータ(A相+側ステータ115、A相−側ステータ116、B相+側ステータ117およびB相−側ステータ118)が、図3(a)に示す通りに配置されている。
A相用コイル113に印加される電圧信号が正弦波形の正の領域にあるときには、A相+側ステータ115にN極が励磁され、A相−側ステータ116にS極が励磁される。A相用コイル113に印加される電圧信号が正弦波形の負の領域にあるときには、A相+側ステータ115にS極が励磁され、A相−側ステータ116にN極が励磁される。
B相用コイル114に印加される電圧信号が正弦波形の正の領域にあるときには、B相+側ステータ117にN極が励磁され、B相−側ステータ118にS極が励磁される。B相用コイル114に印加される電圧信号が正弦波形の負の領域にあるときには、B相+側ステータ117にS極が励磁され、B相−側ステータ118にN極が励磁される。
図6(a)は、ロータ119を正転方向に回転させるためにA相用コイル113およびB相用コイル114に印加する正弦波状の電圧信号を示す図である。また、図6(b)は、ロータ119を正転方向とは逆の逆転方向に回転させるためにA相用コイル113およびB相用コイル114に印加する正弦波状の電圧信号を示す図である。なお、図6では、正弦波形の正領域にN極、負領域にS極と書かれているが、これはA相+側ステータ115およびB相+側ステータ117に励磁される磁極を示している。このとき、A相−側ステータ116に励磁される磁極はA相+側ステータ115の反対の磁極になり、B相−側ステータ118に励磁される磁極はB相+側ステータ117の反対の磁極になる。
ロータ119を正転方向に回転させる際に、正弦波発生器109は、テーブル番号を正方向に進めて駆動信号を生成する。ロータ119を逆転方向に回転させる際に、正弦波発生器109は、テーブル番号を逆方向に進めて駆動信号を生成する。また、A相用コイル113およびB相用コイル114への出力は、ロータ119を正転方向に回転させる際には、A相用コイル113への出力がsin波、B相用コイル114への出力がcos波となる。このとき、B相用コイル114への出力はA相用コイル113への出力に対して90°進む。ロータ119を逆転方向に回転させる際には、B相用コイル114への出力はA相用コイル113への出力に対して90°遅れる。 図3(b),(c)は、ロータ119、ch0フォトインタラプタ103、ch1フォトインタラプタ104、スリット回転板105、A相+側ステータ115およびB相+側ステータ117の物理的な位置関係を示す図である。なお、本実施形態では、ステッピングモータ101は、図3(a)に示すように20個のステータを備えるが、図3(b),(c)では、A相+側ステータ115およびB相+側ステータ117の位置で代表させている。
図3(b)は、ロータ119の着磁位相とスリット回転板105とが基準位置関係にある状態を示している。ここで、基準位置関係とは、ロータ119のN極領域とスリット回転板105の明領域とが一致する位置関係である。すなわち、スリット回転板105が基準位置関係でロータ119に取り付けられていれば、ロータ119のN極領域とスリット回転板105の明領域とが一致する。
図3(c)は、図3(b)に示す基準位置関係からスリット回転板105が逆転方向に電気角で180°だけずれた位置でロータ119に取り付けられた状態を示している。ここで、電気角とは、コイルに印加する駆動信号が1周期分変化したときに、ロータが360°回転すると定義したものである。よって、本実施形態の場合、スリット回転板105とロータ119の物理角度72°が電気角360°に相当する。
図3(a)に示すように、A相+側ステータ115から逆転方向に物理角18°だけ離れた位置にB相+側ステータ117が配置される。本実施形態では、ch0フォトインタラプタ103がB相+側ステータ117と同じ位置に配置され、ch1フォトインタラプタ104がA相+側ステータ115と同じ位置に設置されている。これよって、ロータ119と共に回転するスリット回転板105の回転に対応して、ch0フォトインタラプタ103とch1フォトインタラプタ104はそれぞれ、ロータ119の着磁位相に対応した信号を出力する。すなわち、ロータ119の回転に対応して、ch0フォトインタラプタ103またはch1フォトインタラプタ104から出力される信号が変化する。
図7は、図3に示すようにN極とS極とを5極ずつ備えるロータ119を、N極とS極とを1極ずつ備える構成にモデル化した図である。このようなモデル化を行うことにより、電気角と物理角とを一致させることができる。以後の説明は、このモデルを用いて行う。
図7(a)の左側図は、ロータ119の着磁位相とスリット回転板105の明暗位相とが基準位置関係にある状態を示している。また、図7(a)の右側図(グラフ)は、図7(a)の左側図の状態からロータ119を正転方向にθ°回転させた場合のENC0信号とENC1信号の出力変化を示している。なお、図7にあるENC0信号はch0フォトインタラプタ103の出力を2値化した信号であり、ENC1信号はch1フォトインタラプタ104の出力を2値化した信号である。
図7(b)の左側図は、図7(a)の左側図の状態に対してスリット回転板105が電気角でα°だけ逆転方向にずれた状態を示している。図7(b)の右側図(グラフ)は、図7(b)の左側図の状態からロータ119を正転方向にθ°回転させた場合のENC0信号とENC1信号の出力変化を示している。図7(b)の状態では、図7(a)の状態と比較して、ENC0信号とENC1信号が電気角でα°だけ遅れて出力される。ロータ119を逆転方向に回転させた場合、ENC0信号とENC1信号は、電気角α°だけ進んで出力される。なお、スリット回転板105の取り付け位置のずれ角度(α°)は、モータ駆動ユニット100の製造時に特定されている。
図8は、ロータ119を正転方向に回転させた際に、ロータ119の電気角とロータ119の回転位置との関係を説明する図である。図8(a)は、A相用コイル113およびB相用コイル114に印加する正弦波状の電圧信号に対してロータ119の追従遅れが生じていない場合を示している。図8(b)は、A相用コイル113およびB相用コイル114に印加する正弦波状の電圧信号に対してロータ119の追従遅れが生じている場合を示している。図8(a)および(b)には、ロータ119の電気角が0°,90°,180°,270°となる状態がそれぞれ示されている。図8(a)および(b)に図示されるロータ119の電気角が0°では、A相+側ステータ115にS極が励磁され、B相+側ステータ117にはN極もS極も励磁されていない。図8(a)および(b)に図示されるロータ119の電気角が90°では、A相+側ステータ115にはN極もS極も励磁されず、B相+側ステータ117にN極が励磁される。図8(a)および(b)に図示されるロータ119の電気角180°のときにはA相+側ステータ115にN極が励磁され、B相+側ステータ117にはN極もS極も励磁されていない。図8(a)および(b)に図示されるロータ119の電気角270°のときにはA相+側ステータ115にはN極もS極も励磁されず、B相+側ステータ117にS極が励磁される。図8(a)でも、図8(b)でも、それぞれの状態でA相+側ステータ115およびB相+側ステータ117に励磁される磁極は同じであるが、図8(b)では、ロータ119の追従遅れ801が生じている。
図9は、ロータ119を正転方向に回転させた際の、A相用コイル113およびB相用コイル114に印加する電圧信号と、ロータ119の回転位置と、ch0フォトインタラプタ103およびch1フォトインタラプタ104の出力との関係を示している。
図9(a)は、A相用コイル113に印加される正弦波状の電圧信号を示し、図9(b)は、B相用コイル114に印加される正弦波状の電圧信号を示す図である。図9(a)にて、A相用コイル113に印加される正弦波状の電圧信号が正の領域となるとき、A相+側ステータ115にはN極が励磁され、A相用コイル113に印加される正弦波状の電圧信号が負の領域となるとき、A相+側ステータ115にはS極が励磁される。図9(b)にて、B相用コイル114に印加される正弦波状の電圧信号が正の領域となるとき、B相+側ステータ117にはN極が励磁され、B相用コイル114に印加される正弦波状の電圧信号が負の領域となるとき、B相+側ステータ117にはS極が励磁される。
図8(a)および(b)に示す電気角0°,90°,180°,270°の状態は、図9に示す電気角0°,90°,180°,270°の状態に対応している。すなわち、A相用コイル113に図9(a)に図示される正弦波状の電圧信号を印加し、B相用コイル114に、図9(b)に図示される正弦波状の電圧信号を印加すると、ロータ119は図8(a)または(b)のように回転する。
図9(d)は、A相用コイル113に印加される正弦波状の電圧信号に基づいて正弦波発生器109から出力されるテーブル番号の変化を示す図である。A相用コイル113に印加される正弦波状の電圧信号1周期で、正弦波発生器109から出力されるテーブル番号は0から512まで変化する。正弦波発生器109から出力されるテーブル番号を検出することで、A相用コイル113に印加される電圧信号の位相(状態)を検出することができる。また、A相用コイル113に印加される電圧信号とB相用コイル114に印加される電圧信号の位相差は90°であることが分かっているので、正弦波発生器109から出力されるテーブル番号を検出することで、B相用コイル114に印加される電圧信号の位相(状態)も検出することができる。
図9(c)は、正弦波発生器109から出力されるテーブル番号を積算した値である。この値は、ロータ119が1回転すると512増加する。本実施形態では、ロータ119の電気角が最初に0°になるとき、テーブル番号の積算値は1408となり、ロータ119が1回転してロータ119の電気角が再度0°になるとき、テーブル番号の積算値は1920となる。
図9(e)および(f)は、図8(a)に図示したようにA相用コイル113およびB相用コイル114に印加する電圧信号に対してロータ119の追従遅れが生じていない場合におけるロータ119の位置を示している。
図9(e)にて破線で描かれるように、A相+側ステータ115にロータ119のN極が接近しているときに正の領域となり、A相+側ステータ115にロータ119のS極が接近しているときに負の領域となる。
図9(e)にてロータ119の電気角が0°となる状態は、図8(a)にてロータ119の電気角が0°となる状態に対応している。図8(a)にてロータ119の電気角が0°となる状態では、A相+側ステータ115にロータ119のN極の中心が向かい合っている。したがって、図9(e)にて破線で描かれる正弦波は、ロータ119の電気角が0°となる状態にて、最大になる。
図9(f)にて破線で描かれるように、B相+側ステータ117にロータ119のN極が接近しているときに正の領域となり、B相+側ステータ117にロータ119のS極が接近しているときに負の領域となる。
図9(f)にてロータ119の電気角が270°となる状態は、図8(a)にてロータ119の電気角が270°となる状態に対応している。図8(a)にてロータ119の電気角が270°となる状態では、B相+側ステータ117にロータ119のN極の中心が向かい合っている。したがって、図9(f)にて破線で描かれる正弦波は、ロータ119の電気角が270°となる状態にて、最大になる。
図9(g)は、図8(a)に図示したようにA相用コイル113およびB相用コイル114に印加する電圧信号に対してロータ119の追従遅れが生じていない場合におけるch0フォトインタラプタ103およびch1フォトインタラプタ104の出力を示している。すなわち、ロータ119のそれぞれの電気角におけるENC0信号(ch0フォトインタラプタ103の出力を2値化)とENC1信号(ch1フォトインタラプタ104の出力を2値化)を示している。図9(g)では、図7で説明したスリット回転板105の取り付け位置のずれ角度α°を反映しており、ENC0信号、ENC1信号がα°だけ遅れてHigh/Lowで変化する様子を示している。
図9(h)および(i)は、図8(b)に図示したようにA相用コイル113およびB相用コイル114に印加する電圧信号に対してロータ119の追従遅れが生じている場合におけるロータ119の位置を示している。図8(b)に図示されるロータ119の追従遅れ801は、図9の追従遅れ量925に対応する。
図9(h)にて破線で描かれるように、A相+側ステータ115にロータ119のN極が接近しているときに正の領域となり、A相+側ステータ115にロータ119のS極が接近しているときに負の領域となる。図9(h)にて破線で描かれる正弦波は、図9(e)にて破線で描かれる正弦波に対して追従遅れ量925だけ遅れる。
図9(h)にてロータ119の電気角が0°から90°となる状態は、図8(b)にてロータ119の電気角が0°から90°となる状態に対応している。図8(b)にてロータ119の電気角が0°から90°までの間の状態で、A相+側ステータ115にロータ119のN極の中心が向かい合う。したがって、図9(e)にて破線で描かれる正弦波は、ロータ119の電気角が0°から90°までの間の状態で、最大になる。
図9(i)にて破線で描かれるように、B相+側ステータ117にロータ119のN極が接近しているときに正の領域となり、B相+側ステータ117にロータ119のS極が接近しているときに負の領域となる。図9(i)にて破線で描かれる正弦波は、図9(f)にて破線で描かれる正弦波に対して追従遅れ量925だけ遅れる。
図9(i)にてロータ119の電気角が270°から0°となる状態は、図8(b)にてロータ119の電気角が270°から0°となる状態に対応している。図8(b)にてロータ119の電気角が270°から0°までの間の状態で、B相+側ステータ117にロータ119のN極の中心が向かい合う。したがって、図9(i)にて破線で描かれる正弦波は、ロータ119の電気角が270°から0°までの間の状態で、最大になる。
図9(j)は、図8(b)に図示したようにA相用コイル113およびB相用コイル114に印加する電圧信号に対してロータ119の追従遅れが生じている場合におけるch0フォトインタラプタ103およびch1フォトインタラプタ104の出力を示している。すなわち、ロータ119のそれぞれの電気角におけるENC0信号(ch0フォトインタラプタ103の出力を2値化したもの)とENC1信号(ch1フォトインタラプタ104の出力を2値化したもの)を示している。ENC0信号とENC1信号も、図9(g)の信号変化位置から追従遅れ量925の分だけ遅れてHigh/Lowが変化する。図9(g)の追従遅れ量925は図8(b)の追従遅れ801に対応している。 図10は、ロータ119を逆転方向に回転させた際に、ロータ119の電気角とロータ119の回転位置との関係を説明する図である。図8では、ロータ119の回転方向が正転方向あったのに対して、図10では、ロータ119の回転方向が逆転方向である。図10(a)は、A相用コイル113およびB相用コイル114に印加する正弦波状の電圧信号に対してロータ119の追従遅れが生じていない状態を示している。図10(b)は、A相用コイル113およびB相用コイル114に印加する正弦波状の電圧信号に対してロータ119の追従遅れが生じている状態を示している。すなわち、図10(b)では、ロータ119の追従遅れ1001が生じている。図10についての詳細な説明は、図8と同様であるため省略する。図10(b)に図示されるロータ119の追従遅れ1001は、図11の追従遅れ量1125に対応する。
図11は、ロータ119を逆転方向に回転させた際の、A相用コイル113およびB相用コイル114に印加する電圧信号と、ロータ119の回転位置と、ch0フォトインタラプタ103およびch1フォトインタラプタ104の出力信号との関係を示している。
図11(a)〜(j)についての詳細な説明は、図9(a)〜(j)と同様であるため省略する。
ロータ119を正転方向に回転させた場合とロータ119を逆転方向に回転させた場合での相違点を説明する。ロータ119を逆転方向に回転させた場合には、図11(d)に示すように正弦波発生器109から出力されるテーブル番号が小さくなっていく。したがって、正弦波発生器109から出力されるテーブル番号を積算した値も小さくなり、ロータ119が1回転すると512減少する。また、図11(g)および(j)に示すように、スリット回転板105の取り付け位置のずれ角度α°の影響が進み方向に出る。すなわち、ロータ119を逆転方向に回転させた場合には、ENC0信号およびENC1信号がα°だけ進んでHigh/Lowで変化する。
図12および図13は、ロータ119の位置検出処理を含む、ステッピングモータ101の駆動方法を示すフローチャートである。CPU108は、ステップS1201において、ch0フォトインタラプタ103およびch1フォトインタラプタ104の変化タイミングの基準位置設定を行う。ここでは、ロータ119の追従遅れがない場合にてENC0信号のHigh/Lowが変化するタイミングに対応するテーブル番号と、ENC1信号のHigh/Lowが変化するタイミングに対応するテーブル番号と、を基準位置として設定する。
ロータ119を正転方向に回転させる際の基準位置設定方法について、図9を参照して具体的に説明する。図9(g)に図示されるように、ENC1信号がHighからLowに変化するタイミングがE1(E5)である。ENC0信号がLowからHighに変化するタイミングがE2(E6)である。ENC1信号がLowからHighに変化するタイミングがE3である。ENC0信号がHighからLowに変化するタイミングがE4である。ENC1信号がHighからLowに変化するタイミングE1(E5)では、テーブル番号0にαだけ加算した位置905(913)を基準位置として設定する。ENC0信号がLowからHighに変化するタイミングE2(E6)では、テーブル番号128にαだけ加算した位置907(915)を基準位置として設定する。ENC1信号がLowからHighに変化するタイミングE3では、テーブル番号256にαだけ加算した位置909を基準位置として設定する。ENC0信号がHighからLowに変化するタイミングE4では、テーブル番号384にαだけ加算した位置911を基準位置として設定する。このときのαは、図7で説明したスリット回転板105の取り付け位置ズレα°を、正弦波1周期を512のテーブル番号に換算したものである。
ロータ119を逆転方向に回転させる際の基準位置設定について、図11を参照して具体的に説明する。図11(g)に図示されるように、ENC1信号がLowからHighに変化するタイミングがE1(E5)である。ENC0信号がLowからHighに変化するタイミングがE2(E6)である。ENC1信号がHighからLowに変化するタイミングがE3である。ENC0信号がHighからLowに変化するタイミングがE4である。ENC1信号がLowからHighに変化するタイミングがE1(E5)では、テーブル番号0にαだけ加算した位置1105(1113)を基準位置として設定する。ENC0信号がLowからHighに変化するタイミングE2(E6)では、テーブル番号384にαだけ加算した位置1107を基準位置として設定する。また、ENC1信号がHighからLowに変化するタイミングE3では、テーブル番号256にαだけ加算した位置1109を基準位置として設定する。ENC0信号がHighからLowに変化するタイミングE4では、テーブル番号128にαだけ加算した位置1111を基準位置として設定する。
このように、ステップS1201では、ロータ119が正転方向に回転する場合と逆転方向に回転する場合にて、ENC0信号とENC1信号のHigh/Lowが変化するタイミングに対応するテーブル番号を適当な変数領域に格納する。なお、ステップS1201で設定される基準位置は、A相用コイル113およびB相用コイル114に印加される電圧信号に対して、ロータ119の追従遅れが生じない場合の基準位置である。
ステップS1202において、CPU108は、ステップS1201で設定した8個の値の中に512を超えるものがないかを判定する。もし、設定した値の中に512を越える値があれば、その値から512を減算して、基準位置として設定する。ステップS1202の処理は、テーブル番号の最大値が511であるので、0〜511の間の値に正規化するための処理である。
次に、ステップS1203において、CPU108は、ロータ119の現在位置の問い合わせがあるか否かを判定する。CPU108は、問い合わせがある場合(S1203でYES)、処理をステップS1204へ進め、問い合わせがない場合(S1203でNO)、処理をステップS1205へ進める。
CPU108は、ステップS1204において、問い合わせ先に対してロータ119の現在位置に対応するテーブル番号の値を返却し、その後、処理をステップS1205へ進める。なお、ステップS1204において、問い合わせ先に対して返却する現在位置は、図9(c)または図11(c)に図示される正弦波発生器109から出力されるテーブル番号を積算した値である。CPU108は、ステップS1205において、ステッピングモータ101に対する駆動開始命令が発生しているかを判定する。CPU108は、駆動開始命令が発生している場合(S1205でYES)、処理をステップS1206へ進め、駆動開始命令が発生していない場合(S1205でNO)、処理をステップS1203へ戻す。
ステップS1206において、CPU108は、駆動開始命令と共に送られてきた回転方向、速度、目標停止位置の指令値を設定する。そして、ステップS1207において、CPU108は、ステップS1201で設定した基準位置と、実際にENC0信号およびENC1信号のHigh/Lowが変化するタイミングに対応するテーブル番号との差分を格納する変数DiffCntにゼロ(0)を設定する。そして、CPU108は、駆動信号の位相(状態)に対するテーブル番号を設定値に応じた条件でステッピングモータ101の駆動を開始する。
ステップS1208において、CPU108は、ENC0信号またはENC1信号のHigh/Low変化が発生したかどうかを判定する。ENC0信号またはENC1信号のHigh/Low変化が発生した場合(S1208でYES)、CPU108は、処理をステップS1209へ進める。ENC0信号またはENC1信号のHigh/Low変化が発生しない場合(S1208でNO)、CPU108は、処理をステップS1230へ進める。
ステップS1209では、CPU108が、駆動開始命令と共に送られてきた回転方向の情報に基づいて、ロータ119を正転方向に回転させるのか、逆転方向に回転させるのかを判定する。ロータ119を正転方向に回転させる場合(S1209でYES)には、処理をステップS1210へ進める。ロータ119を逆転方向に回転させる場合(S1209でNO)には、処理をステップS1211へ進める。
ステップS1210では、ステップS1208で発生したENC0信号またはENC1信号のHigh/Low変化がENC0信号のHigh/Low変化なのか否かをCPU108が判定する。ENC0信号のHigh/Low変化であると判定される場合(S1210でYES)、処理をステップS1212へ進める。ENC0信号のHigh/Low変化でないと判定される場合(S1210でNO)、処理をステップS1213へ進める。
ステップS1212では、ENC0信号がLowからHighに変化しているのか否かをCPU108が判定する。ENC0信号がLowからHighに変化していると判定される場合(ステップS1212でYES)には、処理をステップS1216へ進める。ENC0信号がLowからHighに変化していないと判定される場合(ステップS1212でNO)には、処理をステップS1217へ進める。
ステップS1216では、ENC0信号がLowからHighに変化したタイミングに対応するテーブル番号を取得し、ステップS1201にて基準位置として設定した位置907(915)との差分を変数DiffCntに格納する。
図9(d)および(j)を参照して、ステップS1216の処理を具体的に説明する。ステップS1216を実行するのは、ENC0信号がLowからHighに変化するタイミングE8(E12)である。ENC0信号がLowからHighに変化するタイミングE8(E12)に対応するテーブル番号は位置908(916)である。このとき、差分918(922)が変数DiffCntに格納される。
ステップS1212にて、ENC0信号がLowからHighに変化していないと判定される場合には、ENC0信号がHighからLowに変化したことになり、処理をステップS1217へ進める。
ステップS1217では、ENC0信号がHighからLowに変化したタイミングに対応するテーブル番号を取得し、ステップS1201にて基準位置として設定した位置911との差分を変数DiffCntに格納する。
図9(d)および(j)を参照して、ステップS1217の処理を具体的に説明する。ステップS1217を実行するのは、ENC0信号がHighからLowに変化するタイミングE10である。ENC0信号がHighからLowに変化するタイミングE10に対応するテーブル番号は位置912である。このとき、差分920が変数DiffCntに格納される。
ステップS1210にて、ENC0信号のHigh/Low変化でないと判定される場合には、ステップS1208でENC1信号のHigh/Low変化が発生したことになり、処理をステップS1213へ進める。
ステップS1213では、ENC1信号がLowからHighに変化しているのか否かをCPU108が判定する。ENC1信号がLowからHighに変化していると判定される場合(ステップS1213でYES)には、処理をステップS1218へ進める。ENC1信号がLowからHighに変化していないと判定される場合(ステップS1213でNO)には、処理をステップS1219へ進める。
ステップS1218では、ENC1信号がLowからHighに変化したタイミングに対応するテーブル番号を取得し、ステップS1201にて基準位置として設定した位置909との差分を変数DiffCntに格納する。
図9(d)および(j)を参照して、ステップS1218の処理を具体的に説明する。ステップS1218を実行するのは、ENC1信号がLowからHighに変化するタイミングE9である。ENC1信号がLowからHighに変化するタイミングE9に対応するテーブル番号は位置910である。このとき、差分919が変数DiffCntに格納される。
ステップS1213にて、ENC1信号がLowからHighに変化していないと判定される場合には、ENC1信号がHighからLowに変化したことになり、処理をステップS1219へ進める。
ステップS1219では、ENC1信号がHighからLowに変化したタイミングに対応するテーブル番号を取得し、ステップS1201にて基準位置として設定した位置905(913)との差分を変数DiffCntに格納する。
図9(d)および(j)を参照して、ステップS1219の処理を具体的に説明する。ステップS1219を実行するのは、ENC1信号がHighからLowに変化するタイミングE7(E11)である。ENC1信号がHighからLowに変化するタイミングE7(E11)に対応するテーブル番号は位置906(914)である。このとき、差分917(921)が変数DiffCntに格納される。
ステップS1216〜S1219にて、変数DiffCntに格納される差分917〜922は、テーブル番号の値に換算されて変数DiffCntに格納される。ロータ119を正転方向に回転させる場合、変数DiffCntに格納される差分917〜922は、正の値となる。
ステップS1209にて、ロータ119を逆転方向に回転させると判定される場合には、処理をステップS1211へ進める。ステップS1211の処理は、ステップS1210と同じである。ステップS1208で発生したENC0信号またはENC1信号のHigh/Low変化がENC0信号のHigh/Low変化であれば、処理をステップS1214へ進め、そうでなければ処理をステップS1215へ進める。
ステップS1214の処理は、ステップS1212と同じである。ENC0信号がLowからHighに変化していれば、処理をステップS1220へ進め、そうでなければ処理をステップS1221へ進める。
ステップS1215の処理は、ステップS1213と同じである。ENC1信号がLowからHighに変化していれば、処理をステップS1222へ進め、そうでなければ処理をステップS1223へ進める。
図11(d)および(j)を参照して、ステップS1220〜S1223の処理を具体的に説明する。
ステップS1220を実行するのは、ENC0信号がLowからHighに変化するタイミングE8(E12)である。ENC0信号がLowからHighに変化するタイミングE8(E12)に対応するテーブル番号は位置1108(1116)である。このとき、差分1118(1122)が変数DiffCntに格納される。
ステップS1221を実行するのは、ENC0信号がHighからLowに変化するタイミングE10である。ENC0信号がHighからLowに変化するタイミングE10に対応するテーブル番号は位置1112である。このとき、差分1120が変数DiffCntに格納される。
ステップS1222を実行するのは、ENC1信号がLowからHighに変化するタイミングE9である。ENC1信号がLowからHighに変化するタイミングE9に対応するテーブル番号は位置1110である。このとき、差分1119が変数DiffCntに格納される。
ステップS1223を実行するのは、ENC1信号がHighからLowに変化するタイミングE7(E11)である。ENC1信号がHighからLowに変化するタイミングE7(E11)に対応するテーブル番号は位置1106(1114)である。このとき、差分1117(1121)が変数DiffCntに格納される。
ステップS1220〜S1223にて、変数DiffCntに格納される差分1117〜1122は、テーブル番号の値に換算されて変数DiffCntに格納される。ロータ119を逆転方向に回転させる場合、変数DiffCntに格納される差分1117〜1122は、負の値となる。
ステップS1216〜S1223のいずれかの処理の実行後のステップS1224にて、CPU108は、変数DiffCntに格納される値が256より大きいか否かを判定する。CPU108は、変数DiffCntに格納される値が256より大きい場合(S1224でYES)、処理をステップS1225へ進め、変数DiffCntに格納される値が256より大きくない場合(S1224でNO)、処理をステップS1226へ進める。ステップS1225て、CPU108は、変数DiffCntに格納される値から512を引いた値を再度、変数DiffCntに格納し、その後、処理をステップS1226へ進める。
ステップS1226にて、CPU108は、変数DiffCntに格納される値が−256以下か否かを判定する。CPU108は、変数DiffCntに格納される値が−256以下である場合(S1226でYES)、処理をステップS1227へ進め、変数DiffCntに格納される値が−256以下でない場合(S1226でYES)、処理をステップS1228へ進める。CPU108は、ステップS1227において、変数DiffCntに格納される値に512を加算した値を再度、変数DiffCntに格納し、その後、処理をステップS1228へ進める。
ステップS1224〜S1227の処理は、ステップS1216〜S1223の処理において差分を算出するための2つの値がテーブル番号0を跨いでいる場合(例えば、差分1117、1121の場合)を補正するための処理である。
ステップS1228において、CPU108は、現在位置の問い合わせがあるか否かを判定する。CPU108は、現在位置の問い合わせがある場合(S1228でYES)、処理をステップS1229へ進め、現在位置の問い合わせがない場合(S1228でNO)、処理をステップS1230へ進める。
ステップS1229において、CPU108は、ロータ119の現在位置の問い合わせに対して、変数DiffCntに格納される値を用いて補正を行ったテーブル番号の値を返却する。
この処理について、図9を参照して具体的に説明する。例えば、図9(j)のタイミングE7で現在位置の問い合わせがあった場合、図9(c)に図示されるテーブル番号の積算値は位置924となる。図9(d)に図示される位置906が図9(c)の位置924に対応する。ロータ119の追従遅れがなければ、タイミングE7のときに、A相用コイル113およびB相用コイル114に印加される電圧信号は位置906のテーブル番号に対応するものとなる。しかし、ロータ119が回転している場合には、図9(d)の差分917だけロータ119の追従遅れが発生する。したがって、タイミングE7のときには、A相用コイル113およびB相用コイル114に印加される電圧信号は位置905のテーブル番号に対応するものとなる。
すなわち、回転しているロータ119をタイミングE7で停止させる場合には、正弦波発生器109によるテーブル番号の進行を位置905のテーブル番号で停止するように制御すればよい。
次に、ステップS1230において、CPU108は、ロータ119が目標停止位置に到達しているか否かを判定する。CPU108は、ロータ119が目標停止位置に到達している場合(S1230でYES)、処理をステップS1231へ進め、ロータ119が目標停止位置に到達していない場合(S1230でNO)、処理をステップS1203へ戻す。ステップS1231において、CPU108は、正弦波発生器109によるテーブル番号の進行を停止する。その後、CPU108は、処理をステップS1203へ戻す。
以上の処理により、ロータの追従遅れがない場合に信号出力手段から信号が出力されるタイミングにおける駆動信号の状態と、ロータの追従遅れがある場合に信号出力手段から信号が出力されるタイミングにおける駆動信号の状態との差分からロータの追従遅れ量を求めることができる。そして、求めた追従遅れ量に基づいてロータの追従遅れを補正することができる。
なお、本実施形態では、ENC0信号のHigh/Low変化タイミングとENC1信号のHigh/Low変化タイミングとが90°の位相差を持つことを前提にしている。但し、このような前提に限られず、ENC0信号とENC1信号の出力間隔が一定でない場合でも対応が可能であり、その例について、図14にて説明する。
図14は、ENC0信号とENC1信号の出力間隔が一定でない場合の一例を示す図である。図14(a)は、ch0フォトインタラプタ103のアナログ出力に対して、閾値1401によって2値化したために、2値化出力のHigh区間のDuty比率が50%から小さくなっている様子を示している。図14(b)は、ch1フォトインタラプタ104のアナログ出力に対して、閾値1402によって2値化したために、2値化出力のHigh区間のDuty比率が50%から大きくなっている様子を示している。この場合、スリット回転板105の取り付け位置ズレαを、ENC0信号のLowからHighおよびHighからLowと、ENC1信号のLowからHighおよびHighからLowとの4要因で別々に検出しておく。そして、ステップS1201の処理において個別値を使用することにより対応することができる。
また、ENC0信号またはENC1信号の変化タイミング間隔に対してより細かい回転速度変動が発生する場合、複数の追従遅れ量に基づいて、ロータの追従遅れを補正する。具体的には、変数DiffCntを複数個用意して、複数の追従遅れ量を保持し、複数の追従遅れ量の平均値を用いてロータの追従遅れを補正する。
以上、本発明をその好適な実施形態に基づいて詳述してきたが、本発明はこれら特定の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。さらに、上述した各実施形態は本発明の一実施形態を示すものにすぎず、各実施形態を適宜組み合わせることも可能である。
本発明は以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムコードを読み出して実行する処理である。この場合、そのプログラム、および該プログラムを記憶した記憶媒体は本発明を構成することになる。