以下に、本発明の実施形態を、添付図面に基づいて詳細に説明する。各実施形態に共通する構成および動作を説明した後で、各実施形態を説明する。なお、各実施形態では電圧励磁により可動子が回転する回転駆動型モータを例示してモータ制御装置およびモータ制御方法を説明するが、本発明は、可動子が移動方向に直線移動するリニア駆動型モータにも適用可能である。
図1(A)は、本発明の実施形態に係るモータユニット100の外観図である。モータユニット100はステッピングモータ(以下、単にモータという)101を備え、出力軸102はスリット回転板105を有する。被検出部であるスリット回転板105は明領域と暗領域の比率が50:50で設計されている。スリット回転板105に対して明領域と暗領域を光学的に検出する一対の光学検出手段として、ch0フォトインタラプタ103およびch1フォトインタラプタ104が取り付けられている。出力軸102の回転に伴ってスリット回転板105が回転し、各フォトインタラプタ(PIと記す)の出力信号が変化する。出力軸102は、可動子としてのロータマグネット119の回転中心に取り付けられている。ch0フォトインタラプタ103およびch1フォトインタラプタ104の出力信号からロータマグネット119の位置に対応した位置情報を取得することができる。したがって、ch0フォトインタラプタ103およびch1フォトインタラプタ104は、位置情報取得手段の一例である。以下では、出力軸102の回転位置検出に用いるch0フォトインタラプタをch0−PIと記し、ch1フォトインタラプタをch1−PIと記す。
図1(B)は駆動用の電気回路を含めたシステムの構成例を示す。符号101〜105に示す各部は既述の通りである。コンパレータ106はch0−PI103とch1−PI104からの各アナログ入力信号を、設定された閾値電圧と比較し、2値化された信号をエンコーダ回路107に出力する。本発明の実施形態では、モータが回転ムラなく一定速度で回転している状態において、コンパレータ106の出力のH(HIGH)レベルとL(LOW)レベルとの比率が50:50となるように閾値が予め調整されている。以後、ch0−PI103の信号を2値化した第1検出信号をENC0信号とし、ch1−PI104の信号を2値化した第2検出信号をENC1信号とする。エンコーダ回路107はENC0信号とENC1信号の各信号の変化時点でタイミング情報を取得し、各信号による位置カウントおよび信号周期カウントを行う。エンコーダ回路107によるエンコード処理ではENC0信号の立上りと立下り、ENC1信号の立上りと立下りの4種の信号種別が区別され、それぞれの信号入力タイミングでCPU(中央演算処理装置)108に割り込みがかかる。このとき、CPU108は割り込み要因に係る4つの信号種別を判別する。CPU108はメモリからプログラムを読み出して実行する機能をもち、バス110を介してエンコーダ回路107、正弦波発生器109、PWM(パルス幅変調)発生器111にアクセスする。正弦波発生器109は正弦波の1周期に対して512の分解能をもつ多値波形データの参照テーブルを有する。正弦波発生器109が多値波形のテーブル値に対応するPWM値の信号をPWM発生器111に送ると、PWM発生器111が出力するPWM信号がモータドライバ112で増幅されてモータ101に供給される。正弦波発生器109からモータ101への信号伝達の詳細については、図2および図4を参照して後述する。
次に、図2の模式図を参照して、Hブリッジ型のモータドライバ112の構造を説明する。図2(A)では、スイッチ素子401〜404を介してA相用コイル113が接続されている。図2(B)に示すように、PWM発生器111からのA相用のPWM信号がHIGH信号(以下、H信号と記す)のとき、スイッチ素子401と404が閉状態で、スイッチ素子402と403が開状態となる。このとき、A相用コイル113の両端には、A側を高電位としてモータドライバ112に供給されている電圧Vcc分の電位差が生じる。このときにコイル113のB側に対するA側の電位を図2(F)に示し、流れる電流「I」を図2(I)に示す。
PWM発生器111からのA相用のPWM信号がLOW信号(以下、L信号と記す)のときには、図2(C)のようにスイッチ素子402と403が閉状態でスイッチ素子401と404が開状態となる。このとき、A相用コイル113の両端には、B側を高電位としてモータドライバ112に供給されている電圧Vcc分の電位差が生じる。このときにA相用コイル113のB側に対するA側の電位を図2(G)に示し、電流「−I」を図2(J)に示す。
以上の2つの状態を短時間で繰り返した場合の例を、図2(D)、(E)、(H)、(K)に示す。図2(D)と図2(E)の状態が等時間ずつ繰り返されると、図2(H)で示すように、−Vccと+Vccの2値の矩形波電圧信号が発生する。この電圧信号がA相コイル113に印加されると、コイルの電流遅れ成分により電圧信号が平滑化された形で電流波形が現れる。−Vccと+VccとでHL信号比率が50%の場合、実効電流値が0となる。PWM信号のHL信号比率が50%のときに出力が0Vの定常電圧、100%のときに+Vccの定常電圧、75%のときに+Vcc/2の定常電圧がかかっているのと実効的に同じとして扱うことができる。
正弦波発生器109では、512個のテーブル番号のそれぞれに対して、PWM制御のDUTY(デューティー)比(%)の値が参照テーブルに格納されている。図4は、正弦波の参照テーブルを例示し、0から511までのテーブル番号は正弦波形の位相値に対応する。正弦波の0度位相にテーブル番号0が相当し、正弦波の180度位相にテーブル番号256が相当する。テーブル番号0にはDUTY比50%の値が格納され、それ以降のテーブル番号には、位相に応じてPWM出力のDUTY比の値が格納されている。図4の例では、DUTY比の値が100%になると+Vccの値が出力されるので、随時に正弦波のゲインを変更できるように、テーブル値のピークを100%未満の値に設定している。以上の方法により、デジタル化した2値出力信号でモータコイルに対して実効的に正弦波状の電圧信号を印加することができる。以後、説明の簡便化のため、駆動電圧を正弦波として扱うことにする。
図2に示すA相用コイル113、B相用コイル114には、モータドライバ112が出力する正弦波の駆動電圧(駆動信号)が供給される。後段のステータA+115、ステータA-116、ステータB+117、ステータB-118に対して4種類の位相の異なる正弦波の駆動電圧が発生される。A相およびB相の駆動電圧波形と、ステータ印加電圧、ロータの停止位置、およびその時のスリット回転板105の位置について、図3から図5を参照して詳細に説明する。
図3(A)は、モータ101の内部構造を例示した模式図である。ロータマグネット119は極対数が5(10極)であり、その周囲に物理角18°毎にステータが設置されている。時計回り方向を正転方向(第1方向)とする。ステータA+115、ステータA-116、ステータB+117、ステータB-118がモータ軸を中心として周期的に配置されている。ステータA+115、ステータB+117は、コイルに印加された電圧が正弦波形の正領域にあるときにN極の磁力を発生する。またステータA-116、ステータB-118はコイルに印加された電圧が正弦波形の正領域にあるときにS極の磁力を発生する。図4の正弦波形の正領域にN極、負領域にS極と記しており、これらはステータA+115、ステータB+117に対する発生磁力を示す。ステータA-116、ステータB-118に関しては逆の関係になる。
図5は、各相の駆動電圧波形を例示する。図5(A)に示すSin(正弦)波信号をA相用コイルにかけ、Cos(余弦)波信号をB相用コイルにかけた場合、図1、図3に示す正転方向に出力軸102が回転する。正転時にはテーブル番号を正方向に進めて駆動波形信号が生成され、B相がA相に対して90度先行した波形が出力される。また、図5(B)に示す信号をA相用コイル、B相用コイルにそれぞれかけると、図1、図3に示す正転方向とは反対の第2方向(逆転方向)に出力軸102が回転する。逆転時にはテーブル番号を逆方向に進めて駆動波形信号が生成され、B相がA相に対して90度遅れる波形が出力される。
図3(B)は、各ステータとフォトインタラプタとの位置関係、およびロータマグネット119の着磁位相とスリット回転板105の基準位置との位相関係を示す。ロータマグネット119のN極領域と、スリット回転板105の明領域とが丁度重なっている位置関係を基準位置関係と定める。図3(C)では、基準位置関係から、スリット回転板105が逆転方向に電気角でα度(図では180°)ずれた位置に固定された場合を示す。電気角とはロータにかける正弦波形の位相角度、およびその時にロータマグネット119が進む角度を360°と定義し直したものである。よって本実施形態の場合、スリット回転板105、ロータマグネット119の物理的角度72°が電気角360°に相当する。ロータマグネット119の着磁位相に対して、スリット回転板105の明暗位相がずれた状態で取り付けられる場合がある。本実施形態においてαの値は事前に算出されている。例えば、モータを正転方向へオープン駆動した場合に位置検出信号とモータ軸に係る着磁位相との第1位相差が算出され、モータを逆転方向へオープン駆動した場合に位置検出信号とモータ軸に係る着磁位相との第2位相差が算出される。第1位相差と第2位相差との和を2で除算すれば、位相ずれ量を示す電気角αの値を特定できる。
図3(B)にはステータA+115、ステータB+117、ch0−PI103、ch1−PI104の物理的位置を示す。実際には、図3(A)のように20個のステータがあるが、ステータA+115、ステータB+117の位置を代表して示す。ステータA+115から逆転方向に物理角18°離れた位置にステータB+117が位置する。角度的にはch0−PI103がステータB+117に対応する位置となり、ch1−PI104がステータA+115に対応する位置となるように設置されている。
図6は、極対数5のモータを、極対数1の構成にモデルに簡略化した図である。これにより電気角と物理角が一致するため、以後の説明はこのモデルを使って行う。図6(A)は、ロータマグネット119の着磁位相と、スリット回転板105の明暗位相とが基準位置関係にある場合を示す。図6(A)の右側の波形は、回転位置を図の状態からθ度回転させた場合のENC0信号およびENC1信号の出力変化を表している。図6(A)に対して、スリット回転板105の位置が電気角αだけ逆転方向にずれて取り付けられた場合を表わしたものが図6(B)である。このとき、ENC0信号とENC1信号の各出力は、図6(A)の場合に比べて、電気角α分だけ遅れて出力される。
[第1実施形態]
以下に本発明の第1実施形態を説明する。本実施形態における処理の流れを示す図7のフローチャートを参照して説明を行う。本処理はCPU108がメモリからプログラムを読み出して実行することにより実現される。
まずS801で処理が開始し、続くS802でCPU108は、モータ制御装置にてモータに対する回転駆動命令を受信しているかどうかを判定する。回転駆動命令が受信された場合、S803に進み、受信していない場合、S802の処理が繰り返されて待機状態となる。S803にて、回転駆動命令による目標位置と、現在位置との比較により、モータの回転方向が決定される。モータの回転方向が正転方向であればS804に進み、逆転方向であればS805へ移る。
S804でCPU108は、現在の停止位置で出力しているテーブル番号に128を加算した値を現在のテーブル番号に変更する。続くS806では、回転駆動命令によって受け取った回転開始速度に対応する周波数で、回転開始位置からテーブル番号を+(プラス)カウント方向に進めていく制御が開始する。S804からS806までは時間を極力短くし、ほぼ同時であることが望ましい。S804においてテーブル番号に128を加算して進める理由について図8、図9を参照して説明する。
図8は、ロータマグネット119の回転位相と、A相用コイル113およびB相用コイル114への着磁位相との関係による、回転トルクの大きさを説明するための図である。図8(A),(B)の上側には、ロータ電気角0°〜270°の範囲にて、ロータマグネット119の回転位相が電気角で90°ずつ異なる4状態(0°,90°,180°,270°)を例示している。時計まわり方向を正転方向と定義する。「ロータ電気角0°」で表されるロータマグネット119の回転位置、即ちステータB+117の直下の磁極位置にN極からS極に変化する境目がある時を電気角の基準(0°)とする。図8にはステータA+115、ステータB+117のみを代表して示す。図8(A)の下側の波形図は、上から順にA相駆動電圧波形、B相駆動電圧波形、正転方向加速トルクを示す。A相駆動電圧波形、B相駆動電圧波形は図5(A)の場合と同様である。よって例えば、ロータ電気角0°の状態では、A相駆動電圧波形がS極側に最大であり、ステータA+115はS極の最大値となる。B相駆動電圧波形の値は0であり、ステータB+117は着磁が0となる状態である。図8(A)は、A相駆動電圧波形、B相駆動電圧波形が進角0°の状態を示している。
図8(A)におけるロータマグネット119と駆動電圧波形の関係は、ロータが回転せずに停止している状態、または駆動指令による速度が極低速でロータへの過負荷が非常に少なく、ロータが駆動指令に対して追従遅れなく動いている状態を示す。この場合、ロータの回転速度を増加させるトルク(加速トルク)は0となる。
図8(B)は、A相駆動電圧波形、B相駆動電圧波形が電気角で90°だけ進角させた状態を示している。ここで、「電気角で90°」は、予め設定される進角量である。これは、ロータへの過負荷が大きく最大のトルクを出そうとしている状態、またはロータの位相状態に合わせて駆動波形を進角させることが可能な場合に実現できる状態である。ロータの位相と駆動電圧波形の位相との関係が図8(B)に示す状態であれば、加速トルクは最大値(図8の+MAX参照)となる。このことを踏まえて図7のS804、S806で行う処理について、図9を参照して説明する。
図9(A)は、進角制御による駆動を用いた場合の回転開始時の挙動を示した図である。進角制御では、モータに対する特定の負荷の下で、目標とする進角状態になるように最適な回転数を算出し、エンコーダ信号のレベル変化を検出する度にその時点での回転数に応じた駆動周波数を設定する制御が行われる。「進角状態」とは、進角制御により維持される、進角が一定の状態である。
図9(A)は、上からENC0信号、ENC1信号、A相駆動電圧波形、B相駆動電圧波形、正転方向加速トルクの各波形を示す。横軸は時間tを示し、時刻C,D,Eに状態遷移のタイミングを示す。時刻Cまでの期間は、回転状態から停止状態までの期間を表わし、時刻Cから時刻Dまでの期間は回転停止状態の期間を表す。時刻Cから時刻Dまでの期間では、A相駆動電圧波形およびB相駆動電圧波形が変化しない。時刻Dで回転駆動指令に応じて、A相駆動電圧波形およびB相駆動電圧波形が変化し始める。これによってモータの回転駆動が開始される。時刻Dから時刻Eまでの期間は、駆動指令による速度が極低速でロータへの過負荷が非常に少なく、ロータが駆動指令に対して追従遅れなく動いている状態となる。時刻EにてENC1信号が変化すると、ロータの回転速度に基づいてモータ制御装置が進角制御を開始する。すなわち、モータ制御装置は、進角量が制御された駆動電圧波形をモータに供給する。したがって、時刻Eからロータ位相に合わせた最適な加速運動を開始することができる。これによって、図9(A)に示す正転方向の加速トルクの波形は、時刻Eから上昇し、最大トルクが発生する。面積Fで表わされる量に相当する力がロータに働くことになる。
図9(B)は、本実施形態における回転開始時の挙動を示す。図9(B)に示す各波形の配置は、図9(A)の場合と同じである。図9(B)においては、時刻G,H,Iに状態遷移のタイミングを示す。時刻Gまでの期間は、回転状態から停止状態までの期間を表わし、時刻Gから時刻Hまでの期間は回転停止状態の期間を表している。時刻Hで回転駆動指令に応じて回転駆動が開始し、このタイミングで図7に示すS804、さらにS806の処理が実行される。時刻Hから時刻Iまでの期間では、モータ制御装置が、予め設定される進角量だけ進角させたA相駆動電圧波形およびB相駆動電圧波形をモータに供給する。時刻Iにおいて、ENC1信号が変化すると、ロータの回転速度に基づいてモータ制御装置が進角制御を開始する。図9(B)では、図8(B)で説明した原理により時刻Hから最大トルクが発生する。よって時刻Hから時刻Iの期間にて面積Jで表わされる量に相当する力がロータに働くことになり、図9(A)に比べて加速性能が改善される。ここで図7のフローチャートの説明に戻る。
図7のS804の処理は、現在のテーブル番号に128を加算することで、駆動波形の位相を進める処理である。図4に示したように、正弦波の90°位相に相当するのは、テーブル番号128である。すなわちS804の処理は、図8、図9で説明した駆動波形の位相を、進行方向に90°進める処理に相当する。S806の後、S808において、駆動開始後に初めてのPIの信号変化が検知され、CPU108のPI割り込み処理によって進角制御の処理が開始する。続くS809では、進角制御による目標位置への移動処理が実行される。
S803にて回転方向が逆転方向であると判定された場合、S805に移行する。S805でCPU108は、現在の停止位置で出力しているテーブル番号から128を減算した値を現在のテーブル番号に変更する。続くS806では、回転駆動命令によって受け取った回転開始速度に対応する周波数で、開始位置からテーブル番号を−(マイナス)カウント方向に進めていく制御が開始する。その後、S808に移行する。この場合の処理は、回転方向が逆であるだけであり、S804、S806の処理に関する前記の説明において、+128を−128とし、回転方向を逆方向として読み替えればよいので、その詳細な説明を割愛する。
S809の処理が終了すると、次のS810では、目標位置への到達により、モータの回転停止処理が実行された後、S802に処理が戻る。
本実施形態によれば、進角制御によるステッピングモータの動作制御において始動性を改善し、加速に要する時間を短縮することができる。特に、実効的に正弦波駆動を行う場合に効果的である。
[第2実施形態]
次に、本発明の第2実施形態を説明する。従来の制御では、エンコーダ信号を2回以上受け付けないと速度情報が得られないため、エンコーダ信号の2回目以降でないと正確な進角制御による効率的な加速に支障を来たす可能性がある。そこで、本実施形態では効率的な制御を目的として、1回目のエンコーダ信号で速度を算出する処理を行う。本実施形態にて第1実施形態の場合と同様の構成要素については既に使用した符号を用いることにより、それらの詳細な説明を省略して相違点を中心に説明する。
図10および図11を参照して、ロータマグネット119のどの回転位置の時に、どの位相の正弦波駆動波形をA相用コイル113、B相用コイル114に入力すれば効率的な回転駆動を行えるかを説明する。ロータ電気角については、図8にて説明した通りである。
図10は、進角90°の駆動波形とロータマグネット119の回転位置を示す図である。図11は、進角0°の駆動波形とロータマグネット119の回転位置を示す図である。図10(A)、図11(A)はステータA+115がN極に励磁されていた場合に、ステータA+115位置でのロータマグネット磁界強度を表わしている。ロータマグネット119に対して正転方向のトルクを与える値を正の値とする。図10にてロータ電気角0°の場合、ステータA+115がどのように励磁されていようがロータマグネット119が回転するトルクは発生しない。磁力によって発生する力がロータの回転方向と垂直な方向にしか働かないからである。またロータ電気角90°の場合、ステータA+115がN極に励磁されているとロータマグネット119のN極に対して斥力を、ロータマグネット119のS極に対して引力を働かせるので、最高の正転方向トルクが発生する。図10(B)、図11(B)はステータB+117に関する磁界を示し、図10(A)、図11(A)に示す磁界との位相差が90°であること以外、同様であるので詳細な説明は省略する。
図10(C)、図11(C)はch0−PI103の位置でのスリット回転板105による明暗状態、およびENC0信号を表わす。ENC0信号はch0−PI103の信号を2値化した信号であるので、厳密にはスリット回転板105の明暗状態の切り替わりから電気的に僅かに遅れるが、本実施形態では無視する。ENC0信号は明状態の時にHighレベルで、暗状態の時にLowレベルとなる。図10(C)、図11(C)の出力について、図6(A)の状態であり、電気角αは0°である。図10(D)、図11(D)にはch1−PI104における明暗状態、およびENC1信号を表す。位相差が90°であること以外、図10(C)、図11(C)と同様であるので詳細な説明は省略する。
以下、図10を参照し、ロータマグネット119に対して回転トルクを効率的に発生させる駆動波形の供給について説明する。図10(A)、(B)で示した磁界曲線に対して、A相用コイル113、B相用コイル114に流れる電流を掛けたものがトルクとなる。図10(A)、(B)に示す波形が正弦波状であることから、A相用コイル113、B相用コイル114に流れる電流位相はそれぞれ、図10(A)、(B)の磁界曲線の位相と一致している時にトルクが最大になる。コイルに流れる電流は、コイルに与える電圧波形から遅れが発生するが、この遅れはコイル特性や、コイルに発生する逆起電圧によって変化する。このため、電圧と電流の位相を同一とした場合を基準とし、A相用コイル113、B相用コイル114に通電させた最大効率の正弦波電圧波形を、図10(E)、(F)にそれぞれ示す。図10(A)、(E)が同位相関係にあり、図10(B)、(F)が同位相関係にある。
図10(G)、(H)はそれぞれ、A相コイル113に起因するトルク曲線、B相コイル114に起因するトルク曲線を示す。図10(G)は図10(A)、図10(E)を掛けた結果を表すトルク曲線を示し、図10(H)は図10(B)、図10(F)を掛けた結果を表すトルク曲線を示す。2つのトルク曲線を足し合わせた合成トルク、つまりモータ全体に発生するトルク曲線を図10(I)に表し、常に回転を発生させる一定トルクが発生している。
図11は、進角0°の駆動波形とロータマグネット119の回転位置を示す図である。例えばロータ電気角0°において、図11(E)に示すようにA相コイル113にかけている電圧波形は負の最大値、即ちステータA+に最大のS極が発生している。またロータ電気角0°において、図11(F)に示すように、B相コイル114の電圧値は0、即ちステータB+は励磁されない状態である。このとき、ロータマグネット119は固定され、一切回転トルクは発生しない。このように図11(E)、(F)で示す位相関係で駆動電圧をかけた時、正転方向のトルクは発生しない。モータを極低速でオープン駆動させた場合に、ロータマグネット119の着磁位相と、駆動波形の位相は図11に極めて近い位相関係で回転する。図11(G)はA相コイル113に起因するトルク曲線を示し、図11(H)はB相コイル114に起因するトルク曲線を示す。2つのトルク曲線は逆相関係にあり、正負で同面積のトルク積分値を持つ。よって、これらの和である図11(I)の合成トルク曲線に示す、モータ全体のトルクは常に0となる。
本実施形態では、図10に示す進角90°の位相関係で常にモータの回転駆動を行うことを目的とする。以下では、図12〜図14を参照して、回転駆動中にENC0信号とENC1信号の各タイミングで、駆動波形のどの位相値を取得していれば、進角90°の状態になるかについて順を追って説明する。ENC0信号とENC1信号の各タイミングとは、ENC0信号の立上りと立下り、ENC1信号の立上りと立下りのタイミングである。ENC0信号の立上りをEnc0Upと記し、ENC0信号の立下りをEnc0Downと記す。ENC1信号の立上りをEnc1Upと記し、ENC1信号の立下りをEnc1Downと記す。
まず、図12は、進角0°の状態での駆動波形とENC0信号およびENC1信号との関係を示す。図12(A)は、A相コイル113に与える電圧波形を表す。図12(B)は、B相コイル114に与える電圧波形を表す。図12(C)は、図12(A)、(B)の駆動波形に対応するテーブル番号値を、直線状のグラフで視覚化して示す。図12(D)は、ENC0信号の状態を示す。図12(E)は、ENC1信号の状態を示す。図12に示すように、駆動中に進角0°の状態を保つ制御の場合、Enc0Upのタイミングで駆動波形のテーブル番号128が取得できていればよい。その他、Enc0Downのタイミングでは384、Enc1Upのタイミングで256、Enc1Downのタイミングでは0という、テーブル番号がそれぞれ取得できていればよいことになる。
図13は、進角90°状態の場合を示す図であり、図12の場合に比べて、駆動波形が90°進んでいる。進角90°の状態での回転駆動を保つには、Enc0Upのタイミングで256、Enc0Downのタイミングで0、Enc1Upのタイミングで384、Enc1Downのタイミングで128という、各テーブル番号が取得できていればよい。以上、特定の進角状態を保つ場合の駆動波形の位相とENC0、ENC1の位相関係について説明したが、これは、回転位置をθ度回転させた場合のENC0信号およびENC1信号の出力変化が図6(A)の状態であることを前提とする。
次に、図6(B)の状態のように、ロータマグネット119のN極位相とスリット回転板105の明状態の位相が一致していない場合を説明する。図14は、スリット回転板105の位相が、電気角αでずれた位置に取り付けられている場合の関係を示している。スリット回転板105に電気角αで示す取り付け位置ズレがある場合、ロータマグネット119の回転に対して、ENC0信号、ENC1信号には電気角αのずれが発生する。このとき、駆動中に進角90°の状態を保つためには、Enc0Upのタイミングにおいて「256+α」であるテーブル番号値(白抜き点1202参照)を取得できることが必要となる。その他、Enc0Downのタイミングにおいて「0+α」、Enc1Upのタイミングにおいて「384+α」、Enc1Downのタイミングにおいて「128+α」の、テーブル番号をそれぞれ取得できることが必要である。図14にて各テーブル番号に対応する位置を白抜き点1204、1203、1201でそれぞれ示す。
以上の説明は、時計回りの正転方向の回転の場合である。反時計回りの逆転方向の回転の場合には位相角の向きが逆である。つまり図15に示すように、ENC0信号、ENC1信号が電気角αだけ進む(正転方向の回転の場合には電気角αだけ遅れる)。図15(A)は、ロータマグネット119の回転位相、スリット回転板105の明暗状態およびENC0信号の出力の関係を示す図である。図15(B)は、ロータマグネット119の回転位相、スリット回転板105の明暗状態およびENC1信号の出力の関係を示す図である。図15(C)は、駆動波形のテーブル番号の推移を示す図である。図15(D)は、A相コイル113への電圧波形を示す図であり、図15(E)はB相コイル114への電圧波形を示す図である。基本的には図12〜図14に対する説明と同様である。よって、それらの詳細を説明は省略する。
次に、図16から図18を参照して、本実施形態におけるモータ制御について説明する。図16から図18は本実施形態の処理例を示すフローチャートである。以下の処理はCPU108の制御下でプログラムに従って実行される。
S1801より処理が開始し、続くS1802でCPU108は、事前に特定されている電気角αの値に基づいて、ENC0信号およびENC1信号の要因タイミング毎の目標テーブル番号値を算出する。この処理では図14で説明した事項に基づき、α=0の場合の、ENC0信号およびENC1信号という要因毎のデフォルトテーブル値にαを加算した値が4変数にそれぞれ代入される。各変数は以下の通りである。
・ENC0信号の立上り時に取得すべき目標テーブル番号値を格納する変数
TrgtSameTimeTableNumForEnc0Up=256+α
・ENC0信号の立下り時に取得すべき目標テーブル番号値を格納する変数
TrgtSameTimeTableNumForEnc0Down=0+α
・ENC1信号の立上り時に取得すべき目標テーブル番号値を格納する変数
TrgtSameTimeTableNumForEnc1Up=384+α
・ENC1信号の立下り時に取得すべき目標テーブル番号値を格納する変数
TrgtSameTimeTableNumForEnc1Down=128+α
続くS1803では、S1802で設定した4つの変数値が、0〜511の範囲内に入っているか否かについてチェックされる。511を超えている値については512を減算して設定し直し、0〜511内の値に正規化する処理が実行される。
S1804においては、最新の周期カウント値を格納する変数(CurQrtPrdCnt)が0で初期化される。この変数は、後の処理に使用するENC0信号、ENC1信号の最新の2つの切り替わり間の時間に相当する値をもつ。S1805は回転駆動命令の受信の有無についての判定処理である。S1805では回転駆動命令が受信されるのを待ち、回転駆動命令が受信されるとS1806へ処理を進める。S1806でCPU108は、現在の回転位置と回転指令による目標位置とを比較し、モータの回転方向を判定する。回転方向が正転方向の場合、S1807へ移行し、逆転方向である場合、S1814へ移行する。S1807へ移った場合を以下に説明する。
S1807〜S1810の処理は、現在の停止状態での回転位相から、回転駆動命令によって指定された回転方向へモータが回転した場合、初めてのPI信号の変化がある回転位相までの回転位相量を算出する処理である。図19を用いて原理を説明する。
図19(A)はA相用コイル113とB相用コイル114への各通電位相を示している。図19(B)は、モータが図19(A)における180°の通電位相で停止している状態を示す。図19(C)は、モータが図21(A)における200°の通電位相で停止している状態を示す。図19(B)の状態では、A相用コイル113がN極励磁され、B相用コイル114への通電量が0である。このため、ロータマグネット119は、図19(B)で示すように、左側がN極で右側がS極となる回転位相で止まっている。このとき、ロータマグネット119の着磁位相とスリット回転板105の明暗位相との位相ズレを示すαの値は取得済みである。このことから、電気角αの値に相当する分の回転が行われたときに、ch0−PI103が暗状態から明状態に変化することが事前に分かる。モータが200°の通電位相で停止している場合、図19(C)に示すように、位相量(α―20)度分の回転が行われたときにch0−PI103が暗状態から明状態に変化することが事前に分かる。以下、S1807〜S1810の処理を具体的に説明する。
S1807においては、S1803にて決定された4変数値から128がそれぞれ減算され、各減算結果は一時変数である4つの変数TmpPrgDegCnt[n](n=0-3)に格納される。具体的には、変数TrgtSameTimeTableNumForEnc0Upの値がTmpPrgDegCnt[0]に代入され、変数TrgtSameTimeTableNumForEnc1Upの値がTmpPrgDegCnt[1]に代入される。変数TrgtSameTimeTableNumForEnc0Downの値がTmpPrgDegCnt[2]に代入され、変数TrgtSameTimeTableNumForEnc1Downの値がTmpPrgDegCnt[3]に代入される。続くS1808でCPU108は、S1807での4変数の値を判定し、負値については512を加算することで、0〜512の間の値に正規化する。S1809では現在の停止状態での正弦波のテーブル番号CurTblNumの値を取得し、S1808で決定した4つの変数値からテーブル番号CurTblNumの値が減算される。その際、減算後の値が負値になる場合には、512を加算することで0〜511内の値に正規化される。
S1810でCPU108は、S1809で決定された4つの値を相互に比較し、それらの中で最小の値を選択する。この値が現在の停止位相から、回転開始後において1回目(初回)のエンコーダ信号の変化時点までの回転位相量となる。選択された値は変数InitMoveLenCntに代入され、メモリに保持される。すなわち、変数InitMoveLenCntの値は、モータの停止後に駆動の開始時刻から1回目に位置検出信号が変化する時刻までの初期移動量を表す。S1810では、選択された変数TmpPrgDegCnt[n]の配列指標nの数値から、次回のエンコーダ信号の変化が、どの要因によって起こるかを判別できる。例えば、4つの変数TmpPrgDegCnt[0]〜TmpPrgDegCnt[3]のうち、TmpPrgDegCnt[1]が選択された場合には、ENC1信号の立上りが起こることになる。S1811では、回転開始時刻として現在時刻が変数StartTImeに格納される。汎用的なCPUに備わったタイマ等により、必要十分な精度の時間計測が行われ、タイマによる計測値から現在時刻が取得される。
S1812でCPU108は、現在モータが停止している位置での出力に対応するテーブル番号に128を加算し、加算結果の値を現在のテーブル番号に変更する。加算結果の値が512以上になる場合は、当該テーブル番号から512が減算され、その結果値が設定される。そしてS1813では、回転駆動命令の受信時に取得された回転開始速度に対応する周波数で、テーブル番号を+カウント方向に進めていく処理が開始する。回転開始速度については、モータがオープン駆動で正常に回転可能な範囲内での速度に設定されている。S1812およびS1813の処理の時間間隔は極力短く、ほぼ同時であることが望ましい。S1812においてテーブル番号に128を加算して位相を進める理由については、図8、図9を用いて説明した通りである。
S1806において回転方向が逆転方向であると判断された場合には、S1814〜S1820の処理が実行される。この場合、テーブル番号のカウント方向が逆であり、そのためにテーブル番号値を進める場合の加減算の関係が逆になっている点を除いて、S1807〜S1813とほぼ同様であるので詳細な説明は割愛する。
図17のS1821でCPU108は、PI信号による割り込みがあるかどうかを判定する。PI信号とは、Enc0Up,Enc0Down,Enc1Up,Enc1Downの各タイミングでの信号を総称した信号である。これらの4信号の変化要因がエンコーダ回路107を通じてCPU108の割り込み処理を発生させる。PI割り込みがない場合には、PI割り込みがあるまで処理待ちを続ける。PI割り込みがあった場合、S1822へ処理を進め、CPU108は駆動通電波形の現在位相を示すマイクロステップ波形のテーブル番号を取得し、変数CurTblNumへ代入する。続くS1823では現在時刻が取得され、変数CurTimeへ代入される。S1821における割り込みの発生時刻から、S1823における現在時刻の取得および保持までにかかる時間は、後述の処理にとって、ほぼ同時とみなせるほどの時間差しかない。S1824では、現時点でのENC周期時間カウント値が変数PastCurEncQrtPrdCntに代入されて保持される。ENC周期時間カウント値とは、ENC信号の周期時間の計測値である。
S1825〜S1827は、後段の処理で利用するPI信号の変化周期時間のカウント値、またはそれに相当する推定時間のカウント値を取得するための処理である。本処理の概要について、図20を用いて説明する。
図20(A)は、横軸を時間軸として、ENC0信号の出力を示している。図20(B)は、横軸を時間軸として、ENC1信号の出力を示している。図20(C)は、横軸を時間軸として、A相駆動電圧波形を示している。図20(D)は、横軸を時間軸として、B相駆動電圧波形を示している。図20(E)は、縦軸がロータの回転量を表し、横軸が時間を表す。図20(F)はENC信号間の周期時間にて、128カウント分の回転量を移動するのにかかった、速度と等価に扱える周期時間を、時間区分ごとに示す。ENC0信号、ENC1信号は、いずれもデューティー比が50%であり、90°の位相差になるよう調整されている。すなわち、ENC0信号およびENC1信号の信号変化間に移動するロータ回転量は一律で電気角で90°の回転量であり、ENC周期時間の逆数をとると速度として扱うことができる。時間軸上には時刻tsとt0、t1からt8を示す。時刻t1からt2においては、時刻t0から時刻t1までの時間差分T1を速度と等価な値として使用できる。以後t2、t3…、とPI信号が変化する毎に速度と等価な時間情報が取得される。
時刻t0では、直前にENC信号の変化が発生していないので、ENC0信号およびENC1信号の変化の時間差によって速度情報を算出できない。そこで、図16のフローチャートにおけるS1810、及びS1817にて取得した変数InitMoveLenCntに格納された値を利用して時刻t0における速度情報としてT0が算出される。図20における回転開始時刻tsと、ENC信号の初回の変化時刻t0との差分時間(移動時間)中にモータは、変数InitMoveLenCntの値の回転量を移動したことになるので、これらから速度情報を算出することができる。具体的には「(t0−ts)×128/InitMoveLenCnt」という計算式を用いる。この計算式から、時刻t0におけるロータマグネット119が電気角で90°を移動するときの速度と等価に扱える周期時間を算出できる。これらの処理は、図17のフローチャートにてS1825〜S1827で実行される。S1825ではPI割り込みが1回目であるか否かが判定される。PI割り込みが1回目である場合、S1827に進み、上述の計算式によって算出した値が変数CurEncQrtPrdCntに代入される。つまり「(CurTime−StartTime)×128/InitMoveLenCnt」の演算が行われて、演算結果を示す値が変数CurEncQrtPrdCntに保持される。CurTimeは前記t0に相当し、StartTimeは前記tsに相当する。またPI割り込みが2回目以降である場合にはS1826に進み、最新のENC周期時間カウント値が取得され、変数CurEncQrtPrdCntに代入される。
続くS1828〜S1844では、モータの駆動中に所望の進角状態を保つための処理が行われる。この処理の概要について、図21を参照して説明する。
図21は、ロータマグネット119とスリット回転板105の取り付け位置ズレ量として電気角αに相当する190(正弦波1周期を512分割した場合)で正転時の場合を示す。図21(A)は、横軸を時間軸として、ENC0信号の出力を示している。図21(B)は、横軸を時間軸として、ENC1信号の出力を示している。図21(C)から(E)はA相用コイル113への通電波形を示している。
図21(C)は、電気角αに相当する位置が190であって、進角90°の状態におけるENC0信号位相に対するA相用コイル113への通電波形を示す。図14にて説明したように、Enc0Downのタイミングで得られる、進角90°のときの駆動波形テーブル番号は0+αである。よって、0+190=190がEnc0Downのタイミングで得られるべき駆動波形テーブル番号である。しかし、実際にある特定の周波数の駆動波形をコイルにかけて回転させた場合の位相関係が、図21(D)の状態となっている場合を想定する。図21(D)ではEnc0Downのタイミングで、テーブル番号120が得られている。このとき、進角90°の状態よりも、190−120=70のテーブル番号分に相当する位相で駆動波形がロータに対して遅れている。進角値に換算すると、70×360/512=49.2°遅れており、進角状態としては40.8°の進角でモータが回転していることになる。進角状態はモータに対する負荷、回転数により決定される。本実施形態では、モータに対する特定負荷下において、目標とする進角状態になるように最適な回転数が算出される。エンコーダ信号の変化を検出する毎に、算出された回転数に応じた駆動周波数を設定することで進角制御が実現される。図21(D)に示す例では、Enc0Downのタイミングで70のずれが発生している。仮に、正弦波発生器109においてテーブル番号を120から190へ一気に変更した場合、駆動電圧波形に高調波が含まれ、騒音や回転ムラの原因になる。またモータに対する負荷、回転数により進角状態が決定されることから、テーブル番号を飛ばした場合でも駆動電圧波形の周波数自体は変わらないので、安定して進角90°状態を保つことはできない。本実施形態では、滑らかな駆動通電波形を保ちながら進角制御をするために、以下の処理を行う。
図21にてEnc0Downのタイミングでの時刻をt2と記し、当該時刻から過去に遡ってENC信号が変化したタイミングをそれぞれt1、t0と記す。時刻t0、t1、t2でそれぞれ得られた、1つ手前の信号変化時刻からその時刻までの時間をそれぞれT0、T1、T2と記す。時間T0、T1、T2はそれぞれ、ロータマグネット119が電気角90°分を移動するときにかかった時間であり、その逆数が速度と同等に扱える。このとき、ロータマグネット119が次に電気角で90°の回転を終えるまでにかかる時間T3を推定する処理が行われる。例えば、回転状態がほぼ定速回転である場合、直近の電気角で90°の移動時間T2をT3と等価として扱い、T3=T2として推定される。しかし回転開始直後から定常状態での速度に達するまでの期間にはモータが加速状態であるので、過去のENC信号周期カウント値の履歴から時間T3の推定値が算出される。速度の推定処理例について、図22を参照して説明する。
図22は等加速度運動の場合を示す。上側の図は速度の時間的変化を示す、時間対速度図である。下側の図は移動距離の時間的変化を示す、時間対移動距離図である。T0以外の、時間T1、T2、T3における回転量は、ロータマグネット119が次に電気角90°分で一律同じである。よって図22で示す面積S1とS2は、速度積分値であって移動量となり、S1=S2になる。この関係式から時間T1、T2、T3と、時刻t1、t2での各速度v1、v2を含む、時間T3の2次方程式が得られるので、これを解くことにより、時間T3を、時間T1、T2および速度v1、v2から導出する式が得られる。速度v1、v2はそれぞれ、時間T1、T2の逆数に比例するので、T1、T2からT3を算出することができる。T1をT
n−2に、T2をT
n−1に、T3をT
nにそれぞれ置き換えることで、一般化した(式1)を以下に示す。
モータ加速中には(式1)を用いて、ロータマグネット119が次に電気角で90°だけ回転するまでの時間を推定できる。加速度が一定であることを前提として導出される(式1)では、平方根の計算を必要とするため、演算上の処理負荷を軽減したい場合には、以下の(式2)を用いて推定すればよい。
(式2)では近似式「v
n=v
n−1+(v
n−1−v
n−2)」、つまり、v
nよりも1単位時間前の検出速度v
n−1と、2単位時間前の検出速度v
n−2から、速度v
nを算出している。各速度v
n、v
n−1、v
n−2が、検出周期の時間に相当するT
n、T
n−1、T
n−2の逆数にそれぞれ比例することから、(式2)が導出される。
図21(C)に示す進角90°の状態では、Enc0Downのタイミングからロータマグネット119が次に電気角で90°だけ回転したタイミングで得られるテーブル番号は、190+128=318となる。またこのタイミングはEnc0Downのタイミングから推定時間T3が経過した時刻である。この場合、318−120=198のテーブル番号分に相当する移動量を推定時間T3で進む周波数の駆動波形周期が、Enc0Downのタイミングにおいて設定される。この処理により、図21(E)に示す駆動通電波形が得られる。この場合、Enc0Downのタイミングでは進角90°の状態で得られるべき値とは異なる120というテーブル番号が得られている。推定時間T3の経過時点ではロータマグネット119の回転位相と、駆動通電波形の位相を表わすテーブル番号が一致している。実際の処理では、Enc0Downのタイミングから推定時間T3の経過時点付近で、Enc0Down信号が発生し、同様の進角制御の処理が行われる。これ以降、駆動通電波形の1周期につき、4回の進角制御の処理が実行されて、回転駆動が続行することになる。
上記の進角制御を継続することでモータは進角90°の状態に安定収束し、駆動通電波形の周期が安定収束してくる。以上の処理により、モータに対して正弦波状の駆動波形をかけながら、設定された進角値の条件下で、モータにかかる負荷に応じた速度が最適化される。ここで図17のフローチャートの説明に戻る。
S1826またはS1827からS1828に進み、CPU108はモータが現在加速中であるかどうかを判定する。判定方法としては、例えばモータが組み込まれたシステム状況を把握して、加速にかかる時間を算出して当該時間が経過するまでの加速期間中であるか否かが判定される。あるいは、速度が目標速度の8割に到達するまでの区間等を、速度状況に応じて加速期間と規定してもよい。モータが加速中でないと判定された場合、S1829に進み、加速中であると判定された場合にはS1830に移行する。
S1829において、ロータマグネット119が次に電気角で90°だけ回転するまでの推定時間を示す変数PdctEncQtrPrdCntに、変数CurEncQtrPrdCntの値を代入する処理が行われる。つまり、定速回転中には1つ手前の時間と同じ時間が設定される。一方、加速中である場合には、S1830に進み、PI割り込みが1回目であるかどうかについて判定される。PI割り込みが1回目である場合、S1829に移行する。これは、図22で示した時間推定のための情報が不足するからである。またPI割り込みが2回目以降である場合、S1831に進む。S1831では、図22で示した推定処理により、ロータマグネット119が次に電気角90°分回転するまでの推定時間が算出される。変数CurEncQtrPrdCntおよびPastCurEncQtrPrdCntの各値を用いて、4分の1周期後までの時間が推定される。推定時間値は、変数PdctEncQtrPrdCntに代入される。つまり、変数PdctEncQtrPrdCntは、現時点から次回に位置検出信号の変化が検出される時刻までにかかる移動時間を表す。
S1829またはS1831の後、図18のS1832に進む。S1832では割り込み要因がENC0信号による要因であるか、ENC1信号による要因であるかについて判定される。ENC0信号による要因の場合、S1833へ進み、ENC1信号による要因の場合にはS1834へ進む。S1833、S1834では、それぞれ割り込み要因信号が立上り信号であるか、または立下り信号であるかの判定処理が実行される。S1833はEnc0UpまたはEnc0Downの判定処理であり、S1834はEnc1UpまたはEnc1Downの判定処理である。Enc0Upの場合にS1835へ、Enc0Downの場合にS1836へ、Enc1Upの場合にS1837へ、Enc1Downの場合にS1838へそれぞれ移行する。
S1835、S1836、S1837、S1838ではそれぞれ、進角90°の状態である場合に現在のタイミングで取得されるべき最適なテーブル番号を選択し、その値を変数TrgtSameTimeTblNumに代入する処理が実行される。例えば、S1835では、変数TrgtSameTimeTableNumForEnc0Upの値が変数TrgtSameTimeTableNumに代入される。続くS1839でCPU108は、現在の回転方向が正転方向(CW)か、または逆転方向(CCW)かを判定する。正転方向の回転である場合、S1840へ進み、逆転方向の回転である場合にはS1841へ進む。
S1840、S1841では、現時点からロータマグネット119が次に電気角で90°だけ回転するまでの推定時間が経過する時点までに進むべきテーブル番号が算出される。これは、1/4周期に対応するテーブル番号である128に、現時点で取得すべきであったテーブル番号値と実際に取得したテーブル番号値との差分値を足したものとなる。具体的には、S1840では(TrgtSameTimeTableNum−CurTblNum)+128が算出され、結果値は変数TblCntForNextQtrPhsに代入される。またS1841ではテーブル番号の進む向きが逆であり、(CurTblNum−TrgtSameTimeTableNum)+128が算出され、結果値は変数TblCntForNextQtrPhsに代入される。
S1840またはS1841の後、S1842では現時点から変数PdctEncQtrPrdCntの時間が経過した時点までに進むべきテーブル番号が、負値であるか否かがチェックされる。変数TblCntForNextQtrPhsの示すテーブル番号の値が負値である場合について、図23を参照して説明する。図23(A)はENC0信号の出力波形を示し、図23(B)は図21(C)と同じである。図23(C)は進角制御を行わない場合の駆動時における実際の波形を例示する。
図23(C)は、図18のS1842において、現時点から変数PdctEncQtrPrdCntの時間が経過した時点までの進むべきテーブル番号が負値になっている場合を表わしている。この例では、Enc0Downのタイミングにおいて340が取得される。つまり変数PdctEncQtrPrdCntの時間経過後のタイミングに取得すべきテーブル番号318と比較して、進むべきテーブル番号(変化量)は318−340=−22である。このような負値になることを回避するために、図18のS1843では、予め決められた最低位相進み量を、変数TblCntForNextQtrPhsに代入する設定処理が行われる。つまり最低位相進み量は、次の変数PdctEncQtrPrdCntの時間経過までに進むべきテーブル番号として設定される。このような事態は、進角状態が0°以下の状態にならないと起らず、正常な回転動作では起こりにくい。例えば、モータに異常な負荷がかかった場合や、負荷ムラ、回転ムラが大きい場合に起こり得る。なお、本実施形態とは別の方法としては、変数PdctEncQtrPrdCntの時間経過後までに進むべきテーブル番号の値が負値になった場合、S1843において予め決められた一定の速度値を設定する処理が行われる。
続くS1844において、次に設定すべき駆動電圧波形に関する速度NxtPPS_Valの値を算出する処理が行われる。速度は、変数PdctEncQtrPrdCntの時間経過後までに進むべきテーブル番号(変数TblCntForNextQtrPhs)と、算出した変数PdctEncQtrPrdCntの値と、実際の回転速度に変換するための変換係数から算出される。具体的には、回転速度への変換係数Conversion_Rateの値を既知として、下式から速度NxtPPS_Valが算出される。
NxtPPS_Val=(TblCntForNextQtrPhs/PdctEncQrtPrdCnt)×Conversion_Rate
続くS1845では、S1844で算出された速度値が正弦波発生器109に設定される。そして図17のS1821の処理に戻る。
本実施形態では、モータの停止後に駆動開始時刻から1回目に位置検出信号の変化が検出される時刻までにかかる移動時間と初期移動量を算出する処理が行われ、1回目に位置検出信号が変化するときの初期速度が算出される。よって、位置検出信号を2回以上受け付けないと速度情報が得られないという問題が解決され、正確な進角制御処理による効率的な駆動制御(加速制御を含む)を行うことができる。
本実施形態によれば、ロータマグネットの着磁位相と駆動電圧波形の位相とが指定された位相関係を保ちながらモータを回転させる制御が行われる。モータの駆動開始時に、より加速トルクを増加させた駆動制御が可能となり、駆動開始時の動作が改善される。
[その他の実施例]
前記実施例では、ステッピングモータを例示したが、本発明はブラシレスDCモータ等に適用しても実施可能である。また、前記実施例ではステッピングモータの軸にスリット回転板を取り付け、フォトインタラプタを用いて位置検出を行った。これに限らず、モータ軸またはモータ軸に取り付けた被検出部の位置を検出する検出部を設けてもよい。例えば、モータ軸に被検出部であるマグネットを取り付け、これを磁力センサで検出してもよい。また、ロータマグネットの着磁位相を直接検知する位置に磁力センサを設置し、位置検出を行ってもよい。
前記実施例では、ロータ側が磁石であり、ステータ側が電圧励磁可能なコイルである構成を示した。つまりモータは、電圧信号を印加することで磁極が変化する複数の相のステータと、ステータの数に応じた相数の磁極を持つロータを備える。これに限らず、逆の構成(ロータ側が電磁コイルで、ステータ側が磁石)でも実施可能である。また、回転開始時に、停止時の位置に対応する位相から正弦波駆動で90°分進めた位相に変更して回転を開始させる例を説明した。90°という位相角の値は例示であって、これに代えて、電圧に対する電流遅れや、騒音などへの環境対応を加味した補正値をβとするとき、90°+β、または90°−βを設定値として使用してもよい。