(57)【要約】【課題】モータのフィードバック制御の途中で、何等かの原因でロータの回転が一旦停止した場合でも、可能な限りロータを目標位置まで回転駆動できると共に、逆転が発生したときには逆転を止めることができるようにする。【解決手段】モータのフィードバック制御中にエンコーダのパルス信号出力タイミングに同期してエンコーダカウント値に基づいて通電相を設定すると共に、時間同期処理によって所定周期でエンコーダカウント値に基づいて通電相を設定する。フィードバック制御中にエンコーダカウント値の最大値・最小値を逐次記憶しておき、現在のエンコーダカウント値と最大値・最小値とを比較することで逆転の有無を判定し、逆転を検出した時には、通電相をホールドして逆転を止める。尚、最大値・最小値に対してそれぞれ所定カウント値分の不感帯を設定し、この不感帯内では逆転と判定しないようにしても良い。【選択図】  図２９
2004282970.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を回転駆動するモータのロータの回転に同期してパルス信号を出力するエンコーダと、このエンコーダのパルス信号のカウント値（以下「エンコーダカウント値」という）をカウントするエンコーダカウント手段とを備え、前記モータのフィードバック制御中に前記エンコーダカウント値に基づいて前記ロータの回転位置を検出して該ロータを目標位置まで回転駆動するように前記モータの通電相を順次切り換えるモータ制御装置において、
前記モータのフィードバック制御中に前記エンコーダのパルス信号出力タイミングに同期して前記エンコーダカウント値に基づいて通電相を設定する第１の通電相設定手段と、
前記ロータが前記目標位置に回転駆動されるまで時間同期処理によって所定周期で前記エンコーダカウント値に基づいて通電相を設定する第２の通電相設定手段と、
前記第１及び第２の各通電相設定手段によって通電相が設定される毎にその通電相の巻線に通電する通電制御手段と、
前記ロータを前記目標位置へ回転駆動する途中で該ロータの回転方向が逆転したときにその逆転を検出する逆転検出手段と、
前記逆転検出手段で逆転を検出したときに前記通電制御手段で通電する通電相を前回の通電相に固定する通電相ホールド手段と
を備えていることを特徴とするモータ制御装置。
【請求項２】
前記エンコーダカウント手段は、前記ロータの正回転／逆回転の切り換えに応じて前記エンコーダカウント値のカウントアップ／カウントダウンを切り換え、
前記逆転検出手段は、前記ロータを前記エンコーダカウント値がカウントアップする方向に回転駆動しているときには該エンコーダカウント値の最大値を逐次記憶しておき、現在のエンコーダカウント値と前記最大値とを比較することで逆転の有無を判定し、前記ロータを前記エンコーダカウント値がカウントダウンする方向に回転駆動しているときには該エンコーダカウント値の最小値を逐次記憶しておき、現在のエンコーダカウント値と前記最小値とを比較することで逆転の有無を判定することを特徴とする請求項１に記載のモータ制御装置。
【請求項３】
前記逆転検出手段は、現在のエンコーダカウント値を前記最大値又は前記最小値と比較して逆転の有無を判定する際に、前記最大値及び前記最小値に対してそれぞれ所定カウント値分の不感帯を設定し、この不感帯内では逆転と判定しないことを特徴とする請求項２に記載のモータ制御装置。
【請求項４】
前記通電相ホールド手段で通電相が固定されている状態を検出したときにオープンループ制御に切り換え、前記エンコーダカウント値の情報をフィードバックせずに前記モータの通電相を順次切り換えると共に、その通電相の切換回数をカウントしてそのカウント値に基づいて前記ロータを前記目標位置まで回転駆動するオープンループ駆動手段を備えていることを特徴とする請求項１乃至３のいずれかに記載のモータ制御装置。
【請求項５】
前記最大値又は前記最小値は、フィードバック制御開始時にそのときのエンコーダカウント値を初期値としてセットすることを特徴とする請求項１乃至４のいずれかに記載のモータ制御装置。
【請求項６】
前記モータは、スイッチトリラクタンスモータであることを特徴とする請求項１乃至５のいずれかに記載のモータ制御装置。
【請求項７】
前記モータは、車両の自動変速機のレンジを切り換えるレンジ切換機構を駆動することを特徴とする請求項１乃至６のいずれかに記載のモータ制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、エンコーダのパルス信号のカウント値に基づいてロータの回転位置を検出してモータの通電相を順次切り換えることでロータを目標位置まで回転駆動するモータ制御装置に関するものである。
【０００２】
【従来の技術】
近年、構造が簡単で安価なモータとして需要が増加しているスイッチトリラクタンスモータ等のブラシレス型のモータは、ロータの回転に同期してパルス信号を出力するエンコーダを搭載し、このエンコーダのパルス信号をカウントして、そのエンコーダカウント値に基づいてロータの回転位置を検出して通電相を順次切り換えることでロータを回転駆動するようにしたものがある。このようなエンコーダ付きのモータは、起動後のエンコーダカウント値に基づいてロータの回転位置を検出することができるため、フィードバック制御系（Ｆ／Ｂ制御系）によりロータを目標位置まで回転させる位置切換制御（位置決め制御）を行う各種の位置切換装置の駆動源として用いられている（例えば特許文献１参照）。
【０００３】
このようなエンコーダ付きのモータでＦ／Ｂ制御を行う場合、エンコーダのパルス信号出力タイミングに同期してエンコーダカウント値に基づいて通電相を切り換えてロータを目標位置に向かって回転駆動し、エンコーダカウント値が目標位置に応じて設定された目標カウント値に到達した時点で、ロータが目標位置に到達したと判断してＦ／Ｂ制御を終了し、ロータを目標位置で停止させるようにしている。
【０００４】
【特許文献１】
特開２００１−２７１９１７号公報（第４頁〜第８頁等）
【０００５】
【発明が解決しようとする課題】
上記従来のモータのＦ／Ｂ制御では、エンコーダのパルス信号出力タイミングに同期して通電相を切り換えるため、Ｆ／Ｂ制御の途中で、何等かの原因でロータの回転が一旦停止して、エンコーダからパルス信号が出力されなくなると、通電相の切り換えを行うことができなくなってしまい、ロータを目標位置まで回転駆動できないという不具合が発生する。
【０００６】
このような不具合を解決するため、本発明者らは、特願２００２−２７６５２１号の明細書に記載されているように、Ｆ／Ｂ制御による通電相の切り換えとは別に、時間同期処理によって通電相を切り換える機能を持たせ、ロータの回転が停止した状態でも時間同期処理によって通電相の切り換えを行うことができるようにする発明を出願している。
【０００７】
Ｆ／Ｂ制御の途中で、何等かの原因でロータの回転が逆転することがあるため、逆転を検出したときには、直ちに通電相をホールド（固定）して逆転を止める必要がある（逆転を止めないと逆転し続けてしまうためである）。一般に、逆転の検出方法は、エンコーダカウント値の前回値と今回値とを比較して、エンコーダカウント値の増減方向が反転したか否かで、逆転の有無を判定するようにしている（図２６参照）。
【０００８】
しかし、図２７に示すように、Ｆ／Ｂと時間同期処理の両方で通電相を切り換えると、前回のＦ／Ｂ処理によるエンコーダカウント値の前回値が時間同期処理によって更新されてしまうため、実際にロータが逆転していても、エンコーダカウント値の前回値と今回値が同じになって停止と判定されてしまい、その結果、時間同期処理によって通電相を切り換えて逆転し続けてしまうという不具合を発生する。
【０００９】
本発明はこれらの事情を考慮してなされたものであり、その目的は、モータのＦ／Ｂ制御の途中で、何等かの原因でロータの回転が一旦停止した場合でも、可能な限りロータを目標位置まで回転駆動できると共に、逆転が発生したときには逆転を止めることができるモータ制御装置を提供することにある。
【００１０】
【課題を解決するための手段】
上記目的を達成するために、本発明の請求項１のモータ制御装置は、モータのＦ／Ｂ制御中にエンコーダのパルス信号出力タイミングに同期してエンコーダカウント値に基づいて通電相を設定する第１の通電相設定手段と、ロータが目標位置に回転駆動されるまで時間同期処理によって所定周期でエンコーダカウント値に基づいて通電相を設定する第２の通電相設定手段とを備え、これら第１及び第２の各通電相設定手段によって通電相が設定される毎にその通電相の巻線に通電するように構成すると共に、ロータを目標位置へ回転駆動する途中で該ロータの回転方向が逆転したときにその逆転を検出する逆転検出手段を設け、この逆転検出手段で逆転を検出したときに通電相ホールド手段によって通電相を前回の通電相に固定するようにしたものである。
【００１１】
この構成では、モータＦ／Ｂ制御の途中で、何等かの原因でロータの回転が一旦停止してエンコーダからパルス信号が出力されなくなった場合でも、時間同期処理によって所定周期でその時点のエンコーダカウント値に基づいて通電相を設定できるため、ロータの回転が停止した状態でも通電相の切り換えを行うことができて、可能な限りロータを目標位置まで回転駆動することができる。しかも、ロータを目標位置へ回転駆動する途中で該ロータの回転方向が逆転すれば、その逆転を検出して通電相を固定して逆転を止めることができる。
【００１２】
この場合、逆転検出手段の具体例としては、請求項２のように、ロータをエンコーダカウント値がカウントアップする方向に回転駆動しているときには該エンコーダカウント値の最大値を逐次記憶しておき、現在のエンコーダカウント値と前記最大値とを比較することで逆転の有無を判定し、ロータをエンコーダカウント値がカウントダウンする方向に回転駆動しているときには該エンコーダカウント値の最小値を逐次記憶しておき、現在のエンコーダカウント値と前記最小値とを比較することで逆転の有無を判定するようにすると良い。このようにすれば、前回のＦ／Ｂ処理によるエンコーダカウント値の前回値が時間同期処理によって更新されるという事情があっても、エンコーダカウント値の最大値・最小値を用いて逆転検出を行うことができる。
【００１３】
ところで、図２８に示すように、Ｆ／Ｂ制御中（ロータの回転中）に目標位置が切り換えられると、Ｆ／Ｂ制御の途中でロータの回転方向を強制的に逆転させなければならないことがある。このような場合、ロータの回転中に目標位置が切り換えられても、ロータの慣性があるためにロータの回転方向を即座に逆転させることは不可能であり、実際には、目標位置が切り換えられてからロータの回転方向が逆転するまでに若干の時間を要するため、その間は、切り換え後の目標位置から見て、ロータが“逆転”している状態となる。このため、逆転検出を正確に行い過ぎると（換言すれば後述する不感帯がないと）、Ｆ／Ｂ制御の途中で目標位置が切り換えられた場合に、目標位置の切り換え直後のロータの慣性による過渡的な挙動が“逆転”と判定されて、モータが強制的に停止されてしまう不具合が発生する。
【００１４】
この対策として、請求項３のように、現在のエンコーダカウント値を前記最大値又は前記最小値と比較して逆転の有無を判定する際に、前記最大値及び前記最小値に対してそれぞれ所定カウント値分の不感帯を設定し、この不感帯内では逆転と判定しないようにすると良い。このようにすれば、Ｆ／Ｂ制御の途中で目標位置が切り換えられた場合でも、目標位置の切り換え直後のロータの慣性による過渡的な挙動を不感帯によって“逆転”と判定せずに済み、Ｆ／Ｂ制御の途中で目標位置が切り換えられた場合でも、ロータを目標位置まで回転駆動することができる。
【００１５】
また、請求項４のように、通電相ホールド手段で通電相が固定されている状態を検出したときにオープンループ駆動手段によりオープンループ制御に切り換え、エンコーダカウント値の情報をフィードバックせずに通電相を順次切り換えると共に、その通電相の切換回数をカウントしてそのカウント値に基づいてロータを目標位置まで回転駆動するようにすると良い。このようにすれば、逆転検出により通電相が固定されている状態から自動的にＦ／Ｂ制御可能な状態に復帰することができる。
【００１６】
この場合、請求項５のように、前記最大値又は前記最小値は、Ｆ／Ｂ制御開始時にそのときのエンコーダカウント値を初期値としてセットするようにすると良い。このようにすれば、過去のＦ／Ｂ制御で検出されたエンコーダカウント値の最大値又は最小値の影響を受けずに、今回のＦ／Ｂ制御中のエンコーダカウント値の最大値又は最小値を正確に検出することができる。
【００１７】
また、請求項６のように、モータとしてスイッチトリラクタンスモータを使用するようにしても良い。スイッチトリラクタンスモータは、永久磁石が不要で構造が簡単であるため、安価であり、温度環境等に対する耐久性・信頼性も高いという利点がある。
【００１８】
以上説明した請求項１〜６に係る発明は、スイッチトリラクタンスモータ等のブラシレス型のモータを駆動源とする各種の位置切換装置に適用でき、例えば、請求項７のように、車両の自動変速機のレンジを切り換えるレンジ切換機構を駆動するモータの制御装置に適用しても良い。これにより、信頼性の高いモータ駆動式のレンジ切換装置を構成することができる。
【００１９】
【発明の実施の形態】
以下、本発明を車両のレンジ切換装置に適用した一実施形態を図面に基づいて説明する。
【００２０】
まず、図１に基づいてレンジ切換機構１１の構成を説明する。レンジ切換機構１１の駆動源となるモータ１２は、例えばスイッチトリラクタンスモータにより構成され、減速機構２６（図４参照）を内蔵し、その出力軸１３の回転位置を検出する出力軸センサ１４が設けられている。この出力軸１３には、ディテントレバー１５が固定されている。
【００２１】
また、ディテントレバー１５にはＬ字形のパーキングロッド１８が固定され、このパーキングロッド１８の先端部に設けられた円錐体１９がロックレバー２１に当接している。このロックレバー２１は、円錐体１９の位置に応じて軸２２を中心にして上下動してパーキングギヤ２０をロック／ロック解除するようになっている。パーキングギヤ２０は、自動変速機２７の出力軸に設けられ、このパーキングギヤ２０がロックレバー２１によってロックされると、車両の駆動輪が回り止めされた状態（パーキング状態）に保持される。
【００２２】
一方、ディテントレバー１５をパーキングレンジ（以下「Ｐレンジ」と表記する）と他のレンジ（以下「ＮｏｔＰレンジ」と表記する）に保持するためのディテントバネ２３が支持ベース１７に固定され、このディテントバネ２３の先端に設けられた係合部２３ａがディテントレバー１５のＰレンジ保持凹部２４に嵌まり込んだときに、ディテントレバー１５がＰレンジの位置に保持され、該ディテントバネ２３の係合部２３ａがディテントレバー１５のＮｏｔＰレンジ保持凹部２５に嵌まり込んだときに、ディテントレバー１５がＮｏｔＰレンジの位置に保持されるようになっている。
【００２３】
Ｐレンジでは、パーキングロッド１８がロックレバー２１に接近する方向に移動して、円錐体１９の太い部分がロックレバー２１を押し上げてロックレバー２１の凸部２１ａがパーキングギヤ２０に嵌まり込んでパーキングギヤ２０をロックした状態となり、それによって、自動変速機２７の出力軸（駆動輪）がロックされた状態（パーキング状態）に保持される。
【００２４】
一方、ＮｏｔＰレンジでは、パーキングロッド１８がロックレバー２１から離れる方向に移動して、円錐体１９の太い部分がロックレバー２１から抜け出てロックレバー２１が下降し、それによって、ロックレバー２１の凸部２１ａがパーキングギヤ２０から外れてパーキングギヤ２０のロックが解除され、自動変速機２７の出力軸が回転可能な状態（走行可能な状態）に保持される。
【００２５】
尚、前述した出力軸センサ１４は、モータ１２の減速機構２６の出力軸１３の回転角度に応じた電圧を出力する回転センサ（例えばポテンショメータ）によって構成され、その出力電圧によって現在のレンジがＰレンジとＮｏｔＰレンジのいずれであるかを確認できるようになっている。
【００２６】
次に、図２に基づいてモータ１２の構成を説明する。本実施形態では、モータ１２として、スイッチトリラクタンスモータ（以下「ＳＲモータ」と表記する）が用いられている。このＳＲモータ１２は、ステータ３１とロータ３２が共に突極構造を持つモータで、永久磁石が不要で構造が簡単であるという利点がある。円筒状のステータ３１の内周部には、例えば１２個の突極３１ａが等間隔に形成され、これに対して、ロータ３２の外周部には、例えば８個の突極３２ａが等間隔に形成され、ロータ３２の回転に伴い、ロータ３２の各突極３２ａがステータ３１の各突極３１ａと微小ギャップを介して順番に対向するようになっている。ステータ３１の１２個の突極３１ａには、Ｕ相、Ｖ相、Ｗ相の合計６個の巻線３３と、Ｕ’相、Ｖ’相、Ｗ’相の合計６個の巻線３４が順番に巻回されている。尚、ステータ３１とロータ３２の突極３１ａ，３２ａの数は適宜変更しても良いことは言うまでもない。
【００２７】
本実施形態の巻線３３，３４の巻回順序は、ステータ３１の１２個の突極３１ａに対して、例えば、Ｖ相→Ｗ相→Ｕ相→Ｖ相→Ｗ相→Ｕ相→Ｖ’相→Ｗ’相→Ｕ’相→Ｖ’相→Ｗ’相→Ｕ’相の順序で巻回されている。図３に示すように、Ｕ相、Ｖ相、Ｗ相の合計６個の巻線３３と、Ｕ’相、Ｖ’相、Ｗ’相の合計６個の巻線３４は、２系統のモータ励磁部３５，３６を構成するように結線されている。一方のモータ励磁部３５は、Ｕ相、Ｖ相、Ｗ相の合計６個の巻線３３をＹ結線して構成され（同じ相の２個の巻線３３はそれぞれ直列に接続されている）、他方のモータ励磁部３６は、Ｕ’相、Ｖ’相、Ｗ’相の合計６個の巻線３４をＹ結線して構成されている（同じ相の２個の巻線３４はそれぞれ直列に接続されている）。２つのモータ励磁部３５，３６は、Ｕ相とＵ’相が同時に通電され、Ｖ相とＶ’相が同時に通電され、Ｗ相とＷ’相が同時に通電される。
【００２８】
これら２つのモータ励磁部３５は、車両に搭載されたバッテリ４０を電源として、それぞれ別個のモータドライバ３７，３８によって駆動される。このように、モータ励磁部３５，３６とモータドライバ３７，３８をそれぞれ２系統ずつ設けることで、一方の系統が故障しても、他方の系統でＳＲモータ１２を回転させることができるようになっている。図３に示すモータドライバ３７，３８の回路構成例では、各相毎にトランジスタ等のスイッチング素子３９を１個ずつ設けたユニポーラ駆動方式の回路構成としているが、各相毎にスイッチング素子を２個ずつ設けたバイポーラ駆動方式の回路構成を採用しても良い。尚、本発明は、モータ励磁部とモータドライバをそれぞれ１系統ずつ設けた構成としても良いことは言うまでもない。
【００２９】
各モータドライバ３７，３８の各スイッチング素子３９のオン／オフは、ＥＣＵ４１（通電制御手段）によって制御される。図４に示すように、このＥＣＵ４１と各モータドライバ３７，３８は、レンジ切換制御装置４２に搭載され、このレンジ切換制御装置４２には、Ｐレンジへの切換操作を行うＰレンジスイッチ４３と、ＮｏｔＰレンジへの切換操作を行うＮｏｔＰレンジスイッチ４４の操作信号が入力される。Ｐレンジスイッチ４３又はＮｏｔＰレンジスイッチ４４の操作により選択されたレンジは、インストルメントパネル（図示せず）に設けられたレンジ表示部４５に表示される。
【００３０】
ＳＲモータ１２には、ロータ３２の回転位置を検出するためのエンコーダ４６が設けられている。このエンコーダ４６は、例えば磁気式のロータリエンコーダにより構成されており、その具体的な構成は、図５及び図６に示すように、Ｎ極とＳ極が円周方向に交互に等ピッチで着磁された円環状のロータリマグネット４７がロータ３２の側面に同軸状に固定され、このロータリマグネット４７に対向する位置に、３個のホールＩＣ等の磁気検出素子４８，４９，５０が配置された構成となっている。本実施形態では、ロータリマグネット４７のＮ極とＳ極の着磁ピッチが７．５°に設定されている。このロータリマグネット４７の着磁ピッチ（７．５°）は、ＳＲモータ１２の励磁１回当たりのロータ３２の回転角度と同じに設定されている。後述するように、１−２相励磁方式でＳＲモータ１２の通電相の切り換えを６回行うと、全ての通電相の切り換えが一巡してロータ３２とロータリマグネット４７が一体的に７．５°×６＝４５°回転する。このロータリマグネット４７の４５°の回転角度範囲に存在するＮ極とＳ極の数は、合計６極となっている。
【００３１】
更に、ロータ３２の基準回転位置に相当する位置のＮ極（Ｎ’）とその両側のＳ極（Ｓ’）がそれ以外の磁極よりも径方向の幅が広くなるように形成されている。尚、本実施形態では、ＳＲモータ１２の通電相の切り換えが一巡する間にロータ３２とロータリマグネット４７が一体的に４５°回転することを考慮して、ロータ３２の基準回転位置に相当する幅広な着磁部分（Ｎ’）が４５°ピッチで形成されており、従って、ロータリマグネット４７全体として、基準回転位置に相当する幅広な着磁部分（Ｎ’）が合計８個形成されている。尚、基準回転位置に相当する幅広な着磁部分（Ｎ’）は、ロータリマグネット４７全体として、１個のみ形成した構成としても良い。
【００３２】
このロータリマグネット４７に対して３個の磁気検出素子４８，４９，５０が次のような位置関係で配置されている。Ａ相信号を出力する磁気検出素子４８とＢ相信号を出力する磁気検出素子４９は、ロータリマグネット４７の幅狭な着磁部分（Ｎ，Ｓ）と幅広な着磁部分（Ｎ’，Ｓ’）の両方に対向し得る位置の同一円周上に配置されている。一方、Ｚ相信号を出力する磁気検出素子５０は、ロータリマグネット４７の幅狭な着磁部分（Ｎ，Ｓ）よりも径方向外側又は内側の位置で、且つ、幅広な着磁部分（Ｎ’，Ｓ’）のみに対向し得る位置に配置されている。Ａ相信号とＢ相信号を出力する２個の磁気検出素子４８，４９の間隔は、図７に示すように、Ａ相信号とＢ相信号の位相差が、電気角で９０°（機械角で３．７５°）となるように設定されている。ここで、“電気角”はＡ・Ｂ相信号の発生周期を１周期（３６０°）とした場合の角度で、“機械角”は機械的な角度（ロータ３２の１回転を３６０°とした場合の角度）であり、Ａ相信号の立ち下がり（立ち上がり）からＢ相信号の立ち下がり（立ち上がり）までにロータ３２が回転する角度がＡ相信号とＢ相信号の位相差の機械角に相当する。また、Ｚ相信号を出力する磁気検出素子５０は、Ｚ相信号とＢ相信号（又はＡ相信号）との位相差が０となるように配置されている。
【００３３】
各磁気検出素子４８，４９，５０の出力は、Ｎ極（Ｎ’極）と対向したときにハイレベル“１”となり、Ｓ極（Ｓ’極）と対向したときにローレベル“０”となる。尚、Ｚ相信号用の磁気検出素子５０の出力は、ロータ３２の基準回転位置に相当する幅広なＮ’極に対向する毎にハイレベル“１”となり、それ以外の位置では、ローレベル“０”となる。
【００３４】
本実施形態では、ＥＣＵ４１が後述する図８のエンコーダカウンタルーチンによってＡ相信号とＢ相信号の立ち上がり／立ち下がりの両方のエッジをカウントして、そのエンコーダカウント値に応じてＳＲモータ１２の通電相を切り換えることでロータ３２を回転駆動する。この際、Ａ相信号とＢ相信号の発生順序によってロータ３２の回転方向を判定し、正回転（Ｐレンジ→ＮｏｔＰレンジの回転方向）ではエンコーダカウント値をカウントアップし、逆回転（ＮｏｔＰレンジ→Ｐレンジの回転方向）ではエンコーダカウント値をカウントダウンする。これにより、ロータ３２が正回転／逆回転のいずれの方向に回転しても、エンコーダカウント値とロータ３２の回転位置との対応関係が維持されるため、正回転／逆回転のいずれの回転方向でも、エンコーダカウント値によってロータ３２の回転位置（回転角度）を検出して、その回転位置に対応した相の巻線３３，３４に通電してロータ３２を回転駆動する。
【００３５】
図７は、ロータ３２を逆回転方向（ＮｏｔＰレンジ→Ｐレンジの回転方向）に回転させたときのエンコーダ４６の出力波形と通電相の切換パターンを示している。逆回転方向（ＮｏｔＰレンジ→Ｐレンジの回転方向）と正回転方向（Ｐレンジ→ＮｏｔＰレンジの回転方向）のいずれの場合も、ロータ３２が７．５°回転する毎に１相通電と２相通電とを交互に切り換えるようになっており、ロータ３２が４５°回転する間に、例えば、Ｕ相通電→ＵＷ相通電→Ｗ相通電→ＶＷ相通電→Ｖ相通電→ＵＶ相通電の順序で通電相の切り換えを一巡するようになっている。そして、この通電相の切り換え毎に、ロータ３２が７．５°ずつ回転して、Ａ相、Ｂ相信号用の磁気検出素子４８，４９に対向するロータリマグネット４７の磁極がＮ極→Ｓ極（Ｎ’極→Ｓ’極）又はＳ極→Ｎ極（Ｓ’極→Ｎ’極）に変化してＡ相信号とＢ相信号のレベルが交互に反転し、それによって、ロータ３２が７．５°回転する毎に、エンコーダカウント値が２ずつカウントアップ（又はカウントダウン）する。また、通電相の切り換えが一巡してロータ３２が４５°回転する毎に、Ｚ相用の磁気検出素子５０がロータ３２の基準回転位置に相当する幅広なＮ’極に対向して、Ｚ相信号がハイレベル“１”となる。尚、本明細書では、Ａ相、Ｂ相、Ｚ相信号がハイレベル“１”となることを、Ａ相、Ｂ相、Ｚ相信号が出力されると言う場合がある。
【００３６】
このようなエンコーダ４６付きのＳＲモータ１２でレンジ切換制御を行う場合は、指令シフトレンジ（目標位置）がＰレンジからＮｏｔＰレンジ又はその反対方向に切り換えられる毎に、ロータ３２を回転駆動して、エンコーダカウント値に基づいてＳＲモータ１２の通電相を順次切り換えることでロータ３２を目標位置に向かって回転駆動するフィードバック制御（以下「Ｆ／Ｂ制御」と表記する）を実行し、エンコーダカウント値が目標位置に応じて設定された目標カウント値に到達した時点で、ロータ３２が目標位置に到達したと判断してＦ／Ｂ制御を終了し、ロータ３２を目標位置で停止させるようにしている。
【００３７】
このＳＲモータ１２のＦ／Ｂ制御では、エンコーダ４６のＡ相・Ｂ相信号出力タイミングに同期して通電相を切り換えるため、Ｆ／Ｂ制御の途中で、何等かの原因でロータ３２の回転が一旦停止して、エンコーダ４６からＡ相・Ｂ相信号が出力されなくなると、Ｆ／Ｂ制御では通電相の切り換えを行うことができなくなってしまい、ロータ３２を目標位置まで回転駆動できない。
【００３８】
そこで、本実施形態では、レンジ切換制御装置４２のＥＣＵ４１は、ＳＲモータ１２のＦ／Ｂ制御開始からロータ３２が目標位置に回転駆動されるまで、所定周期（例えば１ｍｓ周期）でエンコーダカウント値に基づいて通電相を設定する時間同期通電相設定処理をＦ／Ｂ制御と並行して実行する。
【００３９】
この構成では、Ｆ／Ｂ制御の途中で、何等かの原因でロータ３２の回転が一旦停止してエンコーダ４６からＡ相・Ｂ相信号が出力されなくなった場合でも、時間同期通電相設定処理によってその時点のエンコーダカウント値に基づいて通電相が設定されるため、ロータ３２の回転が停止した状態でも、時間同期通電相設定処理によって通電相の切り換えを行うことができて、可能な限りロータ３２を目標位置まで回転駆動することができ、ＳＲモータ１２の駆動制御（レンジ切換制御）の信頼性を向上することができる。
【００４０】
ところで、Ｆ／Ｂ制御の途中で、何等かの原因でロータ３２の回転が逆転することがあるため、逆転を検出したときには、直ちに通電相をホールド（固定）して逆転を止める必要がある（逆転を止めないと逆転し続けてしまうためである）。一般に、逆転の検出方法は、エンコーダカウント値の前回値と今回値とを比較して、エンコーダカウント値の増減方向が反転したか否かで、逆転の有無を判定するようにしている（図２６参照）。
【００４１】
しかし、図２７に示すように、Ｆ／Ｂと時間同期通電相設定処理の両方で通電相を切り換えると、前回のＦ／Ｂ処理によるエンコーダカウント値の前回値が時間同期通電相設定処理によって更新されてしまうため、実際にロータ３２が逆転していても、エンコーダカウント値の前回値と今回値が同じになって停止と判定されてしまい、その結果、時間同期通電相設定処理によって通電相を切り換えて逆転し続けてしまうという不具合を発生する。
【００４２】
そこで、本実施形態では、レンジ切換制御装置４２のＥＣＵ４１は、ロータ３２を目標位置へ回転駆動する途中で該ロータ３２の回転方向が逆転したことを検出したときに通電相を前回の通電相にホールド（固定）して、逆転を止めるようにしている。
【００４３】
この場合、逆転検出方法は、ロータ３２をエンコーダカウント値がカウントアップする方向に回転駆動しているときには該エンコーダカウント値の最大値をＥＣＵ４１のメモリ（図示せず）に逐次記憶しておき、現在のエンコーダカウント値と前記最大値とを比較することで逆転の有無を判定し、ロータ３２をエンコーダカウント値がカウントダウンする方向に回転駆動しているときには該エンコーダカウント値の最小値をメモリに逐次記憶しておき、現在のエンコーダカウント値と前記最小値とを比較することで逆転の有無を判定するようにしている。このようにすれば、前回のＦ／Ｂ処理によるエンコーダカウント値の前回値が時間同期通電相設定処理によって更新されるという事情があっても、エンコーダカウント値の最大値・最小値を用いて逆転検出を行うことができる。
【００４４】
ところで、図２８に示すように、Ｆ／Ｂ制御中（ロータ３２の回転中）に目標位置が切り換えられると、Ｆ／Ｂ制御の途中でロータ３２の回転方向を強制的に逆転させなければならないことがある。このような場合、ロータ３２の回転中に目標位置が切り換えられても、ロータ３２の慣性があるためにロータ３２の回転方向を即座に逆転させることは不可能であり、実際には、目標位置が切り換えられてからロータ３２の回転方向が逆転するまでに若干の時間を要するため、その間は、切り換え後の目標位置から見て、ロータ３２が“逆転”している状態となる。このため、逆転検出を正確に行い過ぎると（換言すれば後述する不感帯がないと）、Ｆ／Ｂ制御の途中で目標位置が切り換えられた場合に、目標位置の切り換え直後のロータ３２の慣性による過渡的な挙動が“逆転”と判定されて、ＳＲモータ１２が強制的に停止されてしまう不具合が発生する。
【００４５】
この対策として、本実施形態では、現在のエンコーダカウント値を前記最大値又は前記最小値と比較して逆転の有無を判定する際に、前記最大値及び前記最小値に対してそれぞれ所定カウント値分の不感帯を設定し、この不感帯内では逆転と判定しないようにしている。このようにすれば、Ｆ／Ｂ制御の途中で目標位置が切り換えられた場合でも、目標位置の切り換え直後のロータ３２の慣性による過渡的な挙動を不感帯によって“逆転”と判定せずに済み、Ｆ／Ｂ制御の途中で目標位置が切り換えられた場合でも、ロータ３２を目標位置まで回転駆動することができる。
【００４６】
また、本実施形態では、逆転検出により通電相がホールドされている状態を検出したときにオープンループ制御に切り換え、エンコーダカウント値の情報をフィードバックせずに通電相を順次切り換えると共に、その通電相の切換回数をカウントしてそのカウント値に基づいてロータ３２を目標位置まで回転駆動するようにしている。これにより、逆転検出により通電相がホールドされている状態から自動的にＦ／Ｂ制御可能な状態に復帰することができる。
以下、レンジ切換制御装置４２のＥＣＵ４１によって実行される各ルーチンの処理内容を説明する。
【００４７】
［エンコーダカウンタ］
図８に示すエンコーダカウンタルーチンの処理内容を説明する。本ルーチンは、ＡＢ相割り込み処理によりＡ相信号とＢ相信号の立ち上がり／立ち下がりの両方のエッジに同期して起動され、Ａ相信号とＢ相信号の立ち上がり／立ち下がりの両方のエッジを次のようにしてカウントする。本ルーチンが起動されると、まずステップ３０１で、Ａ相信号とＢ相信号の値Ａ（ｉ）  、Ｂ（ｉ）  を読み込み、次のステップ３０２で、図９のカウントアップ値ΔＮ算出マップを検索して、Ａ相信号とＢ相信号の今回値Ａ（ｉ）  、Ｂ（ｉ）  と、前回値Ａ（ｉ−１）  、Ｂ（ｉ−１）  に応じたカウントアップ値ΔＮを算出する。
【００４８】
ここで、Ａ相信号とＢ相信号の今回値Ａ（ｉ）  、Ｂ（ｉ）  と、前回値Ａ（ｉ−１）  、Ｂ（ｉ−１）  を用いる理由は、Ａ相信号とＢ相信号の発生順序によってロータ３２の回転方向を判定するためであり、図１０に示すように、正回転（Ｐレンジ→ＮｏｔＰレンジの回転方向）ではカウントアップ値ΔＮをプラス値にしてエンコーダカウント値Ｎｃｎｔをカウントアップし、逆回転（ＮｏｔＰレンジ→Ｐレンジの回転方向）ではカウントアップ値ΔＮをマイナス値にしてエンコーダカウント値Ｎｃｎｔをカウントダウンする。
【００４９】
カウントアップ値ΔＮの算出後、ステップ３０３に進み、前回のエンコーダカウント値Ｎｃｎｔに上記ステップ３０２で算出したカウントアップ値ΔＮを加算して、今回のエンコーダカウント値Ｎｃｎｔを求める。この後、ステップ３０４に進み、次回のカウント処理のために、Ａ相信号とＢ相信号の今回値Ａ（ｉ）  、Ｂ（ｉ）  をそれぞれＡ（ｉ−１）  、Ｂ（ｉ−１）  として記憶して本ルーチンを終了する。
以上説明したエンコーダカウンタルーチンは、特許請求の範囲でいうエンコーダカウント手段としての役割を果たす。
【００５０】
［制御モード設定］
図１１乃至図１３に示す制御モード設定ルーチンは、初期駆動終了後に所定周期（例えば１ｍｓ周期）で実行される。ここで、初期駆動とは、ＥＣＵ４１への電源投入後にエンコーダカウント値と実際のロータ３２の回転位置とを対応させるための処理であり、初期駆動時には、ＳＲモータ１２の通電相の切り換えを所定のタイムスケジュールで一巡させてエンコーダ４６のＡ相信号及びＢ相信号のエッジをカウントし、初期駆動終了時のエンコーダカウント値とロータ３２の回転位置（通電相）との対応関係を学習する。具体的には、初期駆動終了時のエンコーダカウント値を初期位置ずれ学習値として学習し、その後のＦ／Ｂ制御等の際にエンコーダカウント値を初期位置ずれ学習値で補正することで、初期駆動終了時のエンコーダカウント値と通電相（ロータ３２の回転位置）とのずれを補正して、Ｆ／Ｂ制御等の際に正しい通電相を選択できるようにしている。
【００５１】
図１１乃至図１３に示す制御モード設定ルーチンは、初期駆動終了後に所定周期（例えば１ｍｓ周期）で制御モード判定値ｍｏｄｅを０、１、３、４、５のいずれかに設定して、下記のように制御モードを指定する。
【００５２】
ｍｏｄｅ＝０：通電オフ（スタンバイ）
ｍｏｄｅ＝１：通常駆動
（Ｆ／Ｂ制御開始位置停止保持処理、時間同期通電相設定処理、Ｆ／Ｂ制御）
ｍｏｄｅ＝３：目標位置停止保持処理
ｍｏｄｅ＝４：反転位置停止保持処理
ｍｏｄｅ＝５：オープンループ制御
【００５３】
制御モード設定ルーチンが起動されると、まずステップ４０１で、システム故障フラグＸｆａｉｌｏｆｆがレンジ切換制御装置４２の故障を意味するＯＮにセットされているか否かを判定し、もし、Ｘｆａｉｌｏｆｆ＝ＯＮに設定されていれば、ステップ４０２に進み、ＳＲモータ１２を通電オフ状態に維持するための処理を実行する。これにより、回転方向指示値Ｄ＝０（停止）、通電フラグＸｏｎ＝ＯＦＦ（通電オフ）、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦ（Ｆ／Ｂ制御禁止）、制御モード判定値ｍｏｄｅ＝０（通電オフ）にセットする。
【００５４】
一方、システム故障フラグＸｆａｉｌｏｆｆがＯＦＦ（故障無し）の場合は、ステップ４０１からステップ４０３に進み、フェールセーフ処理実行フラグＸｆｓｏｐ＝ＯＦＦ、且つ、リカバリ処理実行フラグＸｒｃｖ＝ＯＦＦであるか否かを判定する。もし、フェールセーフ処理実行フラグＸｆｓｏｐとリカバリ処理実行フラグＸｒｃｖのいずれか一方又は両方がＯＮにセットされている場合は、ステップ４０４に進み、オープンループ制御を実行するために、回転方向指示値Ｄ＝０（停止）、制御モード判定値ｍｏｄｅ＝５（オープンループ制御）、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦ（Ｆ／Ｂ制御禁止）にセットする。
【００５５】
フェールセーフ処理実行フラグＸｆｓｏｐとリカバリ処理実行フラグＸｒｃｖの両方がＯＦＦにセットされている場合は、ステップ４０５に進み、通電フラグＸｏｎ＝ＯＮ（通電オン）にセットされているか否かを判定し、通電フラグＸｏｎ＝ＯＦＦ（通電オフ）にセットされている場合は、ステップ４０６に進み、目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（目標位置とロータ３２と位置との差）を求めて、この差（Ａｃｎｔ−Ｎｃｎｔ）に基づいて正回転（Ｐレンジ→ＮｏｔＰレンジ方向への回転）、逆回転（ＮｏｔＰレンジ→Ｐレンジ方向への回転）、停止のいずれに該当するか判定する。この際、エンコーダカウント値Ｎｃｎｔは、初期駆動で学習された初期位置ずれ学習値Ｇｃｎｔによって補正された値を用いる。
Ｎｃｎｔ＝Ｎｃｎｔ−Ｇｃｎｔ
【００５６】
目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（Ａｃｎｔ−Ｎｃｎｔ）が＋Ｋｔｈ以上（例えば＋１０°以上）であれば、ロータ３２を正回転方向（Ｐレンジ→ＮｏｔＰレンジの回転方向）に回転駆動する必要があると判断して、ステップ４０７に進み、回転方向指示値Ｄ＝１（正回転）、通電フラグＸｏｎ＝ＯＮ（通電オン）、制御モード判定値ｍｏｄｅ＝１（Ｆ／Ｂ制御開始位置停止保持処理及びＦ／Ｂ制御）にセットする。
【００５７】
目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（Ａｃｎｔ−Ｎｃｎｔ）が−Ｋｔｈ以下（例えば−１０°以下）であれば、ロータ３２を逆回転方向（ＮｏｔＰレンジ→Ｐレンジの回転方向）に回転駆動する必要があると判断して、ステップ４０９に進み、回転方向指示値Ｄ＝−１（逆回転）、通電フラグＸｏｎ＝ＯＮ（通電オン）、制御モード判定値ｍｏｄｅ＝１（Ｆ／Ｂ制御開始位置停止保持処理及びＦ／Ｂ制御）にセットする。
【００５８】
目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（Ａｃｎｔ−Ｎｃｎｔ）が−Ｋｔｈから＋Ｋｔｈの範囲内（例えば−１０°から＋１０°の範囲内）であれば、ロータ３２を目標位置にディテントバネ２３のバネ力により保持することが可能である（ＳＲモータ１２への通電は不要）と判断して、ステップ４０８に進み、ＳＲモータ１２を通電オフ状態に維持するために、回転方向指示値Ｄ＝０（停止）、通電フラグＸｏｎ＝ＯＦＦ（通電オフ）、制御モード判定値ｍｏｄｅ＝０（通電オフ）にセットする。
【００５９】
一方、前記ステップ４０５で、通電フラグＸｏｎ＝ＯＮ（通電オン）にセットされていると判定された場合は、図１２のステップ４１０〜４１５の処理によって、指令シフトレンジ（目標位置）が反転されたか否かを判定し、反転されていれば、回転方向指示値Ｄを反転させる。
【００６０】
具体的には、まずステップ４１０で、回転方向指示値Ｄ＝１（正回転）であるか否かを判定し、回転方向指示値Ｄ＝１（正回転）であれば、ステップ４１１に進み、目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（Ａｃｎｔ−Ｎｃｎｔ）がマイナス値であるか否かで、ロータ３２の回転方向を正回転から逆回転に反転させる必要があるか否かを判定し、その必要があれば、ステップ４１２に進み、回転方向指示値Ｄ＝−１（逆回転）にセットする。
【００６１】
これに対して、上記ステップ４１０で、回転方向指示値Ｄが１（正回転）でないと判定された場合（つまりＤ＝０又は−１の場合）は、ステップ４１３に進み、回転方向指示値Ｄ＝−１（逆回転）であるか否かを判定し、回転方向指示値Ｄ＝−１（逆回転）であれば、ステップ４１４に進み、目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（Ａｃｎｔ−Ｎｃｎｔ）がプラス値であるか否かで、ロータ３２の回転方向を逆回転から正回転に反転させる必要があるか否かを判定し、その必要があれば、ステップ４１５に進み、回転方向指示値Ｄ＝１（正回転）にセットする。
【００６２】
以上のようにして、回転方向指示値Ｄが反転された場合は、ステップ４１６に進み、ロータ３２の回転方向を反転させるために、制御モード判定値ｍｏｄｅ＝４（反転位置停止保持処理）、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦ（Ｆ／Ｂ制御禁止）にセットしてステップ４１７に進む。これに対し、回転方向指示値Ｄが反転されない場合は、上記ステップ４１６の処理を行わずにステップ４１７に進む。
【００６３】
このステップ４１７では、制御モード判定値ｍｏｄｅ＝４（反転位置停止保持処理）にセットされているか否かを判定し、「Ｙｅｓ」であれば、ステップ４１８に進み、通電フラグＸｏｎ＝ＯＮ（通電オン）にセットして、反転位置停止保持処理を実行する。
【００６４】
これに対して、上記ステップ４１７で「Ｎｏ」と判定された場合（反転位置停止保持処理ではない場合）は、図１３のステップ４１９〜４２１で、Ｆ／Ｂ制御の終了タイミングであるか否かを判定する。具体的には、まずステップ４１９で、回転方向指示値Ｄ≧０（正回転又は停止）であるか否かを判定し、回転方向指示値Ｄ≧０であれば、ステップ４２０に進み、目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（Ａｃｎｔ−Ｎｃｎｔ）が＋Ｋｒｅｆ以下（例えば＋０．５°以下）であるか否かで、Ｆ／Ｂ制御の終了タイミングであるか否かを判定する。また、回転方向指示値Ｄ＝−１（逆回転）であれば、ステップ４２１に進み、目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（Ａｃｎｔ−Ｎｃｎｔ）が−Ｋｒｅｆ以上（例えば−０．５°以上）であるか否かで、Ｆ／Ｂ制御の終了タイミングであるか否かを判定する。
【００６５】
つまり、図１４に示すように、Ｆ／Ｂ制御の終了判定値Ｋｒｅｆを例えば通電相の位相進み分（例えば２〜４カウント分）に設定することで、目標カウント値Ａｃｎｔよりも通電相の位相進み分だけ前のタイミングでＦ／Ｂ制御を終了するようにしたものである。これにより、Ｆ／Ｂ制御の最後の通電相がロータ３２を目標位置（目標カウント値Ａｃｎｔ）に停止保持する通電相と一致するようになる。
【００６６】
上記ステップ４２０又は４２１で「Ｎｏ」と判定された場合（Ｆ／Ｂ制御の終了タイミングでない場合）は、ステップ４２２に進み、目標位置停止保持処理の時間をカウントする停止保持時間カウンタＣＴｈｏｌｄをリセットする。
【００６７】
一方、上記ステップ４２０又は４２１で「Ｙｅｓ」と判定された場合（Ｆ／Ｂ制御の終了タイミングである場合）は、ステップ４２３に進み、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦ（Ｆ／Ｂ制御禁止）にセットし、Ｆ／Ｂ制御を終了して目標位置停止保持処理に移行する。そして、次のステップ４２４で、停止保持時間カウンタＣＴｈｏｌｄをカウントアップして、目標位置停止保持処理の時間をカウントする。
【００６８】
この後、ステップ４２５に進み、目標位置停止保持処理の時間ＣＴｈｏｌｄが所定時間（例えば５０ｍｓ）に達したか否かを判定し、目標位置停止保持処理の時間ＣＴｈｏｌｄが所定時間（例えば５０ｍｓ）に達していなければ、ステップ４２６に進み、目標位置停止保持処理を続行するために、回転方向指示値Ｄ＝０（停止）、通電フラグＸｏｎ＝ＯＮ（通電オン）、制御モード判定値ｍｏｄｅ＝３（目標位置停止保持処理）に維持する。
【００６９】
その後、目標位置停止保持処理の時間ＣＴｈｏｌｄが所定時間（例えば５０ｍｓ）に達した時点で、ステップ４２７に進み、ＳＲモータ１２の通電をオフするために、回転方向指示値Ｄ＝０（停止）、通電フラグＸｏｎ＝ＯＦＦ（通電オフ）、制御モード判定値ｍｏｄｅ＝０（通電オフ）にセットする。
以上説明した制御モード判定値ｍｏｄｅの設定例が図１５のタイムチャートに示されている。
【００７０】
［時間同期モータ制御］
図１６に示す時間同期モータ制御ルーチンは、初期駆動終了後に所定周期（例えば１ｍｓ周期）で起動され、通常駆動（Ｆ／Ｂ制御開始位置停止保持処理、時間同期通電相設定処理、Ｆ／Ｂ制御）、目標位置停止保持処理、反転位置停止保持処理を実行する。
【００７１】
本ルーチンが起動されると、まずステップ５０１で、制御モード判定値ｍｏｄｅ＝１（通常駆動）であるか否かを判定し、制御モード判定値ｍｏｄｅ＝１であれば、ステップ５０５に進み、後述する図１７に示すｍｏｄｅ１ルーチンを実行して、Ｆ／Ｂ制御開始位置停止保持処理時及び時間同期通電相設定処理時の通電相を設定するための通電相判定値Ｍｐｔｎを算出する。
【００７２】
一方、上記ステップ５０１で、制御モード判定値ｍｏｄｅ＝１でないと判定された場合は、ステップ５０２に進み、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦ（Ｆ／Ｂ制御禁止）であるか否かを判定し、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＮ（Ｆ／Ｂ制御実行）の場合は、以降の処理を行うことなく、本ルーチンを終了する。この場合は、後述する図２２に示すＦ／Ｂ制御ルーチンによって通電相の設定と通電処理が実行される。
【００７３】
本ルーチンでは、制御モード判定値ｍｏｄｅ＝１の場合は、Ｆ／Ｂ制御中であっても、上記ステップ５０５の処理（図１７のｍｏｄｅ１ルーチン）が実行されるため、Ｆ／Ｂ制御中は、図２２のＦ／Ｂ制御ルーチンによってエンコーダ４６のＡ相・Ｂ相信号出力タイミングに同期して通電相を設定するＦ／Ｂ処理と、図１７のｍｏｄｅ１ルーチンによって所定周期で通電相を設定する時間同期通電相設定処理とが並行して実行される。これにより、Ｆ／Ｂ制御の途中で、何等かの原因でロータ３２が一旦停止しても、時間同期通電相設定処理によって通電相判定値Ｍｐｔｎが算出され、ロータ３２が目標位置に向かって回転駆動される。
【００７４】
これに対し、上記ステップ５０２で、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦ（Ｆ／Ｂ制御禁止）と判定された場合は、ステップ５０３、５０４で、制御モード判定値ｍｏｄｅ＝３，４のいずれかに該当するか否かを判定し、制御モード判定値ｍｏｄｅ＝３（目標位置停止保持処理）の場合は、ステップ５０３からステップ５０６に進み、後述する図１８に示すｍｏｄｅ３ルーチンを実行して、目標位置停止保持処理実行時の通電相を設定するための通電相判定値Ｍｐｔｎを算出する。
【００７５】
また、制御モード判定値ｍｏｄｅ＝４（反転位置停止保持処理）の場合は、ステップ５０４からステップ５０７に進み、後述する図１９に示すｍｏｄｅ４ルーチンを実行して、反転位置停止保持処理実行時の通電相を設定するための通電相判定値Ｍｐｔｎを算出する。
【００７６】
以上のようにして、制御モード判定値ｍｏｄｅ＝１，３，４の場合は、通電相判定値Ｍｐｔｎを算出した後、ステップ５０８に進み、後述する図２０に示す通電処理ルーチンを実行して、通常駆動、目標位置停止保持処理、反転位置停止保持処理を実行する。
【００７７】
一方、上記ステップ５０３、５０４で、いずれも「Ｎｏ」と判定された場合、つまり、制御モード判定値ｍｏｄｅ＝０，５の場合は、ステップ５０８に進み、後述する図２０に示す通電処理ルーチンを実行して、通電オフ又はオープンループ制御を実行する。
【００７８】
［ｍｏｄｅ１］
図１７に示すｍｏｄｅ１ルーチンは、図１６の時間同期モータ制御ルーチンのステップ５０５で起動されるサブルーチンであり、Ｆ／Ｂ制御開始位置停止保持処理時及び時間同期通電相設定処理時の通電相判定値Ｍｐｔｎ（通電相）を次のようにして設定する。
【００７９】
本ルーチンが起動されると、まずステップ５１１で、Ｆ／Ｂ制御開始位置停止保持処理の時間をカウントする通電時間カウンタＣＴ１をカウントアップし、次のステップ５１２で、Ｆ／Ｂ制御開始位置停止保持処理の時間ＣＴ１が所定時間（例えば１０ｍｓ）を越えたか否かを判定する。
【００８０】
もし、Ｆ／Ｂ制御開始位置停止保持処理の時間ＣＴ１が所定時間（例えば１０ｍｓ）を越えていなければ、ステップ５１３に進み、停止保持時通電相記憶済みフラグＸｈｏｌｄ＝ＯＦＦ（未記憶）であるか否か（つまりＦ／Ｂ制御開始位置停止保持処理の開始直前のタイミングであるか否か）を判定し、停止保持時通電相記憶済みフラグＸｈｏｌｄ＝ＯＦＦであれば、ステップ５１４に進み、Ｆ／Ｂ制御開始位置停止保持処理時の通電相判定値Ｍｐｔｎを現在の位置カウンタ値（Ｎｃｎｔ−Ｇｃｎｔ）にセットする。
【００８１】
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ
ここで、位置カウンタ値（Ｎｃｎｔ−Ｇｃｎｔ）は、エンコーダカウント値Ｎｃｎｔを初期駆動時に学習された初期位置ずれ学習値Ｇｃｎｔで補正した値であり、ロータ３２の現在位置を正確に表した値となっている。
【００８２】
この後、ステップ５１５に進み、通電相判定値Ｍｐｔｎを“１２”で割り算して、その余りＭｐｔｎ％１２を求める。ここで、“１２”は、通電相を一巡させる間のエンコーダカウント値Ｎｃｎｔ（通電相判定値Ｍｐｔｎ）の増減量に相当する。このＭｐｔｎ％１２の値に基づいて、図２１の変換テーブルによって通電相が決定される。
【００８３】
そして、次のステップ５１６で、Ｍｐｔｎ％１２＝２，３，６，７，１０，１１であるか否かによって１相通電（Ｕ相通電、Ｖ相通電、Ｗ相通電）であるか否かを判定し、１相通電であれば、ステップ５１７に進み、通電相判定値Ｍｐｔｎを１ステップ分に相当する“２”だけ増加して２相通電（ＵＶ相通電、ＶＷ相通電、ＵＷ相通電）に補正する。これにより、Ｆ／Ｂ制御開始位置停止保持処理を１相通電と比べて保持トルクの大きい２相通電で実行することで、ロータ３２がＦ／Ｂ制御開始位置付近で振動することを防止して、ロータ３２をＦ／Ｂ制御開始位置に確実に停止保持できるようにする。
【００８４】
そして、次のステップ５１８で、停止保持時通電相記憶済みフラグＸｈｏｌｄ＝ＯＮ（記憶済み）にセットして本ルーチンを終了する。この後、本ルーチンが起動されたときには、ステップ５１３で「Ｎｏ」と判定され、ステップ５１４〜５１８の処理が実行されない。これにより、Ｆ／Ｂ制御開始位置停止保持処理時の通電相判定値Ｍｐｔｎ（通電相）を設定する処理は、Ｆ／Ｂ制御開始位置停止保持処理の開始直前に１回のみ実行される。
【００８５】
その後、Ｆ／Ｂ制御開始位置停止保持処理の時間ＣＴ１が所定時間（例えば１０ｍｓ）を越えた時点で、ステップ５１２で「Ｙｅｓ」と判定されて、Ｆ／Ｂ制御開始位置停止保持処理を終了し、Ｆ／Ｂ制御に移行する。Ｆ／Ｂ制御中は、所定周期（例えば１ｍｓ周期）で本ルーチンを起動する毎に、ステップ５１９で、後述する図２３に示す通電相設定ルーチンを実行し、通電相判定値Ｍｐｔｎを算出する。この処理が特許請求の範囲でいう第２の通電相設定手段としての役割を果たす。尚、図２３の通電相設定ルーチンは、後述する図２２に示すＦ／Ｂ制御ルーチンのステップ６０２でも起動される。この後、ステップ５２０に進み、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＮ（Ｆ／Ｂ制御実行）にセットする。
【００８６】
前記図１１〜図１３の制御モード設定ルーチンでは、Ｆ／Ｂ制御により目標カウント値Ａｃｎｔとエンコーダカウント値Ｎｃｎｔとの差（Ａｃｎｔ−Ｎｃｎｔ）が所定値以下になった時点で、ロータ３２が目標位置に到達した（Ｆ／Ｂ制御の終了タイミング）と判断して、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦにセットし、Ｆ／Ｂ制御を終了して、制御モード判定値ｍｏｄｅ＝３（目標位置停止保持処理）にセットし、その後、所定時間（例えば５０ｍｓ）が経過した時点で、制御モード判定値ｍｏｄｅ＝０（通電オフ）にセットする（図１３のステップ４１９以降の処理参照）。
【００８７】
従って、Ｆ／Ｂ制御終了後は、図１７のｍｏｄｅ１ルーチンが起動されないため、ステップ５１９の時間同期通電相設定処理による通電相の設定は、Ｆ／Ｂ制御開始からロータ３２が目標位置に到達するまで（つまりＦ／Ｂ制御が終了するまで）実行される。
【００８８】
図２４はＵＷ相から回転を開始する場合に最初に通電する相を説明するタイムチャートである。この場合、正回転（Ｐレンジ→ＮｏｔＰレンジ方向への回転）を開始する場合は、通電相判定値Ｍｐｔｎは、エンコーダカウント値Ｎｃｎｔ、初期位置ずれ学習値Ｇｃｎｔ、正回転方向位相進み量Ｋ１を用いて次式により算出される。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ＋Ｋ１
【００８９】
ここで、正回転方向位相進み量Ｋ１を例えば４とすると、通電相判定値Ｍｐｔｎは、次式により算出される。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ＋４
ＵＷ相から正回転を開始する場合は、ｍｏｄ（Ｎｃｎｔ−Ｇｃｎｔ）は４となるため、Ｍｐｔｎ％１２＝４＋４＝８となり、最初の通電相はＵＶ相となる。
【００９０】
一方、ＵＷ相から逆回転（ＮｏｔＰレンジ→Ｐレンジ方向への回転）を開始する場合は、逆回転方向位相進み量Ｋ２を例えば３とすると、通電相判定値Ｍｐｔｎは、次式により算出される。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ−Ｋ２＝Ｎｃｎｔ−Ｇｃｎｔ−３
ＵＷ相から逆回転を開始する場合は、Ｍｐｔｎ％１２＝４−３＝１となり、最初の通電相はＶＷ相となる。
【００９１】
このように、正回転方向位相進み量Ｋ１と逆回転方向位相進み量Ｋ２をそれぞれ４と３に設定することで、正回転方向と逆回転方向の通電相の切換パターンを対称にすることができ、正回転方向と逆回転方向のいずれの場合も、ロータ３２の現在位置から２ステップ分ずらした位置の相を最初に励磁して回転を開始することができる。
【００９２】
［ｍｏｄｅ３］
図１８に示すｍｏｄｅ３ルーチンは、図１６の時間同期モータ制御ルーチンのステップ５０６で起動されるサブルーチンであり、目標位置停止保持処理時の通電相判定値Ｍｐｔｎ（通電相）を次のようにして設定する。
【００９３】
本ルーチンが起動されると、まずステップ５３１で、Ｆ／Ｂ制御終了時のＭｐｔｎ％１２＝２，３，６，７，１０，１１であるか否かによってＦ／Ｂ制御終了時の通電相が１相通電（Ｕ相通電、Ｖ相通電、Ｗ相通電）であるか否かを判定し、１相通電であれば、ステップ５３２〜５３４の処理によって、それまで行っていたＦ／Ｂ制御の回転方向に応じて通電相判定値Ｍｐｔｎを２だけ増加又は減少させることで、当該１相通電の次のステップの２相通電に変更する。
【００９４】
この際、ステップ５３２で、回転方向を次のようにして判定する。本ルーチンに入る直前（Ｆ／Ｂ制御終了時）に、図１３のステップ４２６で、回転方向指示値Ｄが０（停止）にセットされるため、回転方向指示値Ｄを見ても回転方向を判定することができない。そこで、本ルーチンでは、Ｆ／Ｂ制御終了時の通電相判定値Ｍｐｔｎと位置カウント値（Ｎｃｎｔ−Ｇｃｎｔ）との間に、通電相の位相進み量Ｋ１，Ｋ２分の差があることに着目し、Ｆ／Ｂ制御終了時の通電相判定値Ｍｐｔｎと位置カウント値（Ｎｃｎｔ−Ｇｃｎｔ）との大小関係によって回転方向を次のように判定する。
【００９５】
Ｍｐｔｎ＞Ｎｃｎｔ−Ｇｃｎｔの場合は、正回転（Ｐレンジ→ＮｏｔＰレンジの回転方向）と判定して、ステップ５３３に進み、通電相判定値Ｍｐｔｎを２だけ増加させることで、２相通電に補正する。
【００９６】
一方、Ｍｐｔｎ＜Ｎｃｎｔ−Ｇｃｎｔの場合は、逆回転（ＮｏｔＰレンジ→Ｐレンジの回転方向）と判定して、ステップ５３４に進み、通電相判定値Ｍｐｔｎを２だけ減少させることで、２相通電に補正する。
尚、Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔの場合は、停止と判定して、通電相は変更しない。
【００９７】
このように、目標位置停止保持処理についても、Ｆ／Ｂ制御開始位置停止保持処理と同じく、１相通電と比べて保持トルクの大きい２相通電で実行することで、ロータ３２が目標位置付近で振動することを防止して、ロータ３２を目標位置で確実に停止保持できるようにする。
【００９８】
［ｍｏｄｅ４］
図１９に示すｍｏｄｅ４ルーチンは、図１６の時間同期モータ制御ルーチンのステップ５０７で起動されるサブルーチンであり、反転位置停止保持処理時の通電相判定値Ｍｐｔｎ（通電相）を次のようにして設定する。
【００９９】
本ルーチンが起動されると、まずステップ５４１で、反転位置停止保持処理の時間をカウントする通電時間カウンタＣＴ４をカウントアップし、次のステップ５４２で、反転位置停止保持処理の時間ＣＴ４が所定時間（例えば５０ｍｓ）を越えたか否かを判定する。
【０１００】
もし、反転位置停止保持処理の時間ＣＴ４が所定時間（例えば５０ｍｓ）を越えていなければ、ステップ５４３に進み、Ｍｐｔｎ％１２＝２，３，６，７，１０，１１であるか否かによって現在の通電相が１相通電（Ｕ相通電、Ｖ相通電、Ｗ相通電）であるか否かを判定し、１相通電であれば、ステップ５４４〜５４６の処理によって、それまで行っていたＦ／Ｂ制御の回転方向に応じて通電相判定値Ｍｐｔｎを２だけ増加又は減少させることで、当該１相通電の次のステップの２相通電に変更する。このステップ５４３〜５４６の処理は、前記図１８のｍｏｄｅ３ルーチンのステップ５３１〜５３４の処理と同じである。
【０１０１】
このように、反転位置停止保持処理についても、Ｆ／Ｂ制御開始位置停止保持処理や目標位置停止保持処理と同じく、１相通電と比べて保持トルクの大きい２相通電で実行することで、ロータ３２が反転位置付近で振動することを防止して、ロータ３２を反転位置で確実に停止保持できるようにする。
【０１０２】
その後、反転位置停止保持処理の時間ＣＴ４が所定時間（例えば５０ｍｓ）を越えた時点で、ステップ５４２で「Ｙｅｓ」と判定されて、反転位置停止保持処理を終了し、Ｆ／Ｂ制御を再開する。これにより、最初に、ステップ５４７で、反転位置停止保持処理時の通電相判定値Ｍｐｔｎに、回転方向に応じて通電相の位相進み分のカウント値（例えば４又は３）を加算又は減算してＦ／Ｂ制御再開時の最初の通電相判定値Ｍｐｔｎを設定し、それによって、ロータ３２の回転駆動を開始する。この後、ステップ５４８に進み、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＮ（Ｆ／Ｂ制御実行）、通電時間カウンタＣＴ４＝０、制御モード判定値ｍｏｄｅ＝１（通常駆動）にセットして本ルーチンを終了する。
【０１０３】
［通電処理］
図２０に示す通電処理ルーチンは、図１６の時間同期モータ制御ルーチンのステップ５０８で起動されるサブルーチンである。尚、本ルーチンは、後述する図２２のＦ／Ｂ制御ルーチンのステップ６０３でも起動される。
【０１０４】
図２０の通電処理ルーチンが起動されると、まずステップ５５１で、制御モード判定値ｍｏｄｅ＝０（通電オフ）であるか否かを判定し、制御モード判定値ｍｏｄｅ＝０（通電オフ）であれば、ステップ５５２に進み、ＳＲモータ１２の全相の通電をオフしてスタンバイ状態とする。
【０１０５】
一方、上記ステップ５５１で、「Ｎｏ」と判定されれば、ステップ５５３に進み、制御モード判定値ｍｏｄｅ＝５（オープンループ制御）であるか否かを判定し、制御モード判定値ｍｏｄｅ＝５（オープンループ制御）であれば、ステップ５５４に進み、オープンループ制御を実行する。このオープンループ制御は、エンコーダ４６の故障又はＳＲモータ１２の動作異常が発生したときに、例えば１ｍｓ周期の時間同期処理によって通電相を設定してロータ３２を目標位置まで回転駆動する。
【０１０６】
また、上記ステップ５５１、５５３で、いずれも「Ｎｏ」と判定された場合、つまり、制御モード判定値ｍｏｄｅ＝１，３，４（通常駆動、目標位置停止保持処理、反転位置停止保持処理）の場合は、ステップ５５５に進み、Ｍｐｔｎ％１２に応じて図２１の変換テーブルによって通電相を設定し、その通電相の巻線３３，３４に通電する。
【０１０７】
［Ｆ／Ｂ制御］
次に、図２２に示すＦ／Ｂ制御ルーチンの処理内容を説明する。本ルーチンは、ＡＢ相割り込み処理により実行され、初期駆動終了後にＦ／Ｂ制御実行条件が成立しているときに、ロータ３２の回転位置（エンコーダカウント値Ｎｃｎｔ−Ｇｃｎｔ）が目標位置（目標カウント値Ａｃｎｔ）から例えば０．５°以内に到達するまで、エンコーダカウント値Ｎｃｎｔと初期位置ずれ学習値Ｇｃｎｔとに基づいて通電相を切り換えてロータ３２を回転させる。
【０１０８】
図２２のＦ／Ｂ制御ルーチンが起動されると、まずステップ６０１で、Ｆ／Ｂ許可フラグＸｆｂがＯＮにセットされているか否か（Ｆ／Ｂ制御実行条件が成立しているか否か）を判定し、Ｆ／Ｂ許可フラグＸｆｂがＯＦＦ（Ｆ／Ｂ制御実行条件が不成立）であれば、以降の処理を行うことなく、本ルーチンを終了する。
【０１０９】
これに対し、Ｆ／Ｂ許可フラグＸｆｂがＯＮにセットされていれば、ステップ６０２に進み、後述する図２３の通電相設定ルーチンを実行して、現在のエンコーダカウント値Ｎｃｎｔと初期位置ずれ学習値Ｇｃｎｔとに基づいて通電相を設定し（この処理が特許請求の範囲でいう第１の通電相設定手段としての役割を果たす）、次のステップ６０３で、図２０の通電処理ルーチンを実行する。
【０１１０】
［通電相設定］
図２３に示す通電相設定ルーチンは、図２２のＦ／Ｂ制御ルーチンのステップ６０２と図１７のｍｏｄｅ１ルーチンのステップ５１９で起動されるサブルーチンであり、特許請求の範囲でいう逆転検出手段及び通電相ホールド手段としての役割を果たす。本ルーチンが起動されると、まずステップ６１１で、目標位置への回転方向を指示する回転方向指示値Ｄが正回転（Ｐレンジ→ＮｏｔＰレンジの回転方向）を意味する「１」であるか否かを判定する。その結果、回転方向指示値Ｄ＝１（正回転）と判定されれば、ステップ６１２に進み、Ｆ／Ｂ開始時の１回目の励磁であるか否かを判定し、Ｆ／Ｂ開始時の１回目の励磁であると判定されれば、ステップ６１３に進み、後述する最大値Ｎｃｎｔｍａｘの初期値として現在のエンコーダカウント値Ｎｃｎｔをセットして、ステップ６１４に進むが、Ｆ／Ｂ開始時の１回目の励磁でなければ、上記ステップ６１３の処理を飛び越してステップ６１４に進む。
【０１１１】
このステップ６１４では、正回転駆動実行条件が成立しているか否かを次の２つの条件［Ａ−１］  、［Ａ−２］  のいずれか一方を満たしている否かで判定する。
［Ａ−１］  正回転駆動中に逆転が検出されていないこと
［Ａ−２］  Ｆ／Ｂ開始時の１回目の励磁であること
【０１１２】
上記［Ａ−１］  の条件は、現在のエンコーダカウント値Ｎｃｎｔが現在までのエンコーダカウント値の最大値Ｎｃｎｔｍａｘ以上であるか、又は最大値Ｎｃｎｔｍａｘよりも小さくなっても、不感帯ΔＮｎを越えて小さくならないことである。
Ｎｃｎｔ≧Ｎｃｎｔｍａｘ−ΔＮｎ
【０１１３】
ここで、不感帯ΔＮｎは、例えば正回転駆動の途中で目標位置が切り換えられたときのロータ３２の慣性による過渡的な挙動を“逆転”と判定するのを回避するためのものであり、本実施形態では、不感帯ΔＮｎを例えば２〜４カウントに設定している。
【０１１４】
上記２つの条件［Ａ−１］  、［Ａ−２］  のいずれか一方を満たせば、正回転駆動実行条件が成立し、ステップ６１５に進み、現在のエンコーダカウント値Ｎｃｎｔ、初期位置ずれ学習値Ｇｃｎｔ、正回転方向位相進み量Ｋ１、速度位相進み補正量Ｋｓを用いて通電相判定値Ｍｐｔｎを次式により更新する。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ＋Ｋ１＋Ｋｓ
【０１１５】
ここで、正回転方向位相進み量Ｋ１は、ロータ３２を正回転させるのに必要な通電相の位相進み量（ロータ３２の現在の回転位相に対する通電相の位相進み量）であり、例えばＫ１＝４に設定されている。
【０１１６】
また、速度位相進み補正量Ｋｓは、ロータ３２の回転速度に応じて設定される位相進み補正量であり、例えば、低速域では、速度位相進み補正量Ｋｓが０に設定され、高速になるに従って、速度位相進み補正量Ｋｓが例えば１又は２に増加される。これにより、ロータ３２の回転速度に適した通電相となるように通電相判定値Ｍｐｔｎが補正される。
【０１１７】
通電相判定値Ｍｐｔｎの更新後、ステップ６１６に進み、現在のエンコーダカウント値Ｎｃｎｔが最大値Ｎｃｎｔｍａｘよりも大きいか否かを判定し、大きければ、ステップ６１７に進み、ＥＣＵ４２のメモリに記憶されている最大値Ｎｃｎｔｍａｘの記憶データを現在のエンコーダカウント値Ｎｃｎｔで書き換える。ロータ３２が正回転している間は、エンコーダカウント値Ｎｃｎｔが周期的にカウントアップされるため、エンコーダカウント値の最大値Ｎｃｎｔｍａｘが周期的に更新される。
【０１１８】
一方、正回転駆動中に何等かの原因で逆転が発生してエンコーダカウント値Ｎｃｎｔがカウントダウンされたときには、上記ステップ６１６で「Ｎｏ」と判定され、エンコーダカウント値の最大値Ｎｃｎｔｍａｘの記憶データを更新せずに本ルーチンが終了する。これにより、正回転駆動中は、エンコーダカウント値の最大値ＮｃｎｔｍａｘがＥＣＵ４２のメモリに記憶される。
【０１１９】
一方、上記ステップ６１４で、上記２つの条件［Ａ−１］  、［Ａ−２］  を両方とも満たさない場合、つまり、正回転駆動中に逆転が検出され（Ｎｃｎｔ＜Ｎｃｎｔｍａｘ−ΔＮｎ）、かつ２回目以降の励磁である場合は、正回転駆動実行条件が成立せず、そのまま本ルーチンを終了する。この場合は、逆転防止のために通電相判定値Ｍｐｔｎが更新されず、通電相が前回の通電相にホールドされて前回の通電相に通電され、ロータ３２の逆転を抑制する方向に制動トルクが発生する。
【０１２０】
また、上記ステップ６１１で、回転方向指示値Ｄ＝−１（逆回転）、つまりＮｏｔＰレンジ→Ｐレンジの回転方向と判定された場合は、ステップ６１８に進み、Ｆ／Ｂ開始時の１回目の励磁であるか否かを判定し、Ｆ／Ｂ開始時の１回目の励磁であると判定されれば、ステップ６１９に進み、後述する最小値Ｎｃｎｔｍｉｎの初期値として現在のエンコーダカウント値Ｎｃｎｔをセットして、ステップ６２０に進むが、Ｆ／Ｂ開始時の１回目の励磁でなければ、上記ステップ６１９の処理を飛び越してステップ６２０に進む。
【０１２１】
このステップ６２０では、逆回転駆動実行条件が成立しているか否かを次の２つの条件［Ｂ−１］  、［Ｂ−２］  のいずれか一方を満たしている否かで判定する。
［Ｂ−１］  逆回転駆動中に逆転（正回転）が検出されていないこと
［Ｂ−２］  Ｆ／Ｂ開始時の１回目の励磁であること
【０１２２】
上記［Ｂ−１］  の条件は、現在のエンコーダカウント値Ｎｃｎｔが現在までのエンコーダカウント値の最小値Ｎｃｎｔｍｉｎ以下であるか、又は最小値Ｎｃｎｔｍｉｎよりも大きくなっても、不感帯ΔＮｐを越えて大きくならないことである。
Ｎｃｎｔ≦Ｎｃｎｔｍｉｎ＋ΔＮｐ
【０１２３】
ここで、不感帯ΔＮｐは、例えば逆回転駆動の途中で目標位置が切り換えられたときのロータ３２の慣性による過渡的な挙動を“逆転”と判定するのを回避するためのものであり、本実施形態では、不感帯ΔＮｐを例えば２〜４カウントに設定している。
【０１２４】
上記２つの条件［Ｂ−１］  、［Ｂ−２］  のいずれか一方を満たせば、逆回転駆動実行条件が成立し、ステップ６２１に進み、現在のエンコーダカウント値Ｎｃｎｔ、初期位置ずれ学習値Ｇｃｎｔ、逆回転方向位相進み量Ｋ２、速度位相進み補正量Ｋｓを用いて通電相判定値Ｍｐｔｎを次式により更新する。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ−Ｋ２−Ｋｓ
【０１２５】
ここで、逆回転方向位相進み量Ｋ２は、ロータ３２を逆回転させるのに必要な通電相の位相進み量（ロータ３２の現在の回転位相に対する通電相の位相進み量）であり、例えばＫ２＝３に設定されている。速度位相進み補正量Ｋｓは正回転の場合と同じように設定される。
【０１２６】
通電相判定値Ｍｐｔｎの更新後、ステップ６２２に進み、現在のエンコーダカウント値Ｎｃｎｔが最小値Ｎｃｎｔｍｉｎよりも小さいか否かを判定し、小さければ、ステップ６２３に進み、ＥＣＵ４２のメモリに記憶されている最小値Ｎｃｎｔｍｉｎの記憶データを現在のエンコーダカウント値Ｎｃｎｔで書き換える。ロータ３２が逆回転している間は、エンコーダカウント値Ｎｃｎｔが周期的にカウントダウンされるため、エンコーダカウント値の最小値Ｎｃｎｔｍｉｎが周期的に更新される。
【０１２７】
一方、逆回転駆動中に何等かの原因で逆転が発生してエンコーダカウント値Ｎｃｎｔがカウントアップされたときには、上記ステップ６２２で「Ｎｏ」と判定され、エンコーダカウント値の最小値Ｎｃｎｔｍｉｎの記憶データを更新せずに本ルーチンが終了する。これにより、逆回転駆動中は、エンコーダカウント値の最小値ＮｃｎｔｍｉｎがＥＣＵ４２のメモリに記憶される。
【０１２８】
一方、上記ステップ６２０で、上記２つの条件［Ｂ−１］  、［Ｂ−２］  を両方とも満たさない場合、つまり、逆回転駆動中に逆転が検出され（Ｎｃｎｔ＞Ｎｃｎｔｍａｘ＋ΔＮｐ）、かつ２回目以降の励磁である場合は、逆回転駆動実行条件が成立せず、そのまま本ルーチンを終了する。この場合は、逆転防止のために通電相判定値Ｍｐｔｎが更新されず、通電相が前回の通電相にホールドされて前回の通電相に通電され、ロータ３２の逆転を抑制する方向に制動トルクが発生する。
【０１２９】
以上のようにして、今回の通電相判定値Ｍｐｔｎを決定した後、図２０の通電処理ルーチンを実行し、Ｆ／Ｂ制御中は、ステップ５５５で、図２１の変換テーブルを検索して、Ｍｐｔｎ％１２に対応する通電相を選択し、その通電相の巻線３３，３４に通電する。
【０１３０】
図３０は、不感帯ΔＮｎを２カウントに設定した場合の制御例を示している。エンコーダカウント値Ｎｃｎｔが最大値Ｎｃｎｔｍａｘに対する不感帯ΔＮｎの領域内であれば、逆転とは判定されず、通電相がホールドされない。不感帯ΔＮｎの領域内では、エンコーダカウント値Ｎｃｎｔが減少すれば、通電相判定値Ｍｐｔｎも減少して通電相が切り換えられる。その後、エンコーダカウント値Ｎｃｎｔが不感帯ΔＮｎを越えて小さくなった時点で、逆転と判定されて、通電相が前回の通電相にホールドされる。
【０１３１】
［フェールセーフ処理］
図２５に示すフェールセーフ処理ルーチンは、所定周期で起動され、特許請求の範囲でいうオープンループ駆動手段としての役割を果たす。本ルーチンが起動されると、まずステップ７０１で、Ｆ／Ｂ制御中であるか否かを判定し、Ｆ／Ｂ制御中でなければ、そのまま本ルーチンを終了するが、Ｆ／Ｂ制御中であれば、ステップ７０２に進み、通電相ホールド中（モータ停止中）であるか否かを判定する。
【０１３２】
通電相ホールド中でなければ、そのまま本ルーチンを終了するが、通電相ホールド中であれば、ステップ７０２に進み、オープンループ制御に切り換える。このオープンループ制御では、エンコーダカウント値の情報をフィードバックせずに通電相を順次切り換えると共に、その通電相の切換回数をカウントしてそのカウント値に基づいてロータ３２を目標位置まで回転駆動する。このようにすれば、逆転検出により通電相がホールドされている状態から自動的にＦ／Ｂ制御可能な状態に復帰することができる。
【０１３３】
以上説明した本実施形態では、ＳＲモータ１２のＦ／Ｂ制御開始からロータ３２が目標位置に回転駆動されるまで、所定周期でエンコーダカウント値に基づいて通電相を設定する時間同期通電相設定処理をＦ／Ｂ制御と並行して実行するようにしたので、Ｆ／Ｂ制御の途中で、何等かの原因でロータ３２の回転が一旦停止してエンコーダ４６からＡ相・Ｂ相信号が出力されなくなった場合でも、時間同期通電相設定処理によってその時点のエンコーダカウント値に基づいて通電相を設定することができて、可能な限りロータ３２を目標位置まで回転駆動することができる。
【０１３４】
しかも、本実施形態では、Ｆ／Ｂ制御中にエンコーダカウント値の最大値・最小値を逐次記憶しておき、現在のエンコーダカウント値を最大値・最小値と比較することで逆転の有無を判定するようにしたので、前回のＦ／Ｂ処理によるエンコーダカウント値の前回値が時間同期通電相設定処理によって更新されるという事情があっても（図２７参照）、エンコーダカウント値の最大値・最小値を用いて逆転検出を行うことができる。これにより、Ｆ／Ｂ制御中に逆転が発生したときに通電相を前回の通電相にホールドすることが可能となり、時間同期通電相設定処理によって逆転し続けてしまうという不具合を解消できる。
【０１３５】
尚、逆転検出方法は本実施形態の方法に限定されず、例えば、Ａ相信号とＢ相信号の発生順序によってロータ３２の回転方向を判定して逆転を検出するようにしても良い。
【０１３６】
また、本実施形態では、現在のエンコーダカウント値を最大値又は最小値と比較して逆転の有無を判定する際に、最大値及び最小値に対してそれぞれ所定カウント値分の不感帯を設定し、この不感帯内では逆転と判定しないようにしたので、Ｆ／Ｂ制御の途中で目標位置が切り換えられた場合でも、目標位置の切り換え直後のロータ３２の慣性による過渡的な挙動を不感帯によって“逆転”と判定せずに済み、Ｆ／Ｂ制御の途中で目標位置が切り換えられた場合でも、ロータ３２を目標位置まで回転駆動することができる。
【０１３７】
但し、本発明は、不感帯を設ける構成に限定されず、例えば、常にモータ停止状態からＦ／Ｂ制御を開始するシステム等、本質的に逆転が発生しにくいシステムに本発明を適用する場合は、図２９に示すように、不感帯をなくした構成としても良い。この構成では、現在のエンコーダカウント値が最大値よりも１カウントでも小さくなれば（又は最小値よりも１カウントでも大きくなれば）、逆転と判定され、直ちに通電相がホールドされる。
【０１３８】
尚、本実施形態では、Ｆ／Ｂ制御開始からロータ３２が目標位置に回転駆動されるまでの全期間にわたって時間同期通電相設定処理を行うようにしたので、ロータ３２がどの様なタイミングで停止しても、時間同期通電相設定処理によってロータ３２の停止直後に遅れずに通電相を設定することができ、ロータ３２の停止時間を短くすることができる利点がある。
【０１３９】
しかし、本発明は、ロータ３２の回転速度が所定値以下の期間にロータ３２が目標位置に回転駆動されるまで時間同期通電相設定処理を実行するようにしても良い。このようにすれば、ロータ３２の回転速度が一時停止する可能性のある回転速度まで低下したときのみ、時間同期通電相設定処理を実行すれば良いため、ＥＣＵ４１のＣＰＵの演算負荷を軽減できる利点がある。
【０１４０】
或は、Ｆ／Ｂ制御の途中でロータ３２が停止したときのみ、時間同期通電相設定処理を実行するようにしても良い。
尚、本実施形態では、Ｆ／Ｂ制御中に、１相通電と２相通電とを交互に切り換える１−２相励磁方式で駆動するようにしたが、１相通電のみで駆動する１相励磁方式、又は、２相通電のみで駆動する２相励磁方式を採用しても良い。
【０１４１】
また、本発明に用いるエンコーダは、磁気式のエンコーダ４６に限定されず、例えば、光学式のエンコーダやブラシ式のエンコーダを用いても良い。
また、本発明に用いるモータは、ＳＲモータ１２に限定されず、エンコーダの出力信号のカウント値に基づいてロータの回転位置を検出してモータの通電相を順次切り換えるブラシレス型のモータであれば、ＳＲモータ以外のブラシレス型のモータを用いても良い。
【０１４２】
また、本実施形態のレンジ切換装置は、ＰレンジとＮｏｔＰレンジの２つのレンジを切り換える構成であるが、例えば、ディテントレバー１５の回動動作に連動して自動変速機のレンジ切換弁とマニュアルバルブを切り換えて、自動変速機のＰ、Ｒ、Ｎ、Ｄ等の各レンジを切り換えるレンジ切換装置にも本発明を適用して実施できる。
【０１４３】
その他、本発明は、レンジ切換装置に限定されず、ＳＲモータ等のブラシレス型のモータを駆動源とする各種の装置に適用して実施できることは言うまでもない。
【図面の簡単な説明】
【図１】本発明の一実施形態を示すレンジ切換装置の斜視図
【図２】ＳＲモータの構成を説明する図
【図３】ＳＲモータを駆動する回路構成を示す回路図
【図４】レンジ切換装置の制御システム全体の構成を概略的に示す図
【図５】エンコーダのロータリマグネットの構成を説明する平面図
【図６】エンコーダの側面図
【図７】（ａ）はエンコーダの出力波形を示すタイムチャート、（ｂ）は通電相切り換えパターンを示すタイムチャート
【図８】エンコーダカウンタルーチンの処理の流れを示すフローチャート
【図９】カウントアップ値ΔＮ算出マップの一例を示す図
【図１０】指令レンジシフト、Ａ相信号、Ｂ相信号、エンコーダカウント値の関係を示すタイムチャート
【図１１】制御モード設定ルーチンの処理の流れを示すフローチャート（その１）
【図１２】制御モード設定ルーチンの処理の流れを示すフローチャート（その２）
【図１３】制御モード設定ルーチンの処理の流れを示すフローチャート（その３）
【図１４】Ｆ／Ｂ制御から目標位置停止保持処理へ移行するタイミングを説明するタイムチャート
【図１５】ＳＲモータの制御例を示すタイムチャート
【図１６】時間同期モータ制御ルーチンの処理の流れを示すフローチャート
【図１７】ｍｏｄｅ１ルーチンの処理の流れを示すフローチャート
【図１８】ｍｏｄｅ３ルーチンの処理の流れを示すフローチャート
【図１９】ｍｏｄｅ４ルーチンの処理の流れを示すフローチャート
【図２０】通電処理ルーチンの処理の流れを示すフローチャート
【図２１】１−２相励磁方式の場合のＭｐｔｎ％１２から通電相への変換テーブルの一例を示す図
【図２２】Ｆ／Ｂ制御ルーチンの処理の流れを示すフローチャート
【図２３】通電相設定ルーチンの処理の流れを示すフローチャート
【図２４】ＵＷ相から回転を開始する時の通電処理を説明するタイムチャート
【図２５】フェールセーフ処理ルーチンの処理の流れを示すフローチャート
【図２６】従来の通電相ホールド処理の制御例を説明するタイムチャート
【図２７】比較例の通電相ホールド処理の制御例を説明するタイムチャート
【図２８】Ｆ／Ｂ制御の途中で目標位置が切り換えられたときのエンコーダカウント値の挙動を説明するタイムチャート
【図２９】不感帯を設けない場合の本発明の通電相ホールド処理の制御例を説明するタイムチャート
【図３０】不感帯を設けた場合の本発明の通電相ホールド処理の制御例を説明するタイムチャート
【符号の説明】
１１…レンジ切換機構、１２…ＳＲモータ、１４…出力軸センサ、１５…ディテントレバー、１８…パーキングロッド、２０…パーキングギヤ、２１…ロックレバー、２３…ディテントバネ、２４…Ｐレンジ保持凹部、２５…ＮｏｔＰレンジ保持凹部、２６…減速機構、２７…自動変速機、３１…ステータ、３２…ロータ、３３，３４…巻線、３５，３６…モータ励磁部、３７，３８…モータドライバ、４１…ＥＣＵ（通電制御手段，第１の通電相設定手段，第２の通電相設定手段，エンコーダカウント手段，逆転検出手段，通電相ホールド手段，オープンループ駆動手段）、４３…Ｐレンジスイッチ、４４…ＮｏｔＰレンジスイッチ、４６…エンコーダ、４７…ロータリマグネット、４８…Ａ相信号用の磁気検出素子、４９…Ｂ相信号用の磁気検出素子、５０…Ｚ相信号用の磁気検出素子。
【図１】
2004282970.tif 000003
【図２】
2004282970.tif 000004
【図３】
2004282970.tif 000005
【図４】
2004282970.tif 000006
【図５】
2004282970.tif 000007
【図６】
2004282970.tif 000008
【図７】
2004282970.tif 000009
【図８】
2004282970.tif 000010
【図９】
2004282970.tif 000011
【図１０】
2004282970.tif 000012
【図１１】
2004282970.tif 000013
【図１２】
2004282970.tif 000014
【図１３】
2004282970.tif 000015
【図１４】
2004282970.tif 000016
【図１５】
2004282970.tif 000017
【図１６】
2004282970.tif 000018
【図１７】
2004282970.tif 000019
【図１８】
2004282970.tif 000020
【図１９】
2004282970.tif 000021
【図２０】
2004282970.tif 000022
【図２１】
2004282970.tif 000023
【図２２】
2004282970.tif 000024
【図２３】
2004282970.tif 000025
【図２４】
2004282970.tif 000026
【図２５】
2004282970.tif 000027
【図２６】
2004282970.tif 000028
【図２７】
2004282970.tif 000029
【図２８】
2004282970.tif 000030
【図２９】
2004282970.tif 000031
【図３０】
2004282970.tif 000032