以下、本発明を実施するための形態を具体化した幾つかの実施例を説明する。
本発明の実施例1を図1乃至図8に基づいて説明する。
まず、図1及び図2に基づいてレンジ切換制御システムの構成を説明する。
図1に示すように、レンジ切換機構11は、自動変速機27(図2参照)のシフトレンジをPレンジ(パーキングレンジ)とNotPレンジとの間で切り換える2ポジション式のレンジ切換機構である。このレンジ切換機構11の駆動源となるモータ12は、例えばスイッチトリラクタンスモータにより構成されている。このモータ12には、減速機構26(図2参照)が内蔵され、その出力軸12a(図2参照)に、レンジ切換機構11のマニュアルシャフト13が接続されている。このマニュアルシャフト13に、ディテントレバー15が固定されている。
ディテントレバー15には、ディテントレバー15の回転に応じて直線運動するマニュアルバルブ(図示せず)が接続され、このマニュアルバルブによって自動変速機27の内部の油圧回路(図示せず)を切り換えることで、シフトレンジを切り換えるようになっている。
また、ディテントレバー15にはL字形のパーキングロッド18が固定され、このパーキングロッド18の先端部に設けられた円錐体19がロックレバー21に当接している。このロックレバー21は、円錐体19の位置に応じて軸22を中心にして上下動してパーキングギヤ20をロック/ロック解除するようになっている。パーキングギヤ20は、自動変速機27の出力軸に設けられ、このパーキングギヤ20がロックレバー21によってロックされると、車両の駆動輪が回り止めされた状態(パーキング状態)に保持される。
一方、ディテントレバー15を各レンジ(PレンジとNotPレンジ)の位置に保持するためのディテントバネ23が支持ベース17に固定され、ディテントレバー15には、Pレンジ保持凹部24とNotPレンジ保持凹部25が形成されている。ディテントバネ23の先端に設けられた係合部23aがディテントレバー15のPレンジ保持凹部24に嵌まり込んだときに、ディテントレバー15がPレンジの位置に保持される。ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25に嵌まり込んだときに、ディテントレバー15がNotPレンジの位置に保持される。これらディテントレバー15とディテントバネ23等からディテントレバー15の回転位置を各レンジの位置に係合保持する(つまりレンジ切換機構11を各レンジの位置に保持する)ためのディテント機構14(節度機構)が構成されている。
Pレンジでは、パーキングロッド18がロックレバー21に接近する方向に移動して、円錐体19の太い部分がロックレバー21を押し上げてロックレバー21の凸部21aがパーキングギヤ20に嵌まり込んでパーキングギヤ20をロックした状態となる。それによって、自動変速機27の出力軸(駆動輪)がロックされた状態(パーキング状態)に保持される。
一方、NotPレンジでは、パーキングロッド18がロックレバー21から離れる方向に移動して、円錐体19の太い部分がロックレバー21から抜け出てロックレバー21が下降する。それによって、ロックレバー21の凸部21aがパーキングギヤ20から外れてパーキングギヤ20のロックが解除され、自動変速機27の出力軸が回転可能な状態(走行可能な状態)に保持される。
図2に示すように、レンジ切換機構11のマニュアルシャフト13には、マニュアルシャフト13の回転角(回転位置)を検出する回転センサ16が設けられている。この回転センサ16は、マニュアルシャフト13の回転角度に応じた電圧を出力するセンサ(例えばポテンショメータ)によって構成され、その出力電圧によって実際のシフトレンジが、PレンジとNotPレンジのいずれであるかを確認できるようになっている。
図2に示すように、モータ12には、ロータの回転角(回転位置)を検出するためのエンコーダ46が設けられている。このエンコーダ46は、例えば磁気式のロータリエンコーダにより構成されており、モータ12のロータの回転に同期して所定の位相差を有するA相とB相のパルス信号を所定角度毎に出力するように構成されている。レンジ切換制御回路42のマイコン41(制御手段)は、エンコーダ46から出力されるA相信号とB相信号の立ち上がり/立ち下がりの両方のエッジをカウントして、そのカウント値(以下「エンコーダカウント値」という)に応じてモータドライバ37によってモータ12の通電相を所定の順序で切り換えることでモータ12を回転駆動する。尚、モータ12の3相(U相,V相,W相)の巻線とモータドライバ37の組み合わせを2系統設けて、一方の系統が故障しても、他方の系統でモータ12を回転駆動できる構成にしても良い。
モータ12の回転中は、A相信号とB相信号の発生順序によってモータ12の回転方向を判定し、正回転(Pレンジ→NotPレンジの回転方向)ではエンコーダカウント値をカウントアップし、逆回転(NotPレンジ→Pレンジの回転方向)ではエンコーダカウント値をカウントダウンする。これにより、モータ12が正回転/逆回転のいずれの方向に回転しても、エンコーダカウント値とモータ12の回転角との対応関係が維持されるため、正回転/逆回転のいずれの回転方向でも、エンコーダカウント値によってモータ12の回転位置を検出して、その回転位置に対応した相の巻線に通電してモータ12を回転駆動できるようになっている。
レンジ切換制御回路42には、シフトスイッチ44で検出したシフトレバー操作位置の信号が入力される。これにより、レンジ切換制御回路42のマイコン41は、運転者のシフトレバー操作等に応じて目標レンジを切り換え、その目標レンジに応じてモータ12を駆動してシフトレンジを切り換え、切り換え後の実際のシフトレンジをインストルメントパネル(図示せず)に設けられたレンジ表示部45に表示する。
レンジ切換制御回路42には、車両に搭載されたバッテリ50(電源)から電源リレー51を介して電源電圧が供給される。電源リレー51のオン/オフは、電源スイッチであるIGスイッチ52(イグニッションスイッチ)のオン/オフを手動操作することで切り換えられる。IGスイッチ52がオンされると、電源リレー51がオンされてレンジ切換制御回路42に電源電圧が供給され、IGスイッチ52がオフされると、電源リレー51がオフされてレンジ切換制御回路42への電源供給が遮断(オフ)される。
ところで、エンコーダカウント値は、マイコン41のRAMに記憶されるため、レンジ切換制御回路42の電源がオフされると、エンコーダカウント値の記憶値が消えてしまう。そのため、レンジ切換制御回路42の電源投入直後のエンコーダカウント値は、実際のモータ12の回転位置(通電相)に対応したものとならない。従って、エンコーダカウント値に応じて通電相を切り換えるためには、電源投入後にエンコーダカウント値と実際のモータ12の回転位置とを対応させて、エンコーダカウント値と通電相とを対応させる必要がある。
そこで、マイコン41は、電源投入後に初期駆動を行ってモータ12の通電相とエンコーダカウント値との対応関係を学習する。この初期駆動では、オープンループ制御でモータ12の通電相の切り換えを所定のタイムスケジュールで一巡させることで、いずれかの通電相でモータ12の回転位置と該通電相とを一致させてモータ12を回転駆動してエンコーダ46のA相信号及びB相信号のエッジをカウントし、初期駆動終了時のエンコーダカウント値とモータ12の回転位置と通電相との対応関係を学習する。
また、マイコン41は、モータ12の起動後のエンコーダカウント値に基づいてモータ12の起動位置からの回転量(回転角)を検出できるだけであるため、電源投入後に何等かの方法で、モータ12の絶対的な回転位置を検出しないと、モータ12を正確に目標回転位置まで回転駆動することができない。
そこで、マイコン41は、初期駆動の終了後に、モータ12をレンジ切換機構11の可動範囲の限界位置に突き当たるまで回転させる突き当て制御を実行して、その限界位置を基準位置として学習し、この基準位置のエンコーダカウント値を基準にしてモータ12の回転量(回転角)を制御する。
基準位置を学習した後、マイコン41は、運転者のシフトレバー操作により目標レンジが切り換えられると、それに応じて目標回転位置(目標カウント値)を変更する。そして、エンコーダカウント値に基づいてモータ12の通電相を順次切り換えることでモータ12を目標レンジに相当する目標回転位置まで回転駆動するフィードバック制御を実行して、シフトレンジを目標レンジに切り換える(レンジ切換機構11の切換位置を目標レンジの位置に切り換える)。
ところで、一過性のノイズがエンコーダ46の出力信号(A相信号又はB相信号)と誤認されて、エンコーダカウント値とモータ12の回転位置と通電相との対応関係が崩れると、エンコーダカウント値に基づいて通電相を順次切り換えてモータ12を回転駆動するモータ回転制御を正常に実行できなくなる可能性がある。
そこで、本実施例1では、レンジ切換制御回路42のマイコン41により後述する図5乃至図8のノイズ判定ルーチンを実行することで、A相信号とB相信号が所定時間以内の時間間隔で入力された場合に、該A相信号と該B相信号のうち前回の入力信号との時間間隔が短い方をノイズと判定する。
A相信号とB相信号が両方とも正常であれば、A相信号とB相信号は所定の位相差を有するはずである。このため、A相信号とB相信号が所定時間以内の時間間隔で入力された場合(A相信号とB相信号がほぼ同時に入力された場合)には、A相信号とB相信号のうちの一方が正常な間隔よりも短い間隔で入力されたノイズであると考えられる。従って、A相信号とB相信号が所定時間以内の時間間隔で入力された場合に、A相信号とB相信号のうち前回の入力信号との時間間隔が短い方をノイズと判定することで、ノイズを精度良く検出してエンコーダカウント値の演算処理に反映させないようにすることができる。
具体的には、図3に示すように、A相信号の立ち上がりエッジとB相信号の立ち下がりエッジとがほぼ同時に入力された場合に、A相の今回のパルス幅Ta (今回の立ち上がりエッジと前回の立ち下がりエッジとの時間間隔)とB相の今回のパルス幅Tb (今回の立ち下がりエッジと前回の立ち上がりエッジとの時間間隔)とを比較する。その結果、A相の今回のパルス幅Ta がB相の今回のパルス幅Tb よりも短い場合には、A相信号の今回の立ち上がりエッジをノイズと判定して無視する(エンコーダカウント値の演算処理に反映させない)。この場合、A相信号の前回の立ち下がりエッジも無視する。
また、図4に示すように、A相信号の立ち下がりエッジとB相信号の立ち下がりエッジとがほぼ同時に入力された場合に、A相の今回のパルス幅Ta (今回の立ち下がりエッジと前回の立ち上がりエッジとの時間間隔)とB相の今回のパルス幅Tb (今回の立ち下がりエッジと前回の立ち上がりエッジとの時間間隔)とを比較する。その結果、A相の今回のパルス幅Ta がB相の今回のパルス幅Tb よりも短い場合には、A相信号の今回の立ち下がりエッジをノイズと判定して無視する。この場合、A相信号の次回の立ち上がりエッジも無視する。
このようにすれば、一過性のノイズによりエンコーダカウント値とモータ12の回転位置と通電相との対応関係が崩れてしまうことを防止することができ、エンコーダカウント値に基づいて通電相を順次切り換えてモータ12を回転駆動するモータ回転制御を継続することができる。
以下、本実施例1でレンジ切換制御回路42のマイコン41が実行する図5乃至図8のノイズ判定ルーチンの処理内容を説明する。
図5乃至図8に示すノイズ判定ルーチンは、レンジ切換制御回路42の電源オン期間中にマイコン41により所定周期で繰り返し実行される。本ルーチンが起動されると、まず、ステップ101で、モータ回転制御の実行中であるか否かを判定する。
このステップ101で、モータ回転制御の実行中であると判定された場合には、ステップ102に進み、パルス信号のエッジ(立ち上がりエッジ又は立ち下がりエッジ)が入力されたか否かを判定する。このステップ102で、パルス信号のエッジが入力されていないと判定された場合には、ステップ103以降の処理を実行することなく、本ルーチンを終了する。
その後、上記ステップ102で、パルス信号のエッジが入力されたと判定された場合には、ステップ103に進み、次の(a) 〜(c) のいずれであるかを判定する。
(a) A相信号のエッジが入力された
(b) B相信号のエッジが入力された
(c) A相信号のエッジとB相信号のエッジがほぼ同時に入力された
この際、(c) A相信号のエッジとB相信号のエッジがほぼ同時に入力されたか否かは、A相信号のエッジとB相信号のエッジが所定時間以内の時間間隔で入力されたか否か(A相信号のエッジとB相信号のエッジとの時間間隔が所定時間以内であるか否か)によって判定する。
このステップ103で、(a) A相信号のエッジが入力されたと判定された場合には、ステップ104に進み、A相の今回のパルス幅Ta(i)(今回のエッジと前回のエッジとの時間間隔)が前回のパルス幅Ta(i-1)(前回のエッジと前々回のエッジとの時間間隔)に対して極端に短い(例えば、今回のパルス幅Ta(i)<1/2×前回のパルス幅Ta(i-1))か否かを判定する。
このステップ104で、A相の今回のパルス幅Ta(i)が前回のパルス幅Ta(i-1)に対して極端に短い(例えば、今回のパルス幅Ta(i)<1/2×前回のパルス幅Ta(i-1))と判定された場合には、ステップ105に進み、A相信号の今回のエッジをノイズと判定して無視する(エンコーダカウント値の演算処理に反映させない)。
これに対して、上記ステップ104で、A相の今回のパルス幅Ta(i)が前回のパルス幅Ta(i-1)に対して極端に短くはない(例えば、今回のパルス幅Ta(i)≧1/2×前回のパルス幅Ta(i-1))と判定された場合には、ステップ106に進み、A相信号の今回のエッジを正常(ノイズではない)と判定してエンコーダカウント値の演算処理に反映させる。
一方、上記ステップ103で、(b) B相信号のエッジが入力されたと判定された場合には、ステップ107に進み、B相の今回のパルス幅Tb(i)(今回のエッジと前回のエッジとの時間間隔)が前回のパルス幅Tb(i-1)(前回のエッジと前々回のエッジとの時間間隔)に対して極端に短い(例えば、今回のパルス幅Tb(i)<1/2×前回のパルス幅Tb(i-1))か否かを判定する。
このステップ107で、B相の今回のパルス幅Tb(i)が前回のパルス幅Tb(i-1)に対して極端に短い(例えば、今回のパルス幅Tb(i)<1/2×前回のパルス幅Tb(i-1))と判定された場合には、ステップ108に進み、B相信号の今回のエッジをノイズと判定して無視する。
これに対して、上記ステップ107で、B相の今回のパルス幅Tb(i)が前回のパルス幅Tb(i-1)に対して極端に短くはない(例えば、今回のパルス幅Tb(i)≧1/2×前回のパルス幅Tb(i-1))と判定された場合には、ステップ109に進み、B相信号の今回のエッジを正常(ノイズではない)と判定してエンコーダカウント値の演算処理に反映させる。
また、上記ステップ103で、(c) A相信号のエッジとB相信号のエッジがほぼ同時に入力されたと判定された場合には、図6のステップ110に進み、A相の今回のパルス幅Ta (今回のエッジと前回のエッジとの時間間隔)とB相の今回のパルス幅Tb (今回のエッジと前回のエッジとの時間間隔)とを比較する。
このステップ110で、B相の今回のパルス幅Tb がA相の今回のパルス幅Ta よりも短い(Tb <Ta )と判定された場合には、ステップ111に進み、B相信号の今回のエッジをノイズと判定して無視する。この後、ステップ112に進み、A相信号の今回のエッジを正常(ノイズではない)と判定してエンコーダカウント値の演算処理に反映させる。
一方、上記ステップ110で、A相の今回のパルス幅Ta がB相の今回のパルス幅Tb よりも短い(Ta <Tb )と判定された場合には、ステップ113に進み、A相信号の今回のエッジをノイズと判定して無視する。この後、ステップ114に進み、B相信号の今回のエッジを正常(ノイズではない)と判定してエンコーダカウント値の演算処理に反映させる。
また、上記ステップ110で、A相の今回のパルス幅Ta とB相の今回のパルス幅Tb が等しい(Ta =Tb )と判定された場合には、ステップ115に進み、A相信号の今回のエッジとB相信号の今回のエッジを両方ともノイズと判定して無視する。
上記ステップ102〜115の処理で、入力されたパルス信号がノイズであるか否かを判定して、ノイズの影響を排除した後、ステップ116に進み、エンコーダカウント値に基づいて通電相を切り換える通電制御を実行する。
これに対して、上記ステップ101で、モータ回転制御の実行中ではない(モータ回転制御の停止中である)と判定された場合には、図7のステップ117に進み、パルス信号のエッジが入力されたか否かを判定する。このステップ117で、パルス信号のエッジが入力されていないと判定された場合には、ステップ118以降の処理を実行することなく、本ルーチンを終了する。
その後、上記ステップ117で、パルス信号のエッジが入力されたと判定された場合には、ステップ118に進み、次の(a) 〜(c) のいずれであるかを判定する。
(a) A相信号のエッジが入力された
(b) B相信号のエッジが入力された
(c) A相信号のエッジとB相信号のエッジがほぼ同時に入力された
このステップ118で、(a) A相信号のエッジが入力されたと判定された場合には、ステップ119に進み、A相の今回のパルス幅Ta (今回のエッジと前回のエッジとの時間間隔)が判定値よりも短いか否かを判定する。ここで、判定値は、例えば、システムの機械的な共振周期や回路特性による共振周期と同じか又はそれよりも短い時間間隔に設定されている。
このステップ119で、A相の今回のパルス幅Ta が判定値よりも短いと判定された場合には、ステップ120に進み、A相信号の今回のエッジをノイズと判定して無視する。
これに対して、上記ステップ119で、A相の今回のパルス幅Ta が判定値以上であると判定された場合には、ステップ121に進み、A相信号の今回のエッジを正常(ノイズではない)と判定してエンコーダカウント値の演算処理に反映させる。
一方、上記ステップ118で、(b) B相信号のエッジが入力されたと判定された場合には、ステップ122に進み、B相の今回のパルス幅Tb (今回のエッジと前回のエッジとの時間間隔)が判定値よりも短いか否かを判定する。ここで、判定値は、例えば、システムの機械的な共振周期や回路特性による共振周期と同じか又はそれよりも短い時間間隔に設定されている。
このステップ122で、B相の今回のパルス幅Tb が判定値よりも短いと判定された場合には、ステップ123に進み、B相信号の今回のエッジをノイズと判定して無視する。
これに対して、上記ステップ122で、B相の今回のパルス幅Tb が判定値以上であると判定された場合には、ステップ124に進み、B相信号の今回のエッジを正常(ノイズではない)と判定してエンコーダカウント値の演算処理に反映させる。
また、上記ステップ118で、(c) A相信号のエッジとB相信号のエッジがほぼ同時に入力されたと判定された場合には、図8のステップ125に進み、A相の今回のパルス幅Ta (今回のエッジと前回のエッジとの時間間隔)とB相の今回のパルス幅Tb (今回のエッジと前回のエッジとの時間間隔)とを比較する。
このステップ125で、B相の今回のパルス幅Tb がA相の今回のパルス幅Ta よりも短い(Tb <Ta )と判定された場合には、ステップ126に進み、B相信号の今回のエッジをノイズと判定して無視する。
この後、ステップ119に進み、A相の今回のパルス幅Ta が判定値よりも短いか否かを判定し、A相の今回のパルス幅Ta が判定値よりも短いと判定された場合には、ステップ120に進み、A相信号の今回のエッジをノイズと判定して無視する。これに対して、上記ステップ119で、A相の今回のパルス幅Ta が判定値以上であると判定された場合には、ステップ121に進み、A相信号の今回のエッジを正常と判定してエンコーダカウント値の演算処理に反映させる。
一方、上記ステップ125で、A相の今回のパルス幅Ta がB相の今回のパルス幅Tb よりも短い(Ta <Tb )と判定された場合には、ステップ127に進み、A相信号の今回のエッジをノイズと判定して無視する。
この後、ステップ122に進み、B相の今回のパルス幅Tb が判定値よりも短いか否かを判定し、B相の今回のパルス幅Tb が判定値よりも短いと判定された場合には、ステップ123に進み、B相信号の今回のエッジをノイズと判定して無視する。これに対して、上記ステップ122で、B相の今回のパルス幅Tb が判定値以上であると判定された場合には、ステップ124に進み、B相信号の今回のエッジを正常と判定してエンコーダカウント値の演算処理に反映させる。
また、上記ステップ125で、A相の今回のパルス幅Ta とB相の今回のパルス幅Tb が等しい(Ta =Tb )と判定された場合には、ステップ128に進み、A相信号の今回のエッジとB相信号の今回のエッジを両方ともノイズと判定して無視する。
以上説明した本実施例1では、A相信号とB相信号が所定時間以内の時間間隔で入力された場合(A相信号とB相信号がほぼ同時に入力された場合)に、A相信号とB相信号のうち前回の入力信号との時間間隔が短い方をノイズと判定するようにしている。このようにすれば、ノイズを精度良く検出してエンコーダカウント値の演算処理に反映させないようにすることができる。これにより、一過性のノイズによりエンコーダカウント値とモータ12の回転位置と通電相との対応関係が崩れてしまうことを防止して、モータ回転制御を継続することができ、一過性のノイズによりモータ回転制御を正常に実行できなくなる事態を回避することができる。
次に、図9乃至図12を用いて本発明の実施例2を説明する。但し、前記実施例1と実質的に同一部分については説明を省略又は簡略化し、主として前記実施例1と異なる部分について説明する。
本実施例2では、レンジ切換制御回路42のマイコン41により後述する図11及び図12のノイズ判定用の各ルーチンを実行することで、次のようなノイズ判定を行う。モータ12の回転駆動中にエンコーダ46の出力信号が入力される毎に今回の入力信号を前回の入力信号と比較して、今回の入力信号が有効な信号であるか否かを判定し、今回の入力信号が有効な信号ではないと判定した場合に、今回の入力信号をノイズと判定する。
A相信号とB相信号が両方とも正常であれば、A相信号とB相信号が所定の順序で入力される(A相信号のエッジとB相信号のエッジが交互に入力される)はずである。このため、今回の入力信号を前回の入力信号と比較することで、今回の入力信号が有効な信号であるか否かを判定することができ、今回の入力信号が有効な信号ではないと判定した場合に、今回の入力信号をノイズと判定することで、ノイズを精度良く検出してエンコーダカウント値の演算処理に反映させないようにすることができる。
具体的には、A相信号のエッジが入力される毎に、前回の入力がB相信号のエッジであるか否か(つまり今回の入力信号が前回の入力信号と異なる相の信号であるか否か)を判定することで、今回のA相信号のエッジが有効な信号であるか否かを判定する。前回の入力がB相信号のエッジではない(A相信号のエッジである)と判定された場合には、A相信号のエッジが連続して入力されたため、今回のA相信号のエッジが有効な信号ではないと判断して、今回のA相信号のエッジをノイズと判定する。
また、B相信号のエッジが入力される毎に、前回の入力がA相信号のエッジであるか否か(つまり今回の入力信号が前回の入力信号と異なる相の信号であるか否か)を判定することで、今回のB相信号のエッジが有効な信号であるか否かを判定する。前回の入力がA相信号のエッジではない(B相信号のエッジである)と判定された場合には、B相信号のエッジが連続して入力されたため、今回のB相信号のエッジが有効な信号ではないと判断して、今回のB相信号のエッジをノイズと判定する。
例えば、図9に示すように、A相信号の立ち上がりエッジの次にA相信号の立ち下がりエッジが入力された場合には、A相信号のエッジが連続して入力されたため、A相信号の今回の立ち下がりエッジをノイズと判定して無視する(エンコーダカウント値の演算処理に反映させない)。この場合、A相信号の次回の立ち上がりエッジも無視する。
また、図10に示すように、A相信号の立ち下がりエッジの次にA相信号の立ち上がりエッジが入力された場合には、A相信号のエッジが連続して入力されたため、A相信号の今回の立ち上がりエッジをノイズと判定して無視する。更に、A相信号の立ち上がりエッジの次にA相信号の立ち下がりエッジが連続して入力された場合には、そのA相信号の立ち下がりエッジもノイズと判定して無視する。
このようにすれば、一過性のノイズによりエンコーダカウント値とモータ12の回転位置と通電相との対応関係が崩れてしまうことを防止することができ、エンコーダカウント値に基づいて通電相を順次切り換えてモータ12を回転駆動するモータ回転制御を継続することができる。
以下、本実施例2でレンジ切換制御回路42のマイコン41が実行する図11及び図12のノイズ判定用の各ルーチンの処理内容を説明する。
図11に示すA相ノイズ判定ルーチンは、モータ12の回転駆動中にA相信号のエッジ(立ち上がりエッジ又は立ち下がりエッジ)が入力される毎にマイコン41により実行される。
A相信号のエッジが入力されて、本ルーチンが起動されると、まず、ステップ201で、前回の入力がB相信号のエッジであるか否か(つまり今回の入力信号が前回の入力信号と異なる相の信号であるか否か)を判定することで、今回のA相信号のエッジが有効な信号であるか否かを判定する。
このステップ201で、前回の入力がB相信号のエッジではない(A相信号のエッジである)と判定された場合には、A相信号のエッジが連続して入力されたため、今回のA相信号のエッジが有効な信号ではないと判断して、ステップ202に進み、今回のA相信号のエッジをノイズと判定して無視する(エンコーダカウント値の演算処理に反映させない)。
これに対して、上記ステップ201で、前回の入力がB相信号のエッジであると判定された場合には、ステップ203に進み、マイコン41のA相信号の入力ポートの状態(HレベルであるかLレベルであるか)が前回と異なっているか否かを判定する。
このステップ203で、A相信号の入力ポートの状態が前回と異なっていると判定された場合には、ステップ204に進み、今回のA相信号のエッジを正常(ノイズではない)と判定してエンコーダカウント値の演算処理に反映させる。この後、ステップ205に進み、A相信号の入力ポートの状態を記憶する。
一方、上記ステップ203で、A相信号の入力ポートの状態が前回と同じである(変化していない)と判定された場合には、ステップ206に進み、今回のA相信号のエッジをノイズと判定して無視する。
図12に示すB相ノイズ判定ルーチンは、モータ12の回転駆動中にB相信号のエッジ(立ち上がりエッジ又は立ち下がりエッジ)が入力される毎にマイコン41により実行される。
B相信号のエッジが入力されて、本ルーチンが起動されると、まず、ステップ301で、前回の入力がA相信号のエッジであるか否か(つまり今回の入力信号が前回の入力信号と異なる相の信号であるか否か)を判定することで、今回のB相信号のエッジが有効な信号であるか否かを判定する。
このステップ301で、前回の入力がA相信号のエッジではない(B相信号のエッジである)と判定された場合には、B相信号のエッジが連続して入力されたため、今回のB相信号のエッジが有効な信号ではないと判断して、ステップ302に進み、今回のB相信号のエッジをノイズと判定して無視する(エンコーダカウント値の演算処理に反映させない)。
これに対して、上記ステップ301で、前回の入力がA相信号のエッジであると判定された場合には、ステップ303に進み、マイコン41のB相信号の入力ポートの状態(HレベルであるかLレベルであるか)が前回と異なっているか否かを判定する。
このステップ303で、B相信号の入力ポートの状態が前回と異なっていると判定された場合には、ステップ304に進み、今回のB相信号のエッジを正常(ノイズではない)と判定してエンコーダカウント値の演算処理に反映させる。この後、ステップ305に進み、B相信号の入力ポートの状態を記憶する。
一方、上記ステップ303で、B相信号の入力ポートの状態が前回と同じである(変化していない)と判定された場合には、ステップ306に進み、今回のB相信号のエッジをノイズと判定して無視する。
以上説明した本実施例2では、モータ12の回転駆動中に、A相信号のエッジが連続して入力された場合には、今回のA相信号のエッジが有効な信号ではないと判断して、今回のA相信号のエッジをノイズと判定する。一方、B相信号のエッジが連続して入力された場合には、今回のB相信号のエッジが有効な信号ではないと判断して、今回のB相信号のエッジをノイズと判定する。このようにすれば、ノイズを精度良く検出してエンコーダカウント値の演算処理に反映させないようにすることができる。これにより、一過性のノイズによりエンコーダカウント値とモータ12の回転位置と通電相との対応関係が崩れてしまうことを防止して、モータ回転制御を継続することができ、一過性のノイズによりモータ回転制御を正常に実行できなくなる事態を回避することができる。
次に、図13乃至図16を用いて本発明の実施例3を説明する。但し、前記実施例1と実質的に同一部分については説明を省略又は簡略化し、主として前記実施例1と異なる部分について説明する。
本実施例3では、レンジ切換制御回路42のマイコン41により後述する図14及び図15の再学習ルーチンを実行することで、次のようにして再学習を行う。フィードバック制御の実行中にエンコーダカウント値が正常に変化しない場合に、オープンループ制御に切り換え、このオープンループ制御でモータ12を目標回転位置まで回転駆動する期間に、通電相の切換回数とエンコーダカウント値の変化量との関係が正常か否かを判定する。その関係が正常と判定した場合に、エンコーダカウント値と通電相との対応関係(図16参照)を再学習する。
具体的には、図13に示すように、運転者のシフトレバー操作により目標レンジが切り換えられた時点t1 で、フィードバック制御を実行する。このフィードバック制御では、エンコーダカウント値に基づいてモータ12の通電相を順次切り換えることでモータ12を目標レンジに相当する目標回転位置まで回転駆動する。
このフィードバック制御の実行中に、一過性のノイズよりエンコーダカウント値とモータ12の回転位置と通電相との対応関係が崩れて、エンコーダカウント値が正常に変化しないと判定した場合には、その時点t2 で、オープンループ制御に切り換える。このオープンループ制御では、エンコーダカウント値の情報をフィードバックせずにモータ12の通電相を順次切り換える。
オープンループ制御の開始直後は、モータ12の回転位置と通電相との対応関係が崩れているが、オープンループ制御で通電相を順次切り換えることで、いずれかの通電相でモータ12の回転位置と通電相を一致させてモータ12を回転駆動することができる。
しかし、オープンループ制御を開始してからの駆動ステップ数(通電相の切換回数)である駆動済みステップ数が通電相1周期分に達していない場合には、まだモータ12の回転位置と通電相が一致せずにモータ12が回転し始めていない可能性があるため、エンコーダ異常再判定を実行しない。
その後、駆動済みステップ数が通電相1周期分に達した時点t3 で、モータ12の回転位置と通電相が一致してモータ12が回転し始めていると判断して、エンコーダ異常再判定を実行する。このエンコーダ異常再判定では、通電相の切換回数とエンコーダカウント値の変化量との関係が正常か否かを判定する。その結果、通電相の切換回数とエンコーダカウント値の変化量との関係が正常と判定した時点t4 で、エンコーダカウント値と通電相との対応関係(図16参照)を再学習する。このようにすれば、オープンループ制御でモータ12を目標回転位置まで回転駆動しているときに、エンコーダカウント値と通電相との対応関係を再学習することができる。
以下、本実施例3でレンジ切換制御回路42のマイコン41が実行する図14及び図15の再学習ルーチンの処理内容を説明する。
図14及び図15に示す再学習ルーチンは、フィードバック制御の実行中にマイコン41により実行される。本ルーチンが起動されると、まず、ステップ401で、通電相が切り換えられたか否かを判定し、通電相が切り換えられたと判定された場合には、ステップ402に進み、エンコーダカウント値が正常に変化したか否かを判定する。
このステップ402で、エンコーダカウント値が正常に変化したと判定された場合には、ステップ403に進み、モータ12の回転位置が目標回転位置に到達したか否か(モータ12が目標回転位置まで回転したか否か)を判定する。
このステップ403で、モータ12の回転位置が目標回転位置に到達していないと判定された場合には、上記ステップ401に戻る。その後、上記ステップ403で、モータ12の回転位置が目標回転位置に到達したと判定された時点で、本ルーチンを終了する。
一方、上記ステップ402で、エンコーダカウント値が正常に変化していないと判定された場合には、ステップ404に進み、エンコーダカウント値が正常に変化しない状態で仮異常判定時間が経過したか否か(エンコーダカウント値が正常に変化しない状態が仮異常判定時間以上継続したか否か)を判定する。
このステップ404で、仮異常判定時間が経過していないと判定された場合には、上記ステップ402に戻る。その後、上記ステップ404で、仮異常判定時間が経過したと判定された時点で、ステップ405に進み、エンコーダ仮異常フラグを「1」にセットする。
この後、図15のステップ406に進み、オープンループ制御に切り換える。このオープンループ制御では、エンコーダカウント値の情報をフィードバックせずにモータ12の通電相を順次切り換える。
この後、ステップ407に進み、要求駆動ステップ数が所定値以上であるか否かを判定する。ここで、要求駆動ステップ数は、オープンループ制御でモータ12を目標回転位置まで回転駆動するのに必要な駆動ステップ数(通電相の切換回数)である。この要求駆動ステップ数が大き過ぎると、レンジ切換機構11の可動範囲の限界位置に突き当たるまでモータ12が回転駆動されて脱調する可能性があるため、これを防止するために、要求駆動ステップ数は、レンジ切換機構11の可動範囲の限界位置に突き当たらない範囲内で設定する。また、所定値は、エンコーダ異常再判定を実行するのに必要な駆動ステップ数に通電相1周期分の駆動ステップ数を加算した値又はそれよりも少し大きい値に設定されている。
このステップ407で、要求駆動ステップ数が所定値よりも少ないと判定された場合には、要求駆動ステップ数が少な過ぎるため、エンコーダ異常再判定を実行できないと判断して、ステップ415に進む。
一方、上記ステップ407で、要求駆動ステップ数が所定値以上であると判定された場合には、エンコーダ異常再判定を実行できると判断して、ステップ408に進み、駆動済みステップ数(オープンループ制御を開始してからの駆動ステップ数)が通電相1周期分以上であるか否かを判定する。
このステップ408で、駆動済みステップ数が通電相1周期分よりも少ないと判定された場合には、まだモータ12の回転位置と通電相が一致せずにモータ12が回転し始めていない可能性があると判断して、ステップ415に進む。
その後、上記ステップ408で、駆動済みステップ数が通電相1周期分以上であると判定された場合には、モータ12の回転位置と通電相が一致してモータ12が回転し始めていると判断して、ステップ409に進み、エンコーダ仮異常フラグが「1」であるか否かを判定する。
このステップ409で、エンコーダ仮異常フラグが「1」であると判定された場合には、ステップ410に進み、エンコーダ異常再判定を開始する。この場合、まず、所定の判定期間中の駆動ステップ数(通電相の切換回数)とエンコーダカウント値の変化量を算出する。
この後、ステップ411に進み、判定期間中のエンコーダカウント値の変化量が駆動ステップ相当数(判定期間中の駆動ステップ数に相当するエンコーダカウント値の変化量)と等しいか否かを判定することで、駆動ステップ数(通電相の切換回数)とエンコーダカウント値の変化量との関係が正常か否かを判定する。
このステップ411で、判定期間中のエンコーダカウント値の変化量が駆動ステップ相当数と等しいと判定された場合には、駆動ステップ数(通電相の切換回数)とエンコーダカウント値の変化量との関係が正常と判断して、ステップ412に進み、エンコーダ仮異常フラグを「0」にリセットする。この後、ステップ413に進み、エンコーダカウント値と通電相との対応関係を再学習する。
これに対して、上記ステップ411で、判定期間中のエンコーダカウント値の変化量が駆動ステップ相当数と等しくないと判定された場合には、駆動ステップ数(通電相の切換回数)とエンコーダカウント値の変化量との関係が正常ではないと判断して、ステップ414に進み、エンコーダ本異常フラグを「1」にセットする。
この後、ステップ415に進み、駆動済みステップ数が要求駆動ステップ数に到達したか否かを判定し、駆動済みステップ数が要求駆動ステップ数に到達していないと判定された場合には、上記ステップ407に戻る。
上記ステップ409で、エンコーダ仮異常フラグが「1」ではない(エンコーダ仮異常フラグが「0」である)と判定された場合には、ステップ415に進む。
その後、上記ステップ415で、駆動済みステップ数が要求駆動ステップ数に到達したと判定された時点で、モータ12を目標回転位置まで回転駆動したと判断して、本ルーチンを終了する。尚、エンコーダカウント値と通電相との対応関係を再学習した後(例えばモータ12を目標回転位置まで回転駆動した後)に、突き当て制御を実行して基準位置を再学習するようにしても良い。
以上説明した本実施例3では、フィードバック制御の実行中にエンコーダカウント値が正常に変化しない場合に、オープンループ制御に切り換え、このオープンループ制御でモータ12を目標回転位置まで回転駆動する期間に、通電相の切換回数とエンコーダカウント値の変化量との関係が正常か否かを判定する。その結果、通電相の切換回数とエンコーダカウント値の変化量との関係が正常と判定した場合に、エンコーダカウント値と通電相との対応関係を再学習する。このようにすれば、オープンループ制御でモータ12を目標回転位置まで回転駆動しているときに、エンコーダカウント値と通電相との対応関係を再学習することができる。これにより、エンコーダカウント値に基づいて通電相を順次切り換えてモータ12を回転駆動するモータ回転制御に復帰することが可能となり、一過性のノイズによりモータ回転制御を正常に実行できなくなる事態を回避することができる。
次に、図17及び図18を用いて本発明の実施例4を説明する。但し、前記実施例3と実質的に同一部分については説明を省略又は簡略化し、主として前記実施例3と異なる部分について説明する。
本実施例4では、レンジ切換制御回路42のマイコン41により後述する図18の再学習ルーチンを実行することで、次のようにして再学習を行う。フィードバック制御の実行中にエンコーダカウント値が正常に変化しない場合に、オープンループ制御に切り換え、このオープンループ制御でモータ12を目標回転位置まで回転駆動した後にモータ12をシフトレンジが切り換わらない微小範囲内で回転駆動する期間に、通電相の切換回数とエンコーダカウント値の変化量との関係が正常か否かを判定する。その関係が正常と判定した場合に、前記エンコーダカウント値と通電相との対応関係を再学習する。
具体的には、図17に示すように、運転者のシフトレバー操作により目標レンジが切り換えられた時点t1 で、フィードバック制御を実行する。このフィードバック制御の実行中に、一過性のノイズよりエンコーダカウント値とモータ12の回転位置と通電相との対応関係が崩れて、エンコーダカウント値が正常に変化しないと判定した場合には、その時点t2 で、オープンループ制御に切り換える。
オープンループ制御の開始直後は、モータ12の回転位置と通電相との対応関係が崩れているが、オープンループ制御で通電相を順次切り換えることで、いずれかの通電相でモータ12の回転位置と通電相を一致させてモータ12を回転駆動することができる。
このオープンループ制御でモータ12を目標回転位置まで回転駆動した後、オープンループ制御でモータ12をシフトレンジが切り換わらない微小範囲内で回転駆動する。
この微小範囲は、例えば、モータ12の通電相の1周期分に相当する回転角度(モータ12の通電相の切り換えが一巡したときのモータ12の回転角度)又はそれよりも少し大きい回転角度に設定する。例えば、モータ12の通電相の1周期分に相当する回転角度が45degで減速機構26の減速比が60の場合、モータ12の通電相の1周期分に相当するディテントレバー15(マニュアルシャフト13)の回転角度は0.75deg(=45deg/60)である。この程度の回転角度であれば、シフトレンジが切り換わることはない。
また、本実施例4では、オープンループ制御でモータ12を微小範囲内で回転駆動する際に、モータ12の駆動電流を所定値以下に制限する。この所定値は、例えば、レンジ切換可能な下限トルク(ディテントバネ23の係合部23aがディテントレバー15の凹部24,25間の山を乗り越えるのに必要なトルクの下限値)よりも低いトルクに相当する電流値に設定する。
オープンループ制御でモータ12を微小範囲内で回転駆動する期間に、エンコーダ異常再判定を実行する。このエンコーダ異常再判定では、通電相の切換回数とエンコーダカウント値の変化量との関係が正常か否かを判定する。その結果、通電相の切換回数とエンコーダカウント値の変化量との関係が正常と判定した時点t4 で、エンコーダカウント値と通電相との対応関係を再学習する。このようにすれば、オープンループ制御でモータ12を目標回転位置まで回転駆動した後(モータ12を微小範囲内で回転駆動する期間)に、エンコーダカウント値と通電相との対応関係を再学習することができる。
以下、本実施例4でレンジ切換制御回路42のマイコン41が実行する図18の再学習ルーチンの処理内容を説明する。
図18に示す再学習ルーチンは、フィードバック制御の実行中にマイコン41により実行される。本ルーチンが起動されると、まず、ステップ501で、通電相が切り換えられたか否かを判定し、通電相が切り換えられたと判定された場合には、ステップ502に進み、エンコーダカウント値が正常に変化したか否かを判定する。
このステップ502で、エンコーダカウント値が正常に変化したと判定された場合には、ステップ503に進み、モータ12の回転位置が目標回転位置に到達したか否かを判定する。
このステップ503で、モータ12の回転位置が目標回転位置に到達していないと判定された場合には、上記ステップ501に戻る。その後、上記ステップ503で、モータ12の回転位置が目標回転位置に到達したと判定された時点で、本ルーチンを終了する。
一方、上記ステップ502で、エンコーダカウント値が正常に変化していないと判定された場合には、ステップ504に進み、エンコーダカウント値が正常に変化しない状態で仮異常判定時間が経過したか否かを判定する。
このステップ504で、仮異常判定時間が経過していないと判定された場合には、上記ステップ502に戻る。その後、上記ステップ504で、仮異常判定時間が経過したと判定された時点で、ステップ505に進み、エンコーダ仮異常フラグを「1」にセットする。
この後、ステップ506に進み、オープンループ制御に切り換える。この後、ステップ507に進み、駆動済みステップ数が要求駆動ステップ数に到達したか否かを判定し、駆動済みステップ数が要求駆動ステップ数に到達していないと判定された場合には、上記ステップ506に戻る。
その後、上記ステップ507で、駆動済みステップ数が要求駆動ステップ数に到達したと判定された時点で、モータ12を目標回転位置まで回転駆動したと判断して、ステップ508に進み、微小回転駆動を実行する。この微小回転駆動では、オープンループ制御でモータ12をシフトレンジが切り換わらない微小範囲内で回転駆動する。この微小範囲は、例えば、モータ12の通電相の1周期分に相当する回転角度又はそれよりも少し大きい回転角度に設定する。更に、この微小回転駆動の際に、モータ12の駆動電流を所定値以下に制限する。この所定値は、例えば、レンジ切換可能な下限トルクよりも低いトルクに相当する電流値に設定する。
この後、ステップ509に進み、エンコーダ異常再判定を開始する。この場合、まず、所定の判定期間中の駆動ステップ数(通電相の切換回数)とエンコーダカウント値の変化量を算出する。
この後、ステップ510に進み、判定期間中のエンコーダカウント値の変化量が駆動ステップ相当数(判定期間中の駆動ステップ数に相当するエンコーダカウント値の変化量)と等しいか否かを判定することで、駆動ステップ数(通電相の切換回数)とエンコーダカウント値の変化量との関係が正常か否かを判定する。
このステップ510で、判定期間中のエンコーダカウント値の変化量が駆動ステップ相当数と等しいと判定された場合には、駆動ステップ数(通電相の切換回数)とエンコーダカウント値の変化量との関係が正常と判断して、ステップ511に進み、エンコーダ仮異常フラグを「0」にリセットする。この後、ステップ512に進み、エンコーダカウント値と通電相との対応関係を再学習する。尚、エンコーダカウント値と通電相との対応関係を再学習した後(例えばモータ12を微小範囲内で回転駆動した後)に、突き当て制御を実行して基準位置を再学習するようにしても良い。
これに対して、上記ステップ510で、判定期間中のエンコーダカウント値の変化量が駆動ステップ相当数と等しくないと判定された場合には、駆動ステップ数(通電相の切換回数)とエンコーダカウント値の変化量との関係が正常ではないと判断して、ステップ513に進み、エンコーダ本異常フラグを「1」にセットする。
以上説明した本実施例4では、フィードバック制御の実行中にエンコーダカウント値が正常に変化しない場合に、オープンループ制御に切り換え、このオープンループ制御でモータ12を目標回転位置まで回転駆動した後に微小範囲内で回転駆動する期間に、通電相の切換回数とエンコーダカウント値の変化量との関係が正常か否かを判定する。その結果、通電相の切換回数とエンコーダカウント値の変化量との関係が正常と判定した場合に、エンコーダカウント値と通電相との対応関係を再学習する。このようにすれば、オープンループ制御でモータ12を目標回転位置まで回転駆動した後(モータを微小範囲内で回転駆動する期間)に、エンコーダカウント値と通電相との対応関係を再学習することができる。これにより、エンコーダカウント値に基づいて通電相を順次切り換えてモータ12を回転駆動するモータ回転制御に復帰することが可能となり、一過性のノイズによりモータ回転制御を正常に実行できなくなる事態を回避することができる。
更に、本実施例4では、オープンループ制御でモータ12を微小範囲内で回転駆動する際に、モータ12の駆動電流を所定値以下に制限するようにしている。このようにすれば、オープンループ制御でモータ12を微小範囲内で回転駆動してエンコーダカウント値と通電相との対応関係を再学習する際に、モータ12の駆動電流を所定値以下に制限することでモータ12のトルクをレンジ切換可能な下限トルクよりも低いトルクに制限して、シフトレンジが切り換わってしまうことを確実に防止することができる。
尚、上記各実施例1〜4では、エンコーダ46として磁気式のエンコーダを用いたが、これに限定されず、エンコーダ46は、例えば、光学式のエンコーダやブラシ式のエンコーダを用いても良い。また、エンコーダ46は、A相信号とB相信号を出力するエンコーダに限定されず、A相、B相信号に加え、補正用(インデックス用)のZ相信号を出力するエンコーダを用いても良い。
また、上記各実施例1〜4では、モータ12としてスイッチトリラクタンスモータ(SRモータ)を用いたが、エンコーダの出力信号のカウント値に基づいてモータの回転位置を検出してモータの通電相を順次切り換えるブラシレス型の同期モータであれば、SRモータに限定されず、他の種類のブラシレス型の同期モータであっても良い。
また、上記各実施例1〜4では、シフトレンジをPレンジとNotPレンジの二つのレンジ間で切り換えるレンジ切換機構を備えたシステムに本発明を適用したが、これに限定されず、例えば、シフトレンジをPレンジとRレンジとNレンジとDレンジの四つのレンジ間で切り換えるレンジ切換機構を備えたシステムに本発明を適用しても良い。或は、シフトレンジを三つのレンジ間又は五つ以上のレンジ間で切り換えるレンジ切換機構を備えたシステムに本発明を適用しても良い。
その他、本発明は、自動変速機(AT、CVT、DCT等)に限定されず、電気自動車用の減速機のシフトレンジを切り換えるレンジ切換装置に適用しても良い等、要旨を逸脱しない範囲内で種々変更して実施できる。