(57)【要約】【課題】エンコーダカウント値でフィードバック制御するモータの駆動コイルが断線したときでも、ロータを目標位置まで回転させることができるようにする。【解決手段】モータ１２に、独立した２系統の駆動コイル３５，３６を設けると共に、各系統の駆動コイル３５，３６を別々に駆動する２系統のモータドライバ３７，３８を設け、各系統の駆動コイル３５，３６の断線の有無を断線検出回路６０の出力に基づいて診断する。その結果、いずれかの系統の駆動コイルの断線が検出されたときに、フィードバック制御からオープンループ制御に切り換え、正常に動作する残りの系統の駆動コイルを用いて該モータドライバに駆動信号を出力して該駆動コイルの通電相を順次切り換えると共に、該駆動信号をカウントしてそのカウント値に基づいてロータを目標位置までゆっくりした速度で回転駆動する。【選択図】　図３
2004056857.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を回転駆動するモータのロータの回転に同期してパルス信号を出力するエンコーダと、このエンコーダのパルス信号のカウント値に基づいて前記ロータの回転位置を検出して前記モータの通電相を順次切り換えることで前記ロータを目標位置まで回転駆動するフィードバック制御を実行するフィードバック制御手段とを備えたモータ制御装置において、
前記モータは、独立した少なくとも２系統の駆動コイルと、各系統の駆動コイルを別々に駆動する少なくとも２系統の駆動回路を有すると共に、各系統の駆動コイル・駆動回路は、それぞれ単独でも前記ロータを回転駆動できるように構成され、
前記各系統の駆動コイル・駆動回路の異常の有無を診断する異常診断手段と、
前記異常診断手段によりいずれかの系統の駆動コイル・駆動回路の異常が検出されたときに残りの系統の駆動コイル・駆動回路を用いてオープンループ制御により該駆動回路に駆動信号を出力して該駆動コイルの通電相を順次切り換えると共に、該駆動信号をカウントしてそのカウント値に基づいて前記ロータを前記目標位置まで回転駆動するオープンループ制御手段と
を備えていることを特徴とするモータ制御装置。
【請求項２】
前記オープンループ制御手段は、前記オープンループ制御中に前記モータに供給する電源電圧に応じてロータ回転速度を制限することを特徴とする請求項１に記載のモータ制御装置。
【請求項３】
前記異常診断手段は、前記駆動コイルの断線を検出する手段を有し、
前記オープンループ制御手段は、前記駆動コイルの断線を検出した時には断線以外の異常を検出した時よりも前記ロータ回転速度が遅くなるように前記残りの系統の駆動回路に駆動信号を出力することを特徴とする請求項１又は２に記載のモータ制御装置。
【請求項４】
前記オープンループ制御手段は、前記オープンループ制御により前記モータを停止状態から駆動するときに最初の励磁を２相通電で行い、その後は、１相通電と２相通電とを交互に切り換えることを特徴とする請求項１乃至３のいずれかに記載のモータ制御装置。
【請求項５】
前記オープンループ制御手段は、前記オープンループ制御により前記モータを停止状態から駆動するときに初めの所定回数の励磁の通電時間をその以後の励磁の通電時間よりも長い時間に設定することを特徴とする請求項１乃至４のいずれかに記載のモータ制御装置。
【請求項６】
前記オープンループ制御手段は、前記オープンループ制御中に、ロータ回転速度、駆動開始後の回転量、駆動開始後の経過時間、前記目標位置までの回転量、負荷トルクの少なくとも１つに基づいて励磁の通電時間を設定することを特徴とする請求項１乃至５のいずれかに記載のモータ制御装置。
【請求項７】
前記モータの出力軸の回転位置又はそれに相関する位置情報を検出する出力軸センサを設け、
前記オープンループ制御手段は、前記オープンループ制御中に前記駆動信号のカウント値に基づいて推定した前記ロータの回転位置が前記目標位置に到達した時点で該オープンループ制御を終了すると共に、前記出力軸センサの出力信号に基づいて該オープンループ制御によるモータ駆動が成功か失敗かを判定し、失敗であれば再びオープンループ制御によるモータ駆動を繰り返すことを特徴とする請求項１乃至６のいずれかに記載のモータ制御装置。
【請求項８】
前記オープンループ制御手段は、前記オープンループ制御によるモータ駆動を連続して所定回数以上失敗したときに、オープンループ制御不能と判断して前記モータの通電をオフすることを特徴とする請求項７に記載のモータ制御装置。
【請求項９】
前記オープンループ制御手段は、前記オープンループ制御開始時の前記ロータの初期位置を前記出力軸センサの出力信号に基づいて推定し、該オープンループ制御中に前記ロータの初期位置推定値と前記駆動信号のカウント値とに基づいて前記ロータの回転位置を推定することを特徴とする請求項７又は８に記載のモータ制御装置。
【請求項１０】
前記モータは、スイッチトリラクタンスモータであることを特徴とする請求項１乃至９のいずれかに記載のモータ制御装置。
【請求項１１】
前記制御対象は、車両のパーキングレンジと他のレンジとを切り換えるレンジ切換装置であることを特徴とする請求項１乃至１０のいずれかに記載のモータ制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、エンコーダのパルス信号のカウント値に基づいてロータの回転位置を検出してモータの通電相を順次切り換えることでロータを目標位置まで回転駆動するモータ制御装置に関するものである。
【０００２】
【従来の技術】
近年、構造が簡単で安価なモータとして需要が増加しているスイッチトリラクタンスモータ等のブラシレス型のモータは、ロータの回転に同期してパルス信号を出力するエンコーダを搭載し、このエンコーダのパルス信号をカウントして、そのエンコーダカウント値に基づいてロータの回転位置を検出して通電相を順次切り換えることでロータを回転駆動するようにしたものがある。このようなエンコーダ付きのモータは、起動後のエンコーダカウント値に基づいてロータの回転位置を検出することができるため、フィードバック制御系（閉ループ制御系）によりロータを目標位置まで回転させる位置切換制御（位置決め制御）を行う各種の位置切換装置の駆動源として用いられている。
【０００３】
【発明が解決しようとする課題】
ところで、モータの駆動コイルが断線したり、その駆動回路が故障すると、モータを正常に駆動できなくなる。そこで、フェールセーフ手段として、特開２００１−２７１９１７号公報に示すように、モータのステータコアに、独立した２系統の駆動コイルを設けると共に、各系統の駆動コイルを別々に駆動する２系統の駆動回路を設け、いずれれか一方の系統の駆動コイル・駆動回路が故障したときに、故障していない片方の系統の駆動コイル・駆動回路を用いてロータの回転位置をフィードバック制御（以下「Ｆ／Ｂ制御」と表記する）するようにしたものがある。
【０００４】
しかし、いずれれか一方の系統の駆動コイル・駆動回路が故障したときに、片方の駆動コイルのみでロータの回転位置をＦ／Ｂ制御する場合、駆動トルクが正常時の半分となるため、駆動トルクが不足して、ロータの回転位置をＦ／Ｂ制御できない可能性がある。かといって、片方の駆動コイルのみで正常なＦ／Ｂ制御を可能にする駆動トルクを確保しようとすると、大きな駆動コイルが必要となって、モータが大型化してしまうという欠点が発生する。
【０００５】
本発明はこのような事情を考慮してなされたものであり、従ってその目的は、モータの駆動コイル・駆動回路が故障したときでも、ロータを目標位置まで回転させることができ、モータ制御の信頼性を向上できると共に、モータの大型化も回避することができるモータ制御装置を提供することにある。
【０００６】
【課題を解決するための手段】
上記目的を達成するために、本発明の請求項１は、モータに、独立した少なくとも２系統の駆動コイルを設けると共に、各系統の駆動コイルを別々に駆動する少なくとも２系統の駆動回路を設け、各系統の駆動コイル・駆動回路を、それぞれ単独でもロータを回転駆動できるように構成し、各系統の駆動コイル・駆動回路の異常の有無を異常診断手段により診断し、その結果、いずれかの系統の駆動コイル・駆動回路の異常が検出されたときに、オープンループ制御手段によりオープンループ制御に切り換え、正常に動作する残りの系統の駆動コイル・駆動回路を用いて該駆動回路に駆動信号を出力して該駆動コイルの通電相を順次切り換えると共に、該駆動信号をカウントしてそのカウント値に基づいてロータを目標位置まで回転駆動するようにしたものである。
【０００７】
このように、いずれかの系統の駆動コイル・駆動回路の異常が検出されたときに、正常に動作する残りの系統の駆動コイル・駆動回路を用いてオープンループ制御を行えば、ロータをゆっくりした速度で駆動することができる。従って、いずれかの系統の駆動コイル・駆動回路の異常が発生して駆動トルクが小さくなっても、オープンループ制御によってロータをロータをゆっくりした速度で目標位置まで回転させることができ、モータ制御の信頼性を向上できると共に、各系統の駆動コイルを大型化せずに済み、モータの大型化も回避することができる。
【０００８】
この場合、請求項２のように、オープンループ制御中にモータに供給する電源電圧に応じてロータ回転速度を制限するようにすると良い。つまり、電源電圧が低下するほど、駆動トルクが低下して、オープンループ制御で対応できるロータ回転速度の限界値が低下するため、電源電圧が低くなるほど、ロータ回転速度を遅くするように制御すれば、電源電圧が低下した場合でも、オープンループ制御によってロータをゆっくりした速度で目標位置まで回転させることができる。
【０００９】
また、駆動コイル・駆動回路の異常のうち、駆動コイルの断線時には、それ以外の異常よりも駆動トルクが低下する。従って、請求項３のように、駆動コイルの断線検出時にはそれ以外の異常検出時よりもロータ回転速度が遅くなるように正常に動作する残りの系統の駆動回路・駆動コイルを用いてオープンループ制御するようにしても良い。これにより、駆動トルクが小さくなる異常が発生した時でも、モータ制御の信頼性を確保することができる。
【００１０】
また、請求項４のように、オープンループ制御によりモータを停止状態から駆動するときに最初の励磁を２相通電で行い、その後は、１相通電と２相通電とを交互に切り換えるようにすると良い。このように、オープンループ制御開始時に最初の励磁を２相通電で行えば、オープンループ制御開始時のロータの初期位置が最初の２相通電に対応する位置に正確に一致していなくても、その２相通電の大きなトルクが及ぶ範囲内であれば、オープンループ制御開始当初からロータの回転位置と通電相とを同期させてロータを回転駆動することができる。そして、オープンループ制御中に、１相通電と２相通電とを交互に切り換えるようにすれば、常に１相のみに通電する１相励磁方式や常に２相ずつ通電する２相励磁方式と比較して、１回の励磁当たりのロータ回転角度が１／２となるため、ロータを安定して精度良く回転させることができる。
【００１１】
また、請求項５のように、オープンループ制御によりモータを停止状態から駆動するときに初めの所定回数の励磁の通電時間をその以後の励磁の通電時間よりも長い時間に設定するようにすると良い。オープンループ制御開始時にロータの初期位置と通電相とがずれていると、両者を同期させるのに数回の励磁を必要とする場合があるため、初めの所定回数の励磁の通電時間を長くすることで、その所定回数の励磁によってロータの回転位置と通電相とを確実に同期させることができる。
【００１２】
また、請求項６のように、オープンループ制御中に、ロータ回転速度、駆動開始後の回転量、駆動開始後の経過時間、前記目標位置までの回転量、負荷トルクの少なくとも１つに基づいて励磁の通電時間を設定するようにすると良い。このようにすれば、オープンループ制御中のロータの加速→定速回転→減速→停止の制御を適正に行うことができる。
【００１３】
また、請求項７のように、モータの出力軸の回転位置又はそれに相関する位置情報を検出する出力軸センサを設け、オープンループ制御中に通電相の切換回数のカウント値に基づいて推定したロータの回転位置が目標位置に到達した時点で該オープンループ制御を終了すると共に、出力軸センサの出力信号に基づいて該オープンループ制御によるモータ駆動が成功か失敗かを判定し、失敗であれば、再びオープンループ制御によるモータ駆動を繰り返すようにしても良い。このようにすれば、オープンループ制御によるモータ駆動の信頼性を高めることができる。
【００１４】
この場合、オープンループ制御によるモータ駆動を何回も繰り返しても、それが失敗に終わるような場合は、モータやその駆動制御系が完全に故障して制御不能に陥っているものと考えられるため、請求項８のように、オープンループ制御によるモータ駆動を連続して所定回数以上失敗したときに、オープンループ制御不能と判断してモータの通電をオフするようにすると良い。このようにすれば、オープンループ制御不能と判断した後は、オープンループ制御を繰り返さずに済み、消費電力を節約することができる。
【００１５】
また、請求項９のように、オープンループ制御開始時のロータの初期位置を出力軸センサの出力信号に基づいて推定し、該オープンループ制御中にロータの初期位置推定値と通電相の切換回数のカウント値とに基づいてロータの回転位置を推定するようにすると良い。このようにすれば、オープンループ制御中のロータの回転位置を比較的精度良く推定することができ、オープンループ制御によるモータ制御精度を高めることができる。
【００１６】
また、請求項１０のように、モータとしてスイッチトリラクタンスモータを使用するようにしても良い。スイッチトリラクタンスモータは、永久磁石が不要で構造が簡単であるため、安価であり、温度環境等に対する耐久性・信頼性も高いという利点がある。
【００１７】
以上説明した請求項１〜１０に係る発明は、スイッチトリラクタンスモータ等のブラシレス型のモータを駆動源とする各種の位置切換装置に適用でき、例えば、請求項１１のように、車両の自動変速機のレンジを切り換えるレンジ切換機構を駆動するモータの制御装置に適用しても良い。これにより、信頼性の高いモータ駆動式のレンジ切換装置を構成することができる。
【００１８】
【発明の実施の形態】
《実施形態（１）》
以下、本発明を車両のレンジ切換装置に適用した実施形態（１）を図１乃至図４３に基づいて説明する。
【００１９】
まず、図１に基づいてレンジ切換機構１１の構成を説明する。レンジ切換機構１１の駆動源となるモータ１２は、例えばスイッチトリラクタンスモータにより構成され、減速機構２６（図４参照）を内蔵し、その出力軸１３の回転位置を検出する出力軸センサ１４が設けられている。この出力軸１３には、ディテントレバー１５が固定されている。
【００２０】
また、ディテントレバー１５にはＬ字形のパーキングロッド１８が固定され、このパーキングロッド１８の先端部に設けられた円錐体１９がロックレバー２１に当接している。このロックレバー２１は、円錐体１９の位置に応じて軸２２を中心にして上下動してパーキングギヤ２０をロック／ロック解除するようになっている。パーキングギヤ２０は、自動変速機２７の出力軸に設けられ、このパーキングギヤ２０がロックレバー２１によってロックされると、車両の駆動輪が回り止めされた状態（パーキング状態）に保持される。
【００２１】
一方、ディテントレバー１５をパーキングレンジ（以下「Ｐレンジ」と表記する）と他のレンジ（以下「ＮｏｔＰレンジ」と表記する）に保持するためのディテントバネ２３が支持ベース１７に固定され、このディテントバネ２３の先端に設けられた係合部２３ａがディテントレバー１５のＰレンジ保持凹部２４に嵌まり込んだときに、ディテントレバー１５がＰレンジの位置に保持され、該ディテントバネ２３の係合部２３ａがディテントレバー１５のＮｏｔＰレンジ保持凹部２５に嵌まり込んだときに、ディテントレバー１５がＮｏｔＰレンジの位置に保持されるようになっている。
【００２２】
Ｐレンジでは、パーキングロッド１８がロックレバー２１に接近する方向に移動して、円錐体１９の太い部分がロックレバー２１を押し上げてロックレバー２１の凸部２１ａがパーキングギヤ２０に嵌まり込んでパーキングギヤ２０をロックした状態となり、それによって、自動変速機２７の出力軸（駆動輪）がロックされた状態（パーキング状態）に保持される。
【００２３】
一方、ＮｏｔＰレンジでは、パーキングロッド１８がロックレバー２１から離れる方向に移動して、円錐体１９の太い部分がロックレバー２１から抜け出てロックレバー２１が下降し、それによって、ロックレバー２１の凸部２１ａがパーキングギヤ２０から外れてパーキングギヤ２０のロックが解除され、自動変速機２７の出力軸が回転可能な状態（走行可能な状態）に保持される。
【００２４】
尚、前述した出力軸センサ１４は、モータ１２の減速機構２６の出力軸１３の回転角度に応じた電圧を出力する回転センサ（例えばポテンショメータ）によって構成され、その出力電圧によって現在のレンジがＰレンジとＮｏｔＰレンジのいずれであるかを確認できるようになっている。
【００２５】
次に、図２に基づいてモータ１２の構成を説明する。本実施形態では、モータ１２として、スイッチトリラクタンスモータ（以下「ＳＲモータ」と表記する）が用いられている。このＳＲモータ１２は、ステータ３１とロータ３２が共に突極構造を持つモータで、永久磁石が不要で構造が簡単であるという利点がある。円筒状のステータ３１の内周部には、例えば１２個の突極３１ａが等間隔に形成され、これに対して、ロータ３２の外周部には、例えば８個の突極３２ａが等間隔に形成され、ロータ３２の回転に伴い、ロータ３２の各突極３２ａがステータ３１の各突極３１ａと微小ギャップを介して順番に対向するようになっている。ステータ３１の１２個の突極３１ａには、Ｕ相、Ｖ相、Ｗ相の合計６個の巻線３３と、Ｕ’相、Ｖ’相、Ｗ’相の合計６個の巻線３４が順番に巻回されている。尚、ステータ３１とロータ３２の突極３１ａ，３２ａの数は適宜変更しても良いことは言うまでもない。
【００２６】
本実施形態の巻線３３，３４の巻回順序は、ステータ３１の１２個の突極３１ａに対して、例えば、Ｖ相→Ｗ相→Ｕ相→Ｖ相→Ｗ相→Ｕ相→Ｖ’相→Ｗ’相→Ｕ’相→Ｖ’相→Ｗ’相→Ｕ’相の順序で巻回されている。図３に示すように、Ｕ相、Ｖ相、Ｗ相の合計６個の巻線３３と、Ｕ’相、Ｖ’相、Ｗ’相の合計６個の巻線３４は、独立した２系統の駆動コイル３５，３６を構成するように結線されている。
【００２７】
一方の系統の駆動コイル３５は、Ｕ相、Ｖ相、Ｗ相の合計６個の巻線３３をＹ結線して構成され（同じ相の２個の巻線３３はそれぞれ直列に接続されている）、他方の系統の駆動コイル３６は、Ｕ’相、Ｖ’相、Ｗ’相の合計６個の巻線３４をＹ結線して構成されている（同じ相の２個の巻線３４はそれぞれ直列に接続されている）。２つの系統の駆動コイル３５，３６は、Ｕ相とＵ’相が同時に通電され、Ｖ相とＶ’相が同時に通電され、Ｗ相とＷ’相が同時に通電される。
【００２８】
これら２つの系統の駆動コイル３５，３６は、車両に搭載されたバッテリ（図示せず）を電源として、それぞれ別個のモータドライバ３７，３８（駆動回路）によって駆動される。このように、駆動コイル３５，３６とモータドライバ３７，３８をそれぞれ２系統ずつ設けることで、一方の系統が故障しても、他方の系統でＳＲモータ１２を回転させることができるようになっている。図３に示すモータドライバ３７，３８の回路構成例では、各相毎にトランジスタ等のスイッチング素子３９を１個ずつ設けたユニポーラ駆動方式の回路構成としているが、各相毎にスイッチング素子を２個ずつ設けたバイポーラ駆動方式の回路構成を採用しても良い。
【００２９】
本実施形態では、各駆動コイル３５，３６の中性点を、バッテリの正極（電圧Ｖｂ）側に接続し、各駆動コイル３５，３６の各相の巻線３３，３４の一端を各モータドライバ３７，３８の各スイッチング素子３９に接続した構成としている。各モータドライバ３７，３８の各スイッチング素子３９のオン／オフは、ＥＣＵ４１のＣＰＵ４１ａによって制御される。
【００３０】
各相の巻線３３，３４の断線を検出するために、各相の巻線３３，３４の通電ラインにそれぞれ断線検出回路６０が設けられている。各相の断線検出回路６０は、直流電源電圧Ｖｃｃ（例えば５Ｖ）側とグラウンド側との間に２個の抵抗６１，６２を直列に接続すると共に、両抵抗６１，６２の中間接続点を各相の通電ラインに接続し、両抵抗６１，６２の中間接続点を信号線を介してＥＣＵ４１の各入力ポートに接続し、両抵抗６１，６２の中間接続点の電圧レベル（各相の通電ラインの電圧レベル）を各入力ポートを介して断線検出信号としてＥＣＵ４１に読み込むようになっている。この場合、直流電源電圧Ｖｃｃ側の抵抗６１の抵抗値は例えば３０ｋΩに設定され、グラウンド側の抵抗６２の抵抗値は例えば１０ｋΩに設定されている。
【００３１】
例えば、巻線３３，３４が正常（断線なし）の場合は、スイッチング素子３９をオフすると、両抵抗６１，６２の中間接続点の電圧レベル（断線検出信号）が巻線３３，３４を介して印加されるバッテリ電圧Ｖｂによって上昇して、断線検出信号がハイレベルとなる。そして、スイッチング素子３９をオンすると、両抵抗６１，６２の中間接続点が該スイッチング素子３９を介してグラウンド側に導通した状態となるため、断線検出信号がローレベルとなる。
【００３２】
これに対し、巻線３３，３４が断線している場合は、スイッチング素子３９をオフしても、両抵抗６１，６２の中間接続点には巻線３３，３４を介してバッテリ電圧Ｖｂが印加されないため、断線検出信号がローレベルに維持され、ハイレベルには反転しない。
【００３３】
このような関係から、ＥＣＵ４１のＣＰＵ４１ａは、各相のスイッチング素子３９をオフしたときに、各相の断線検出信号がハイレベルになれば、各相の巻線３３，３４が正常（断線なし）と判定し、各相のスイッチング素子３９をオフしたときに、各相の断線検出信号がローレベルのまま変化しなければ、各相の巻線３３，３４が断線していると判定する。
【００３４】
図４に示すように、ＥＣＵ４１と各モータドライバ３７，３８は、レンジ切換制御装置４２に搭載され、このレンジ切換制御装置４２には、Ｐレンジへの切換操作を行うＰレンジスイッチ４３と、ＮｏｔＰレンジへの切換操作を行うＮｏｔＰレンジスイッチ４４の操作信号が入力される。Ｐレンジスイッチ４３又はＮｏｔＰレンジスイッチ４４の操作により選択されたレンジは、インストルメントパネル（図示せず）に設けられたレンジ表示部４５に表示される。尚、Ｐレンジスイッチ４３とＮｏｔＰレンジスイッチ４４は、例えばモーメンタリ型スイッチにより構成されている。
【００３５】
ＳＲモータ１２には、ロータ３２の回転位置を検出するためのエンコーダ４６が設けられている。このエンコーダ４６は、例えば磁気式のロータリエンコーダにより構成されており、その具体的な構成は、図５及び図６に示すように、Ｎ極とＳ極が円周方向に交互に等ピッチで着磁された円環状のロータリマグネット４７がロータ３２の側面に同軸状に固定され、このロータリマグネット４７に対向する位置に、３個のホールＩＣ等の磁気検出素子４８，４９，５０が配置された構成となっている。本実施形態では、ロータリマグネット４７のＮ極とＳ極の着磁ピッチが７．５°に設定されている。このロータリマグネット４７の着磁ピッチ（７．５°）は、ＳＲモータ１２の励磁１回当たりのロータ３２の回転角度と同じに設定されている。後述するように、１−２相励磁方式でＳＲモータ１２の通電相の切り換えを６回行うと、全ての通電相の切り換えが一巡してロータ３２とロータリマグネット４７が一体的に７．５°×６＝４５°回転する。このロータリマグネット４７の４５°の回転角度範囲に存在するＮ極とＳ極の数は、合計６極となっている。
【００３６】
更に、ロータ３２の基準回転位置に相当する位置のＮ極（Ｎ’）とその両側のＳ極（Ｓ’）がそれ以外の磁極よりも径方向の幅が広くなるように形成されている。尚、本実施形態では、ＳＲモータ１２の通電相の切り換えが一巡する間にロータ３２とロータリマグネット４７が一体的に４５°回転することを考慮して、ロータ３２の基準回転位置に相当する幅広な着磁部分（Ｎ’）が４５°ピッチで形成されており、従って、ロータリマグネット４７全体として、基準回転位置に相当する幅広な着磁部分（Ｎ’）が合計８個形成されている。尚、基準回転位置に相当する幅広な着磁部分（Ｎ’）は、ロータリマグネット４７全体として、１個のみ形成した構成としても良い。
【００３７】
このロータリマグネット４７に対して３個の磁気検出素子４８，４９，５０が次のような位置関係で配置されている。Ａ相信号を出力する磁気検出素子４８とＢ相信号を出力する磁気検出素子４９は、ロータリマグネット４７の幅狭な着磁部分（Ｎ，Ｓ）と幅広な着磁部分（Ｎ’，Ｓ’）の両方に対向し得る位置の同一円周上に配置されている。一方、Ｚ相信号を出力する磁気検出素子５０は、ロータリマグネット４７の幅狭な着磁部分（Ｎ，Ｓ）よりも径方向外側又は内側の位置で、且つ、幅広な着磁部分（Ｎ’，Ｓ’）のみに対向し得る位置に配置されている。Ａ相信号とＢ相信号を出力する２個の磁気検出素子４８，４９の間隔は、図７に示すように、Ａ相信号とＢ相信号の位相差が、電気角で９０°（機械角で３．７５°）となるように設定されている。ここで、“電気角”はＡ・Ｂ相信号の発生周期を１周期（３６０°）とした場合の角度で、“機械角”は機械的な角度（ロータ３２の１回転を３６０°とした場合の角度）であり、Ａ相信号の立ち下がり（立ち上がり）からＢ相信号の立ち下がり（立ち上がり）までにロータ３２が回転する角度がＡ相信号とＢ相信号の位相差の機械角に相当する。また、Ｚ相信号を出力する磁気検出素子５０は、Ｚ相信号とＢ相信号（又はＡ相信号）との位相差が０となるように配置されている。
【００３８】
各磁気検出素子４８，４９，５０の出力は、Ｎ極（Ｎ’極）と対向したときにハイレベル“１”となり、Ｓ極（Ｓ’極）と対向したときにローレベル“０”となる。尚、Ｚ相信号用の磁気検出素子５０の出力は、ロータ３２の基準回転位置に相当する幅広なＮ’極に対向する毎にハイレベル“１”となり、それ以外の位置では、ローレベル“０”となる。
【００３９】
本実施形態では、ＥＣＵ４１のＣＰＵ４１ａが後述するエンコーダカウンタルーチンによってＡ相信号とＢ相信号の立ち上がり／立ち下がりの両方のエッジをカウントして、そのエンコーダカウント値に応じてＳＲモータ１２の通電相を切り換えることでロータ３２を回転駆動する。この際、Ａ相信号とＢ相信号の発生順序によってロータ３２の回転方向を判定し、正回転（Ｐレンジ→ＮｏｔＰレンジの回転方向）ではエンコーダカウント値をカウントアップし、逆回転（ＮｏｔＰレンジ→Ｐレンジの回転方向）ではエンコーダカウント値をカウントダウンする。これにより、ロータ３２が正回転／逆回転のいずれの方向に回転しても、エンコーダカウント値とロータ３２の回転位置との対応関係が維持されるため、正回転／逆回転のいずれの回転方向でも、エンコーダカウント値によってロータ３２の回転位置（回転角度）を検出して、その回転位置に対応した相の巻線３３，３４に通電してロータ３２を回転駆動する。
【００４０】
図７は、ロータ３２を逆回転方向（ＮｏｔＰレンジ→Ｐレンジの回転方向）に回転させたときのエンコーダ４６の出力波形と通電相の切換パターンを示している。逆回転方向（ＮｏｔＰレンジ→Ｐレンジの回転方向）と正回転方向（Ｐレンジ→ＮｏｔＰレンジの回転方向）のいずれの場合も、ロータ３２が７．５°回転する毎に１相通電と２相通電とを交互に切り換えるようになっており、ロータ３２が４５°回転する間に、例えば、Ｕ相通電→ＵＷ相通電→Ｗ相通電→ＶＷ相通電→Ｖ相通電→ＵＶ相通電の順序で通電相の切り換えを一巡するようになっている。そして、この通電相の切り換え毎に、ロータ３２が７．５°ずつ回転して、Ａ相、Ｂ相信号用の磁気検出素子４８，４９に対向するロータリマグネット４７の磁極がＮ極→Ｓ極（Ｎ’極→Ｓ’極）又はＳ極→Ｎ極（Ｓ’極→Ｎ’極）に変化してＡ相信号とＢ相信号のレベルが交互に反転し、それによって、ロータ３２が７．５°回転する毎に、エンコーダカウント値が２ずつカウントアップ（又はカウントダウン）する。また、通電相の切り換えが一巡してロータ３２が４５°回転する毎に、Ｚ相用の磁気検出素子５０がロータ３２の基準回転位置に相当する幅広なＮ’極に対向して、Ｚ相信号がハイレベル“１”となる。尚、本明細書では、Ａ相、Ｂ相、Ｚ相信号がハイレベル“１”となることを、Ａ相、Ｂ相、Ｚ相信号が出力されると言う場合がある。
【００４１】
ところで、エンコーダカウント値は、ＥＣＵ４１のＲＡＭに記憶されるため、ＥＣＵ４１の電源がオフされると、エンコーダカウント値の記憶が消えてしまう。そのため、ＥＣＵ４１の電源投入直後のエンコーダカウント値（０）は、実際のロータ３２の回転位置（通電相）に対応したものとならい。従って、エンコーダカウント値に応じて通電相を切り換えるためには、電源投入後にエンコーダカウント値と実際のロータ３２の回転位置とを対応させて、エンコーダカウント値と通電相とを対応させる必要がある。
【００４２】
そこで、本実施形態では、レンジ切換制御装置４２のＥＣＵ４１によって後述する図８及び図９に示す初期駆動ルーチンを実行することで、ＥＣＵ４１への電源投入後の初期駆動時に、ＳＲモータ１２の通電相の切り換えを所定のタイムスケジュールで一巡させてエンコーダ４６のＡ相信号及びＢ相信号のエッジをカウントし、初期駆動終了時のエンコーダカウント値とロータ３２の回転位置と通電相との対応関係を学習し、その後の通常駆動時に、エンコーダカウント値と初期駆動終了時の学習結果とに基づいて通電相を決定するようにしている。
【００４３】
この初期駆動時の学習は、具体的には次のようにして行われる。図１２に示すように、ＰレンジでＥＣＵ４１に電源が投入されたときに初期駆動を行う場合は、例えば、Ｗ相通電→ＵＷ相通電→Ｕ相通電→ＵＶ相通電→Ｖ相通電→ＶＷ相通電の順序で通電相の切り換えを所定のタイムスケジュールで一巡し、ロータ３２を正回転方向（Ｐレンジ→ＮｏｔＰレンジの回転方向）に駆動する。
【００４４】
一方、ＮｏｔＰレンジでＥＣＵ４１に電源が投入されたときに初期駆動を行う場合は、例えば、Ｖ相通電→ＵＶ相通電→Ｕ相通電→ＵＷ相通電→Ｗ相通電→ＶＷ相通電の順序で通電相の切り換えを所定のタイムスケジュールで一巡し、ロータ３２を逆回転方向（ＮｏｔＰレンジ→Ｐレンジの回転方向）に駆動する。
【００４５】
この初期駆動時には、１相通電の時間Ｔ１を２相通電の時間Ｔ２よりも短くし、例えばＴ１＝１０ｍｓ、Ｔ２＝１００ｍｓに設定する。初期駆動中にロータ３２の回転位置と通電相との同期がとれた後でも、トルクが小さい１相通電では、ロータ３２が振動するため、１相通電の時間Ｔ１を短くして、できるだけ速やかに次の２相通電に切り換えることで、ロータ３２の振動を速やかに停止させてエンコーダ４６の出力信号を安定させるようにしている。
【００４６】
このように、初期駆動時に通電相の切り換えを一巡させれば、初期駆動が終了するまでに、いずれかの通電相で必ずロータ３２の回転位置と通電相とが一致して、それ以後、通電相の切り換えに同期してロータ３２が回転して、このロータ３２の回転に同期してエンコーダ４６からＡ相信号及びＢ相信号が出力されるようになる。
【００４７】
この初期駆動中に、エンコーダ４６のＡ相信号及びＢ相信号の立ち上がり／立ち下がりの両方のエッジをカウントする。従って、初期駆動終了時のエンコーダカウント値を見れば、初期駆動が終了するまでにロータ３２が実際に通電相の切り換えに同期して回転した角度（回転量）が分かり、それによって、初期駆動終了時のエンコーダカウント値とロータ３２の回転位置と通電相との対応関係が分かる。
【００４８】
図１２の例では、初期駆動時に最初の通電相（Ｗ相）からロータ３２が回転し、通電相の切り換え毎にロータ３２が７．５°ずつ回転してエンコーダカウント値が２ずつカウントアップし、初期駆動終了時にエンコーダカウント値が１２となる。
【００４９】
これに対し、例えば、初めの３回の励磁（Ｗ相通電→ＵＷ相通電→Ｕ相通電）でロータ３２が回転しない場合、つまり４回目以降の励磁（ＵＶ相通電→Ｖ相通電→ＶＷ相通電）でロータ３２の回転位置と通電相とが同期してロータ３２が３回の励磁分だけ回転する場合は、初期駆動終了時までにロータ３２が７．５°×３＝２２．５°回転して、エンコーダカウント値が２×３＝６となる。従って、初期駆動終了時のエンコーダカウント値を見れば、初期駆動が終了するまでにロータ３２が実際に通電相の切り換えに同期して回転した角度（回転量）が判明する。
【００５０】
初期駆動の最後の通電相は、常にＶＷ相となるが、エンコーダカウント値は、必ずしも１２になるとは限らず、例えば８、或は４である場合もある。初期駆動終了後の通常駆動時には、エンコーダカウント値に基づいて通電相が決定されるため、初期駆動によるエンコーダカウント値のずれを修正しないと、通常駆動時に正しい通電相を選択することができない。
【００５１】
そこで、本実施形態では、初期駆動終了時のエンコーダカウント値を初期位置ずれ学習値として学習し、その後の通常駆動時にエンコーダカウント値を初期位置ずれ学習値で補正することで、初期駆動終了時のエンコーダカウント値と通電相（ロータ３２の回転位置）とのずれを補正して、通常駆動時に正しい通電相を選択できるようにしている。
【００５２】
初期駆動終了後は、図１２に示すように、後述するＦ／Ｂ制御開始位置停止保持処理により、初期駆動終了時の通電相（ＶＷ相）と同じ相に例えば１０ｍｓ通電してロータ３２の位置を初期駆動終了時の位置に保持し、その後、後述するフィードバック制御（以下「Ｆ／Ｂ制御」と表記する）により、その時点のエンコーダカウント値と初期位置ずれ学習値とに基づいて通電相を切り換えてロータ３２を目標位置Ａｃｎｔの方向へ回転させる。これにより、ロータ３２の回転位置（エンコーダカウント値）が目標位置Ａｃｎｔから例えば０．５°以内に到達した時点で、通電相の切り換えを終了してロータ３２を停止させ、その後は、後述する目標位置停止保持処理により、同じ相に通電し続けてロータ３２の停止状態を保持し、この保持状態を例えば５０ｍｓ継続する。この後、目標位置Ａｃｎｔが変化しなければ、通電を停止する。
【００５３】
また、初期駆動の途中で、Ｐレンジスイッチ４３又はＮｏｔＰレンジスイッチ４４が操作されてレンジ切換要求が発生した場合は、次の２相通電（２相通電の実行中にレンジ切換要求が発生したときはその２相通電）が終了してから通常駆動に移行すると共に、該２相通電終了時のエンコーダカウント値とロータ３２の回転位置と通電相との対応関係を学習し、その後の通常駆動時に、エンコーダカウント値と２相通電終了時の学習結果とに基づいて通電相を決定するようにしている。
【００５４】
２相通電では、トルクが大きいため、ロータ３２の位置が２相通電に対応する位置から多少ずれていたとしても、ロータ３２を２相通電に対応する位置まで回転させることができる。このため、初期駆動中に２相通電を１〜２回行うだけでロータ３２の回転位置と通電相との同期がとれる確率は高いものと思われる。従って、初期駆動の途中でレンジ切換要求が発生したときには、次の２相通電（又は現在の２相通電）が終了してから通常駆動に移行するようにすれば、初期駆動の途中で、エンコーダカウント値とロータ３２の回転位置と通電相との対応関係を学習してから、通常駆動に速やかに移行することができる。
【００５５】
例えば、図１３のタイムチャートに示すように、初期駆動の２回目の励磁（ＵＷ相通電）中に、ＰレンジからＮｏｔＰレンジへのレンジ切換要求が発生したときには、このＵＷ相通電で初期駆動を終了して通常駆動に移行すると共に、ＵＷ相通電終了時のエンコーダカウント値とロータ３２の回転位置と通電相との対応関係を学習する。本実施形態では、初期駆動の途中で通常駆動に移行する場合でも、その初期駆動を最後まで実行したと仮定して、本来の初期駆動終了時のエンコーダカウント値を推定し、その推定値を初期位置ずれ学習値とするようにしている。例えば、図１３に示すように、初期駆動をＷ相通電とＵＷ相通電の２回の励磁で終了する場合は、その後に予定されていた４回の励磁を行わずに初期駆動を終了するため、未終了の４回の励磁（Ｕ相通電→ＵＶ相通電→Ｖ相通電→ＶＷ相通電）を行ったものと仮定して、４回の励磁分の回転角度に相当するカウントアップ値（２×４＝８）をＵＷ相通電終了時のエンコーダカウント値に加算して初期位置ずれ学習値を求める。
【００５６】
ところで、Ｆ／Ｂ制御中に、例えば、エンコーダ４６のＡ相信号又はＢ相信号が何等かの原因で一時的に欠けたり、エンコーダ４６の信号ラインに重畳したノイズパルスが正規のパルス信号と誤認されたり、脱調が発生したりすると、通電相（エンコーダカウント値）とロータ３２の回転位相との同期が取れなくなって、ロータ３２を正常に駆動できなくなってしまい、それによって、ロータ３２が停止したり、逆回転することがあり、Ｆ／Ｂ制御を正常に続けられない状態になって制御不能に陥ることがある。
【００５７】
そこで、本実施形態では、Ｆ／Ｂ制御中に、Ｆ／Ｂ制御状態（ロータ３２の回転状態）が正常か異常かを監視し、異常が検出されれば、その時点で、Ｆ／Ｂ制御からオープンループ制御に切り換えてリカバリ処理を実行する。図２２に示すリカバリ処理の実行例では、シフトレンジをＰレンジからＮｏｔＰレンジに切り換えるＦ／Ｂ制御の途中で、そのＦ／Ｂ制御状態が異常になって、ロータ３２の異常停止又はエンコーダカウント値Ｎｃｎｔのカウント動作の異常停止が発生したした時点で、Ｆ／Ｂ制御からオープンループ制御に切り換えてリカバリ処理を実行する。
【００５８】
オープンループ制御（リカバリ処理）中は、エンコーダカウント値Ｎｃｎｔの情報をフィードバックせずに通電相を順次切り換えてロータ３２を回転駆動すると共に、当該オープンループ制御中に通電相を切り換える毎にオープンループ制御時の位置カウント値Ｎｃｎｔｏｐをカウントアップ（又はカウントダウン）して、この位置カウント値Ｎｃｎｔｏｐが目標カウント値Ａｃｎｔに到達した時点で、ロータ３２が目標位置に到達したと判断してオープンループ制御（リカバリ処理）を終了し、Ｆ／Ｂ制御に復帰する。その結果、本実施形態では、Ｆ／Ｂ制御中に、エンコーダカウント値Ｎｃｎｔの異常や脱調等が発生してＦ／Ｂ制御状態（ロータ３２の回転状態）が一時的に異常になっても、オープンループ制御によりロータ３２を目標位置まで回転させることができる。
【００５９】
この際、Ｆ／Ｂ制御状態の異常検出方法は、次の３つのＦ／Ｂ制御異常検出方法▲１▼〜▲３▼のいずれか１つ又は２つ、或は全てを用いるようにすれば良い。
【００６０】
［Ｆ／Ｂ制御異常検出方法▲１▼］
図２３に示すように、Ｆ／Ｂ制御中に、Ａ相信号のエッジとＢ相信号のエッジとを別々にカウントし、Ａ相信号のカウント値ＮａとＢ相信号のカウント値Ｎｂとの偏差｜Ｎａ−Ｎｂ｜が異常判定値（例えば３）以上であるか否かでＦ／Ｂ制御状態の異常の有無を監視する。Ｆ／Ｂ制御中にＡ相信号とＢ相信号が正常に出力されていれば、Ａ相信号のカウント値ＮａとＢ相信号のカウント値Ｎｂとの差が０又は１となるため、両信号のカウント値の偏差｜Ｎａ−Ｎｂ｜が２以上になれば、いずれか一方の信号の抜けやノイズパルスの混入が考えられる。このような状態になると、エンコーダカウント値Ｎｃｎｔとロータ３２の回転位置との同期が取れなくなって、ロータ３２の回転状態（Ｆ／Ｂ制御状態）が異常になるため、両信号のカウント値の偏差｜Ｎａ−Ｎｂ｜によってロータ３２の回転状態（Ｆ／Ｂ制御状態）の異常の有無を判定することができる。
【００６１】
［Ｆ／Ｂ制御異常検出方法▲２▼］
図２３に示すように、Ｆ／Ｂ制御中に、Ａ相信号のエッジ間隔ΔＴａとＢ相信号のエッジ間隔ΔＴｂを計測して、各信号のエッジ間隔ΔＴａ，ΔＴｂが異常判定値（例えばΔＴａ，ΔＴｂの平均値の１０倍）以上であるか否かで、Ｆ／Ｂ制御状態の異常の有無を監視する。
【００６２】
尚、異常検出方法▲２▼として、ロータ回転速度を監視することにより、異常検出するようにしても良く、例えば、単位時間当りのエンコーダ４６の出力パルス数に基づいて異常検出するようにしても良い。
【００６３】
［Ｆ／Ｂ制御異常検出方法▲３▼］
図２４に示すように、Ｆ／Ｂ制中に、エンコーダカウント値Ｎｃｎｔの変化方向からロータ３２の回転方向を監視し、該ロータ３２の回転方向が目標位置へ向かう回転方向から逆転したか否かでＦ／Ｂ制御状態（ロータ３２の回転状態）の異常の有無を監視する。本実施形態では、エンコーダカウント値Ｎｃｎｔが目標位置と反対方向に連続して更新される回数をカウントし、そのカウント値Ｃｒが異常判定値（例えば４）以上であるか否かで、Ｆ／Ｂ制御状態（ロータ３２の回転状態）の異常の有無を監視する。つまり、エンコーダカウント値Ｎｃｎｔが目標位置と反対方向に連続して例えば４回以上更新されたときにロータ３２の逆転と判断して、逆転検出フラグＸｒをＯＮに切り換える。
【００６４】
更に、本実施形態では、オープンループ制御中の励磁方式を１−２相励磁方式に設定し、オープンループ制御開始時の最初の励磁を２相通電で行うと共に、図２５に示すように、オープンループ制御開始から例えば３ステップ分は、各通電相の励磁時間を最長時間（例えば５０ｍｓ）に設定して、ロータ３２を確実に掴んでロータ３２の回転位相と通電相とを確実に同期させる。この後は、励磁時間を大幅に短くするが、ロータ３２の回転速度の上昇に伴って励磁時間を徐々に短くして、ロータ３２の回転速度を緩やかに上昇させる。
【００６５】
このオープンループ制御中のロータ３２の回転位置を推定するために、オープンループ制御開始時のロータ３２の初期位置（位置カウント値Ｎｃｎｔｏｐの初期値）を出力軸センサ１４の出力信号に基づいて算出し、その後、ＥＣＵ４１からモータドライバ３７，３８（モータ駆動回路）に駆動信号を出力して通電相を切り換える毎に、位置カウント値Ｎｃｎｔｏｐをカウントアップ（又はカウントダウン）して、この位置カウント値Ｎｃｎｔｏｐに基づいてロータ３２の回転位置を推定し、この位置カウント値Ｎｃｎｔｏｐと目標カウント値Ａｃｎｔ（目標位置）との差が所定値以下になった時点で、減速領域に入ったと判断して、励磁時間を徐々に長くして、ロータ３２の回転速度を緩やかに減速し、該位置カウント値Ｎｃｎｔｏｐが目標カウント値Ａｃｎｔに到達した時点で、ロータ３２が目標位置に到達したと判断して、オープンループ制御を終了し、Ｆ／Ｂ制御に復帰する。
【００６６】
ところで、Ｆ／Ｂ制御系が故障してＦ／Ｂ制御ではＳＲモータ１２を正常に駆動できなくなった場合でも、オープンループ制御に切り換えれば、ＳＲモータ１２を正常に駆動できる可能性がある。例えば、ＳＲモータ１２の２系統の駆動コイル３５，３６（巻線３３，３４）のうちのいずれか一方の系統が断線してＳＲモータ１２の駆動トルクが低下した場合でも、オープンループ制御に切り換えれば、ＳＲモータ１２を正常に駆動できる可能性がある。
【００６７】
そこで、本実施形態では、後述する図３１及び図３２のシステム異常診断ルーチンによってＦ／Ｂ制御系の故障を検出したときに、後述する図３３のフェールセーフ処理ルーチンにより、フェールセーフ処理時のオープンループ制御に切り換えてＳＲモータ１２を駆動するようにしている。このフェールセーフ処理時のオープンループ制御は、前述したリカバリ処理時のオープンループ制御と同じである。
【００６８】
但し、ＳＲモータ１２の２系統の駆動コイル３５，３６（巻線３３，３４）のうちのいずれか一方の系統が断線した場合は、断線していない片方の系統の駆動コイル３５，３６のみを使用してオープンループ制御を実行する。この場合、駆動コイル３５，３６の断線検出は、各相の断線検出回路６０の抵抗６１，６２の中間接続点が接続されたＥＣＵ４１の各入力ポートの電圧レベル（断線検出信号）を読み込んで、後述する図４２の駆動コイル断線検出ルーチンによって実行される。
【００６９】
以上説明した本実施形態のレンジ切換制御は、レンジ切換制御装置４２のＥＣＵ４１のＣＰＵ４１ａによって後述する各ルーチンに従って実行される。以下、これら各ルーチンの処理内容を説明する。
【００７０】
［初期駆動］
図８及び図９に示す初期駆動ルーチンに従って実行される。本ルーチンは、ＥＣＵ４１への電源投入直後（イグニッションスイッチをＯＦＦ位置からＡＣＣ位置へ操作した直後）に、初期駆動が終了するまで所定周期（例えば１ｍｓ周期）で実行される。
【００７１】
本ルーチンが起動されると、まずステップ１０１で、フェールセーフ処理実行フラグＸｆｓｏｐ＝ＯＮ、又は、リカバリ処理実行フラグＸｒｃｖ＝ＯＮであるか否かを判定する。ここで、フェールセーフ処理実行フラグＸｆｓｏｐは、エンコーダ４６又はＳＲモータ１２が故障したときに実行されるフェールセーフ処理（オープンループ制御によるレンジ切り換え）が実行されているか否かを判定するフラグであり、ＯＮは実行されていることを意味する。また、リカバリ処理実行フラグＸｒｃｖは、一時的なＦ／Ｂ制御状態の異常が発生したときに一時的に実行されるリカバリ処理（オープンループ制御）が実行されているか否かを判定するフラグであり、ＯＮは実行されていることを意味する。
【００７２】
もし、上記ステップ１０１で、「Ｙｅｓ」と判定されれば、以降の処理を行うことなく、本ルーチンを終了し、「Ｎｏ」と判定されれば、ステップ１０２に進み、ＥＣＵ４１のイニシャル処理から出力軸センサ１４の出力電圧が安定するまで待つための所定時間（例えば１００ｍｓ）が経過したか否かを判定する。そして、イニシャル処理から所定時間経過した時点で、ステップ１０３に進み、出力軸センサ１４の出力電圧を読み込んで、この出力電圧がレンジ判定値以下であるか否かで、現在のレンジがＰレンジかＮｏｔＰレンジかを判定し、Ｐレンジであれば、ステップ１０４に進み、レンジ判定フラグＸｎｐをＰレンジを意味する「０」にセットし、ＮｏｔＰレンジであれば、ステップ１０５に進み、レンジ判定フラグＸｎｐをＮｏｔＰレンジを意味する「１」にセットする。
【００７３】
この後、ステップ１０６に進み、レンジ判定フラグＸｎｐ＝０（Ｐレンジ）であるか否かを判定し、レンジ判定フラグＸｎｐ＝０（Ｐレンジ）であれば、ステップ１０７に進み、図１０のＰレンジ初期駆動ルーチンを実行し、レンジ判定フラグＸｎｐ＝１（ＮｏｔＰレンジ）であれば、ステップ１０８に進み、図１１のＮｏｔＰレンジ初期駆動ルーチンを実行する。
【００７４】
上記ステップ１０７で、図１０のＰレンジ初期駆動ルーチンが起動されると、ステップ２０１〜２０６で、初期駆動中の励磁回数をカウントする励磁回数カウンタＣＡＳＥが０〜５のいずれであるかを判定する。この励磁回数カウンタＣＡＳＥは、イニシャル処理でセットされる初期値が０で、励磁を１回行う毎に１ずつカウントアップされる（図９のステップ１１４）。そして、励磁回数カウンタＣＡＳＥの判定結果に応じて通電相と通電時間Ｔを次のように設定する。
【００７５】
ＣＡＳＥ＝０（１回目の励磁）の場合は、ステップ２０７に進み、Ｗ相通電を選択し、その通電時間ＴをＴ１（例えば１０ｍｓ）にセットする。
ＣＡＳＥ＝１（２回目の励磁）の場合は、ステップ２０８に進み、ＵＷ相通電を選択し、その通電時間ＴをＴ２（例えば１００ｍｓ）にセットする。
【００７６】
ＣＡＳＥ＝２（３回目の励磁）の場合は、ステップ２０９に進み、Ｕ相通電を選択し、その通電時間ＴをＴ１（例えば１０ｍｓ）にセットする。
ＣＡＳＥ＝３（４回目の励磁）の場合は、ステップ２１０に進み、ＵＶ相通電を選択し、その通電時間ＴをＴ２（例えば１００ｍｓ）にセットする。
【００７７】
ＣＡＳＥ＝４（５回目の励磁）の場合は、ステップ２１１に進み、Ｖ相通電を選択し、その通電時間ＴをＴ１（例えば１０ｍｓ）にセットする。
ＣＡＳＥ＝５（６回目の励磁）の場合は、ステップ２１２に進み、ＶＷ相通電を選択し、その通電時間ＴをＴ２（例えば１００ｍｓ）にセットする。
【００７８】
これにより、Ｐレンジで初期駆動を行う場合は、Ｗ相通電→ＵＷ相通電→Ｕ相通電→ＵＶ相通電→Ｖ相通電→ＶＷ相通電の順序で通電相の切り換えを一巡し、ロータ３２を正回転方向（Ｐレンジ→ＮｏｔＰレンジの回転方向）に駆動する。この際、１相通電の時間Ｔ１を２相通電の時間Ｔ２よりも短く設定する。
【００７９】
一方、ステップ１０８で、図１１のＮｏｔＰレンジ初期駆動ルーチンが起動されると、ステップ２２１〜２２６で、励磁回数カウンタＣＡＳＥが０〜５のいずれであるかを判定し、その判定結果に応じて通電相と通電時間Ｔを次のように設定する。
【００８０】
ＣＡＳＥ＝０（１回目の励磁）の場合は、ステップ２２７に進み、Ｖ相通電を選択し、その通電時間ＴをＴ１（例えば１０ｍｓ）にセットする。
ＣＡＳＥ＝１（２回目の励磁）の場合は、ステップ２２８に進み、ＵＶ相通電を選択し、その通電時間ＴをＴ２（例えば１００ｍｓ）にセットする。
【００８１】
ＣＡＳＥ＝２（３回目の励磁）の場合は、ステップ２２９に進み、Ｕ相通電を選択し、その通電時間ＴをＴ１（例えば１０ｍｓ）にセットする。
ＣＡＳＥ＝３（４回目の励磁）の場合は、ステップ２３０に進み、ＵＷ相通電を選択し、その通電時間ＴをＴ２（例えば１００ｍｓ）にセットする。
【００８２】
ＣＡＳＥ＝４（５回目の励磁）の場合は、ステップ２３１に進み、Ｗ相通電を選択し、その通電時間ＴをＴ１（例えば１０ｍｓ）にセットする。
ＣＡＳＥ＝５（６回目の励磁）の場合は、ステップ２３２に進み、ＶＷ相通電を選択し、その通電時間ＴをＴ２（例えば１００ｍｓ）にセットする。
【００８３】
これにより、ＮｏｔＰレンジで初期駆動を行う場合は、Ｖ相通電→ＵＶ相通電→Ｕ相通電→ＵＷ相通電→Ｗ相通電→ＶＷ相通電の順序で通電相の切り換えを一巡し、ロータ３２を逆回転方向（ＮｏｔＰレンジ→Ｐレンジの回転方向）に駆動する。この場合も、１相通電の時間Ｔ１を２相通電の時間Ｔ２よりも短く設定する。
【００８４】
以上のようにして、図１０のＰレンジ初期駆動ルーチン又は図１１のＮｏｔＰレンジ初期駆動ルーチンを実行した後、図８のステップ１０９に進み、初期駆動中にレンジ切換操作（Ｐレンジスイッチ４３又はＮｏｔＰレンジスイッチ４４の操作）が行われたか否かを判定し、初期駆動中にレンジ切換操作が行われれば、ステップ１１０に進み、レンジ切換操作フラグＸｃｈｇをＯＮにセットし、レンジ切換操作が行われていなければ、ステップ１１１に進み、レンジ切換操作フラグＸｃｈｇをＯＦＦにセットする。
【００８５】
この後、図９のステップ１１２に進み、現在の通電相の通電時間をカウントする通電時間カウンタＣＴをカウントアップし、次のステップ１１３で、現在の通電相の通電時間ＣＴが前記図１０又は図１１のルーチンで設定した通電時間Ｔ（＝Ｔ１又はＴ２）を越えたか否かを判定し、越えていなければ、以降の処理を行うことなく、本ルーチンを終了する。これにより、現在の通電相の通電時間ＣＴが図１０又は図１１のルーチンで設定した通電時間Ｔ（＝Ｔ１又はＴ２）を越えるまで、現在の通電相への通電が継続される。
【００８６】
その後、現在の通電相の通電時間ＣＴが図１０又は図１１のルーチンで設定した通電時間Ｔ（＝Ｔ１又はＴ２）を越えた時点で、ステップ１１４に進み、励磁回数カウンタＣＡＳＥを１だけカウントアップし、通電相を次の通電相に切り換える。そして、次のステップ１１５で、通電時間カウンタＣＴをリセットした後、ステップ１１６に進み、励磁回数カウンタＣＡＳＥが初期駆動の終了を意味する「６」に達したか否かを判定し、もし、励磁回数カウンタＣＡＳＥが「６」に達していれば、ステップ１１８に進み、初期駆動終了フラグＸｅｎｄを初期駆動の終了を意味する「ＯＮ」にセットする。
【００８７】
また、励磁回数カウンタＣＡＳＥが「６」に達していない場合、つまり、初期駆動の途中である場合は、ステップ１１７に進み、初期駆動の途中終了条件が成立しているか否かを判定する。この初期駆動の途中終了条件は、次の３つの条件▲１▼〜▲３▼によって判定される。
▲１▼レンジ判定フラグＸｎｐが０（Ｐレンジ）であること
▲２▼励磁回数カウンタＣＡＳＥが２又は４、つまり２相通電終了時であること
▲３▼レンジ切換操作フラグＸｃｈｇがＯＮ、つまり初期駆動中にレンジ切換操作が行われたこと
【００８８】
これら３つの条件▲１▼〜▲３▼のうち、１つでも満たさない条件があれば、初期駆動の途中終了条件が成立せず、初期駆動を継続する。これに対し、３つの条件▲１▼〜▲３▼を全て満たしていれば、初期駆動の途中終了条件が成立して、ステップ１１８に進み、初期駆動終了フラグＸｅｎｄを初期駆動の終了を意味する「ＯＮ」にセットする。
【００８９】
この後、ステップ１１９に進み、レンジ判定フラグＸｎｐ＝１であるか否か（ＮｏｔＰレンジで初期駆動を行ったか否か）を判定し、レンジ判定フラグＸｎｐ＝１であれば、ステップ１２０に進み、初期駆動終了時のエンコーダカウント値Ｎｃｎｔを初期位置ずれ学習値Ｇｃｎｔとして記憶する。そして、次のステップ１２１で、エンコーダカウント値Ｎｃｎｔを次式によりＮｏｔＰレンジを基準にした値に補正する。
Ｎｃｎｔ＝Ｎｃｎｔ＋２８８
【００９０】
本実施形態では、Ｐレンジの保持位置を０点位置としてエンコーダカウント値Ｎｃｎｔをカウントアップし、ＮｏｔＰレンジの保持位置までロータ３２が回転したときに、エンコーダカウント値Ｎｃｎｔが例えば２８８となるようになっている。従って、ＮｏｔＰレンジで初期駆動を行った場合は、初期駆動終了時のエンコーダカウント値Ｎｃｎｔに２８８を加算することで、エンコーダカウント値ＮｃｎｔをＮｏｔＰレンジを基準にした値に補正する。
【００９１】
一方、上記ステップ１１９で、レンジ判定フラグＸｎｐ＝０（Ｐレンジで初期駆動）と判定されれば、ステップ１２２に進み、初期駆動終了時のエンコーダカウント値Ｎｃｎｔを用いて初期位置ずれ学習値Ｇｃｎｔを次式により算出する。
Ｇｃｎｔ＝Ｎｃｎｔ＋２×（６−ＣＡＳＥ）
【００９２】
この場合、初期駆動が最後まで行われれば、ステップ１１４の処理によりＣＡＳＥ＝６となるため、初期駆動終了時のエンコーダカウント値Ｎｃｎｔがそのまま初期位置ずれ学習値Ｇｃｎｔとなるが、Ｐレンジで初期駆動を行う場合は、初期駆動の途中でレンジ切換操作が行われたときに、次の２相通電（２相通電の実行中にレンジ切換要求が発生したときはその２相通電）が終了してから通常駆動に移行するため、その初期駆動を最後まで実行したと仮定して、本来の初期駆動終了時のエンコーダカウント値Ｎｃｎｔを推定し、その推定値を初期位置ずれ学習値Ｇｃｎｔとするようにしている。２×（６−ＣＡＳＥ）は、未終了の励磁回数分の回転角度に相当するカウントアップ値（以下「Ｎｃｎｔ補正量」という）である。
【００９３】
図１４は、初期駆動時の励磁回数カウンタＣＡＳＥ、Ｎｃｎｔ補正量、通電相、Ａ相信号、Ｂ相信号、エンコーダカウント値Ｎｃｎｔの関係を説明するタイムチャートである。例えば、初期駆動中に、ＵＷ相通電終了時（励磁回数カウンタＣＡＳＥが１から２になったとき）に初期駆動を終了する場合は、Ｎｃｎｔ補正量＝２×（６−ＣＡＳＥ）＝２×（６−２）＝８となり、ＵＶ相通電終了時（励磁回数カウンタＣＡＳＥが３から４になったとき）に初期駆動を終了する場合は、Ｎｃｎｔ補正量＝２×（６−ＣＡＳＥ）＝２×（６−４）＝４となる。
【００９４】
［エンコーダカウンタ］
次に、図１５に示すエンコーダカウンタルーチンの処理内容を説明する。本ルーチンは、ＡＢ相割り込み処理によりＡ相信号とＢ相信号の立ち上がり／立ち下がりの両方のエッジに同期して起動され、Ａ相信号とＢ相信号の立ち上がり／立ち下がりの両方のエッジを次のようにしてカウントする。本ルーチンが起動されると、まずステップ３０１で、Ａ相信号とＢ相信号の値Ａ（ｉ）　、Ｂ（ｉ）　を読み込み、次のステップ３０２で、図１６のカウントアップ値ΔＮ算出マップを検索して、Ａ相信号とＢ相信号の今回値Ａ（ｉ）　、Ｂ（ｉ）　と、前回値Ａ（ｉ−１）　、Ｂ（ｉ−１）　に応じたカウントアップ値ΔＮを算出する。
【００９５】
ここで、Ａ相信号とＢ相信号の今回値Ａ（ｉ）　、Ｂ（ｉ）　と、前回値Ａ（ｉ−１）　、Ｂ（ｉ−１）　を用いる理由は、Ａ相信号とＢ相信号の発生順序によってロータ３２の回転方向を判定するためであり、図１７に示すように、正回転（Ｐレンジ→ＮｏｔＰレンジの回転方向）ではカウントアップ値ΔＮをプラス値にしてエンコーダカウント値Ｎｃｎｔをカウントアップし、逆回転（ＮｏｔＰレンジ→Ｐレンジの回転方向）ではカウントアップ値ΔＮをマイナス値にしてエンコーダカウント値Ｎｃｎｔをカウントダウンする。
【００９６】
カウントアップ値ΔＮの算出後、ステップ３０３に進み、前回のエンコーダカウント値Ｎｃｎｔに上記ステップ３０２で算出したカウントアップ値ΔＮを加算して、今回のエンコーダカウント値Ｎｃｎｔを求める。この後、ステップ３０４に進み、次回のカウント処理のために、Ａ相信号とＢ相信号の今回値Ａ（ｉ）　、Ｂ（ｉ）　をそれぞれＡ（ｉ−１）　、Ｂ（ｉ−１）　として記憶して本ルーチンを終了する。
【００９７】
［モータＦ／Ｂ制御］
次に、図１８に示すモータＦ／Ｂ制御ルーチンの処理内容を説明する。本ルーチンは、ＡＢ相割り込み処理により実行されて特許請求の範囲でいうフィードバック制御手段としての役割を果たし、初期駆動終了後にモータＦ／Ｂ制御実行条件が成立しているときに、ロータ３２の回転位置（エンコーダカウント値Ｎｃｎｔ）が目標位置Ａｃｎｔから例えば０．５°以内に到達するまで、エンコーダカウント値Ｎｃｎｔと初期位置ずれ学習値Ｇｃｎｔとに基づいて通電相を切り換えてロータ３２を目標位置Ａｃｎｔの方向へ回転させる。ここで、モータＦ／Ｂ制御実行条件は、例えば次の▲１▼〜▲４▼の条件を全て満たしているときに成立する。
【００９８】
▲１▼初期駆動終了後であること（初期駆動終了フラグＸｅｎｄ＝ＯＮ）
▲２▼フェールセーフ処理が行われていないこと（フェールセーフ処理実行フラグＸｆｓｏｐ＝ＯＦＦ）
▲３▼リカバリ処理が行われていないこと（リカバリ処理実行フラグＸｒｃｖ＝ＯＦＦ）
▲４▼初期駆動終了から所定の停止保持時間（例えば１０ｍｓ）が経過していること、又は、モータ通電開始から所定の停止保持時間（例えば１０ｍｓ）が経過していること
【００９９】
尚、▲４▼の停止保持時間は、Ｆ／Ｂ制御開始時のロータ３２の位置を確定するために設けられている。
上記▲１▼〜▲４▼の条件を全て満たしているときにモータＦ／Ｂ制御実行条件が成立し、Ｆ／Ｂ許可フラグＸｆｂがＯＮにセットされる。
【０１００】
図１８のモータＦ／Ｂ制御ルーチンが起動されると、まずステップ３１１で、Ｆ／Ｂ許可フラグＸｆｂがＯＮにセットされているか否か（モータＦ／Ｂ制御実行条件が成立しているか否か）を判定し、Ｆ／Ｂ許可フラグＸｆｂがＯＦＦ（Ｆ／Ｂ制御実行条件が不成立）であれば、以降の処理を行うことなく、本ルーチンを終了する。
【０１０１】
これに対し、Ｆ／Ｂ許可フラグＸｆｂがＯＮにセットされていれば、ステップ３１２に進み、後述する図１９の通電相設定ルーチンを実行して、現在のエンコーダカウント値Ｎｃｎｔと初期位置ずれ学習値Ｇｃｎｔとに基づいて通電相を設定し、次のステップ３１３で、通電処理ルーチン（図示せず）を実行して、上記ステップ３１２で設定した通電相に通電する。
【０１０２】
一方、上記ステップ３１２で、図１９の通電相設定ルーチンが起動されると、ステップ３２１で、回転方向指示値Ｄが正回転（Ｐレンジ→ＮｏｔＰレンジの回転方向）を意味する「１」であるか否かを判定する。この回転方向指示値Ｄは、現在のエンコーダカウント値Ｎｃｎｔと目標値Ａｃｎｔとの大小関係によって設定される。
【０１０３】
この回転方向指示値Ｄ＝１（正回転）であれば、ステップ３２２に進み、回転方向が回転方向指示に反して逆転したか否か（エンコーダカウント値Ｎｃｎｔが減少したか否か）を判定し、逆転していなければ、ステップ３２３に進み、現在のエンコーダカウント値Ｎｃｎｔ、初期位置ずれ学習値Ｇｃｎｔ、正回転方向位相進み量Ｋ１、速度補正量Ｋｓを用いて通電相判定値Ｍｐｔｎを次式により更新する。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ＋Ｋ１＋Ｋｓ
【０１０４】
ここで、正回転方向位相進み量Ｋ１は、ロータ３２を正回転させるのに必要な通電相の位相進み量（ロータ３２の現在位置に対する通電相の位相進み量）であり、例えばＫ１＝４に設定されている。
【０１０５】
また、速度補正量Ｋｓは、ロータ３２の回転速度に応じて設定される位相進み補正量である。低速域では、速度補正量Ｋｓが０に設定され、高速になるに従って、速度補正量Ｋｓが例えば１又は２に増加される。これにより、ロータ３２の回転速度に適した通電相となるように通電相判定値Ｍｐｔｎが補正される。
【０１０６】
一方、上記ステップ３２２で、回転方向が回転方向指示に反して逆転したと判定された場合は、逆転防止のために通電相判定値Ｍｐｔｎを更新しない。この場合は、逆転直前の通電相（前回の通電相）に通電され、ロータ３２の逆転を抑制する方向に制動トルクが発生する。
【０１０７】
また、上記ステップ３２１で、回転方向指示値Ｄ＝０（逆回転）、つまりＮｏｔＰレンジ→Ｐレンジの回転方向と判定された場合は、ステップ３２４に進み、回転方向が回転方向指示に反して逆転したか否か（エンコーダカウント値Ｎｃｎｔが増加したか否か）を判定し、逆転していなければ、ステップ３２５に進み、現在のエンコーダカウント値Ｎｃｎｔ、初期位置ずれ学習値Ｇｃｎｔ、逆回転方向位相進み量Ｋ２、速度補正量Ｋｓを用いて通電相判定値Ｍｐｔｎを次式により更新する。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ−Ｋ２−Ｋｓ
【０１０８】
ここで、逆回転方向位相進み量Ｋ２は、ロータ３２を逆回転させるのに必要な通電相の位相進み量（ロータ３２の現在位置に対する通電相の位相進み量）であり、例えばＫ２＝３に設定されている。速度補正量Ｋｓは正回転の場合と同じである。
【０１０９】
一方、上記ステップ３２４で、回転方向が回転方向指示に反して逆転したと判定された場合は、逆転防止のために通電相判定値Ｍｐｔｎを更新しない。この場合は、逆転直前の通電相（前回の通電相）に通電され、ロータ３２の逆転を抑制する方向に制動トルクが発生する。
【０１１０】
以上のようにして、今回の通電相判定値Ｍｐｔｎを決定した後、ステップ３２６に進み、通電相判定値Ｍｐｔｎを“１２”で割り算して、その余りＭｐｔｎ％１２を求める。ここで、“１２”は、通電相を一巡させる間のエンコーダカウント値Ｎｃｎｔの増減量に相当する。
【０１１１】
Ｍｐｔｎ％１２の算出後、ステップ３２７に進み、図２０の変換テーブルを検索して、Ｍｐｔｎ％１２に対応する通電相を選択し、これを今回の通電相に設定する。
【０１１２】
図２１はＵ相から回転を開始する場合に最初に通電する相を説明するタイムチャートである。この場合、速度補正量Ｋｓ＝０となるため、正回転（Ｐレンジ→ＮｏｔＰレンジ方向への回転）を開始する場合は、通電相判定値Ｍｐｔｎは次式により算出される。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ＋Ｋ１＝Ｎｃｎｔ−Ｇｃｎｔ＋４
Ｕ相から正回転を開始する場合は、（Ｎｃｎｔ−Ｇｃｎｔ）／１２の余りは、６となるため、Ｍｐｔｎ％１２＝６＋４＝１０となり、最初の通電相はＶ相となる。
【０１１３】
一方、Ｕ相から逆回転（ＮｏｔＰレンジ→Ｐレンジ方向への回転）を開始する場合は、通電相判定値Ｍｐｔｎは次式により算出される。
Ｍｐｔｎ＝Ｎｃｎｔ−Ｇｃｎｔ−Ｋ２＝Ｎｃｎｔ−Ｇｃｎｔ−３
Ｕ相から逆回転を開始する場合は、Ｍｐｔｎ％１２＝６−３＝３となり、最初の通電相はＷ相となる。
【０１１４】
このように、正回転方向位相進み量Ｋ１と逆回転方向位相進み量Ｋ２をそれぞれ４と３に設定することで、正回転方向と逆回転方向の通電相の切換パターンを対称にすることができ、正回転方向と逆回転方向のいずれの場合も、ロータ３２の現在位置から２ステップ分ずらした位置の相を最初に励磁して回転を開始することができる。
【０１１５】
［リカバリ処理］
図２６に示すリカバリ処理ルーチンは、所定周期（例えば１ｍｓ周期）で起動され、Ｆ／Ｂ制御状態が異常になったときにリカバリ処理を次のようにして実行する。本ルーチンが起動されると、まずステップ８０１で、リカバリ処理実行フラグＸｒｃｖがＯＦＦであるか否かを判定し、Ｘｒｃｖ＝ＯＦＦ（リカバリ処理実行中でない）の場合は、ステップ８０２に進み、次の▲１▼〜▲４▼のリカバリ処理実行条件が成立しているか否かを判定する。
【０１１６】
▲１▼エンコーダ４６のＡ相信号、Ｂ相信号、出力軸センサ１４の出力信号が全て正常であること
▲２▼後述する図３１のシステム異常診断ルーチンでセットされる各異常検出フラグＸｆｎｓｗ、Ｘｆｃｎｔ、Ｘｆｒｃｖが全てＯＦＦ（異常なし）であること
▲３▼Ｆ／Ｂ許可フラグＸｆｂがＯＮ（Ｆ／Ｂ制御中）であること
▲４▼後述する図２８のＦ／Ｂ制御中ＡＢ相信号異常検出ルーチンでセットされるＡ相信号、Ｂ相信号に関する３つの異常検出フラグＸｆａｂ、Ｘｆｔａ、ＸｆｔｂのいずれかがＯＮ（異常あり）であること、又は、後述する図３０の逆転判定ルーチンでセットされる逆転検出フラグＸｒがＯＮ（逆転あり）であること
【０１１７】
これら４つの条件▲１▼〜▲４▼のうち、１つでも満たさない条件があれば、リカバリ処理実行条件が不成立となり、以降の処理を行うことなく、本ルーチンを終了する。
【０１１８】
これに対し、上記▲１▼〜▲４▼の条件を全て満たせば、リカバリ処理実行条件が成立し、ステップ８０２からステップ８０３に進み、リカバリ処理実行フラグＸｒｃｖをＯＮにセットし、次のステップ８０４で、図２７に示す関係に基づいて、現在の出力軸センサ１４の出力信号Ｖｎｓｗを用いて現在の位置カウント値Ｎｃｎｔｏｐを次式により算出する。
Ｎｃｎｔｏｐ＝ＩＮＴ［｛（Ｖｎｓｗ−Ｖｐ）／ΔＶ
×Ｋｏｐ×６１／３．７５−Ｋｏｆｐ｝×１／２］×２
ΔＶ＝Ｖｎｐ−Ｖｐ
【０１１９】
ここで、ＩＮＴは［　］内の数値を整数化する関数であり、Ｖｐは出力軸センサ１４のＰレンジ出力学習値、Ｖｎｐは出力軸センサ１４のＮｏｔＰレンジ出力学習値、Ｋｏｐはディテントレバー１５の最大回転角、ＫｏｆｐはＰレンジ側のオフセット値である。上式は、位置カウント値Ｎｃｎｔｏｐを２の倍数とするように設定されている。
【０１２０】
ディテントレバー１５の最大回転角Ｋｏｐは、ディテントレバー１５のＰレンジ保持凹部２４の側壁からＮｏｔＰレンジ保持凹部２５の側壁までのディテントレバー１５の回転角であり、ディテントレバー１５の可動範囲の設計値ΔＮｄとＰレンジ側の遊び量ΔＧｐとを加算して求められる。本実施形態では、ΔＮｄ＝２０．５（ｄｅｇ）、ΔＧｐ＝３（ｄｅｇ）となっている。
2004056857.tif 000003
【０１２１】
上記位置カウント値Ｎｃｎｔｏｐの算出式において、Ｋｏｐ×６１／３．７５はディテントレバー１５の最大回転角Ｋｏｐをモータ駆動ステップ数（励磁回数）に換算した値である。「６１」は減速機構２６の減速比であり、「３．７５」は１ステップ（励磁１回当たり）のロータ３２の回転角である。この位置カウント値Ｎｃｎｔｏｐは、オープンループ制御開始時の位置カウント値Ｎｃｎｔｏｐの初期値として用いられる。
【０１２２】
位置カウント値Ｎｃｎｔｏｐの算出後、ステップ８０５に進み、リカバリ処理の実行回数をカウントするリカバリ処理実行回数カウンタＣｒｃｖをカウントアップし、次のステップ８０６で、オープンループ制御実行フラグＸｏｐｅｎをＯＮにセットして、後述する図３５のオープンループ制御ルーチンによりオープンループ制御を実行する。
【０１２３】
リカバリ処理（オープンループ制御）の実行中は、本ルーチンが起動される毎に、ステップ８０１で「Ｎｏ」と判定されて、ステップ８０７に進み、オープンループ制御完了フラグＸｏｐｃｍｐがオープンループ制御完了を意味するＯＮにセットされているか否かを判定し、Ｘｏｐｃｍｐ＝ＯＦＦであれば、そのまま本ルーチンを終了し、オープンループ制御を継続する。
【０１２４】
その後、オープンループ制御が完了した時点で、ステップ８０８に進み、初期駆動を再実行するために、初期駆動終了フラグＸｅｎｄ＝ＯＦＦ（初期駆動未終了）、レンジ切換操作フラグＸｃｈｇ＝ＯＦＦ（レンジ切換操作なし）、通電時間カウンタＣＴ＝０、励磁回数カウンタＣＡＳＥ＝０、エンコーダカウント値Ｎｃｎｔ＝０、初期位置ずれ学習値Ｇｃｎｔ＝０にセットする。そして、次のステップ８１１で、オープンループ制御実行フラグＸｏｐｅｎ＝ＯＦＦにセットしてオープンループ制御（リカバリ処理）を終了した後、ステップ８１２に進み、リカバリ処理実行フラグＸｒｃｖ＝ＯＦＦ、Ａ相信号、Ｂ相信号の異常検出フラグＸｆａｂ＝ＯＦＦ、Ｘｆｔａ＝ＯＦＦ、Ｘｆｔｂ＝ＯＦＦ、後述する第３の異常検出フラグＸｆｒｃｖ＝ＯＦＦにセットする。
【０１２５】
［Ｆ／Ｂ制御中ＡＢ相信号異常検出］
図２８に示すＦ／Ｂ制御中ＡＢ相信号異常検出ルーチンは、所定周期（例えば１ｍｓ周期）で起動され、Ｆ／Ｂ制御中にエンコーダ４６のＡ相信号とＢ相信号の異常の有無を次のようにして判定する。本ルーチンが起動されると、まずステップ８２１で、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＮ（Ｆ／Ｂ制御中）であるか否かを判定し、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦであれば、ステップ８２２に進み、Ａ相信号カウンタＮａ＝０、Ｂ相信号カウンタＮｂ＝０、Ａ相信号エッジ間隔カウンタΔＴａ＝０、Ｂ相信号エッジ間隔カウンタΔＴｂ＝０にリセットして本ルーチンを終了する。
【０１２６】
これに対して、ステップ８２１でＦ／Ｂ許可フラグＸｆｂ＝ＯＮ（Ｆ／Ｂ制御中）と判定された場合は、ＡＢ相信号異常判定実行条件が成立して、ステップ８２３に進み、Ａ相信号カウント値ＮａとＢ相信号カウント値Ｎｂとの偏差ΔＮａｂを算出する。
ΔＮａｂ＝｜Ｎａ−Ｎｂ｜
ここで、Ａ相信号カウント値ＮａとＢ相信号カウント値Ｎｂは、Ａ相信号のエッジとＢ相信号のエッジを別々にカウントした値である。
【０１２７】
そして、次のステップ８２４で、ＡＢ相信号カウント値偏差ΔＮａｂを異常判定値Ｋａｂ（例えば３）と比較し、もし、ＡＢ相信号カウント値偏差ΔＮａｂが異常判定値Ｋａｂ以上であれば、Ａ相信号カウント値ＮａとＢ相信号カウント値Ｎｂのいずれかが異常であると判断して、ステップ８２５に進み、ＡＢ相信号異常検出フラグＸｆａｂをＯＮ（異常あり）にセットして、次のステップ８２６に進む。
【０１２８】
一方、ＡＢ相信号カウント値偏差ΔＮａｂが異常判定値Ｋａｂ未満の場合は、ＡＢ相信号異常検出フラグＸｆａｂをＯＦＦ（異常なし）に維持してステップ８２６に進む。
【０１２９】
Ｆ／Ｂ制御中にＡ相信号とＢ相信号が正常に出力されていれば、Ａ相信号カウント値ＮａとＢ相信号カウント値Ｎｂとの偏差ΔＮａｂが０又は１となるため、このＡＢ相信号カウント値偏差ΔＮａｂが２以上になれば、いずれか一方の信号の抜けやノイズパルスの混入が考えられる（図２３参照）。従って、ＡＢ相信号カウント値偏差ΔＮａｂが異常判定値Ｋａｂ以上であるか否かで、Ａ相信号とＢ相信号の異常の有無を判定することができる。本実施形態では、異常判定値Ｋａｂを余裕を見て３に設定したが、２又は４以上の値に設定しても良い。
【０１３０】
以上のようにして、ＡＢ相信号カウント値偏差ΔＮａｂによる異常判定処理を行った後、ステップ８２６に進み、Ａ相信号のエッジ間隔ΔＴａとＢ相信号のエッジ間隔ΔＴｂをカウントするカウンタをそれぞれカウントアップした後、ステップ８２７に進み、Ａ相信号エッジ間隔ΔＴａを異常判定値Ｋｔａ（例えばΔＴａの平均値の１０倍の値）と比較し、もし、Ａ相信号エッジ間隔ΔＴａが異常判定値Ｋｔａ以上であれば、Ａ相信号が異常であると判断して、ステップ８２８に進み、Ａ相信号異常検出フラグＸｆｔａをＯＮ（異常あり）にセットして、次のステップ８２９に進む。
【０１３１】
一方、Ａ相信号エッジ間隔ΔＴａが異常判定値Ｋｔａ未満の場合は、Ａ相信号異常検出フラグＸｆｔａをＯＦＦ（異常なし）に維持してステップ８２９に進む。そして、このステップ８２９で、Ｂ相信号エッジ間隔ΔＴｂを異常判定値Ｋｔｂ（例えばΔＴｂの平均値の１０倍の値）と比較し、もし、Ｂ相信号エッジ間隔ΔＴｂが異常判定値Ｋｔｂ以上であれば、Ｂ相信号が異常であると判断して、ステップ８３０に進み、Ｂ相信号異常検出フラグＸｆｔｂをＯＮ（異常あり）にセットして本ルーチンを終了する。
【０１３２】
一方、Ｂ相信号エッジ間隔ΔＴｂが異常判定値Ｋｔｂ未満の場合は、Ｂ相信号異常検出フラグＸｆｔｂをＯＦＦ（異常なし）に維持して、本ルーチンを終了する。
【０１３３】
各信号のエッジ間隔ΔＴａ，ΔＴｂは、ロータ回転速度に応じて変化するため、Ｆ／Ｂ制御中に、各信号のエッジ間隔ΔＴａ，ΔＴｂが長くなり過ぎる場合は、ロータ３２の異常停止、異常速度低下、パルス抜けが考えられるため（図２３参照）、各信号のエッジ間隔ΔＴａ，ΔＴｂが異常判定値Ｋｔａ，Ｋｔａ（例えばΔＴａ，ΔＴｂの平均値の１０倍）以上であるか否かで、Ａ相信号とＢ相信号の異常の有無を判定することができる。
【０１３４】
尚、各信号のエッジ間隔ΔＴａ，ΔＴｂが短くなり過ぎる場合は、ノイズパルスが正規のパルス信号と誤認されている可能性があるため、各信号のエッジ間隔ΔＴａ，ΔＴｂが所定の異常判定値以下であるか否かで、Ａ相信号とＢ相信号の異常の有無を判定するようにしても良い。
【０１３５】
また、ＡＢ相信号カウント値偏差ΔＮａｂによる異常判定処理（ステップ８２３〜８２５）と各信号のエッジ間隔ΔＴａ，ΔＴｂによる異常判定処理（ステップ８２６〜８３０）のいずれか一方の処理のみを行い、他方の処理を省略するようにしても良い。
【０１３６】
［逆転カウンタ］
図２９に示す逆転カウンタルーチンは、ＡＢ相割り込み処理により実行され、ロータ３２の回転方向が回転方向指示に反して連続して逆転した回数を次のようにしてカウントする。本ルーチンが起動されると、まずステップ８３１で、回転方向指示値Ｄが１（Ｐレンジ→ＮｏｔＰレンジの回転方向）、０（停止）、−１（ＮｏｔＰレンジ→Ｐレンジの回転方向）のいずれに該当するかを判定し、回転方向指示値Ｄが０（停止）であれば、以降の処理を行うことなく、本ルーチンを終了する。
【０１３７】
一方、回転方向指示値Ｄが１（Ｐレンジ→ＮｏｔＰレンジの回転方向）であれば、ステップ８３２に進み、前回のエンコーダカウント値Ｎｃｎｔ（ｉ−１）　と今回のエンコーダカウント値Ｎｃｎｔ（ｉ）　との差が１以上であるか否かで、ロータ３２の回転方向が回転方向指示に反して逆転したか否か（エンコーダカウント値Ｎｃｎｔが減少したか否か）を判定し、逆転していれば、ステップ８３４に進み、逆転回数をカウントする逆転カウンタＣｒをカウントアップし、逆転していなければ、ステップ８３５に進み、逆転カウンタＣｒを０にリセットする。
【０１３８】
また、回転方向指示値Ｄが−１（ＮｏｔＰレンジ→Ｐレンジの回転方向）であれば、ステップ８３３に進み、前回のエンコーダカウント値Ｎｃｎｔ（ｉ−１）　と今回のエンコーダカウント値Ｎｃｎｔ（ｉ）　との差が−１以下であるか否かで、ロータ３２の回転方向が回転方向指示に反して逆転したか否か（エンコーダカウント値Ｎｃｎｔが増加したか否か）を判定し、逆転していれば、ステップ８３６に進み、逆転カウンタＣｒをカウントアップし、逆転していなければ、ステップ８３５に進み、逆転カウンタＣｒを０にリセットする。
【０１３９】
［逆転判定］
図３０に示す逆転判定ルーチンは、所定周期（例えば１ｍｓ周期）で起動される。本ルーチンが起動されると、まずステップ８４１で、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＮ（Ｆ／Ｂ制御中）であるか否かを判定し、Ｆ／Ｂ許可フラグＸｆｂ＝ＯＦＦであれば、ステップ８４４に進み、逆転検出フラグＸｒをＯＦＦにセットして、本ルーチンを終了する。
【０１４０】
これに対して、ステップ８４１でＦ／Ｂ許可フラグＸｆｂ＝ＯＮ（Ｆ／Ｂ制御中）と判定された場合は、逆転判定実行条件が成立して、ステップ８４２に進み、図２９の逆転カウンタルーチンで求めた逆転カウント値Ｃｒが異常判定値Ｋｒ（例えば４）以上であるか否かで、ロータ３２が回転方向指示に反して逆転し続けているか否かを判定し、逆転カウント値Ｃｒが異常判定値Ｋｒ以上であれば、ステップ８４３に進み、逆転検出フラグＸｒをＯＮにセットして逆転の判定を確定し、逆転カウント値Ｃｒが異常判定値Ｋｒ未満であれば、ステップ８４４に進み、逆転検出フラグＸｒをＯＦＦに維持する。
【０１４１】
［システム異常診断］
図３１及び図３２に示すシステム異常診断ルーチンは、所定周期（例えば８ｍｓ周期）で起動される。本ルーチンが起動されると、まずステップ８５１で、次の▲１▼、▲２▼の異常診断実行条件が成立しているか否かを判定する。
【０１４２】
▲１▼イグニッションスイッチ（図示せず）の操作によりＥＣＵ４１に電源が投入された後、所定時間（例えば１ｓ）が経過していること
▲２▼リカバリ処理実行中でないこと（リカバリ処理実行フラグＸｒｃｖ＝ＯＦＦであること）
これら２つの条件▲１▼、▲２▼のうち、いずれか一方でも満たさない条件があれば、異常診断実行条件が不成立となり、ステップ８５２に進み、後述する仮異常状態継続時間カウンタＣｆｎｓｗ、Ｃｆｃｎｔを０にリセットして、本ルーチンを終了する。
【０１４３】
これに対し、上記２つの条件▲１▼、▲２▼を両方とも満たせば、異常診断実行条件が成立し、ステップ８５１からステップ８５４に進み、出力軸センサ１４が正常で、且つ、指令シフトレンジと、出力軸センサ１４の出力信号Ｖｎｓｗから検出したレンジとが一致しているか否かを判定し、その判定結果が「Ｙｅｓ」であれば、ステップ８５６に進み、第１の仮異常状態継続時間カウンタＣｆｎｓｗを０にリセットする。
【０１４４】
これに対し、上記ステップ８５４の判定結果が「Ｎｏ」であれば、ステップ８５５に進み、第１の仮異常状態継続時間カウンタＣｆｎｓｗをカウントアップして、指令シフトレンジと出力軸センサ１４の出力信号Ｖｎｓｗとが一致していない状態の継続時間を計測し、次のステップ８５７で、第１の仮異常状態継続時間カウンタＣｆｎｓｗの値が異常判定値Ｋｆｎｓｗよりも大きいか否かを判定する。ここで、異常判定値Ｋｆｎｓｗは、正常なレンジ切換動作に要する最長時間よりも十分に長い時間（例えば１０ｓ）に設定されている。従って、第１の仮異常状態継続時間カウンタＣｆｎｓｗの値が異常判定値Ｋｆｎｓｗよりも大きければ、レンジ切換動作が正常に行われない状態になっているため、システムの異常ありと判断して、ステップ８５８に進み、第１の異常検出フラグＸｆｎｓｗをＯＮにセットする。上記ステップ８５７の判定結果が「Ｎｏ」であれば、第１の異常検出フラグＸｆｎｓｗをＯＦＦ（異常なし）に維持する。
【０１４５】
以上のようにして、出力軸センサ１４の出力信号Ｖｎｓｗを用いて１回目の異常診断を行った後、図３２のステップ８５９に進み、エンコーダカウント値Ｎｃｎｔと目標カウント値Ａｃｎｔとの偏差｜Ｎｃｎｔ−Ａｃｎｔ｜が所定値Ｋｃｎｔ（例えば５°相当値）よりも大きいか否かを判定し、このカウント値偏差｜Ｎｃｎｔ−Ａｃｎｔ｜が所定値Ｋｃｎｔ以下であれば、ステップ８６１に進み、第２の仮異常状態継続時間カウンタＣｆｃｎｔを０にリセットする。
【０１４６】
これに対し、上記ステップ８５９の判定結果が「Ｙｅｓ」であれば、ステップ８６０に進み、第２の仮異常状態継続時間カウンタＣｆｃｎｔをカウントアップして、カウント値偏差｜Ｎｃｎｔ−Ａｃｎｔ｜が所定値Ｋｃｎｔよりも大きい状態の継続時間を計測し、次のステップ８６２で、第２の仮異常状態継続時間カウンタＣｆｃｎｔの値が異常判定値Ｋｆｃｎｔよりも大きいか否かを判定する。ここで、異常判定値Ｋｆｃｎｔは、正常なレンジ切換動作に要する最長時間より十分に長い時間（例えば１０ｓ）に設定されている。従って、第２の仮異常状態継続時間カウンタＣｆｃｎｔの値が異常判定値Ｋｆｃｎｔよりも大きければ、レンジ切換動作が正常に行われない状態になっているため、システムの異常ありと判断して、ステップ８６３に進み、第２の異常検出フラグＸｆｃｎｔをＯＮにセットする。上記ステップ８６２の判定結果が「Ｎｏ」であれば、第２の異常検出フラグＸｆｃｎｔをＯＦＦ（異常なし）に維持する。
【０１４７】
以上のようにして、カウント値偏差｜Ｎｃｎｔ−Ａｃｎｔ｜を用いて２回目の異常診断を行った後、ステップ８６４に進み、図２６のリカバリ処理ルーチンのステップ８０５でカウントされるリカバリ処理実行回数Ｃｒｃｖが異常判定値Ｋｃｒｖ（例えば３回）以上であるか否かを判定し、リカバリ処理実行回数Ｃｒｃｖが異常判定値Ｋｃｒｖ以上であれば、ステップ８６５に進み、システムの異常ありと判断して、ステップ８６５に進み、第３の異常検出フラグＸｆｒｃｖをＯＮにセットして本ルーチンを終了する。つまり、リカバリ処理が連続して異常判定値Ｋｃｒｖ（例えば３回）以上も繰り返される場合は、Ｆ／Ｂ制御系が正常に機能しない状態になっているため、システムの異常ありと判断するものである。
【０１４８】
一方、リカバリ処理実行回数Ｃｒｃｖが異常判定値Ｋｃｒｖ未満であれば、第３の異常検出フラグＸｆｒｃｖをＯＦＦ（異常なし）に維持して本ルーチンを終了する。
【０１４９】
［フェールセーフ処理］
図３３及び図３４に示すフェールセーフ処理ルーチンは、所定周期（例えば８ｍｓ周期）で起動される。本ルーチンが起動されると、まずステップ９０１で、次の▲１▼、▲２▼のフェールセーフ処理実行条件が成立しているか否かを判定する。
▲１▼オープンループ制御によるレンジ切り換えが可能な状態であること（システム故障フラグＸｆａｉｌｏｆｆ＝ＯＦＦであること）
▲２▼図３１及び図３２のシステム異常診断ルーチンでセットされる３つの異常検出フラグＸｆｎｓｗ、Ｘｆｃｎｔ、Ｘｆｒｃｖのうちの少なくとも１つがＯＮ（異常あり）であること、又は、後述する図４３の駆動コイル断線検出ルーチンで駆動コイル３５又は３６の断線が検出されていること
【０１５０】
これら２つの条件▲１▼、▲２▼のうち、いずれか一方でも満たさない条件があれば、フェールセーフ処理実行条件が不成立となり、以降の処理を行うことなく、本ルーチンを終了する。
【０１５１】
これに対し、上記２つの条件▲１▼、▲２▼を両方とも満たせば、フェールセーフ処理実行条件が成立し、ステップ９０１からステップ９０２に進み、フェールセーフ処理実行フラグＸｆｓｏｐをＯＮにセットし、次のステップ９０３で、警告ランプを点灯したり、或は、メータパネルの情報表示部等に警告表示して、運転者に警告する。
【０１５２】
この後、ステップ９０４に進み、前回のフェールセーフ処理終了後の経過時間を計測するフェールセーフ処理間隔カウンタＣｆｓｏｐの値が所定値Ｋｆｓｏｐ未満であるか否かを判定する。ここで、所定値Ｋｆｓｏｐは、前回のフェールセーフ処理終了後にディテントバネ２３の弾性力によってディテントバネ２３の係合部２３ａがディテントレバー１５の保持凹部２４，２５の傾斜側壁に沿ってその底部に滑り落ちるのに要する時間よりもある程度長い時間（例えば５００ｍｓ）に設定されている。
【０１５３】
フェールセーフ処理間隔カウンタＣｆｓｏｐの値（前回のフェールセーフ処理終了後の経過時間）が所定値Ｋｆｓｏｐ未満であれば、ステップ９０５に進み、フェールセーフ処理間隔カウンタＣｆｓｏｐをカウントアップして前回のフェールセーフ処理終了後の経過時間をカウントする。この後、ステップ９０６に進み、全相の通電をオフした状態を継続し、次のステップ９０７で、通電フラグＸｏｎを通電オフを意味するＯＦＦにセットして本ルーチンを終了する。これにより、前回のフェールセーフ処理終了後の経過時間が所定値Ｋｆｓｏｐを越えるまでは、全相の通電をオフした状態に維持される。
【０１５４】
その後、フェールセーフ処理間隔カウンタＣｆｓｏｐの値（前回のフェールセーフ処理終了後の経過時間）が所定値Ｋｆｓｏｐ以上になった時点で、ステップ９０４からステップ９０８に進み、オープンループ制御実行フラグＸｏｐｅｎがＯＦＦであるか否かを判定し、ＯＦＦであれば、ステップ９０９に進み、指令シフトレンジｓｆｔが切り換えられたか否かを判定する。その結果、指令シフトレンジｓｆｔが切り換えられていないと判定されれば、ステップ９１０に進み、全相の通電をオフした状態を継続する。
【０１５５】
これに対して、上記ステップ９０９で、指令シフトレンジｓｆｔが切り換えられたと判定されれば、ステップ９１１に進み、前記図２６のリカバリ処理ルーチンのステップ８０４と同じ方法で、現在の出力軸センサ１４の出力信号Ｖｎｓｗを用いて現在の位置カウント値Ｎｃｎｔｏｐを算出する。この位置カウント値Ｎｃｎｔｏｐは、オープンループ制御開始時の位置カウント値Ｎｃｎｔｏｐの初期値として用いられる。
【０１５６】
この後、ステップ９１２に進み、オープンループ制御実行フラグＸｏｐｅｎをＯＮにセットして、後述する図３５のオープンループ制御ルーチンによりオープンループ制御を実行し、次のステップ９１３で、フェールセーフ処理の実行回数をカウントするフェールセーフ処理実行回数カウンタＣｆｓをカウントアップして、本ルーチンを終了する。
【０１５７】
また、前記ステップ９０８で、オープンループ制御実行フラグＸｏｐｅｎがＯＮであると判定されれば、図３４のステップ９１４に進み、オープンループ制御完了フラグＸｏｐｃｍｐがオープンループ制御完了を意味するＯＮにセットされているか否かを判定し、Ｘｏｐｃｍｐ＝ＯＦＦであれば、以降の処理を行うことなく、本ルーチンを終了する。
【０１５８】
これに対し、ステップ９１４で、オープンループ制御完了フラグＸｏｐｃｍｐがＯＮにセットされていると判定されれば、ステップ９１５に進み、指令シフトレンジと、出力軸センサ１４の出力信号Ｖｎｓｗから検出したレンジとが一致しているか否かを判定し、両者が一致していれば、ステップ９１６に進み、フェールセーフ処理実行回数カウンタＣｆｓを０にリセットする。そして、次のステップ９１８で、オープンループ制御完了フラグＸｏｐｃｍｐをＯＦＦにセットすると共に、次のステップ９１９で、オープンループ制御実行フラグＸｏｐｅｎをＯＦＦにセットして、本ルーチンを終了する。
【０１５９】
また、上記ステップ９１５で、指令シフトレンジと出力軸センサ１４の出力信号Ｖｎｓｗとが一致していないと判定された場合は、ステップ９１７に進み、フェールセーフ処理実行回数カウンタＣｆｓの値が故障判定値（例えば３回）以上であるか否かを判定し、フェールセーフ処理実行回数カウンタＣｆｓの値が故障判定値未満であれば、まだ故障とは判定せずに、オープンループ制御完了フラグＸｏｐｃｍｐ＝ＯＦＦ、オープンループ制御実行フラグＸｏｐｅｎ＝ＯＦＦにセットして（ステップ９１８、９１９）、本ルーチンを終了する。
【０１６０】
その後、フェールセーフ処理実行回数カウンタＣｆｓの値が故障判定値（例えば３回）以上になれば、その時点で、システムの故障（オープンループ制御でもレンジ切り換えが不可能な状態）と判断して、ステップ９１７からステップ９２０に進み、システム故障フラグＸｆａｉｌｏｆｆをＯＮにセットし、次のステップ９２１で、全相の通電をオフして、本ルーチンを終了する。
【０１６１】
［オープンループ制御］
図３５乃至図３７に示すオープンループ制御ルーチンは、所定周期（例えば１ｍｓ周期）で起動され、特許請求の範囲でいうオープンループ制御手段としての役割を果たす。本ルーチンが起動されると、まずステップ９３１で、オープンループ制御実行フラグＸｏｐｅｎがＯＮにセットされているか否かを判定し、Ｘｏｐｅｎ＝ＯＦＦであれば、以降の処理を行うことなく、本ルーチンを終了する。
【０１６２】
これに対し、オープンループ制御実行フラグＸｏｐｅｎがＯＮにセットされていれば、ステップ９３１からステップ９３２に進み、時間を計測する時間カウンタＴｏｐをカウントアップし、次のステップ９３３で、時間カウンタＴｏｐの値が現在の通電相の励磁時間ｔｍ以上になったか否かを判定し、励磁時間ｔｍ未満であれば、以降の処理を行うことなく、本ルーチンを終了する。これにより、ステップ９３４以降の処理は、励磁時間ｔｍ毎に実行される。
【０１６３】
その後、時間カウンタＴｏｐの値が現在の通電相の励磁時間ｔｍ以上になった時点で、ステップ９３３からステップ９３４に進み、目標カウント値Ａｃｎｔと現在の位置カウント値Ｎｃｎｔｏｐとを比較して、ロータ３２の駆動方向を判定する。その結果、現在の位置カウント値Ｎｃｎｔｏｐが目標カウント値Ａｃｎｔよりも小さい場合は、ロータ３２の駆動方向がＰレンジ側からＮｏｔＰレンジ側への回転方向（正回転方向）と判断して、ステップ９３５に進み、通電相判定値Ｍｐｔｎｏｐを１ずつカウントアップし、次のステップ９３６で、位置カウント値Ｎｃｎｔｏｐを２ずつカウントアップする。これは、１回の励磁でロータ３２が２カウント分（３．７５°）回転するためである。
【０１６４】
これに対し、現在の位置カウント値Ｎｃｎｔｏｐが目標カウント値Ａｃｎｔよりも大きい場合は、ロータ３２の駆動方向がＮｏｔＰレンジ側からＰレンジ側への回転方向（逆回転方向）と判断して、ステップ９３７に進み、通電相判定値Ｍｐｔｎｏｐを１ずつカウントダウンし、次のステップ９３８で、位置カウント値Ｎｃｎｔｏｐを２ずつカウントダウンする。
【０１６５】
この後、ステップ９３９に進み、通電相判定値Ｍｐｔｎｏｐを“６”で割り算した時の余りＭｐｔｎｏｐ％６を算出する。ここで、“６”は、オープンループ制御で通電相を一巡させる間の通電相判定値Ｍｐｔｎｏｐの増減量に相当する。
【０１６６】
Ｍｐｔｎｏｐ％６の算出後、ステップ９４０に進み、図３８のテーブルによってＭｐｔｎｏｐ％６に応じて通電相を選択する。本実施形態では、オープンループ制御中は、１−２相励磁方式で駆動するように通電相を選択し、更に、オープンループ制御を開始するときの最初の励磁が２相通電（ＷＵ相通電又はＵＶ相通電又はＶＷ相通電）、つまりＭｐｔｎｏｐ％６＝１又は３又は５となるように通電相判定値Ｍｐｔｎｏｐの初期値が設定されている。
【０１６７】
この後、ステップ９８０に進み、後述する図４３の通電処理ルーチンを実行して、ステップ９４０で選択した通電相に通電する。この際、後述する図４２の駆動コイル断線検出ルーチンによって、ＳＲモータ１２の２系統の駆動コイル３５，３６のうちのいずれか一方の系統の断線が検出されている場合は、断線していない片方の系統の駆動コイル３５，３６のみに通電し、両方の系統の断線が検出されている場合は、ＳＲモータ１２の通電をオフする。
【０１６８】
この後、図３６のステップ９４１に進み、位置偏差ｄｅｖを次式により算出する。
ｄｅｖ＝｜Ａｃｎｔ−Ｎｃｎｔｏｐ｜／２
上式から明らかなように、位置偏差ｄｅｖは、目標カウント値Ａｃｎｔと現在の位置カウント値Ｎｃｎｔｏｐとの偏差（絶対値）の１／２である。
【０１６９】
そして、次のステップ９４２で、位置偏差ｄｅｖと回転速度パラメータｍｓｐｄとを比較する。この回転速度パラメータｍｓｐｄは、位置偏差ｄｅｖに応じて増減されるパラメータであり、この回転速度パラメータｍｓｐｄに応じて図４０のテーブルにより励磁時間ｔｍを設定することで、ロータ３２の回転速度、加速、減速を制御する。この場合、目標とする回転速度が高くなるほど、回転速度パラメータｍｓｐｄが大きくなり、励磁時間ｔｍが短い時間に設定されるようになっている。この回転速度パラメータｍｓｐｄの初期値は０である。
【０１７０】
上記ステップ９４２で、位置偏差ｄｅｖが回転速度パラメータｍｓｐｄより大きいと判定された場合は、ステップ９４３に進み、回転速度パラメータｍｓｐｄを１だけカウントアップし、次のステップ９４４で、最小回転速度パラメータｍｓｐｄｍｉｎを０にセットする。この最小回転速度パラメータｍｓｐｄｍｉｎは、回転速度パラメータｍｓｐｄの最小値を制限するパラメータ（下限ガード値）である。このように、位置偏差ｄｅｖが回転速度パラメータｍｓｐｄより大きいときに、最小回転速度パラメータｍｓｐｄｍｉｎを０にセットすることで、オープンループ制御開始からロータ３２が回転し始めるまでの期間に、励磁時間ｔｍを最長時間（５０ｍｓ）に設定できるようにしている。
【０１７１】
一方、上記ステップ９４２で、位置偏差ｄｅｖが回転速度パラメータｍｓｐｄより小さいと判定された場合は、ステップ９４５に進み、回転速度パラメータｍｓｐｄを１だけカウントダウンし、次のステップ９４６で、最小回転速度パラメータｍｓｐｄｍｉｎを４にセットする。これにより、ロータ３２の回転が立ち上がった後は、励磁時間ｔｍを例えば５ｍｓ以下に制限できるようにしている。
【０１７２】
また、上記ステップ９４２で、位置偏差ｄｅｖが回転速度パラメータｍｓｐｄと一致すると判定された場合は、回転速度パラメータｍｓｐｄを変化させずに、ステップ９４７に進み、最小回転速度パラメータｍｓｐｄｍｉｎを０にセットする。
【０１７３】
以上のようにして、回転速度パラメータｍｓｐｄと最小回転速度パラメータｍｓｐｄｍｉｎを設定した後、ステップ９４８に進み、図３９のテーブルを用いてバッテリ電圧（電源電圧）と駆動コイル３５，３６の断線の有無に応じて最大回転速度パラメータｍｓｐｄｍａｘを設定する。この最大回転速度パラメータｍｓｐｄｍａｘは、回転速度パラメータｍｓｐｄの最大値を制限するパラメータ（上限ガード値）であり、バッテリ電圧が高くなるほど、最大回転速度パラメータｍｓｐｄｍａｘを大きくして、ロータ３２の回転速度を速くできるようにしている。また、２系統の駆動コイル３５，３６のうちの片方の系統が断線した場合は、駆動トルクが半減するため、最大回転速度パラメータｍｓｐｄｍａｘを小さい値（正常時のｍｓｐｄｍａｘのほぼ１／２の値）に設定して、ロータ３２の回転速度を低速度に制限するようにしている。
【０１７４】
そして、次のステップ９４９で、回転速度パラメータｍｓｐｄを最小回転速度パラメータｍｓｐｄｍｉｎと最大回転速度パラメータｍｓｐｄｍａｘとの範囲内に収めるようにガード処理する。例えば、ステップ９４３又は９４５で更新した回転速度パラメータｍｓｐｄが最小回転速度パラメータｍｓｐｄｍｉｎよりも小さい場合は、ｍｓｐｄ＝ｍｓｐｄｍｉｎとし、また、回転速度パラメータｍｓｐｄが最大回転速度パラメータｍｓｐｄｍａｘよりも大きい場合は、ｍｓｐｄ＝ｍｓｐｄｍａｘとし、ｍｓｐｄｍｉｎ≦ｍｓｐｄ≦ｍｓｐｄｍａｘの場合は、その回転速度パラメータｍｓｐｄをそのまま用いる。
【０１７５】
この後、ステップ９５０に進み、図４０のテーブルを用いて、回転速度パラメータｍｓｐｄに応じて励磁時間ｔｍを設定する。図４０の例では、回転速度パラメータｍｓｐｄが０〜３までの範囲では、励磁時間ｔｍを最長時間（例えば５０ｍｓ）に設定し、起動時にロータ３２の回転位相と通電相との同期を確実にとることができるようにしている。そして、回転速度パラメータｍｓｐｄが４〜９までの範囲では、回転速度パラメータｍｓｐｄが大きくなるに従って、励磁時間ｔｍを例えば５ｍｓから３ｍｓまで３段階に小さくして、ロータ３２の回転速度を３段階に調整できるようになっている。尚、励磁時間ｔｍの切り換えは、２段階以下又は４段階以上であっても良いことは言うまでもない。
【０１７６】
励磁時間ｔｍの設定後、ステップ９５１に進み、通電フラグＸｏｎをＯＮにセットし、次のステップ９５２で、時間カウンタＴｏｐをクリアして本ルーチンを終了する。
【０１７７】
また、図３５のステップ９３４で、現在の位置カウント値Ｎｃｎｔｏｐが目標カウント値Ａｃｎｔと一致すると判定された場合は、図３７のステップ９５５に進み、時間カウンタＴｏｐの計測時間が所定時間Ｋｈｌｄ（例えば５００ｍｓ）以上になったか否かを判定する。その結果、時間カウンタＴｏｐの計測時間が所定時間Ｋｈｌｄ未満と判定された場合は、ステップ９５６に進み、全相の通電をオフし、次のステップ９５７で、励磁時間ｔｍを所定時間Ｋｈｌｄ（例えば５００ｍｓ）にセットする。
【０１７８】
この後、図３６のステップ９５２に進み、時間カウンタＴｏｐをクリアして本ルーチンを終了する。このような処理により、オープンループ制御終了後、所定時間Ｋｈｌｄ（例えば５００ｍｓ）が経過するまで、前記図３５のステップ９３４以降の処理が行われないため、次のオープンループ制御が開始されない。これは、オープンループ制御終了後に、ディテントバネ２３の弾性力によりディテントバネ２３の係合部２３ａがディテントレバー１５の保持凹部２４，２５の傾斜側壁に沿ってその底部に滑り落ちるまで待つためである。
【０１７９】
また、図３７のステップ９５５で、時間カウンタＴｏｐの値が所定値Ｋｈｌｄ以上になったと判定されれば、ステップ９５８に進み、通電相判定値Ｍｐｔｎｏｐ＝０、回転速度パラメータｍｓｐｄ＝０にセットし、次のステップ９５９で、オープンループ制御完了フラグＸｏｐｃｍｐをＯＮにセットする。この後、ステップ９６０に進み、励磁時間Ｔｍを０にセットし、次のステップ９６１で、通電フラグＸｏｎをＯＦＦにセットした後、図３６のステップ９５２に進み、時間カウンタＴｏｐをクリアして本ルーチンを終了する。
【０１８０】
以上説明した本ルーチンでは、オープンループ制御中の励磁方式を１−２相励磁方式に設定し、オープンループ制御開始時の最初の励磁を２相通電で行うと共に、図２５に示すように、オープンループ制御開始から例えば３ステップ分は、各通電相の励磁時間ｔｍを最長時間（例えば５０ｍｓ）に設定して、ロータ３２を確実に掴んでロータ３２の回転位相と通電相とを確実に同期させる。この後は、励磁時間ｔｍを大幅に短くするが、ロータ３２の回転速度の上昇に伴って励磁時間ｔｍを徐々に短くして、ロータ３２の回転速度を緩やかに上昇させる。
【０１８１】
このオープンループ制御中のロータ３２の回転位置を推定するために、オープンループ制御開始時のロータ３２の初期位置（位置カウント値Ｎｃｎｔｏｐの初期値）を出力軸センサ１４の出力信号に基づいて算出し、その後、通電相を切り換える毎に位置カウント値Ｎｃｎｔｏｐを２ずつカウントアップ（又はカウントダウン）して、該位置カウント値Ｎｃｎｔｏｐに基づいてロータ３２の回転位置を推定し、該位置カウント値Ｎｃｎｔｏｐと目標カウント値Ａｃｎｔとの偏差がある程度小さくなった段階で、減速領域に入ったと判断して、励磁時間ｔｍを徐々に長くして、ロータ３２の回転速度を緩やかに減速し、該位置カウント値Ｎｃｎｔｏｐが目標カウント値Ａｃｎｔに到達した時点で、ロータ３２が目標位置に到達したと判断して、オープンループ制御を終了する。
【０１８２】
尚、本ルーチンでは、励磁時間ｔｍを回転速度パラメータｍｓｐｄに応じて設定するようにしたが、駆動開始後の回転量、駆動開始後の経過時間、目標位置までの回転量、負荷トルクの少なくとも１つに基づいて励磁時間ｔｍを設定するようにしても良い。
【０１８３】
また、本ルーチンでは、オープンループ制御開始時の最初の励磁を２相通電としたが、最初の励磁を１相通電としても良く、更には、オープンループ制御中の励磁方式も１−２相励磁方式に限定されず、１相励磁方式又は２相励磁方式を採用しても良い。
【０１８４】
［オープンループ制御時エンジントルク抑制］
図４１に示すオープンループ制御時エンジントルク抑制ルーチンは、所定周期（例えば１ｍｓ周期）で起動される。本ルーチンが起動されると、まずステップ９７１で、オープンループ制御実行フラグＸｏｐｅｎ＝ＯＮ（オープンループ制御実行中）であるか否かを判定し、Ｘｏｐｅｎ＝ＯＮであれば、ステップ９７２に進み、エンジントルク抑制フラグＸｔｒｑをＯＮにセットし、Ｘｏｐｅｎ＝ＯＦＦであれば、ステップ９７３に進み、エンジントルク抑制フラグＸｔｒｑをＯＦＦにセットする。このエンジントルク抑制フラグＸｔｒｑの情報は、レンジ切換制御用のＥＣＵ４１からエンジン制御用のＥＣＵ（図示せず）に送信される。
【０１８５】
エンジン制御用のＥＣＵは、オープンループ制御実行フラグＸｏｐｅｎ＝ＯＮの情報を受信したときに、エンジントルクを抑制する方向にエンジン制御パラメータを制御して、エンジントルクを抑制した状態で、オープンループ制御によるレンジ切換動作を実行する。
【０１８６】
この際、エンジントルクを抑制する方向に制御するエンジン制御パラメータは、空気系、燃料系、点火系のうちの少なくとも１つの制御パラメータを用いれば良く、例えば、空気系の場合は、スロットルバルブの開駆動を禁止してスロットル開度を現状維持するようにしたり、或は、運転に支障を来さない範囲内でスロットル開度を閉じるようにしても良い。また、燃料系の場合は、運転に支障を来さない範囲内で燃料噴射量を制限するようにすれば良く、点火系の場合は、運転に支障を来さない範囲内で点火時期を遅角するようにすれば良い。
【０１８７】
［駆動コイル断線検出］
図４２に示す駆動コイル断線検出ルーチンは、所定周期（例えば１ｍｓ周期）で起動され、特許請求の範囲でいう異常診断手段としての役割を果たす。本ルーチンでは、次のような方法で駆動コイル３５，３６の巻線３３，３４の断線を検出する。
【０１８８】
図３に示すように、各相の巻線３３，３４の通電ラインにそれぞれ断線検出回路６０を設け、各相の断線検出回路６０の両抵抗６１，６２の中間接続点の電圧レベル（各相の通電ラインの電圧レベル）をＥＣＵ４１の各入力ポートを介してＥＣＵ４１に読み込む。そして、駆動コイル３５，３６の巻線３３，３４が正常（断線なし）の場合は、モータドライバ３７，３８のスイッチング素子３９をオフすると、両抵抗６１，６２の中間接続点の電圧レベルが巻線３３，３４を介して印加されるバッテリ電圧Ｖｂによって上昇して、ＥＣＵ４１の入力ポートの電圧レベル（以下「ポートレベル」という）がハイレベルとなる。その後、スイッチング素子３９をオンすると、両抵抗６１，６２の中間接続点が該スイッチング素子３９を介してグラウンド側に導通した状態となるため、ＥＣＵ４１のポートレベルがローレベルとなる。
【０１８９】
これに対し、駆動コイル３５，３６の巻線３３，３４が断線している場合は、スイッチング素子３９をオフしても、両抵抗６１，６２の中間接続点には巻線３３，３４を介してバッテリ電圧Ｖｂが印加されないため、ＥＣＵ４１のポートレベルがローレベルに維持され、ハイレベルには反転しない。
【０１９０】
このような関係から、ＥＣＵ４１のＣＰＵ４１ａは、全相のスイッチング素子３９をオフして駆動コイル３５，３６への通電をオフしているときに、各相のポートレベルがローレベルであるか否かで、各相の巻線３３，３４が断線しているか否かを判定する。
【０１９１】
図４２の駆動コイル断線検出ルーチンが起動されると、まずステップ５０１で、全相が通電オフか否かを判定し、通電オフでなければ、以降の処理を行うことなく、本ルーチンを終了する。その後、全相が通電オフの状態となれば、ステップ５０２〜５０４で、Ｕ相、Ｖ相、Ｗ相の各ポートレベルがハイレベルであるか否かで、第１系統の駆動コイル３６のＵ相、Ｖ相、Ｗ相の各巻線３３が正常（断線なし）であるか否かを判定し、もし、Ｕ相、Ｖ相、Ｗ相のポートレベルのいずれか１つでもローレベルになっていれば、ローレベルになっている相の巻線３３が断線していると判断して、ステップ５０６に進み、第１系統の駆動コイル３６の断線と判定し、ステップ５０７以降の第２系統の駆動コイル３７の断線検出処理に進む。
【０１９２】
これに対し、Ｕ相、Ｖ相、Ｗ相の各ポートレベルが全てハイレベルの場合（ステップ５０２〜５０４の判定が全て「Ｙｅｓ」の場合）は、ステップ５０５に進み、第１系統の駆動コイル３６が正常（断線なし）と判定し、ステップ５０７以降の第２系統の駆動コイル３７の断線検出処理に進む。
【０１９３】
この第２系統の駆動コイル３７の断線検出処理も上記と同じであり、まずステップ５０７〜５０９で、Ｕ’相、Ｖ’相、Ｗ’相の各ポートレベルがハイレベルであるか否かで、第２系統の駆動コイル３７のＵ’相、Ｖ’相、Ｗ’相の各巻線３４が正常（断線なし）であるか否かを判定し、もし、Ｕ’相、Ｖ’相、Ｗ’相のポートレベルのいずれか１つでもローレベルになっていれば、ローレベルになっている相の巻線３４が断線していると判断して、ステップ５１１に進み、第２系統の駆動コイル３７の断線と判定し、本ルーチンを終了する。
【０１９４】
これに対し、Ｕ’相、Ｖ’相、Ｗ’相の各ポートレベルが全てハイレベルの場合（ステップ５０７〜５０９の判定が全て「Ｙｅｓ」の場合）は、ステップ５１０に進み、第２系統の駆動コイル３７が正常（断線なし）と判定し、本ルーチンを終了する。
【０１９５】
以上説明した本ルーチンで、いずれか一方の系統の駆動コイル３５又は３６の断線が検出された場合は、図３３のフェールセーフ処理ルーチンのステップ９０１で、フェールセーフ処理実行条件が成立し、警告表示が行われると共に、オープンループ制御実行フラグＸｏｐｅｎがＯＮにセットされてオープンループ制御が実行される。
【０１９６】
［通電処理］
図４３に示す通電処理ルーチンは、図３５のオープンループ制御ルーチンのステップ９８０で実行されるサブルーチンである。本ルーチンが起動されると、まずステップ９８１〜９８３で、第１系統の駆動コイル３６（Ｕ相、Ｖ相、Ｗ相）と第２系統の駆動コイル３７（Ｕ’相、Ｖ’相、Ｗ’相）のいずれか一方又は両方で断線が検出されているか否かを判定し、両方の系統の駆動コイル３６，３７が正常（断線なし）であれば、ステップ９８７に進み、両方の系統の駆動コイル３６，３７に通電する。
【０１９７】
一方、第１系統の駆動コイル３６（Ｕ相、Ｖ相、Ｗ相）のみが断線と判定されれば、ステップ９８４に進み、第２系統の駆動コイル３７（Ｕ’相、Ｖ’相、Ｗ’相）のみに通電し、反対に、第２系統の駆動コイル３７（Ｕ’相、Ｖ’相、Ｗ’相）のみが断線と判定されれば、ステップ９８６に進み、第１系統の駆動コイル３６（Ｕ相、Ｖ相、Ｗ相）のみに通電する。
【０１９８】
また、両方の系統の駆動コイル３６，３７が共に断線していると判定されれば、ステップ９８５に進み、両方の系統の駆動コイル３６，３７の通電を共にオフする。
【０１９９】
以上説明した本実施形態（１）によれば、ＳＲモータ１２の２系統の駆動コイル３５，３６（巻線３３，３４）のうちのいずれか一方の系統が断線した場合は、断線していない片方の系統の駆動コイル３５，３６のみを使用してオープンループ制御を実行するようにしたので、ロータ３２をゆっくりした速度で駆動することができる。従って、いずれかの系統の駆動コイル３５，３６の断線が発生して駆動トルクが小さくなっても、オープンループ制御によってロータ３２を目標位置まで回転させることができ、モータ制御の信頼性を向上できると共に、各系統の駆動コイル３５，３６を大型化せずに済み、ＳＲモータ１２の大型化も回避することができる。
【０２００】
しかも、本実施形態（１）では、図３９のテーブルを用いてバッテリ電圧と駆動コイル３５，３６の断線の有無に応じて最大回転速度パラメータｍｓｐｄｍａｘを設定し、バッテリ電圧と駆動コイル３５，３６の断線の有無に応じてロータ３２の回転速度を制限するようにしたので、バッテリ電圧が低下しているときにいずれかの系統の駆動コイル３５，３６の断線が発生した場合でも、オープンループ制御によってロータ３２をゆっくりした速度で目標位置まで回転させることができる。
【０２０１】
《実施形態（２）》
上記実施形態（１）では、各相の通電ラインの電圧レベル（各相の断線検出回路６０の両抵抗６１，６２の中間接続点の電圧レベル）を検出することで、駆動コイル３５，３６の巻線３３，３４が断線しているか否かを判定するようにしたが、図４４及び図４５に示す本発明の実施形態（２）では、各相の通電ラインに流れる励磁電流を電流センサ６３で検出することで、駆動コイル３５，３６の巻線３３，３４が断線しているか否かを判定するようにしている。以下、前記実施形態（１）と異なる部分についてのみ説明する。
【０２０２】
本実施形態（２）では、図４４に示すように、各駆動コイル３５，３６の中性点をバッテリ４０の負極側に接続し、各駆動コイル３５，３６の各相の巻線３３，３４の一端を各モータドライバ３７，３８の各スイッチング素子３９を介してバッテリ４０の正極側に接続し、ＥＣＵ４１によって各モータドライバ３７，３８の各スイッチング素子３９をオン／オフすることで、各系統の駆動コイル３５，３６の各相の通電をオン／オフするようになっている。
【０２０３】
各系統の駆動コイル３５，３６の各相の通電ラインには、それぞれ電流センサ６３が設けられ、各相の電流センサ６３の出力信号がＥＣＵ４１の各入力ポートに入力されるようになっている。
【０２０４】
各系統の駆動コイル３５，３６の巻線３３，３４が正常（断線なし）の場合は、スイッチング素子３９がオンされた通電相の電流センサ６３で励磁電流が検出されるが、巻線３３，３４が断線している場合は、スイッチング素子３９をオンしても、その相の巻線３３，３４には励磁電流が流れないため、その相の電流センサ６３で励磁電流が検出されない。
【０２０５】
このような関係から、ＥＣＵ４１は、各相のスイッチング素子３９をオンしたときに、各相の電流センサ６３で励磁電流が検出されれば、各相の巻線３３，３４が断線していないと判断し、各相のスイッチング素子３９をオンしても、各相の電流センサ６３で励磁電流が検出されなければ、各相の巻線３３，３４が断線していると判断する。
【０２０６】
以上説明した本実施形態（２）の駆動コイル３５，３６の断線検出は、図４５の駆動コイル断線検出ルーチンによって実行される。本ルーチンは、所定周期（例えば１ｍｓ周期）で起動され、特許請求の範囲でいう異常診断手段としての役割を果たす。本ルーチンが起動されると、まずステップ５２１で、Ｕ相、Ｕ’相の通電中（Ｕ相、Ｕ’相のスイッチング素子３９のオン中）であるか否かを判定し、Ｕ相、Ｕ’相の通電中であれば、ステップ５２３、５２４で、Ｕ相、Ｕ’相の電流センサ６３で励磁電流が検出されたか否かを判定する。その結果、Ｕ相の励磁電流が検出されなければ、第１系統の駆動コイル３６のＵ相断線と判定し（ステップ５２４）、Ｕ’相の励磁電流が検出されなければ、第２系統の駆動コイル３７のＵ’相断線と判定する（ステップ５２６）。
【０２０７】
この後、ステップ５２７に進み、Ｖ相、Ｖ’相の通電中（Ｖ相、Ｖ’相のスイッチング素子３９のオン中）であるか否かを判定し、Ｖ相、Ｖ’相の通電中であれば、ステップ５２８、５３０で、Ｖ相、Ｖ’相の電流センサ６３で励磁電流が検出されたか否かを判定する。その結果、Ｖ相の励磁電流が検出されなければ、第１系統の駆動コイル３６のＶ相断線と判定し（ステップ５２９）、Ｖ’相の励磁電流が検出されなければ、第２系統の駆動コイル３７のＶ’相断線と判定する（ステップ５３１）。
【０２０８】
この後、ステップ５３２に進み、Ｗ相、Ｗ’相の通電中（Ｗ相、Ｗ’相のスイッチング素子３９のオン中）であるか否かを判定し、Ｗ相、Ｗ’相の通電中であれば、ステップ５３３、５３５で、Ｗ相、Ｗ’相の電流センサ６３で励磁電流が検出されたか否かを判定する。その結果、Ｗ相の励磁電流が検出されなければ、第１系統の駆動コイル３６のＷ相断線と判定し（ステップ５３４）、Ｗ’相の励磁電流が検出されなければ、第２系統の駆動コイル３７のＷ’相断線と判定する（ステップ５３６）。
【０２０９】
尚、本実施形態（２）では、各駆動コイル３５，３６の各相の通電ラインにそれぞれ電流センサ６３を設けたが、これらの代わりに、各駆動コイル３５，３６の中性点に流れる励磁電流を検出するようにしても良い。この場合は、各駆動コイル３５，３６に電流センサを１個ずつ設けるだけで良く、低コスト化することができる。
【０２１０】
また、前記実施形態（１）、（２）では、駆動コイル３５，３６の断線を検出するようにしたが、モータドライバ３７，３８の故障を検出して、いずれか一方の系統のモータドライバが故障したときに、他方の系統のモータドライバを使用して他方の系統の駆動コイルのみをオープンループ制御で駆動するようにしても良い。
【０２１１】
例えば、前記実施形態（１）において、モータドライバ３７，３８の故障を検出する場合は、各相のスイッチング素子３９をオンしたときに、各相のポートレベルがローレベルに反転すれば、モータドライバ３７，３８が正常であるが、各相のスイッチング素子３９をオンしても、各相のポートレベルがハイレベルに維持されて、ローレベルに反転しなければ、その相のスイッチング素子３９が故障していると判定することができる。
【０２１２】
また、モータドライバ３７，３８のスイッチング素子３９が故障してオンしなくなった場合は、ＥＣＵ４１からスイッチング素子３９に駆動信号を出力しても、スイッチング素子３９がオンせず、巻線３３，３４に励磁電流が流れないため、前記実施形態（２）のように、各相の励磁電流を電流センサ６３で検出して駆動コイル３５，３６の断線の有無を判定する方法では、スイッチング素子３９の故障と駆動コイル３５，３６の断線とを区別できないが、スイッチング素子３９が故障した系統も、駆動コイル３５，３６の断線と同じく、駆動コイル３５，３６に通電できないので、両者をあえて区別しなくても、正常な系統の駆動コイル・モータドライバを使用してオープンループ制御を行うのに何等支障はない。
【０２１３】
また、駆動コイル３５，３６の断線時には、それ以外の異常よりも駆動トルクが低下することを考慮して、駆動コイル３５，３６の断線検出時にはそれ以外の異常検出時よりもロータ回転速度が遅くなるように正常に動作する残りの系統の駆動回路・駆動コイルを用いてオープンループ制御するようにしても良い。これにより、駆動トルクが小さくなる異常が発生した時でも、モータ制御の信頼性を確保することができる。
【０２１４】
また、前記実施形態（１）、（２）では、駆動コイル・モータドライバを２系統設けたが、これを３系統以上設けるようにしても良い。
また、本発明に用いるエンコーダは、磁気式のエンコーダ４６に限定されず、例えば、光学式のエンコーダやブラシ式のエンコーダを用いても良い。
【０２１５】
また、本発明に用いるモータは、ＳＲモータ１２に限定されず、エンコーダの出力信号のカウント値に基づいてロータの回転位置を検出してモータの通電相を順次切り換えるブラシレス型のモータであれば、ＳＲモータ以外のブラシレス型のモータを用いても良い。
【０２１６】
また、前記実施形態（１）のレンジ切換装置は、ＰレンジとＮｏｔＰレンジの２つのレンジを切り換える構成であるが、例えば、ディテントレバー１５の回動動作に連動して自動変速機のレンジ切換弁とマニュアルバルブを切り換えて、自動変速機のＰ、Ｒ、Ｎ、Ｄ、…の各レンジを切り換えるレンジ切換装置にも本発明を適用して実施できる。
【０２１７】
その他、本発明は、レンジ切換装置に限定されず、ＳＲモータ等のブラシレス型のモータを駆動源とする各種の装置に適用して実施できることは言うまでもない。
【図面の簡単な説明】
【図１】本発明の実施形態（１）を示すレンジ切換装置の斜視図
【図２】実施形態（１）のＳＲモータの構成を説明する図
【図３】実施形態（１）のＳＲモータを駆動する回路構成を示す回路図
【図４】レンジ切換装置の制御システム全体の構成を概略的に示す図
【図５】エンコーダのロータリマグネットの構成を説明する平面図
【図６】エンコーダの側面図
【図７】（ａ）はエンコーダの出力波形を示すタイムチャート、（ｂ）は通電相切り換えパターンを示すタイムチャート
【図８】初期駆動ルーチンの処理の流れを示すフローチャート（その１）
【図９】初期駆動ルーチンの処理の流れを示すフローチャート（その２）
【図１０】Ｐレンジ初期駆動ルーチンの処理の流れを示すフローチャート
【図１１】ＮｏｔＰレンジ初期駆動ルーチンの処理の流れを示すフローチャート
【図１２】Ｐレンジで初期駆動を行ったときの制御例を示すタイムチャート
【図１３】初期駆動中にレンジ切換操作されたときの制御例を示すタイムチャート
【図１４】初期駆動中にレンジ切換操作されたときの初期位置ずれ学習方法を説明するタイムチャート
【図１５】エンコーダカウンタルーチンの処理の流れを示すフローチャート
【図１６】カウントアップ値ΔＮ算出マップの一例を示す図
【図１７】指令レンジシフト、Ａ相信号、Ｂ相信号、エンコーダカウント値の関係を示すタイムチャート
【図１８】モータＦ／Ｂ制御ルーチンの処理の流れを示すフローチャート
【図１９】通電相設定ルーチンの処理の流れを示すフローチャート
【図２０】Ｍｐｔｎ％１２から通電相への変換テーブルの一例を示す図
【図２１】通電処理を説明するタイムチャート
【図２２】リカバリ処理の一例を説明するタイムチャート
【図２３】エンコーダのＡ相信号・Ｂ相信号の異常を検出する方法を説明する図
【図２４】Ｆ／Ｂ制御中のロータの逆転を検出する方法を説明する図
【図２５】オープンループ制御の一例を説明するタイムチャート
【図２６】リカバリ処理ルーチンの処理の流れを示すフローチャート
【図２７】オープンループ制御開始時の位置カウント値Ｎｃｎｔの初期値を算出する方法を説明する図
【図２８】Ｆ／Ｂ制御中ＡＢ相信号異常検出ルーチンの処理の流れを示すフローチャート
【図２９】逆転カウンタルーチンの処理の流れを示すフローチャート
【図３０】逆転判定ルーチンの処理の流れを示すフローチャート
【図３１】システム異常診断ルーチンの処理の流れを示すフローチャート（その１）
【図３２】システム異常診断ルーチンの処理の流れを示すフローチャート（その２）
【図３３】フェールセーフ処理ルーチンの処理の流れを示すフローチャート（その１）
【図３４】フェールセーフ処理ルーチンの処理の流れを示すフローチャート（その２）
【図３５】オープンループ制御ルーチンの処理の流れを示すフローチャート（その１）
【図３６】オープンループ制御ルーチンの処理の流れを示すフローチャート（その２）
【図３７】オープンループ制御ルーチンの処理の流れを示すフローチャート（その３）
【図３８】Ｍｐｔｎｏｐ％６から通電相への変換テーブルの一例を示す図
【図３９】バッテリ電圧から最大回転速度パラメータｍｓｐｄｍａｘを求めるテーブルの一例を示す図
【図４０】回転速度パラメータｍｓｐｄから励磁時間ｔｍを求めるテーブルの一例を示す図
【図４１】オープンループ制御時エンジントルク抑制ルーチンの処理の流れを示すフローチャート
【図４２】実施形態（１）の駆動コイル断線検出ルーチンの処理の流れを示すフローチャート
【図４３】通電処理ルーチンの処理の流れを示すフローチャート
【図４４】実施形態（２）のＳＲモータを駆動する回路構成を示す回路図
【図４５】実施形態（２）の駆動コイル断線検出ルーチンの処理の流れを示すフローチャート
【符号の説明】
１１…レンジ切換機構、１２…ＳＲモータ、１４…出力軸センサ、１５…ディテントレバー、１８…パーキングロッド、２０…パーキングギヤ、２１…ロックレバー、２３…ディテントバネ、２３ａ…係合部、２４…Ｐレンジ保持凹部、２５…ＮｏｔＰレンジ保持凹部、２６…減速機構、２７…自動変速機、３１…ステータ、３２…ロータ、３３，３４…巻線、３５，３６…駆動コイル、３７，３８…モータドライバ（駆動回路）、４０…バッテリ、４１…ＥＣＵ（フィードバック制御手段，オープンループ制御手段，異常診断手段）、４３…Ｐレンジスイッチ、４４…ＮｏｔＰレンジスイッチ、４６…エンコーダ、４７…ロータリマグネット、４８…Ａ相信号用の磁気検出素子、４９…Ｂ相信号用の磁気検出素子、５０…Ｚ相信号用の磁気検出素子、６０…断線検出回路、６１，６２…抵抗、６３…電流センサ。
【図１】
2004056857.tif 000004
【図２】
2004056857.tif 000005
【図３】
2004056857.tif 000006
【図４】
2004056857.tif 000007
【図５】
2004056857.tif 000008
【図６】
2004056857.tif 000009
【図７】
2004056857.tif 000010
【図８】
2004056857.tif 000011
【図９】
2004056857.tif 000012
【図１０】
2004056857.tif 000013
【図１１】
2004056857.tif 000014
【図１２】
2004056857.tif 000015
【図１３】
2004056857.tif 000016
【図１４】
2004056857.tif 000017
【図１５】
2004056857.tif 000018
【図１６】
2004056857.tif 000019
【図１７】
2004056857.tif 000020
【図１８】
2004056857.tif 000021
【図１９】
2004056857.tif 000022
【図２０】
2004056857.tif 000023
【図２１】
2004056857.tif 000024
【図２２】
2004056857.tif 000025
【図２３】
2004056857.tif 000026
【図２４】
2004056857.tif 000027
【図２５】
2004056857.tif 000028
【図２６】
2004056857.tif 000029
【図２７】
2004056857.tif 000030
【図２８】
2004056857.tif 000031
【図２９】
2004056857.tif 000032
【図３０】
2004056857.tif 000033
【図３１】
2004056857.tif 000034
【図３２】
2004056857.tif 000035
【図３３】
2004056857.tif 000036
【図３４】
2004056857.tif 000037
【図３５】
2004056857.tif 000038
【図３６】
2004056857.tif 000039
【図３７】
2004056857.tif 000040
【図３８】
2004056857.tif 000041
【図３９】
2004056857.tif 000042
【図４０】
2004056857.tif 000043
【図４１】
2004056857.tif 000044
【図４２】
2004056857.tif 000045
【図４３】
2004056857.tif 000046
【図４４】
2004056857.tif 000047
【図４５】
2004056857.tif 000048