JP3888940B2 - モータ制御装置 - Google Patents
モータ制御装置 Download PDFInfo
- Publication number
- JP3888940B2 JP3888940B2 JP2002207560A JP2002207560A JP3888940B2 JP 3888940 B2 JP3888940 B2 JP 3888940B2 JP 2002207560 A JP2002207560 A JP 2002207560A JP 2002207560 A JP2002207560 A JP 2002207560A JP 3888940 B2 JP3888940 B2 JP 3888940B2
- Authority
- JP
- Japan
- Prior art keywords
- range
- phase
- control
- rotor
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Control Of Electric Motors In General (AREA)
- Control Of Motors That Do Not Use Commutators (AREA)
Description
【発明の属する技術分野】
本発明は、エンコーダの出力信号のカウント値に基づいてロータの回転位置を検出してモータの通電相を順次切り換えることでロータを回転駆動するモータ制御装置に関するものである。
【0002】
【従来の技術】
近年、構造が簡単で安価なモータとして需要が増加しているスイッチトリラクタンスモータ等のブラシレス型のモータは、ロータの回転に同期してパルス信号を出力するエンコーダを搭載し、このエンコーダの出力信号をカウントして、そのエンコーダカウント値に基づいてロータの回転位置を検出して通電相を順次切り換えることでロータを回転駆動するようにしたものがある。このようなエンコーダ付きのモータは、起動後のエンコーダカウント値に基づいてロータの回転位置を検出することができるため、フィードバック制御系(閉ループ制御系)によりロータを操作スイッチ等で設定された目標位置まで回転させる位置切換制御(位置決め制御)を行う各種の位置切換装置の駆動源として用いられている。
【0003】
【発明が解決しようとする課題】
この種のモータの制御は、マイクロコンピュータによって行われるが、このモータ制御中に何等かの原因(例えば電源瞬断等)でマイクロコンピュータがリセットされることがある。一旦、マイクロコンピュータがリセットされると、目標位置のデータを記憶するRAMもリセットされるため、そのリセットの前後で目標位置のデータが異なってくる。このため、マイクロコンピュータがリセットされると、制御対象が意図せぬ位置へ勝手に切り換えられてしまうという不具合が発生する。
【0004】
本発明はこのような事情を考慮してなされたものであり、従ってその目的は、モータ制御コンピュータが何等かの原因でリセットされても、制御対象が意図せぬ位置へ切り換えられることを防止することができるモータ制御装置を提供することにある。
【0005】
【課題を解決するための手段】
上記目的を達成するために、本発明の請求項1のモータ制御装置は、目標位置設定手段により設定された目標位置を不揮発性メモリに記憶し、起動時に該不揮発性メモリに記憶されている目標位置を起動時の目標位置にセットするようにしたものである。このようにすれば、モータの制御手段(マイクロコンピュータ)が何等かの原因でリセットされても、その直後の起動時には、不揮発性メモリに記憶されているリセット直前の目標位置が起動時の目標位置にセットされるため、リセットの前後で目標位置のデータが変更されず、制御対象が意図せぬ位置へ切り換えられることを防止できる。
【0006】
この場合、請求項2のように、不揮発性メモリは、制御手段の電源オフ中にバッテリから電源の供給を受けて目標位置の記憶を保持するSRAM等で構成し、電源オフ中にバッテリが取り外されたことが検出された場合に、起動時の目標位置を予め決められた目標位置にセットする。電源オフ中にバッテリからの電源のバックアップを必要とするSRAM等の不揮発性メモリは、バッテリが取り外されると、目標位置の記憶データが消えてしまう。このような場合は、起動時の目標位置を予め決められた目標位置(例えばバッテリの取り外し作業が行われるときの目標位置、又は、安全性の高い方の目標位置)にセットすれば、バッテリの取り外しにより不揮発性メモリの目標位置の記憶データが消えても、起動時の安全性を確保することができる。
【0007】
更に、請求項3のように、不揮発性メモリに記憶される目標位置のデータは、該不揮発性メモリへの電源投入時にセットされる初期値(0)と異なる値を用い、該不揮発性メモリに記憶されている目標位置のデータが前記初期値であるか否かでバッテリが取り外されたか否かを判定するようにすると良い。このようにすれば、ハードウエア構成を全く変更せずに簡単なソフトウエアのみによってバッテリが取り外されたか否かを極めて簡単に且つ正確に判定することができる。
【0008】
また、請求項4のように、バッテリが取り外された場合に、起動時にモータを前記予め決められた目標位置の方向に駆動してその限界位置に突き当てて当該限界位置を学習するようにしても良い。バッテリが取り外されると、記憶データも消えてしまうため、起動時のモータ位置を特定できなくなるが、起動時にモータを予め決められた目標位置の方向に駆動して、その方向の限界位置に突き当てて当該限界位置を学習することにより、モータの位置を確定することができる。
【0009】
また、請求項5のように、モータの出力軸の回転位置又はそれに相関する位置情報を検出する出力軸センサを設け、起動時に出力軸センサで検出した位置を起動時の目標位置にセットするようにしても良い。このようにすれば、起動の前後で目標位置のデータが変更されず、制御対象が意図せぬ位置へ切り換えられることを防止できる。
【0010】
また、請求項6のように、モータとしてスイッチトリラクタンスモータを使用するようにしても良い。スイッチトリラクタンスモータは、永久磁石が不要で構造が簡単であるため、安価であり、温度環境等に対する耐久性・信頼性も高いという利点がある。
【0011】
以上説明した請求項1〜6に係る発明は、スイッチトリラクタンスモータ等のブラシレス型のモータを駆動源とする各種の位置切換装置に適用でき、例えば、請求項7のように、車両の自動変速機のレンジを切り換えるレンジ切換機構を駆動するモータの制御装置に適用しても良い。これにより、信頼性の高いモータ駆動式のレンジ切換装置を構成することができる。
【0012】
【発明の実施の形態】
《実施形態(1)》
以下、本発明を車両のレンジ切換装置に適用した実施形態(1)を図1乃至図48に基づいて説明する。
【0013】
まず、図1に基づいてレンジ切換機構11の構成を説明する。レンジ切換機構11の駆動源となるモータ12は、例えばスイッチトリラクタンスモータにより構成され、減速機構26(図4参照)を内蔵し、その出力軸13の回転位置を検出する出力軸センサ14が設けられている。この出力軸13には、ディテントレバー15が固定されている。
【0014】
また、ディテントレバー15にはL字形のパーキングロッド18が固定され、このパーキングロッド18の先端部に設けられた円錐体19がロックレバー21に当接している。このロックレバー21は、円錐体19の位置に応じて軸22を中心にして上下動してパーキングギヤ20をロック/ロック解除するようになっている。パーキングギヤ20は、自動変速機27の出力軸に設けられ、このパーキングギヤ20がロックレバー21によってロックされると、車両の駆動輪が回り止めされた状態(パーキング状態)に保持される。
【0015】
一方、ディテントレバー15をパーキングレンジ(以下「Pレンジ」と表記する)と他のレンジ(以下「NotPレンジ」と表記する)に保持するためのディテントバネ23が支持ベース17に固定され、このディテントバネ23の先端に設けられた係合部23aがディテントレバー15のPレンジ保持凹部24に嵌まり込んだときに、ディテントレバー15がPレンジの位置に保持され、該ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25に嵌まり込んだときに、ディテントレバー15がNotPレンジの位置に保持されるようになっている。
【0016】
Pレンジでは、パーキングロッド18がロックレバー21に接近する方向に移動して、円錐体19の太い部分がロックレバー21を押し上げてロックレバー21の凸部21aがパーキングギヤ20に嵌まり込んでパーキングギヤ20をロックした状態となり、それによって、自動変速機27の出力軸(駆動輪)がロックされた状態(パーキング状態)に保持される。
【0017】
一方、NotPレンジでは、パーキングロッド18がロックレバー21から離れる方向に移動して、円錐体19の太い部分がロックレバー21から抜け出てロックレバー21が下降し、それによって、ロックレバー21の凸部21aがパーキングギヤ20から外れてパーキングギヤ20のロックが解除され、自動変速機27の出力軸が回転可能な状態(走行可能な状態)に保持される。
【0018】
尚、前述した出力軸センサ14は、モータ12の減速機構26の出力軸13の回転角度に応じた電圧を出力する回転センサ(例えばポテンショメータ)によって構成され、その出力電圧によって現在のレンジがPレンジとNotPレンジのいずれであるかを確認できるようになっている。
【0019】
次に、図2に基づいてモータ12の構成を説明する。本実施形態では、モータ12として、スイッチトリラクタンスモータ(以下「SRモータ」と表記する)が用いられている。このSRモータ12は、ステータ31とロータ32が共に突極構造を持つモータで、永久磁石が不要で構造が簡単であるという利点がある。円筒状のステータ31の内周部には、例えば12個の突極31aが等間隔に形成され、これに対して、ロータ32の外周部には、例えば8個の突極32aが等間隔に形成され、ロータ32の回転に伴い、ロータ32の各突極32aがステータ31の各突極31aと微小ギャップを介して順番に対向するようになっている。ステータ31の12個の突極31aには、U相、V相、W相の合計6個の巻線33と、U’相、V’相、W’相の合計6個の巻線34が順番に巻回されている。尚、ステータ31とロータ32の突極31a,32aの数は適宜変更しても良いことは言うまでもない。
【0020】
本実施形態の巻線33,34の巻回順序は、ステータ31の12個の突極31aに対して、例えば、V相→W相→U相→V相→W相→U相→V’相→W’相→U’相→V’相→W’相→U’相の順序で巻回されている。図3に示すように、U相、V相、W相の合計6個の巻線33と、U’相、V’相、W’相の合計6個の巻線34は、2系統のモータ励磁部35,36を構成するように結線されている。一方のモータ励磁部35は、U相、V相、W相の合計6個の巻線33をY結線して構成され(同じ相の2個の巻線33はそれぞれ直列に接続されている)、他方のモータ励磁部36は、U’相、V’相、W’相の合計6個の巻線34をY結線して構成されている(同じ相の2個の巻線34はそれぞれ直列に接続されている)。2つのモータ励磁部35,36は、U相とU’相が同時に通電され、V相とV’相が同時に通電され、W相とW’相が同時に通電される。
【0021】
これら2つのモータ励磁部35,36は、車両に搭載されたバッテリ40を電源として、それぞれ別個のモータドライバ37,38によって駆動される。このように、モータ励磁部35,36とモータドライバ37,38をそれぞれ2系統ずつ設けることで、一方の系統が故障しても、他方の系統でSRモータ12を回転させることができるようになっている。図3に示すモータドライバ37,38の回路構成例では、各相毎にトランジスタ等のスイッチング素子39を1個ずつ設けたユニポーラ駆動方式の回路構成としているが、各相毎にスイッチング素子を2個ずつ設けたバイポーラ駆動方式の回路構成を採用しても良い。尚、本発明は、モータ励磁部とモータドライバをそれぞれ1系統ずつ設けた構成としても良いことは言うまでもない。
【0022】
各モータドライバ37,38の各スイッチング素子39のオン/オフは、ECU41(制御手段)によって制御される。図4に示すように、このECU41と各モータドライバ37,38は、レンジ切換制御装置42に搭載され、このレンジ切換制御装置42には、Pレンジへの切換操作を行うPレンジスイッチ43と、NotPレンジへの切換操作を行うNotPレンジスイッチ44の操作信号が入力される。Pレンジスイッチ43又はNotPレンジスイッチ44の操作により選択されたレンジは、インストルメントパネル(図示せず)に設けられたレンジ表示部45に表示される。尚、Pレンジスイッチ43とNotPレンジスイッチ44は、例えばモーメンタリ型スイッチにより構成されている。
【0023】
SRモータ12には、ロータ32の回転位置を検出するためのエンコーダ46が設けられている。このエンコーダ46は、例えば磁気式のロータリエンコーダにより構成されており、その具体的な構成は、図5及び図6に示すように、N極とS極が円周方向に交互に等ピッチで着磁された円環状のロータリマグネット47がロータ32の側面に同軸状に固定され、このロータリマグネット47に対向する位置に、3個のホールIC等の磁気検出素子48,49,50が配置された構成となっている。本実施形態では、ロータリマグネット47のN極とS極の着磁ピッチが7.5°に設定されている。このロータリマグネット47の着磁ピッチ(7.5°)は、SRモータ12の励磁1回当たりのロータ32の回転角度と同じに設定されている。後述するように、1−2相励磁方式でSRモータ12の通電相の切り換えを6回行うと、全ての通電相の切り換えが一巡してロータ32とロータリマグネット47が一体的に7.5°×6=45°回転する。このロータリマグネット47の45°の回転角度範囲に存在するN極とS極の数は、合計6極となっている。
【0024】
更に、ロータ32の基準回転位置に相当する位置のN極(N’)とその両側のS極(S’)がそれ以外の磁極よりも径方向の幅が広くなるように形成されている。尚、本実施形態では、SRモータ12の通電相の切り換えが一巡する間にロータ32とロータリマグネット47が一体的に45°回転することを考慮して、ロータ32の基準回転位置に相当する幅広な着磁部分(N’)が45°ピッチで形成されており、従って、ロータリマグネット47全体として、基準回転位置に相当する幅広な着磁部分(N’)が合計8個形成されている。尚、基準回転位置に相当する幅広な着磁部分(N’)は、ロータリマグネット47全体として、1個のみ形成した構成としても良い。
【0025】
このロータリマグネット47に対して3個の磁気検出素子48,49,50が次のような位置関係で配置されている。A相信号を出力する磁気検出素子48とB相信号を出力する磁気検出素子49は、ロータリマグネット47の幅狭な着磁部分(N,S)と幅広な着磁部分(N’,S’)の両方に対向し得る位置の同一円周上に配置されている。一方、Z相信号を出力する磁気検出素子50は、ロータリマグネット47の幅狭な着磁部分(N,S)よりも径方向外側又は内側の位置で、且つ、幅広な着磁部分(N’,S’)のみに対向し得る位置に配置されている。A相信号とB相信号を出力する2個の磁気検出素子48,49の間隔は、図7に示すように、A相信号とB相信号の位相差が、電気角で90°(機械角で3.75°)となるように設定されている。ここで、“電気角”はA・B相信号の発生周期を1周期(360°)とした場合の角度で、“機械角”は機械的な角度(ロータ32の1回転を360°とした場合の角度)であり、A相信号の立ち下がり(立ち上がり)からB相信号の立ち下がり(立ち上がり)までにロータ32が回転する角度がA相信号とB相信号の位相差の機械角に相当する。また、Z相信号を出力する磁気検出素子50は、Z相信号とB相信号(又はA相信号)との位相差が0となるように配置されている。
【0026】
各磁気検出素子48,49,50の出力は、N極(N’極)と対向したときにハイレベル“1”となり、S極(S’極)と対向したときにローレベル“0”となる。尚、Z相信号用の磁気検出素子50の出力は、ロータ32の基準回転位置に相当する幅広なN’極に対向する毎にハイレベル“1”となり、それ以外の位置では、ローレベル“0”となる。
【0027】
本実施形態では、ECU41が後述するエンコーダカウンタルーチンによってA相信号とB相信号の立ち上がり/立ち下がりの両方のエッジをカウントして、そのエンコーダカウント値に応じてSRモータ12の通電相を切り換えることでロータ32を回転駆動する。この際、A相信号とB相信号の発生順序によってロータ32の回転方向を判定し、正回転(Pレンジ→NotPレンジの回転方向)ではエンコーダカウント値をカウントアップし、逆回転(NotPレンジ→Pレンジの回転方向)ではエンコーダカウント値をカウントダウンする。これにより、ロータ32が正回転/逆回転のいずれの方向に回転しても、エンコーダカウント値とロータ32の回転位置との対応関係が維持されるため、正回転/逆回転のいずれの回転方向でも、エンコーダカウント値によってロータ32の回転位置(回転角度)を検出して、その回転位置に対応した相の巻線33,34に通電してロータ32を回転駆動する。
【0028】
図7は、ロータ32を逆回転方向(NotPレンジ→Pレンジの回転方向)に回転させたときのエンコーダ46の出力波形と通電相の切換パターンを示している。逆回転方向(NotPレンジ→Pレンジの回転方向)と正回転方向(Pレンジ→NotPレンジの回転方向)のいずれの場合も、ロータ32が7.5°回転する毎に1相通電と2相通電とを交互に切り換えるようになっており、ロータ32が45°回転する間に、例えば、U相通電→UW相通電→W相通電→VW相通電→V相通電→UV相通電の順序で通電相の切り換えを一巡するようになっている。そして、この通電相の切り換え毎に、ロータ32が7.5°ずつ回転して、A相、B相信号用の磁気検出素子48,49に対向するロータリマグネット47の磁極がN極→S極(N’極→S’極)又はS極→N極(S’極→N’極)に変化してA相信号とB相信号のレベルが交互に反転し、それによって、ロータ32が7.5°回転する毎に、エンコーダカウント値が2ずつカウントアップ(又はカウントダウン)する。また、通電相の切り換えが一巡してロータ32が45°回転する毎に、Z相用の磁気検出素子50がロータ32の基準回転位置に相当する幅広なN’極に対向して、Z相信号がハイレベル“1”となる。尚、本明細書では、A相、B相、Z相信号がハイレベル“1”となることを、A相、B相、Z相信号が出力されると言う場合がある。
【0029】
ところで、エンコーダカウント値は、ECU41のRAMに記憶されるため、ECU41の電源がオフされると、エンコーダカウント値の記憶が消えてしまう。そのため、ECU41の電源投入直後のエンコーダカウント値(0)は、実際のロータ32の回転位置(通電相)に対応したものとならい。従って、エンコーダカウント値に応じて通電相を切り換えるためには、電源投入後にエンコーダカウント値と実際のロータ32の回転位置とを対応させて、エンコーダカウント値と通電相とを対応させる必要がある。
【0030】
そこで、本実施形態では、レンジ切換制御装置42のECU41によって後述する図8及び図9に示す初期駆動ルーチンを実行することで、ECU41への電源投入後の初期駆動時に、SRモータ12の通電相の切り換えを所定のタイムスケジュールで一巡させてエンコーダ46のA相信号及びB相信号のエッジをカウントし、初期駆動終了時のエンコーダカウント値とロータ32の回転位置と通電相との対応関係を学習し、その後の通常駆動時に、エンコーダカウント値と初期駆動終了時の学習結果とに基づいて通電相を決定するようにしている。
【0031】
この初期駆動時の学習は、具体的には次のようにして行われる。図12に示すように、PレンジでECU41に電源が投入されたときに初期駆動を行う場合は、例えば、W相通電→UW相通電→U相通電→UV相通電→V相通電→VW相通電の順序で通電相の切り換えを所定のタイムスケジュールで一巡し、ロータ32を正回転方向(Pレンジ→NotPレンジの回転方向)に駆動する。
【0032】
一方、NotPレンジでECU41に電源が投入されたときに初期駆動を行う場合は、例えば、V相通電→UV相通電→U相通電→UW相通電→W相通電→VW相通電の順序で通電相の切り換えを所定のタイムスケジュールで一巡し、ロータ32を逆回転方向(NotPレンジ→Pレンジの回転方向)に駆動する。
【0033】
この初期駆動時には、1相通電の時間T1を2相通電の時間T2よりも短くし、例えばT1=10ms、T2=100msに設定する。初期駆動中にロータ32の回転位置と通電相との同期がとれた後でも、トルクが小さい1相通電では、ロータ32が振動するため、1相通電の時間T1を短くして、できるだけ速やかに次の2相通電に切り換えることで、ロータ32の振動を速やかに停止させてエンコーダ46の出力信号を安定させるようにしている。
【0034】
このように、初期駆動時に通電相の切り換えを一巡させれば、初期駆動が終了するまでに、いずれかの通電相で必ずロータ32の回転位置と通電相とが一致して、それ以後、通電相の切り換えに同期してロータ32が回転して、このロータ32の回転に同期してエンコーダ46からA相信号及びB相信号が出力されるようになる。
【0035】
この初期駆動中に、エンコーダ46のA相信号及びB相信号の立ち上がり/立ち下がりの両方のエッジをカウントする。従って、初期駆動終了時のエンコーダカウント値を見れば、初期駆動が終了するまでにロータ32が実際に通電相の切り換えに同期して回転した角度(回転量)が分かり、それによって、初期駆動終了時のエンコーダカウント値とロータ32の回転位置と通電相との対応関係が分かる。
【0036】
図12の例では、初期駆動時に最初の通電相(W相)からロータ32が回転し、通電相の切り換え毎にロータ32が7.5°ずつ回転してエンコーダカウント値が2ずつカウントアップし、初期駆動終了時にエンコーダカウント値が12となる。
【0037】
これに対し、例えば、初めの3回の励磁(W相通電→UW相通電→U相通電)でロータ32が回転しない場合、つまり4回目以降の励磁(UV相通電→V相通電→VW相通電)でロータ32の回転位置と通電相とが同期してロータ32が3回の励磁分だけ回転する場合は、初期駆動終了時までにロータ32が7.5°×3=22.5°回転して、エンコーダカウント値が2×3=6となる。従って、初期駆動終了時のエンコーダカウント値を見れば、初期駆動が終了するまでにロータ32が実際に通電相の切り換えに同期して回転した角度(回転量)が判明する。
【0038】
初期駆動の最後の通電相は、常にVW相となるが、エンコーダカウント値は、必ずしも12になるとは限らず、例えば8、或は4である場合もある。初期駆動終了後の通常駆動時には、エンコーダカウント値に基づいて通電相が決定されるため、初期駆動によるエンコーダカウント値のずれを修正しないと、通常駆動時に正しい通電相を選択することができない。
【0039】
そこで、本実施形態では、初期駆動終了時のエンコーダカウント値を初期位置ずれ学習値として学習し、その後の通常駆動時にエンコーダカウント値を初期位置ずれ学習値で補正することで、初期駆動終了時のエンコーダカウント値と通電相(ロータ32の回転位置)とのずれを補正して、通常駆動時に正しい通電相を選択できるようにしている。
【0040】
初期駆動終了後は、図12に示すように、後述するF/B制御開始位置停止保持処理により、初期駆動終了時の通電相(VW相)と同じ相に例えば10ms通電してロータ32の位置を初期駆動終了時の位置に保持し、その後、後述するフィードバック制御(以下「F/B制御」と表記する)により、その時点のエンコーダカウント値と初期位置ずれ学習値とに基づいて通電相を切り換えてロータ32を目標位置Acntの方向へ回転させる。これにより、ロータ32の回転位置(エンコーダカウント値)が目標位置Acntから例えば0.5°以内に到達した時点で、通電相の切り換えを終了してロータ32を停止させ、その後は、後述する目標位置停止保持処理により、同じ相に通電し続けてロータ32の停止状態を保持し、この保持状態を例えば50ms継続する。この後、目標位置Acntが変化しなければ、通電を停止する。
【0041】
また、初期駆動の途中で、Pレンジスイッチ43又はNotPレンジスイッチ44が操作されてレンジ切換要求が発生した場合は、次の2相通電(2相通電の実行中にレンジ切換要求が発生したときはその2相通電)が終了してから通常駆動に移行すると共に、該2相通電終了時のエンコーダカウント値とロータ32の回転位置と通電相との対応関係を学習し、その後の通常駆動時に、エンコーダカウント値と2相通電終了時の学習結果とに基づいて通電相を決定するようにしている。
【0042】
2相通電では、トルクが大きいため、ロータ32の位置が2相通電に対応する位置から多少ずれていたとしても、ロータ32を2相通電に対応する位置まで回転させることができる。このため、初期駆動中に2相通電を1〜2回行うだけでロータ32の回転位置と通電相との同期がとれる確率は高いものと思われる。従って、初期駆動の途中でレンジ切換要求が発生したときには、次の2相通電(又は現在の2相通電)が終了してから通常駆動に移行するようにすれば、初期駆動の途中で、エンコーダカウント値とロータ32の回転位置と通電相との対応関係を学習してから、通常駆動に速やかに移行することができる。
【0043】
例えば、図13のタイムチャートに示すように、初期駆動の2回目の励磁(UW相通電)中に、PレンジからNotPレンジへのレンジ切換要求が発生したときには、このUW相通電で初期駆動を終了して通常駆動に移行すると共に、UW相通電終了時のエンコーダカウント値とロータ32の回転位置と通電相との対応関係を学習する。本実施形態では、初期駆動の途中で通常駆動に移行する場合でも、その初期駆動を最後まで実行したと仮定して、本来の初期駆動終了時のエンコーダカウント値を推定し、その推定値を初期位置ずれ学習値とするようにしている。例えば、図13に示すように、初期駆動をW相通電とUW相通電の2回の励磁で終了する場合は、その後に予定されていた4回の励磁を行わずに初期駆動を終了するため、未終了の4回の励磁(U相通電→UV相通電→V相通電→VW相通電)を行ったものと仮定して、4回の励磁分の回転角度に相当するカウントアップ値(2×4=8)をUW相通電終了時のエンコーダカウント値に加算して初期位置ずれ学習値を求める。
【0044】
ところで、従来のレンジ切換制御では、指令シフトレンジ(目標位置)がPレンジからNotPレンジ又はその反対方向に切り換えられる毎に、ロータ32を回転駆動して、エンコーダカウント値に基づいてSRモータ12の通電相を順次切り換えることでロータ32を目標位置まで回転駆動するフィードバック制御(以下「F/B制御」と表記する)を実行した後に、SRモータ12への通電をオフするようにしている。
【0045】
この場合、F/B制御終了後に、目標位置に対応する相の巻線に通電し続ければ、ロータ32を目標位置で電磁力により保持し続けることができるが、この構成では、停止時間が長くなると、同じ相の巻線に連続して長い時間通電し続けることになるため、巻線が過熱して焼損するおそれがある。そのため、ロータ32の停止中は、巻線への通電をオフして巻線の過熱・焼損を防止するようにしている。
【0046】
しかし、ロータ32の停止中に、通電をオフすると、ロータ32を目標位置(F/B制御終了時の位置)に保持する電磁力が消滅するため、ロータ32の位置が目標位置からずれる可能性がある。本実施形態では、ロータ32を目標位置でディテントバネ23のバネ力により保持する機械的な停止保持機構を設けているが、この場合でも、停止保持機構のガタや製造ばらつき等によりロータ32の位置が目標位置からずれることがある。
【0047】
また、従来のレンジ切換制御では、F/B制御開始時に前回のF/B制御終了時のエンコーダカウント値を用いて最初の通電相を決定し、更に、最初の通電相決定後、直ちにF/B制御を開始するようにしている。
【0048】
従って、ロータ32の位置が停止中にずれた場合、従来のレンジ切換制御では、実際に最初に通電すべき通電相とは異なる通電相からF/B制御を開始してしまうことになる。このため、F/B制御開始時に脱調が発生して起動に失敗したり、ロータ32が目標位置とは反対方向に回転するなど、ロータ32を正常に目標位置へ回転させることができなくなる可能性がある。
【0049】
この対策として、本実施形態では、図18に示すように、SRモータ12の通電オフ状態からF/B制御を開始するときに、現在のエンコーダカウント値に基づいて通電相を選択して2相通電でロータ32を停止保持する処理(以下「F/B制御開始位置停止保持処理」という)を所定時間(例えば10ms)だけ実行し、その後、F/B制御を実行してロータ32を目標位置まで回転駆動するようにしている。
【0050】
このようにすれば、仮に、ロータ32の停止中にロータ32の位置がずれても、F/B制御開始直前にF/B制御開始位置停止保持処理によってロータ32の位置ずれを修正して、F/B制御開始時のロータ32の位置を正確に位置決めすることができる。これにより、F/B制御開始時に最初の通電相からロータ32の位置と通電相(エンコーダカウント値)とを確実に同期させることができて、F/B制御開始時の脱調やロータ32が目標位置と反対方向に回転することを防止でき、安定したF/B制御を行ってロータ32を確実に目標位置まで回転させることができて、安定性・信頼性の高い位置切換制御(位置決め制御)を行うことができる。
【0051】
ところで、位置切換制御を高応答化するために、ロータ32の回転速度を高速化して目標位置までの到達時間を短くするようにしている。このため、ロータ32が目標位置に到達した直後は、ロータ32が完全に停止せずにまだ振動した状態になっており、このような状態で通電をオフすると、慣性力によりロータ32の停止位置が目標位置から大きくずれてしまう可能性がある。このようなF/B制御終了時のロータ32の位置ずれが大きくなりすぎると、次のF/B制御開始直前にF/B制御開始位置停止保持処理を行っても、ロータ32の位置ずれを修正することができなくなる可能性がある。
【0052】
この対策として、本実施形態では、F/B制御終了後に、ロータ32を当該F/B制御終了時の位置に2相通電で停止保持する処理(以下「目標位置停止保持処理」という)を所定時間(例えば50ms)だけ実行した後、SRモータ12への通電をオフするようにしている。このようにすれば、ロータ32が目標位置に到達した後、ロータ32の振動が収まってから通電をオフすることができるので、慣性力によりロータ32の停止位置が目標位置から大きくずれることを防止することができる。これにより、位置切換制御の安定性・信頼性を維持しながら、位置切換制御の高応答化の要求も満たすことができる。
【0053】
更に、本実施形態では、F/B制御中に指令シフトレンジ(目標位置)が変更されてロータ32の回転方向を反転させる必要が生じたときに、ロータ32を反転位置で2相通電により停止保持する処理(以下「反転位置停止保持処理」という)を所定時間(例えば50ms)だけ実行し、その後、F/B制御を再開してロータ32を変更後の目標位置まで回転駆動するようにしている。このようにすれば、F/B制御中に指令シフトレンジ(目標位置)が変更されたときに、ロータ32の反転位置を位置決めして反転動作を安定して行うことができ、反転位置がずれて脱調(通電相のずれ)が発生することを防止できて、ロータ32を変更後の目標位置まで確実に回転駆動することができる。
【0054】
また、本実施形態では、F/B制御中にエンコーダカウント値と目標位置に相当する目標カウント値との差が所定値(例えば通電相の位相進み分に相当するカウント値)以下になったときに、F/B制御を終了して目標位置停止保持処理に移行するようにしている。つまり、ロータ32を回転させるためには、図19に示すように、通電相の位相をロータ32の実際の位置よりも例えば2〜4カウント分(ロータ回転角で3.75°〜15°)だけ進める必要があるため、F/B制御中にエンコーダカウント値と目標カウント値との差が例えば通電相の位相進み分に相当するカウント値になったときに、F/B制御を終了するようにすれば、F/B制御の最後の通電相がロータ32を目標位置に停止保持する通電相と一致するため、目標位置停止保持処理移行後も、F/B制御の最後の通電相に引き続き通電することができ、F/B制御から目標位置停止保持処理への移行をスムーズに行うことができる。
【0055】
ところで、ロータ32を回転駆動するトルクを発生させるためには、ロータ32の回転位相に対して通電相の位相を進める必要がある。F/B制御開始後に、ロータ32の回転速度が上昇するのに伴って、エンコーダカウント値の変化速度が速くなって、通電相の切り換えタイミングが速くなるが、通電相の巻線33,34に通電を開始してから実際にトルクが発生するまでに、巻線33,34のインダクタンス分の遅れが生じるため、ロータ32の回転速度が速くなると、通電相の巻線33,34に通電を開始してから実際にトルクを発生するまでの間に、ロータ32がかなりの角度回転して、実際のロータ32の回転位相に対して通電相のトルク発生タイミングが遅れた状態となる。このような状態になると、駆動トルクが低下してロータ32の回転速度が抑えられてしまい、位置切換速度の高速化(ロータの回転速度の高速化)の要求を満たすことができない。
【0056】
この対策として、予め、通電相の位相進み量を大きく設定しておくことが考えられるが、F/B制御開始時(起動時)に、通電相の位相進み量が大きいと、起動トルクが小さくなってSRモータ12の起動が不安定になったり、起動に失敗するおそれがある。
【0057】
また、予め、通電相の位相進み量を大きく設定してロータ32の回転速度を高速化すると、F/B制御終了時にロータ32が慣性により目標位置を越えてオーバーシュートしやすくなり、ロータ32を正確に目標位置で停止させることが難しくなる。
【0058】
そこで、本実施形態では、F/B制御中に、ロータ32の回転速度に応じて該ロータ32の回転位相に対する通電相の位相進み量を補正すると共に、ロータ32の回転速度を減速させる必要が生じたときに(例えばロータ32が目標位置に近付いたときに)、通電相の位相進み量を小さくする方向に補正するようにしている。具体的には、F/B制御開始時に、通電相の位相進み量を小さくするように補正することで、起動トルクを大きくすることができ、ロータ32の回転速度を素早く立ち上げることができる。そして、ロータ32の回転速度が上昇するのに伴って、通電相の位相進み量を大きくするように補正することで、高速回転時でも、通電相のトルク発生タイミングと実際のロータの回転位相との同期関係を維持することができ、ロータ32を高速で安定して回転させることができる。これにより、起動性能と高速性能とを両立させることができる。
【0059】
その後、ロータ32が目標位置に近付いたときに、通電相の位相進み量を小さくする方向に補正すれば、実際のロータ32の回転位相に対して通電相のトルク発生タイミングが遅れた状態となり、それによって、駆動トルクを低下させたり、或は、ロータ32の回転方向と反対方向のトルク(制動トルク)を発生させることができ、ロータ32の回転速度を確実に減速させることができて、ロータ32を正確に目標位置で停止させることができる。これにより、起動性能と高速性能と停止性能(減速性能)に優れたF/B制御を行うことができる。
【0060】
ところで、ロータ32の回転量(回転角度)は、減速機構26、出力軸13、ディテントレバー15等からなる回転伝達系を介してレンジ切換機構11の操作量(パーキングロッド18のスライド量)に変換されるが、回転伝達系を構成する部品間には、遊び(ガタ)が存在する。例えば、減速機構26の歯車間のバックラッシが存在し、また、モータ12の回転軸の先端部に形成した断面非円形の連結部を出力軸13の嵌合穴に嵌め込んで連結する構成では、両者の嵌め込み作業を容易にするためのクリアランスが必要となる。
【0061】
また、図35に示すように、ディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24やNotPレンジ保持凹部25に嵌まり込んだときに、係合部23aと各保持凹部24,25の側壁との間に僅かな隙間(ガタ)が存在する。このように、ロータ32の回転量をレンジ切換機構11の操作量(パーキングロッド18のスライド量)に変換する回転伝達系には、バックラッシや部品間の隙間等による遊び(ガタ)が存在するため、仮に、エンコーダカウント値に基づいてロータ32の回転量を正確に制御できたとしても、レンジ切換機構11の操作量には回転伝達系の遊び(ガタ)分の誤差が生じてしまい、レンジ切換機構11の操作量を精度良く制御することができない。
【0062】
そこで、本実施形態では、この回転伝達系の遊び量を学習する機能を備えている。具体的には、回転伝達系の遊び量を学習する際に、ディテントバネ23の係合部23aがレンジ切換機構11の可動範囲のPレンジ側の限界位置であるPレンジ保持凹部24の側壁に突き当たるまでロータ32を回転させるPレンジ側突き当て制御(一方向突き当て制御)と、NotPレンジ側の限界位置であるNotPレンジ保持凹部25の側壁に突き当たるまでロータ32を回転させるNotPレンジ側突き当て制御(他方向突き当て制御)とを実行して、Pレンジ側の限界位置からNotPレンジ側の限界位置までのエンコーダカウント値の増減量をレンジ切換機構11の可動範囲の実測値として求める。そして、この可動範囲の実測値と該可動範囲の設計値との差分を回転伝達系の遊び量として学習し、その後、ロータ32を目標位置まで回転させる際に、当該目標位置を回転伝達系の遊び量の学習値を考慮して設定する。このようにすれば、回転伝達系に遊び(ガタ)があっても、その遊びを含めた目標位置を設定することができ、レンジ切換機構11の操作量を精度良く制御することができる。
【0063】
この場合、SRモータ12を制御するECU41の電源投入(イグニッションスイッチのオン操作)からレンジ切換機構11の制御開始までに回転伝達系の遊び量を学習する時間的な余裕があれば、ECU41の電源投入後に、Pレンジ側突き当て制御とNotPレンジ側突き当て制御とを連続して実行して、レンジ切換機構11の制御開始前に回転伝達系の遊び量を学習するようにしても良いが、ECU41の電源投入後にレンジ切換機構11の制御を速やかに開始する必要がある場合は、ECU41の電源投入後に回転伝達系の遊び量を学習する時間的な余裕がない場合がある。
【0064】
そこで、本実施形態では、遊び量学習を行わずにレンジ切換機構11の制御を開始した後、ロータ32がPレンジで停止しているときに、Pレンジ側突き当て制御を実行して、Pレンジ側突き当て時のエンコーダカウント値をECU41のRAMに記憶し、ロータ32がNotPレンジで停止しているときに、NotPレンジ側突き当て制御を実行して、NotPレンジ側突き当て時のエンコーダカウント値をECU41のRAMに記憶し、前記Pレンジ側突き当て時のエンコーダカウント値と前記NotPレンジ側突き当て時のエンコーダカウント値との差分をレンジ切換機構11の可動範囲の実測値として求め、この可動範囲の実測値と該可動範囲の設計値との差分を回転伝達系の遊び量として学習するようにしている。
【0065】
このようにすれば、ECU41の電源投入からレンジ切換機構11の制御開始までに回転伝達系の遊び量を学習する時間的な余裕がなく、遊び量学習を行わずにレンジ切換機構11の制御を開始しても、その後、ロータ32がPレンジ又はNotPレンジで停止している期間に各突き当て制御を実行して回転伝達系の遊び量を学習することができる。この場合、遊び量学習が終了する前は、回転伝達系の遊び量を考慮しない従来同様の制御を行うようにしても良いが、予め設定した平均的な遊び量又は前回の遊び量学習値の記憶値を用いて制御対象を制御するようにしても良い。尚、以下の説明で、単に「突き当て制御」と表記する場合は、Pレンジ側突き当て制御とNotPレンジ側突き当て制御の両方に該当することを意味する。
【0066】
また、本実施形態では、突き当て制御の実行時に、SRモータ12の通電デューティ比(通電率)を通常駆動時よりも低下させることで、SRモータ12のトルクを通常駆動時よりも低下させるようにしている。SRモータ12のトルクは、レンジ切換時にディテントバネ23の係合部23aがディテントレバー15の両保持凹部24,25間の山部を確実に乗り越えることができるように大きなトルクに設定されているが、突き当て制御では、SRモータ12のトルクによってディテントバネ23の係合部23aをディテントレバー15の各保持凹部24,25の側壁に突き当てた状態にするため、SRモータ12のトルクが大きいと、突き当て制御の実行回数が増えるに従って、ディテントバネ23の係合部23a等の回転伝達系の部品が徐々に変形・損傷する可能性があり、耐久性・信頼性を低下させるおそれがある。
【0067】
この対策として、突き当て制御実行時にSRモータ12のトルクを低下させれば、ディテントバネ23の係合部23aをディテントレバー15の各保持凹部24,25の側壁に突き当てる力を弱めることができ、突き当て制御によるディテントバネ23の係合部23a等の回転伝達系の部品の変形・損傷を防止できて、耐久性・信頼性を確保することができる。尚、本実施形態の突き当て制御では、ディテントバネ23の係合部23aがディテントレバー15の両保持凹部24,25間の山部を乗り越える必要がないため、突き当て制御実行時にSRモータ12のトルクを低下させても、ディテントバネ23の係合部23aをディテントレバー15の各保持凹部24,25の側壁に突き当てるだけの必要最小限のトルクがあれば、突き当て制御を正常に実行できる。
【0068】
また、本実施形態では、突き当て制御実行時に、ロータ32の回転速度を遅くするように通電相の位相進み量を補正するようにしている。つまり、突き当て制御実行時に、ロータ32の回転速度が速いと、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に衝突する速度が速くなって、その衝撃力でディテントバネ23の係合部23a等の回転伝達系の部品が徐々に変形・損傷する可能性があるが、突き当て制御実行時に、ロータ32の回転速度を遅くすれば、突き当て制御実行時にディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に衝突する速度が遅くなって、その衝撃力を弱めることができ、ディテントバネ23の係合部23a等の回転伝達系の部品の変形・損傷を防止することができて、耐久性・信頼性を確保することができる。
【0069】
また、本実施形態では、突き当て制御実行時に、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に突き当たった状態で該係合部23が保持凹部24,25の側壁を僅かに乗り上げる角度(乗り上げ補正量)をSRモータ12の電源電圧であるバッテリ電圧に基づいて推定し、その推定値分だけレンジ切換機構11の可動範囲の実測値を補正するようにしている。つまり、突き当て制御実行時に、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁を乗り上げる角度(乗り上げ補正量)は、SRモータ12のトルクが大きくなるほど大きくなる。一般に、SRモータ12のトルクは、その電源電圧(バッテリ電圧)によって変化するため、電源電圧(バッテリ電圧)とSRモータ12のトルクとの間には相関関係があり、電源電圧(バッテリ電圧)をSRモータ12のトルクの代用情報として用いることができる。従って、突き当て制御実行時に、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁を乗り上げる角度(乗り上げ補正量)を、SRモータ12のトルクの代用情報である電源電圧(バッテリ電圧)に基づいて推定し、その推定値分だけレンジ切換機構11の可動範囲の実測値を補正するようにすれば、レンジ切換機構11の可動範囲の実測値を精度良く求めることができる。
【0070】
また、本実施形態では、突き当て制御実行時に、エンコーダカウント値が変化しなくなったときに、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に突き当たった状態になったと判断して該突き当て制御を終了するようにしている。このようにすれば、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に突き当たった状態になったときの正確なエンコーダカウント値を求めることができて、レンジ切換機構11の可動範囲の実測値を精度良く求めることができると共に、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に突き当たった状態に保持される時間を短くすることができて、突き当て制御によるディテントバネ23の係合部23a等の回転伝達系の部品劣化をより一層少なくすることができる。
【0071】
また、本実施形態では、突き当て制御を所定時間以上実行しても、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に突き当たった状態にならないと判断されたときに、該突き当て制御を終了するようにしている。突き当て制御を長い時間行っても、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に突き当たった状態にならない場合は、SRモータ12の故障やエンコーダ46の故障等、何等かのシステム異常が発生しているものと思われるため、このような場合は、突き当て制御を強制的に終了させることで、フェールセーフを図ることができる。
【0072】
ところで、SRモータ12を制御するECU41のCPUが何等かの原因(例えば電源瞬断等)でリセットされることがある。一旦、ECU41のCPUがリセットされると、指令シフトレンジ(目標位置)のデータを記憶するRAMもリセットされるため、そのリセットの前後で指令シフトレンジが異なってくる。例えば、指令シフトレンジをNotPレンジにセットして車両を運転しているときに、ECU41のCPUが何等かの原因でリセットされると、RAMに記憶された指令シフトレンジのデータが初期化されてPレンジに相当する値となってしまう(図48の破線参照)。従って、車両運転中にECU41のCPUがリセットされたときに、RAMに記憶された指令シフトレンジに基づいてレンジ切換制御を行うと、運転者の意思に反してシフトレンジが勝手に切り換えられてしまうという不具合が発生する。
【0073】
このような不具合を解消するために、本実施形態では、SRモータ12の出力軸13の回転位置(実際のシフトレンジ)を検出する出力軸センサ14が設けられていることに着目し、起動時(ECU41のCPUのリセット後や電源投入後)に、出力軸センサ14で検出した実際のシフトレンジを起動時の指令シフトレンジにセットするようにしている。このようにすれば、車両運転中にECU41のCPUが何等かの原因でリセットされても、そのリセットの前後で指令シフトレンジが変更されず、運転者の意思に反してシフトレンジが勝手に切り換えられてしまうという不具合を解消できて、レンジ切換制御の信頼性を向上できる。
【0074】
以上説明したレンジ切換制御は、レンジ切換制御装置42のECU41によって後述する各ルーチンに従って実行される。以下、これら各ルーチンの処理内容を説明する。
【0075】
[初期駆動]
図8及び図9に示す初期駆動ルーチンに従って実行される。本ルーチンは、ECU41への電源投入直後(イグニッションスイッチをOFF位置からACC位置へ操作した直後)に、初期駆動が終了するまで所定周期(例えば1ms周期)で実行される。
【0076】
本ルーチンが起動されると、まずステップ101で、オープンループ制御実行フラグXopen=ON、又は、リカバリ処理実行フラグXrcv=ONであるか否かを判定する。ここで、オープンループ制御実行フラグXopenは、エンコーダ46又はSRモータ12が故障したときに実行されるオープンループ制御(フェイルセーフ処理)が実行されているか否かを判定するフラグであり、ONは実行されていることを意味する。また、リカバリ処理実行フラグXrcvは、一時的な動作異常が発生したときに一時的に実行されるリカバリ処理(オープンループ制御)が実行されているか否かを判定するフラグであり、ONは実行されていることを意味する。
【0077】
もし、上記ステップ101で、「Yes」と判定されれば、以降の処理を行うことなく、本ルーチンを終了し、「No」と判定されれば、ステップ102に進み、ECU41のイニシャル処理から出力軸センサ14の出力電圧が安定するまで待つための所定時間(例えば100ms)が経過したか否かを判定する。そして、イニシャル処理から所定時間経過した時点で、ステップ103に進み、出力軸センサ14の出力電圧を読み込んで、この出力電圧がレンジ判定値以下であるか否かで、現在のレンジがPレンジかNotPレンジかを判定し、Pレンジであれば、ステップ104に進み、レンジ判定フラグXnpをPレンジを意味する「0」にセットし、NotPレンジであれば、ステップ105に進み、レンジ判定フラグXnpをNotPレンジを意味する「1」にセットする。
【0078】
この後、ステップ106に進み、レンジ判定フラグXnp=0(Pレンジ)であるか否かを判定し、レンジ判定フラグXnp=0(Pレンジ)であれば、ステップ107に進み、図10のPレンジ初期駆動ルーチンを実行し、レンジ判定フラグXnp=1(NotPレンジ)であれば、ステップ108に進み、図11のNotPレンジ初期駆動ルーチンを実行する。
【0079】
上記ステップ107で、図10のPレンジ初期駆動ルーチンが起動されると、ステップ201〜206で、初期駆動中の励磁回数をカウントする励磁回数カウンタCASEが0〜5のいずれであるかを判定する。この励磁回数カウンタCASEは、イニシャル処理でセットされる初期値が0で、励磁を1回行う毎に1ずつカウントアップされる(図9のステップ114)。そして、励磁回数カウンタCASEの判定結果に応じて通電相と通電時間Tを次のように設定する。
【0080】
CASE=0(1回目の励磁)の場合は、ステップ207に進み、W相通電を選択し、その通電時間TをT1(例えば10ms)にセットする。
CASE=1(2回目の励磁)の場合は、ステップ208に進み、UW相通電を選択し、その通電時間TをT2(例えば100ms)にセットする。
【0081】
CASE=2(3回目の励磁)の場合は、ステップ209に進み、U相通電を選択し、その通電時間TをT1(例えば10ms)にセットする。
CASE=3(4回目の励磁)の場合は、ステップ210に進み、UV相通電を選択し、その通電時間TをT2(例えば100ms)にセットする。
【0082】
CASE=4(5回目の励磁)の場合は、ステップ211に進み、V相通電を選択し、その通電時間TをT1(例えば10ms)にセットする。
CASE=5(6回目の励磁)の場合は、ステップ212に進み、VW相通電を選択し、その通電時間TをT2(例えば100ms)にセットする。
【0083】
これにより、Pレンジで初期駆動を行う場合は、W相通電→UW相通電→U相通電→UV相通電→V相通電→VW相通電の順序で通電相の切り換えを一巡し、ロータ32を正回転方向(Pレンジ→NotPレンジの回転方向)に駆動する。
この際、1相通電の時間T1を2相通電の時間T2よりも短く設定する。
【0084】
一方、ステップ108で、図11のNotPレンジ初期駆動ルーチンが起動されると、ステップ221〜226で、励磁回数カウンタCASEが0〜5のいずれであるかを判定し、その判定結果に応じて通電相と通電時間Tを次のように設定する。
【0085】
CASE=0(1回目の励磁)の場合は、ステップ227に進み、V相通電を選択し、その通電時間TをT1(例えば10ms)にセットする。
CASE=1(2回目の励磁)の場合は、ステップ228に進み、UV相通電を選択し、その通電時間TをT2(例えば100ms)にセットする。
【0086】
CASE=2(3回目の励磁)の場合は、ステップ229に進み、U相通電を選択し、その通電時間TをT1(例えば10ms)にセットする。
CASE=3(4回目の励磁)の場合は、ステップ230に進み、UW相通電を選択し、その通電時間TをT2(例えば100ms)にセットする。
【0087】
CASE=4(5回目の励磁)の場合は、ステップ231に進み、W相通電を選択し、その通電時間TをT1(例えば10ms)にセットする。
CASE=5(6回目の励磁)の場合は、ステップ232に進み、VW相通電を選択し、その通電時間TをT2(例えば100ms)にセットする。
【0088】
これにより、NotPレンジで初期駆動を行う場合は、V相通電→UV相通電→U相通電→UW相通電→W相通電→VW相通電の順序で通電相の切り換えを一巡し、ロータ32を逆回転方向(NotPレンジ→Pレンジの回転方向)に駆動する。この場合も、1相通電の時間T1を2相通電の時間T2よりも短く設定する。
【0089】
以上のようにして、図10のPレンジ初期駆動ルーチン又は図11のNotPレンジ初期駆動ルーチンを実行した後、図8のステップ109に進み、初期駆動中にレンジ切換操作(Pレンジスイッチ43又はNotPレンジスイッチ44の操作)が行われたか否かを判定し、初期駆動中にレンジ切換操作が行われれば、ステップ110に進み、レンジ切換操作フラグXchgをONにセットし、レンジ切換操作が行われていなければ、ステップ111に進み、レンジ切換操作フラグXchgをOFFにセットする。
【0090】
この後、図9のステップ112に進み、現在の通電相の通電時間をカウントする通電時間カウンタCTをカウントアップし、次のステップ113で、現在の通電相の通電時間CTが前記図10又は図11のルーチンで設定した通電時間T(=T1又はT2)を越えたか否かを判定し、越えていなければ、以降の処理を行うことなく、本ルーチンを終了する。これにより、現在の通電相の通電時間CTが図10又は図11のルーチンで設定した通電時間T(=T1又はT2)を越えるまで、現在の通電相への通電が継続される。
【0091】
その後、現在の通電相の通電時間CTが図10又は図11のルーチンで設定した通電時間T(=T1又はT2)を越えた時点で、ステップ114に進み、励磁回数カウンタCASEを1だけカウントアップし、通電相を次の通電相に切り換える。そして、次のステップ115で、通電時間カウンタCTをリセットした後、ステップ116に進み、励磁回数カウンタCASEが初期駆動の終了を意味する「6」に達したか否かを判定し、もし、励磁回数カウンタCASEが「6」に達していれば、ステップ118に進み、初期駆動終了フラグXendを初期駆動の終了を意味する「ON」にセットする。
【0092】
また、励磁回数カウンタCASEが「6」に達していない場合、つまり、初期駆動の途中である場合は、ステップ117に進み、初期駆動の途中終了条件が成立しているか否かを判定する。この初期駆動の途中終了条件は、次の3つの条件▲1▼〜▲3▼によって判定される。
▲1▼レンジ判定フラグXnpが0(Pレンジ)であること
▲2▼励磁回数カウンタCASEが2又は4、つまり2相通電終了時であること
▲3▼レンジ切換操作フラグXchgがON、つまり初期駆動中にレンジ切換操作が行われたこと
【0093】
これら3つの条件▲1▼〜▲3▼のうち、1つでも満たさない条件があれば、初期駆動の途中終了条件が成立せず、初期駆動を継続する。これに対し、3つの条件▲1▼〜▲3▼を全て満たしていれば、初期駆動の途中終了条件が成立して、ステップ118に進み、初期駆動終了フラグXendを初期駆動の終了を意味する「ON」にセットする。
【0094】
この後、ステップ119に進み、レンジ判定フラグXnp=1であるか否か(NotPレンジで初期駆動を行ったか否か)を判定し、レンジ判定フラグXnp=1であれば、ステップ120に進み、初期駆動終了時のエンコーダカウント値Ncntを初期位置ずれ学習値Gcntとして記憶する。そして、次のステップ121で、エンコーダカウント値Ncntを次式によりNotPレンジを基準にした値に補正する。
Ncnt=Ncnt+288
【0095】
本実施形態では、Pレンジの保持位置を0点位置としてエンコーダカウント値Ncntをカウントアップし、NotPレンジの保持位置までロータ32が回転したときに、エンコーダカウント値Ncntが例えば288となるようになっている。従って、NotPレンジで初期駆動を行った場合は、初期駆動終了時のエンコーダカウント値Ncntに288を加算することで、エンコーダカウント値NcntをNotPレンジを基準にした値に補正する。
【0096】
一方、上記ステップ119で、レンジ判定フラグXnp=0(Pレンジで初期駆動)と判定されれば、ステップ122に進み、初期駆動終了時のエンコーダカウント値Ncntを用いて初期位置ずれ学習値Gcntを次式により算出する。
Gcnt=Ncnt+2×(6−CASE)
【0097】
この場合、初期駆動が最後まで行われれば、ステップ114の処理によりCASE=6となるため、初期駆動終了時のエンコーダカウント値Ncntがそのまま初期位置ずれ学習値Gcntとなるが、Pレンジで初期駆動を行う場合は、初期駆動の途中でレンジ切換操作が行われたときに、次の2相通電(2相通電の実行中にレンジ切換要求が発生したときはその2相通電)が終了してから通常駆動に移行するため、その初期駆動を最後まで実行したと仮定して、本来の初期駆動終了時のエンコーダカウント値Ncntを推定し、その推定値を初期位置ずれ学習値Gcntとするようにしている。2×(6−CASE)は、未終了の励磁回数分の回転角度に相当するカウントアップ値(以下「Ncnt補正量」という)である。
【0098】
図14は、初期駆動時の励磁回数カウンタCASE、Ncnt補正量、通電相、A相信号、B相信号、エンコーダカウント値Ncntの関係を説明するタイムチャートである。例えば、初期駆動中に、UW相通電終了時(励磁回数カウンタCASEが1から2になったとき)に初期駆動を終了する場合は、Ncnt補正量=2×(6−CASE)=2×(6−2)=8となり、UV相通電終了時(励磁回数カウンタCASEが3から4になったとき)に初期駆動を終了する場合は、Ncnt補正量=2×(6−CASE)=2×(6−4)=4となる。
【0099】
[エンコーダカウンタ]
次に、図15に示すエンコーダカウンタルーチンの処理内容を説明する。本ルーチンは、AB相割り込み処理によりA相信号とB相信号の立ち上がり/立ち下がりの両方のエッジに同期して起動され、A相信号とB相信号の立ち上がり/立ち下がりの両方のエッジを次のようにしてカウントする。本ルーチンが起動されると、まずステップ301で、A相信号とB相信号の値A(i) 、B(i) を読み込み、次のステップ302で、図16のカウントアップ値ΔN算出マップを検索して、A相信号とB相信号の今回値A(i) 、B(i) と、前回値A(i-1) 、B(i-1) に応じたカウントアップ値ΔNを算出する。
【0100】
ここで、A相信号とB相信号の今回値A(i) 、B(i) と、前回値A(i-1) 、B(i-1) を用いる理由は、A相信号とB相信号の発生順序によってロータ32の回転方向を判定するためであり、図17に示すように、正回転(Pレンジ→NotPレンジの回転方向)ではカウントアップ値ΔNをプラス値にしてエンコーダカウント値Ncntをカウントアップし、逆回転(NotPレンジ→Pレンジの回転方向)ではカウントアップ値ΔNをマイナス値にしてエンコーダカウント値Ncntをカウントダウンする。
【0101】
カウントアップ値ΔNの算出後、ステップ303に進み、前回のエンコーダカウント値Ncntに上記ステップ302で算出したカウントアップ値ΔNを加算して、今回のエンコーダカウント値Ncntを求める。この後、ステップ304に進み、次回のカウント処理のために、A相信号とB相信号の今回値A(i) 、B(i) をそれぞれA(i-1) 、B(i-1) として記憶して本ルーチンを終了する。
【0102】
[制御モード設定]
図20乃至図22に示す制御モード設定ルーチンは、初期駆動終了後に所定周期(例えば1ms周期)で実行され、制御モード判定値modeを0、1、3、4、5のいずれかに設定して、下記のように制御モードを指定する。
【0103】
【0104】
制御モード設定ルーチンが起動されると、まずステップ401で、システム故障フラグXfailoffがレンジ切換制御装置42の故障を意味するONにセットされているか否かを判定し、もし、Xfailoff=ONに設定されていれば、ステップ402に進み、SRモータ12を通電オフ状態に維持するための処理を実行する。これにより、回転方向指示値D=0(停止)、通電フラグXon=OFF(通電オフ)、F/B許可フラグXfb=OFF(F/B制御禁止)、制御モード判定値mode=0(通電オフ)にセットする。
【0105】
一方、システム故障フラグXfailoffがOFF(故障無し)の場合は、ステップ401からステップ403に進み、オープンループ制御実行フラグXopen=OFF、且つ、リカバリ処理実行フラグXrcv=OFFであるか否かを判定する。もし、オープンループ制御実行フラグXopenとリカバリ処理実行フラグXrcvのいずれか一方又は両方がONにセットされている場合は、ステップ404に進み、オープンループ制御を実行するために、回転方向指示値D=0(停止)、制御モード判定値mode=5(オープンループ制御)、F/B許可フラグXfb=OFF(F/B制御禁止)にセットする。
【0106】
オープンループ制御実行フラグXopenとリカバリ処理実行フラグXrcvの両方がOFFにセットされている場合は、ステップ405に進み、通電フラグXon=ON(通電オン)にセットされているか否かを判定し、通電フラグXon=OFF(通電オフ)にセットされている場合は、ステップ406に進み、目標カウント値Acntとエンコーダカウント値Ncntとの差(目標位置とロータ32と位置との差)を求めて、この差(Acnt−Ncnt)に基づいて正回転(Pレンジ→NotPレンジ方向への回転)、逆回転(NotPレンジ→Pレンジ方向への回転)、停止のいずれに該当するか判定する。この際、エンコーダカウント値Ncntは、前記図8及び図9の初期駆動ルーチンで学習された初期位置ずれ学習値Gcntによって補正された値を用いる。
Ncnt=Ncnt−Gcnt
尚、目標カウント値Acntは、後述する図45及び図46の目標カウント値設定ルーチンで設定される。
【0107】
目標カウント値Acntとエンコーダカウント値Ncntとの差(Acnt−Ncnt)が+Kth以上(例えば+10°以上)であれば、ロータ32を正回転方向(Pレンジ→NotPレンジの回転方向)に回転駆動する必要があると判断して、ステップ407に進み、回転方向指示値D=1(正回転)、通電フラグXon=ON(通電オン)、制御モード判定値mode=1(F/B制御開始位置停止保持処理及びF/B制御)にセットする。
【0108】
目標カウント値Acntとエンコーダカウント値Ncntとの差(Acnt−Ncnt)が−Kth以下(例えば−10°以下)であれば、ロータ32を逆回転方向(NotPレンジ→Pレンジの回転方向)に回転駆動する必要があると判断して、ステップ409に進み、回転方向指示値D=−1(逆回転)、通電フラグXon=ON(通電オン)、制御モード判定値mode=1(F/B制御開始位置停止保持処理及びF/B制御)にセットする。
【0109】
目標カウント値Acntとエンコーダカウント値Ncntとの差(Acnt−Ncnt)が−Kthから+Kthの範囲内(例えば−10°から+10°の範囲内)であれば、ロータ32を目標位置にディテントバネ23のバネ力により保持することが可能である(SRモータ12への通電は不要)と判断して、ステップ408に進み、SRモータ12を通電オフ状態に維持するために、回転方向指示値D=0(停止)、通電フラグXon=OFF(通電オフ)、制御モード判定値mode=0(通電オフ)にセットする。
【0110】
一方、前記ステップ405で、通電フラグXon=ON(通電オン)にセットされていると判定された場合は、図21のステップ410〜415の処理によって、指令シフトレンジ(目標位置)が反転されたか否かを判定し、反転されていれば、回転方向指示値Dを反転させる。
【0111】
具体的には、まずステップ410で、回転方向指示値D=1(正回転)であるか否かを判定し、回転方向指示値D=1(正回転)であれば、ステップ411に進み、目標カウント値Acntとエンコーダカウント値Ncntとの差(Acnt−Ncnt)がマイナス値であるか否かで、ロータ32の回転方向を正回転から逆回転に反転させる必要があるか否かを判定し、その必要があれば、ステップ412に進み、回転方向指示値D=−1(逆回転)にセットする。
【0112】
これに対して、上記ステップ410で、回転方向指示値Dが1(正回転)でないと判定された場合(つまりD=0又は−1の場合)は、ステップ413に進み、回転方向指示値D=−1(逆回転)であるか否かを判定し、回転方向指示値D=−1(逆回転)であれば、ステップ414に進み、目標カウント値Acntとエンコーダカウント値Ncntとの差(Acnt−Ncnt)がプラス値であるか否かで、ロータ32の回転方向を逆回転から正回転に反転させる必要があるか否かを判定し、その必要があれば、ステップ415に進み、回転方向指示値D=1(正回転)にセットする。
【0113】
以上のようにして、回転方向指示値Dが反転された場合は、ステップ416に進み、ロータ32の回転方向を反転させるために、制御モード判定値mode=4(反転位置停止保持処理)、F/B許可フラグXfb=OFF(F/B制御禁止)にセットしてステップ417に進む。これに対し、回転方向指示値Dが反転されない場合は、上記ステップ416の処理を行わずにステップ417に進む。
【0114】
このステップ417では、制御モード判定値mode=4(反転位置停止保持処理)にセットされているか否かを判定し、「Yes」であれば、ステップ418に進み、通電フラグXon=ON(通電オン)にセットして、反転位置停止保持処理を実行する。
【0115】
これに対して、上記ステップ417で「No」と判定された場合(反転位置停止保持処理ではない場合)は、図22のステップ419〜421で、F/B制御の終了タイミングであるか否かを判定する。具体的には、まずステップ419で、回転方向指示値D≧0(正回転又は停止)であるか否かを判定し、回転方向指示値D≧0であれば、ステップ420に進み、目標カウント値Acntとエンコーダカウント値Ncntとの差(Acnt−Ncnt)が+Kref以下(例えば+0.5°以下)であるか否かで、F/B制御の終了タイミングであるか否かを判定する。また、回転方向指示値D=−1(逆回転)であれば、ステップ421に進み、目標カウント値Acntとエンコーダカウント値Ncntとの差(Acnt−Ncnt)が−Kref以上(例えば−0.5°以上)であるか否かで、F/B制御の終了タイミングであるか否かを判定する。
【0116】
つまり、F/B制御の終了判定値Krefを例えば通電相の位相進み分(例えば2〜4カウント分)に設定することで、目標カウント値Acntよりも通電相の位相進み分だけ前のタイミングでF/B制御を終了するようにしたものである。これにより、F/B制御の最後の通電相がロータ32を目標位置(目標カウント値Acnt)に停止保持する通電相と一致するようになる。
【0117】
上記ステップ420又は421で「No」と判定された場合(F/B制御の終了タイミングでない場合)は、ステップ422に進み、目標位置停止保持処理の時間をカウントする停止保持時間カウンタCTholdをリセットする。
【0118】
一方、上記ステップ420又は421で「Yes」と判定された場合(F/B制御の終了タイミングである場合)は、ステップ423に進み、F/B許可フラグXfb=OFF(F/B制御禁止)にセットし、F/B制御を終了して目標位置停止保持処理に移行する。そして、次のステップ424で、停止保持時間カウンタCTholdをカウントアップして、目標位置停止保持処理の時間をカウントする。
【0119】
この後、ステップ425に進み、目標位置停止保持処理の時間CTholdが所定時間(例えば50ms)に達したか否かを判定し、目標位置停止保持処理の時間CTholdが所定時間(例えば50ms)に達していなければ、ステップ426に進み、目標位置停止保持処理を続行するために、回転方向指示値D=0(停止)、通電フラグXon=ON(通電オン)、制御モード判定値mode=3(目標位置停止保持処理)に維持する。
【0120】
その後、目標位置停止保持処理の時間CTholdが所定時間(例えば50ms)に達した時点で、ステップ427に進み、SRモータ12の通電をオフするために、回転方向指示値D=0(停止)、通電フラグXon=OFF(通電オフ)、制御モード判定値mode=0(通電オフ)にセットする。
【0121】
[時間同期モータ制御]
図23に示す時間同期モータ制御ルーチンは、初期駆動終了後に所定周期(例えば1ms周期)で起動され、F/B制御開始位置停止保持処理、目標位置停止保持処理、反転位置停止保持処理を実行する。
【0122】
本ルーチンが起動されると、まずステップ501で、F/B許可フラグXfb=OFF(F/B制御禁止)であるか否かを判定し、F/B許可フラグXfb=ON(F/B制御実行)の場合は、以降の処理を行うことなく、本ルーチンを終了する。この場合は、後述する図30に示すF/B制御ルーチンによって通電相の設定と通電処理が実行される。
【0123】
これに対して、上記ステップ501で、F/B許可フラグXfb=OFF(F/B制御禁止)と判定された場合は、ステップ502〜504で、制御モード判定値mode=1,3,4のいずれかに該当するか否かを判定し、制御モード判定値mode=1(F/B制御開始位置停止保持処理及びF/B制御)の場合は、ステップ502からステップ505に進み、後述する図24に示すmode1ルーチンを実行して、F/B制御開始位置停止保持処理実行時の通電相を設定するための通電相判定値Mptnを算出する。
【0124】
また、制御モード判定値mode=3(目標位置停止保持処理)の場合は、ステップ503からステップ506に進み、後述する図25に示すmode3ルーチンを実行して、目標位置停止保持処理実行時の通電相を設定するための通電相判定値Mptnを算出する。
【0125】
また、制御モード判定値mode=4(反転位置停止保持処理)の場合は、ステップ504からステップ507に進み、後述する図26に示すmode4ルーチンを実行して、反転位置停止保持処理実行時の通電相を設定するための通電相判定値Mptnを算出する。
【0126】
以上のようにして、制御モード判定値mode=1,3,4の場合は、通電相判定値Mptnを算出した後、ステップ508に進み、後述する図27に示す通電処理ルーチンを実行して、F/B制御開始位置停止保持処理、目標位置停止保持処理、反転位置停止保持処理を実行する。
【0127】
一方、上記ステップ502〜504で、いずれも「No」と判定された場合、つまり、制御モード判定値mode=0,5の場合は、ステップ508に進み、後述する図27に示す通電処理ルーチンを実行して、通電オフ又はオープンループ制御を実行する。
【0128】
[mode1]
図24に示すmode1ルーチンは、図23の時間同期モータ制御ルーチンのステップ505で起動されるサブルーチンであり、F/B制御開始位置停止保持処理時の通電相判定値Mptn(通電相)を次のようにして設定する。
【0129】
本ルーチンが起動されると、まずステップ511で、F/B制御開始位置停止保持処理の時間をカウントする通電時間カウンタCT1をカウントアップし、次のステップ512で、F/B制御開始位置停止保持処理の時間CT1が所定時間(例えば10ms)を越えたか否かを判定する。
【0130】
もし、F/B制御開始位置停止保持処理の時間CT1が所定時間(例えば10ms)を越えていなければ、ステップ513に進み、停止保持時通電相記憶済みフラグXhold=OFF(未記憶)であるか否か(つまりF/B制御開始位置停止保持処理の開始直前のタイミングであるか否か)を判定し、停止保持時通電相記憶済みフラグXhold=OFFであれば、ステップ514に進み、F/B制御開始位置停止保持処理時の通電相判定値Mptnを現在の位置カウンタ値(Ncnt−Gcnt)にセットする。
Mptn=Ncnt−Gcnt
【0131】
ここで、位置カウンタ値(Ncnt−Gcnt)は、エンコーダカウント値Ncntを初期位置ずれ学習値Gcntで補正した値であり、ロータ32の現在位置を正確に表した値となっている。
【0132】
この後、ステップ515に進み、通電相判定値Mptnを“12”で割り算して、その余りMptn%12を求める。ここで、“12”は、通電相を一巡させる間のエンコーダカウント値Ncnt(通電相判定値Mptn)の増減量に相当する。このMptn%12の値に基づいて、図28の変換テーブルによって通電相が決定される。
【0133】
そして、次のステップ516で、Mptn%12=2,3,6,7,10,11であるか否かによって1相通電(U相通電、V相通電、W相通電)であるか否かを判定し、1相通電であれば、ステップ517に進み、通電相判定値Mptnを1ステップ分に相当する“2”だけ増加して2相通電(UV相通電、VW相通電、UW相通電)に補正する。これにより、F/B制御開始位置停止保持処理を1相通電と比べて保持トルクの大きい2相通電で実行することで、ロータ32がF/B制御開始位置付近で振動することを防止して、ロータ32をF/B制御開始位置に確実に停止保持できるようにする。
【0134】
そして、次のステップ518で、停止保持時通電相記憶済みフラグXhold=ON(記憶済み)にセットして本ルーチンを終了する。この後、本ルーチンが起動されたときには、ステップ513で「No」と判定され、ステップ514〜518の処理が実行されない。これにより、F/B制御開始位置停止保持処理時の通電相判定値Mptn(通電相)を設定する処理は、F/B制御開始位置停止保持処理の開始直前に1回のみ実行される。
【0135】
その後、F/B制御開始位置停止保持処理の時間CT1が所定時間(例えば10ms)を越えた時点で、ステップ512で「Yes」と判定されて、F/B制御開始位置停止保持処理を終了し、F/B制御に移行する。これにより、最初に、ステップ519で、F/B制御開始位置停止保持処理時の通電相判定値Mptnに、回転方向に応じて通電相の位相進み分のカウント値(例えば4又は3)を加算又は減算してF/B制御開始時の最初の通電相判定値Mptnを設定し、それによって、ロータ32の回転駆動を開始する。この後、ステップ520に進み、F/B許可フラグXfb=ON(F/B制御実行)にセットする。
【0136】
図32はUW相から回転を開始する場合に最初に通電する相を説明するタイムチャートである。この場合、正回転(Pレンジ→NotPレンジ方向への回転)を開始する場合は、通電相判定値Mptnは、エンコーダカウント値Ncnt、初期位置ずれ学習値Gcnt、正回転方向位相進み量K1を用いて次式により算出される。
Mptn=Ncnt−Gcnt+K1
【0137】
ここで、正回転方向位相進み量K1を例えば4とすると、通電相判定値Mptnは、次式により算出される。
Mptn=Ncnt−Gcnt+4
UW相から正回転を開始する場合は、mod(Ncnt−Gcnt)は4となるため、Mptn%12=4+4=8となり、最初の通電相はUV相となる。
【0138】
一方、UW相から逆回転(NotPレンジ→Pレンジ方向への回転)を開始する場合は、逆回転方向位相進み量K2を例えば3とすると、通電相判定値Mptnは、次式により算出される。
Mptn=Ncnt−Gcnt−K2=Ncnt−Gcnt−3
UW相から逆回転を開始する場合は、Mptn%12=4−3=1となり、最初の通電相はVW相となる。
【0139】
このように、正回転方向位相進み量K1と逆回転方向位相進み量K2をそれぞれ4と3に設定することで、正回転方向と逆回転方向の通電相の切換パターンを対称にすることができ、正回転方向と逆回転方向のいずれの場合も、ロータ32の現在位置から2ステップ分ずらした位置の相を最初に励磁して回転を開始することができる。
【0140】
[mode3]
図25に示すmode3ルーチンは、図23の時間同期モータ制御ルーチンのステップ506で起動されるサブルーチンであり、目標位置停止保持処理時の通電相判定値Mptn(通電相)を次のようにして設定する。
【0141】
本ルーチンが起動されると、まずステップ531で、F/B制御終了時のMptn%12=2,3,6,7,10,11であるか否かによってF/B制御終了時の通電相が1相通電(U相通電、V相通電、W相通電)であるか否かを判定し、1相通電であれば、ステップ532〜534の処理によって、それまで行っていたF/B制御の回転方向に応じて通電相判定値Mptnを2だけ増加又は減少させることで、当該1相通電の次のステップの2相通電に変更する。
【0142】
この際、ステップ532で、回転方向を次のようにして判定する。本ルーチンに入る直前(F/B制御終了時)に、図22のステップ426で、回転方向指示値Dが0(停止)にセットされるため、回転方向指示値Dを見ても回転方向を判定することができない。そこで、本ルーチンでは、F/B制御終了時の通電相判定値Mptnと位置カウント値(Ncnt−Gcnt)との間に、通電相の位相進み量K1,K2分の差があることに着目し、F/B制御終了時の通電相判定値Mptnと位置カウント値(Ncnt−Gcnt)との大小関係によって回転方向を次のように判定する。
【0143】
Mptn>Ncnt−Gcntの場合は、正回転(Pレンジ→NotPレンジの回転方向)と判定して、ステップ533に進み、通電相判定値Mptnを2だけ増加させることで、2相通電に補正する。
【0144】
一方、Mptn<Ncnt−Gcntの場合は、逆回転(NotPレンジ→Pレンジの回転方向)と判定して、ステップ534に進み、通電相判定値Mptnを2だけ減少させることで、2相通電に補正する。
尚、Mptn=Ncnt−Gcntの場合は、停止と判定して、通電相は変更しない。
【0145】
このように、目標位置停止保持処理についても、F/B制御開始位置停止保持処理と同じく、1相通電と比べて保持トルクの大きい2相通電で実行することで、ロータ32が目標位置付近で振動することを防止して、ロータ32を目標位置で確実に停止保持できるようにする。
【0146】
[mode4]
図26に示すmode4ルーチンは、図23の時間同期モータ制御ルーチンのステップ507で起動されるサブルーチンであり、反転位置停止保持処理時の通電相判定値Mptn(通電相)を次のようにして設定する。
【0147】
本ルーチンが起動されると、まずステップ541で、反転位置停止保持処理の時間をカウントする通電時間カウンタCT4をカウントアップし、次のステップ542で、反転位置停止保持処理の時間CT4が所定時間(例えば50ms)を越えたか否かを判定する。
【0148】
もし、反転位置停止保持処理の時間CT4が所定時間(例えば50ms)を越えていなければ、ステップ543に進み、Mptn%12=2,3,6,7,10,11であるか否かによって現在の通電相が1相通電(U相通電、V相通電、W相通電)であるか否かを判定し、1相通電であれば、ステップ544〜546の処理によって、それまで行っていたF/B制御の回転方向に応じて通電相判定値Mptnを2だけ増加又は減少させることで、当該1相通電の次のステップの2相通電に変更する。このステップ543〜546の処理は、前記図25のmode3ルーチンのステップ531〜534の処理と同じである。
【0149】
このように、反転位置停止保持処理についても、F/B制御開始位置停止保持処理や目標位置停止保持処理と同じく、1相通電と比べて保持トルクの大きい2相通電で実行することで、ロータ32が反転位置付近で振動することを防止して、ロータ32を反転位置で確実に停止保持できるようにする。
【0150】
その後、反転位置停止保持処理の時間CT4が所定時間(例えば50ms)を越えた時点で、ステップ542で「Yes」と判定されて、反転位置停止保持処理を終了し、F/B制御を再開する。これにより、最初に、ステップ547で、反転位置停止保持処理時の通電相判定値Mptnに、回転方向に応じて通電相の位相進み分のカウント値(例えば4又は3)を加算又は減算してF/B制御再開時の最初の通電相判定値Mptnを設定し、それによって、ロータ32の回転駆動を開始する。この後、ステップ548に進み、F/B許可フラグXfb=ON(F/B制御実行)、通電時間カウンタCT4=0、制御モード判定値mode=1(通常駆動)にセットして本ルーチンを終了する。
【0151】
[通電処理]
図27に示す通電処理ルーチンは、図23の時間同期モータ制御ルーチンのステップ508で起動されるサブルーチンである。尚、本ルーチンは、後述する図30のF/B制御ルーチンのステップ603でも起動される。
【0152】
図27の通電処理ルーチンが起動されると、まずステップ551で、制御モード判定値mode=0(通電オフ)であるか否かを判定し、制御モード判定値mode=0(通電オフ)であれば、ステップ552に進み、SRモータ12の全相の通電をオフしてスタンバイ状態とする。
【0153】
一方、上記ステップ551で、「No」と判定されれば、ステップ553に進み、制御モード判定値mode=5(オープンループ制御)であるか否かを判定し、制御モード判定値mode=5(オープンループ制御)であれば、ステップ554に進み、オープンループ制御を実行する。このオープンループ制御は、エンコーダ46の故障又はSRモータ12の動作異常が発生したときに、例えば1ms周期の時間同期処理によって通電相を設定してロータ32を目標位置まで回転駆動する。
【0154】
また、上記ステップ551、553で、いずれも「No」と判定された場合、つまり、制御モード判定値mode=1,3,4(F/B制御開始位置停止保持処理、F/B制御、目標位置停止保持処理、反転位置停止保持処理)の場合は、ステップ555に進み、Mptn%12に応じて図28の変換テーブルによって通電相を設定する。
【0155】
この後、ステップ556に進み、突き当て制御実行中(Pレンジ側突き当て制御中フラグXexp=ON又はNotPレンジ側突き当て制御中フラグXexnp=ON)であるか否かを判定し、突き当て制御実行中でなければ、ステップ557に進み、SRモータ12の通電デューティ比を例えば100%に設定するが、突き当て制御実行中であれば、ステップ558に進み、SRモータ12の電源電圧であるバッテリ電圧に応じて図29のテーブルによって通電デューティ比を例えば10〜30%に設定する。これにより、突き当て制御の実行時に、SRモータ12のトルクを通常駆動時よりも大幅に低下させる。
【0156】
尚、図29のテーブルの例では、SRモータ12の電源電圧(バッテリ電圧)が高くなるほど、SRモータ12のトルクが大きくなるという特性を考慮して、電源電圧(バッテリ電圧)が高くなるほど、通電デューティ比が小さくなるように設定されている。これにより、電源電圧(バッテリ電圧)が高くても低くても、SRモータ12のトルクがほぼ一定となり、常にSRモータ12のトルクが突き当て制御に必要最小限のトルクを確保できるようになっている。
【0157】
以上のようにして、通電デューティ比を設定した後、ステップ559に進み、ECU41からモータドライバ37,38に制御信号を出力して、ステップ555で設定された通電相の巻線に、ステップ557又は558で設定された通電デューティ比で通電してSRモータ12を駆動する。
【0158】
[F/B制御]
次に、図30に示すF/B制御ルーチンの処理内容を説明する。本ルーチンは、AB相割り込み処理により実行され、初期駆動終了後にF/B制御実行条件が成立しているときに、ロータ32の回転位置(エンコーダカウント値Ncnt−Gcnt)が目標位置(目標カウント値Acnt)から例えば0.5°以内に到達するまで、エンコーダカウント値Ncntと初期位置ずれ学習値Gcntとに基づいて通電相を切り換えてロータ32を回転させる。
【0159】
図30のF/B制御ルーチンが起動されると、まずステップ601で、F/B許可フラグXfbがONにセットされているか否か(F/B制御実行条件が成立しているか否か)を判定し、F/B許可フラグXfbがOFF(F/B制御実行条件が不成立)であれば、以降の処理を行うことなく、本ルーチンを終了する。
【0160】
これに対し、F/B許可フラグXfbがONにセットされていれば、ステップ602に進み、後述する図31の通電相設定ルーチンを実行して、現在のエンコーダカウント値Ncntと初期位置ずれ学習値Gcntとに基づいて通電相を設定し、次のステップ603で、図27の通電処理ルーチンを実行する。
【0161】
[通電相設定]
図31に示す通電相設定ルーチンは、図30のF/B制御ルーチンのステップ602で起動されるサブルーチンである。本ルーチンが起動されると、まずステップ611で、目標位置への回転方向を指示する回転方向指示値Dが正回転(Pレンジ→NotPレンジの回転方向)を意味する「1」であるか否かを判定する。その結果、回転方向指示値D=1(正回転)と判定されれば、ステップ612に進み、ロータ32の回転方向が回転方向指示に反して逆転したか否か(エンコーダカウント値Ncntが減少したか否か)を判定し、逆転していなければ、ステップ613に進み、現在のエンコーダカウント値Ncnt、初期位置ずれ学習値Gcnt、正回転方向位相進み量K1、速度位相進み補正量Ksを用いて通電相判定値Mptnを次式により更新する。
Mptn=Ncnt−Gcnt+K1+Ks
【0162】
ここで、正回転方向位相進み量K1は、ロータ32を正回転させるのに必要な通電相の位相進み量(ロータ32の現在の回転位相に対する通電相の位相進み量)であり、例えばK1=4に設定されている。
【0163】
また、速度位相進み補正量Ksは、ロータ32の回転速度に応じて設定される位相進み補正量であり、後述する図34の速度位相進み補正量設定ルーチンによって設定される。例えば、低速域では、速度位相進み補正量Ksが0に設定され、高速になるに従って、速度位相進み補正量Ksが例えば1又は2に増加される。これにより、ロータ32の回転速度に適した通電相となるように通電相判定値Mptnが補正される。
【0164】
一方、上記ステップ612で、ロータ32の回転方向が回転方向指示に反して逆転したと判定された場合は、逆転防止のために通電相判定値Mptnを更新しない。この場合は、逆転直前の通電相(前回の通電相)に通電され、ロータ32の逆転を抑制する方向に制動トルクが発生する。
【0165】
また、上記ステップ611で、回転方向指示値D=0(逆回転)、つまりNotPレンジ→Pレンジの回転方向と判定された場合は、ステップ614に進み、ロータ32の回転方向が回転方向指示に反して逆転したか否か(エンコーダカウント値Ncntが増加したか否か)を判定し、逆転していなければ、ステップ615に進み、現在のエンコーダカウント値Ncnt、初期位置ずれ学習値Gcnt、逆回転方向位相進み量K2、速度位相進み補正量Ksを用いて通電相判定値Mptnを次式により更新する。
Mptn=Ncnt−Gcnt−K2−Ks
【0166】
ここで、逆回転方向位相進み量K2は、ロータ32を逆回転させるのに必要な通電相の位相進み量(ロータ32の現在の回転位相に対する通電相の位相進み量)であり、例えばK2=3に設定されている。速度位相進み補正量Ksは正回転の場合と同じく、後述する図34の速度位相進み補正量設定ルーチンによって設定される。
【0167】
一方、上記ステップ614で、ロータ32の回転方向が回転方向指示に反して逆転したと判定された場合は、逆転防止のために通電相判定値Mptnを更新しない。この場合は、逆転直前の通電相(前回の通電相)に通電され、ロータ32の逆転を抑制する方向に制動トルクが発生する。
【0168】
以上のようにして、今回の通電相判定値Mptnを決定した後、図27の通電処理ルーチンを実行し、F/B制御実行中は、ステップ555で、図28の変換テーブルを検索して、Mptn%12に対応する通電相を選択し、その通電相に通電する。
【0169】
[ロータ回転速度演算]
図33に示すロータ回転速度演算ルーチンは、AB相割り込み処理により実行され、次のようにしてロータ32の回転速度SPを演算する。本ルーチンが起動されると、まずステップ621で、F/B許可フラグXfbがON(F/B制御実行中)であるか否かを判定し、F/B許可フラグXfbがOFF(F/B制御禁止)であれば、ロータ32の回転速度SPに応じた通電相の位相進み補正を行わないため、ステップ624に進み、ロータ32の回転速度SP,SPaの記憶値をリセットして、本ルーチンを終了する。
【0170】
これに対して、F/B許可フラグXfbがON(F/B制御実行中)であれば、次のようにしてロータ32の回転速度SPを演算する。まず、ステップ622で、エンコーダ46のA相信号とB相信号の立ち上がり/立ち下がりエッジ間の時間間隔ΔT(n) (すなわちエンコーダカウント値が増減する時間間隔)を計測して、その時間間隔ΔT(n) の過去N回分の平均値ΔTavを算出する。そして、回転速度演算値SPaを次式により算出する。
SPa=60/(ΔTav×Kp) [rpm]
【0171】
ここで、Kpは、ロータ32の1回転当たりの時間間隔ΔT(n) の数(ロータ32の1回転当たりのエンコーダカウント値の変化量)であり、図5の構成のエンコーダ46の場合は、Kp=96となる。ΔTav×Kpは、ロータ32が1回転するのに要する時間[sec]である。
【0172】
この後、ステップ623に進み、回転速度演算値SPaを用いて、ロータ32の回転速度SPを次式によりなまし処理して求める。
SP(i) =SP(i-1) +{SPa−SP(i-1) }/R
ここで、SP(i) は今回の回転速度、SP(i-1) は前回の回転速度、Rはなまし係数である。
【0173】
[速度位相進み補正量設定]
図34に示す速度位相進み補正量設定ルーチンは、所定周期(例えば1ms周期)で起動され、ロータ32の回転速度SPに応じて速度位相進み補正量Ksを次のようにして設定する。本ルーチンが起動されると、まずステップ631で、F/B許可フラグXfbがON(F/B制御実行中)であるか否かを判定し、F/B許可フラグXfbがOFF(F/B制御禁止)であれば、通電相の位相進み補正は不要であるため、以降の処理を行うことなく、本ルーチンを終了する。
【0174】
これに対して、F/B許可フラグXfbがON(F/B制御実行中)であれば、ステップ632〜636の処理により、図33のロータ回転速度演算ルーチンで演算されたロータ32の回転速度SPに応じて速度位相進み補正量Ksを次のようにして設定する。
【0175】
ステップ632で、ロータ32の回転速度SPが所定値Klow(例えば300rpm)よりも低いと判定されれば、ステップ634に進み、速度位相進み補正量Ksを最小値Ka(例えば0)に設定し、ステップ633で、ロータ32の回転速度SPが所定値Khigh(例えば600rpm)よりも高いと判定されれば、ステップ636に進み、速度位相進み補正量Ksを最大値Kc(例えば2)に設定する。また、ロータ32の回転速度SPがKlow〜Khighの範囲内であれば、ステップ635に進み、速度位相進み補正量Ksを中間値Kb(例えば1)に設定する。このような処理により、ロータ32の回転速度SPが速くなるほど、速度位相進み補正量Ksを大きな値に設定する。
【0176】
この後、ステップ637に進み、目標カウント値Acntとエンコーダカウント値Ncntとの差の絶対値|Acnt−Ncnt|が所定値よりも小さいか否かで、ロータ32の回転位置が目標位置に近付いたか否か(停止のための減速領域に入ったか否か)を判定する。
【0177】
もし、|Acnt−Ncnt|が所定値以上であれば、ステップ639に進み、突き当て制御実行中(Pレンジ側突き当て制御中フラグXexp=ON又はNotPレンジ側突き当て制御中フラグXexnp=ON)であるか否かを判定し、突き当て制御実行中でなければ、上記ステップ634〜636のいずれかで設定した速度位相進み補正量Ksをそのまま用い、突き当て制御実行中であれば、ステップ640に進み、速度位相進み補正量Ksを小さい値Ke(例えば0又は−1)に設定して、ロータ32の回転速度を遅くする。
【0178】
一方、|Acnt−Ncnt|が所定値よりも小さい場合は、減速領域と判断して、ステップ637からステップ638に進み、速度位相進み補正量Ksを小さい値Kd(例えば0又は−1)に設定する。
【0179】
尚、本ルーチンでは、ロータ32の回転速度SPに応じて速度位相進み補正量Ksを3段階に切り換えるようにしたが、2段階又は4段階以上に切り換えるようにしても良い。
【0180】
[遊び量学習]
図36に示す遊び量学習ルーチンは、初期駆動終了後に所定周期(例えば8ms周期)で実行される。本ルーチンが起動されると、まずステップ700で、遊び量学習完了フラグXg=ON(遊び量学習完了後)であるか否かを判定し、もし、遊び量学習完了フラグXg=ONであれば、以降の処理を行うことなく、本ルーチンを終了する。これにより、遊び量学習は、イグニッションスイッチのオン期間中に1回のみ行われる。尚、遊び量学習完了フラグXgは、イグニッションスイッチのオン直後に実行される初期化処理ルーチン(図示せず)によってOFFにセットされる。
【0181】
一方、上記ステップ700で、遊び量学習完了フラグXg=OFF(遊び量学習完了前)と判定されれば、ステップ701に進み、指令シフトレンジがPレンジであるか否かを判定し、Pレンジであれば、ステップ702に進み、後述する図39及び図40のPレンジ側突き当て制御ルーチンを実行し、Pレンジ側突き当て時のエンコーダカウント値NpをECU41のRAMに記憶する。一方、NotPレンジであれば、ステップ703に進み、後述する図42及び図43のNotPレンジ側突き当て制御ルーチンを実行して、NotPレンジ側突き当て時のエンコーダカウント値NnpをECU41のRAMに記憶する。
【0182】
この後、ステップ704に進み、Pレンジ側とPレンジ側の両方の突き当て制御を完了したか否か(Pレンジ側突き当て完了フラグXp=ON、且つ、NotPレンジ側突き当て完了フラグXnp=ONであるか否か)を判定し、Pレンジ側とPレンジ側のいずれか一方でも突き当て制御が完了していなければ、以降の処理を行うことなく、本ルーチンを終了する。
【0183】
これに対して、レンジ側とPレンジ側の両方の突き当て制御を完了していれば、ステップ705に進み、Pレンジ側の限界位置(Pレンジ保持凹部24の側壁)からNotPレンジ側の限界位置(NotPレンジ保持凹部25の側壁)までのロータ32の可動範囲(ディテントレバー15の可動範囲)の実測値ΔNactを次式により算出する。
ΔNact=Nnp−Np
【0184】
ここで、Nnpは、NotPレンジ側突き当て時のエンコーダカウント値で、後述する図42及び図43のNotPレンジ側突き当て制御ルーチンによって学習した値GNnpが用いられる。Npは、Pレンジ側突き当て時のエンコーダカウント値で、後述する図39及び図40のPレンジ側突き当て制御ルーチンによって学習した値GNpが用いられる。
【0185】
可動範囲の実測値ΔNactの算出後、ステップ706に進み、図38に示す関係を考慮して、Pレンジ側の遊び量ΔGpとNotPレンジ側の遊び量ΔGnpを可動範囲の実測値ΔNactと設計値ΔNdを用いて次式により算出する。ΔGp=ΔGnp=(ΔNact−ΔNd)/2
ここで、可動範囲の設計値ΔNdは、予め設計データに基づいて算出しても良いし、量産品の可動範囲の製造ばらつきの中心値(標準品の可動範囲の実測値)を用いても良い。
【0186】
図38に示すように、可動範囲の実測値ΔNactと設計値ΔNdとの差分(ΔNact−ΔNd)は、Pレンジ側とNotPレンジ側の合計遊び量(ΔGp+ΔGnp)に相当する。一般に、Pレンジ側の遊び量ΔGpとNotPレンジ側の遊び量ΔGnpは等しいため、上式により、Pレンジ側とNotPレンジ側の各遊び量ΔGp,ΔGnpを算出することができる。
【0187】
各遊び量ΔGp,ΔGnpの算出後、ステップ707に進み、遊び量学習完了フラグXgを、遊び量学習完了を意味する「ON」にセットして、本ルーチンを終了する。
【0188】
尚、上記ステップ705、706で算出された可動範囲の実測値ΔNactと遊び量ΔGp,ΔGnpは、ECU41のSRAM等の不揮発性メモリ(図示せず)に更新記憶され、イグニッションスイッチのオフ後も、その記憶値が保持される。次回のイグニッションスイッチのオン後は、後述する図45及び図46の目標カウント値設定ルーチンで目標カウント値Acntを設定する際に、ECU41の不揮発性メモリに記憶されている可動範囲の実測値ΔNactと遊び量ΔGp,ΔGnpを用いて目標カウント値Acntを設定する。
【0189】
[Pレンジ側突き当て制御]
図39及び図40に示すPレンジ側突き当て制御ルーチンは、指令シフトレンジがPレンジのときに図36の遊び量学習ルーチンのステップ702で実行されるサブルーチンである。本ルーチンが起動されると、まずステップ711で、Pレンジ側突き当て完了フラグXp=ON(Pレンジ側突き当て制御終了後)であるか否かを判定し、既にPレンジ側突き当て制御が終了していれば、以降の処理を行うことなく、本ルーチンを終了する。これにより、Pレンジ側突き当て制御は、イグニッションスイッチのオン期間中に1回のみ行われる。
【0190】
一方、上記ステップ711で、Pレンジ側突き当て完了フラグXp=OFF(Pレンジ側突き当て制御終了前)であると判定されれば、ステップ712に進み、制御モード判定値modeが0、3に該当するか否かを判定する。ここで、制御モード判定値mode=0は、通電オフ(スタンバイ)を意味し、制御モード判定値mode=3は、目標位置停止保持処理を意味する。
【0191】
本ルーチンでは、ロータ32がPレンジで停止しているときにPレンジ側突き当て制御を行うようにするために、制御モード判定値mode=0又は3でPレンジ側突き当て制御を行うようにしている。
【0192】
制御モード判定値mode=0(通電オフ)の場合は、ステップ713に進み、Pレンジでmode=0になっている時間をカウントするmode0時間カウンタCT0pをカウントアップする。また、制御モード判定値mode=3(目標位置停止保持処理)の場合は、ステップ714に進み、Pレンジでmode=3となっている時間をカウントするmode3時間カウンタCT3pをカウントアップする。これら2つの時間カウンタCT0p,CT3pは、Pレンジでロータ32の振動が収束して停止状態になるまで待機するのに用いられる。
【0193】
尚、制御モード判定値mode=1(通常駆動)、4(反転位置停止保持処理)、5(オープンループ制御)の場合は、ロータ32がPレンジで停止していないため、ステップ731に進み、時間カウンタCT0p,CT3pのカウント値をクリアする。
【0194】
そして、ステップ715で、mode0時間カウンタCT0pの値が停止判定値K0pを越えたか否か、又は、mode3時間カウンタCT3pの値が停止判定値K3pを越えたか否か判定する。ここで、停止判定値K0pは、Pレンジで制御モード判定値mode=0(通電オフ)のときにロータ32の振動が収束するのに必要な時間に相当し、停止判定値K3pは、Pレンジで制御モード判定値mode=3(目標位置停止保持処理)のときにロータ32の振動が収束するのに必要な時間に相当する。
【0195】
上記ステップ715で、「No」と判定されれば、ロータ32の振動が収束していないと判断して、ステップ716に進み、Pレンジ側突き当て制御中フラグXexp=OFFにセットする。この場合は、まだ、Pレンジ側突き当て制御が実行されない。
【0196】
一方、上記ステップ715で、「Yes」と判定されれば、Pレンジでロータ32の振動が収束したと判断して、ステップ717に進み、Pレンジ側突き当て制御中フラグXexp=ONにセットする。
【0197】
この後、ステップ718に進み、Pレンジ側突き当て制御中フラグXexp=ONであるか否かを判定し、Xexp=OFFであれば、ステップ719に進み、突き当て目標カウント値Ag=0、停止時間カウンタCTstop=0、突き当て制御時間カウンタCTg=0にセットして、本ルーチンを終了する。
【0198】
これに対して、Pレンジ側突き当て制御中フラグXexp=ONの場合は、ステップ720に進み、突き当て目標カウント値Agを所定値Kgpに設定する。この突き当て目標カウント値Ag(Kgp)は、Pレンジ側突き当て制御によってディテントバネ23の係合部23aをディテントレバー15のPレンジ保持凹部24の側壁に確実に突き当てることができるように設定される。
【0199】
Pレンジ側突き当て制御中フラグXexp=ONの場合は、後述する図45の目標カウント値設定ルーチンによって目標カウント値Acntが突き当て目標カウント値Ag(Kgp)にセットされるため、図41に示すように、Pレンジ側突き当て制御が実行され、ディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の側壁に突き当てられる。
【0200】
Pレンジ側突き当て制御中は、図40のステップ721で、突き当て制御時間カウンタCTgをカウントアップして、Pレンジ側突き当て制御の実行時間を計測する。そして、次のステップ722で、Pレンジ側突き当て制御の実行時間CTgが許容最大学習時間Kg(例えば500ms)を越えたか否かを判定する。Pレンジ側突き当て制御が正常に実行されれば、許容最大学習時間Kgよりも短い時間でディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の側壁に突き当たった状態になって、Pレンジ側突き当て時のエンコーダカウント値Npの学習(Pレンジ側突き当て制御)が終了する。従って、許容最大学習時間Kgを越えてPレンジ側突き当て制御が終了しない場合は、SRモータ12の故障やエンコーダ46の故障等、何等かのシステム異常が発生しているものと思われるため、このような場合は、Pレンジ側突き当て制御を強制的に終了させるために、ステップ723に進み、Pレンジ側突き当て制御中フラグXexp=OFF、Pレンジ側突き当て完了フラグXp=OFF、停止時間カウンタCTstop=0、mode3時間カウンタCT3p=0、mode0時間カウンタCT0p=0、突き当て制御時間カウンタCTg=0にセットして、本ルーチンを終了する。
【0201】
これに対して、Pレンジ側突き当て制御の実行時間CTgが許容最大学習時間Kgを越えていない場合は、ステップ724に進み、出力軸センサ14のPレンジ出力学習値Vpを次式により更新する。
Vp(i) =Vp(i-1) +{Vnsw−Vp(i-1) }/Rnsw
ここで、Vp(i) は今回のPレンジ出力学習値、Vp(i-1) は前回のPレンジ出力学習値、Vnswは今回の出力軸センサ14の出力、Rnswはなまし係数である。
【0202】
そして、次のステップ725で、Pレンジ側突き当て時のエンコーダカウント値の学習値(以下「Pレンジ側突き当て学習値」という)GNpを次式により更新する。
GNp(i) =min{GNp(i-1) ,Ncnt}
【0203】
ここで、GNp(i) は今回のPレンジ側突き当て学習値、GNp(i-1) は前回のPレンジ側突き当て学習値、Ncntは今回のエンコーダカウント値である。また、関数minはGNp(i-1) とNcntを比較して小さい方を選択する関数である。尚、エンコーダカウント値Ncntは、前記図8及び図9の初期駆動ルーチンで学習された初期位置ずれ学習値Gcntにより補正された値を用いる。
【0204】
この後、ステップ726に進み、今回のPレンジ側突き当て学習値GNp(i) と前回のPレンジ側突き当て学習値GNp(i-1) が同じであるか否かで、ディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の側壁に突き当たった状態になったか否かを判定する。
【0205】
図41に示すように、ディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の側壁に突き当たった状態になるまでは、ロータ32が回転してエンコーダカウント値Ncntが徐々に減少していくため、今回のPレンジ側突き当て学習値GNp(i) が前回の学習値GNp(i-1) よりも小さくなる。その後、ディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の側壁に突き当たった状態になると、ロータ32の回転が停止して、エンコーダカウント値Ncntが変化しなくなるか、又は、振動するが、学習値GNp(i) は更新されなくなるため、今回のPレンジ側突き当て学習値GNp(i) と前回のPレンジ側突き当て学習値GNp(i-1) が同じであるか、又は、今回のPレンジ側突き当て学習値GNp(i) の方が大きくなる。
【0206】
図40のステップ726で、「No」と判定された場合は、ディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の側壁に突き当たった状態になっていないため、ステップ727に進み、停止時間カウンタCTstopをリセットする。
【0207】
これに対し、ステップ726で、「Yes」と判定された場合は、ディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の側壁に突き当たった可能性があると判断して、ステップ728に進み、この突き当て状態の時間をカウントする停止時間カウンタCTstopをカウントアップする。
【0208】
この後、ステップ729に進み、停止時間カウンタCTstopの値が所定時間Kstop(例えば60ms)を越えるまで、Pレンジ側突き当て制御を継続する。そして、突き当て状態が所定時間Kstop以上続いた時点で、突き当て状態になっていることが確認できたと判断して、ステップ730に進み、Pレンジ側突き当て制御を終了するために、Pレンジ側突き当て制御中フラグXexp=OFF、Pレンジ側突き当て完了フラグXp=ON、Pレンジ側突き当て時のエンコーダカウント値Np=GNp+ΔNover(ΔNoverは乗り上げ補正量)、停止時間カウンタCTstop=0、mode3時間カウンタCT3p=0、mode0時間カウンタCT0p=0にセットして、本ルーチンを終了する。
【0209】
乗り上げ補正量ΔNoverは、突き当て制御実行時にディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁に突き当たった状態で該係合部23aが保持凹部24,25の側壁を僅かに乗り上げる角度に相当する。この乗り上げ補正量ΔNoverは、SRモータ12の電源電圧であるバッテリ電圧に応じて図37のテーブルにより設定される。
【0210】
突き当て制御実行時に、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁を乗り上げる角度(乗り上げ補正量ΔNover)は、SRモータ12のトルクが大きくなるほど大きくなる。一般に、SRモータ12のトルクは、その電源電圧(バッテリ電圧)によって変化するため、電源電圧(バッテリ電圧)とSRモータ12のトルクとの間には相関関係があり、電源電圧(バッテリ電圧)をSRモータ12のトルクの代用情報として用いることができる。従って、突き当て制御実行時に、ディテントバネ23の係合部23aがディテントレバー15の各保持凹部24,25の側壁を乗り上げる角度(乗り上げ補正量ΔNover)を、SRモータ12のトルクの代用情報である電源電圧(バッテリ電圧)に基づいて図37のテーブルにより算出し、その乗り上げ補正量ΔNoverだけロータ32の可動範囲の実測値ΔNactを補正するようにすれば、可動範囲の実測値を精度良く求めることができる。
【0211】
尚、ディテントレバー15の各保持凹部24,25の側壁の形状をディテントバネ23の係合部23aが乗り上げないように形成すれば、乗り上げ補正量ΔNoverは必要なくなり、ΔNact=Nnp−Npとなる。
【0212】
[NotPレンジ側突き当て制御]
図42及び図43に示すNotPレンジ側突き当て制御ルーチンは、指令シフトレンジがNotPレンジのときに図36の遊び量学習ルーチンのステップ703で実行されるサブルーチンである。本ルーチンが起動されると、まずステップ741で、NotPレンジ側突き当て完了フラグXnp=ON(NotPレンジ側突き当て制御終了後)であるか否かを判定し、既にNotPレンジ側突き当て制御が終了していれば、以降の処理を行うことなく、本ルーチンを終了する。これにより、NotPレンジ側突き当て制御は、イグニッションスイッチのオン期間中に1回のみ行われる。
【0213】
一方、上記ステップ741で、NotPレンジ側突き当て完了フラグXnp=OFF(NotPレンジ側突き当て制御終了前)であると判定されれば、ステップ742に進み、制御モード判定値modeが0(通電オフ)、3(目標位置停止保持処理)に該当するか否かを判定する。本ルーチンでは、ロータ32がNotPレンジで停止しているときにNotPレンジ側突き当て制御を行うようにするために、制御モード判定値mode=0又は3でNotPレンジ側突き当て制御を行うようにしている。
【0214】
制御モード判定値mode=0(通電オフ)の場合は、ステップ743に進み、NotPレンジでmode=0になっている時間をカウントするmode0時間カウンタCT0npをカウントアップする。また、制御モード判定値mode=3(目標位置停止保持処理)の場合は、ステップ744に進み、NotPレンジでmode=3となっている時間をカウントするmode3時間カウンタCT3npをカウントアップする。これら2つの時間カウンタCT0np,CT3npは、NotPレンジでロータ32の振動が収束して停止状態になるまで待機するのに用いられる。
【0215】
尚、制御モード判定値mode=1(通常駆動)、4(反転位置停止保持処理)、5(オープンループ制御)の場合は、ロータ32がNotPレンジで停止していないため、ステップ761に進み、時間カウンタCT0np,CT3npのカウント値をクリアする。
【0216】
そして、ステップ745で、mode0時間カウンタCT0npの値が停止判定値K0npを越えたか否か、又は、mode3時間カウンタCT3npの値が停止判定値K3npを越えたか否か判定する。ここで、停止判定値K0npは、NotPレンジで制御モード判定値mode=0(通電オフ)のときにロータ32の振動が収束するのに必要な時間に相当し、停止判定値K3npは、NotPレンジで制御モード判定値mode=3(目標位置停止保持処理)のときにロータ32の振動が収束するのに必要な時間に相当する。
【0217】
上記ステップ745で、「No」と判定されれば、ロータ32の振動が収束していないと判断して、ステップ746に進み、NotPレンジ側突き当て制御中フラグXexnp=OFFにセットする。この場合は、まだ、NotPレンジ側突き当て制御が実行されない。
【0218】
一方、上記ステップ745で、「Yes」と判定されれば、NotPレンジでロータ32の振動が収束したと判断して、ステップ747に進み、NotPレンジ側突き当て制御中フラグXexnp=ONにセットする。
【0219】
この後、ステップ748に進み、NotPレンジ側突き当て制御中フラグXexnp=ONであるか否かを判定し、Xexnp=OFFであれば、ステップ749に進み、突き当て目標カウント値Ag=0、停止時間カウンタCTstop=0、突き当て制御時間カウンタCTg=0にセットして、本ルーチンを終了する。
【0220】
これに対して、NotPレンジ側突き当て制御中フラグXexnp=ONの場合は、ステップ750に進み、突き当て目標カウント値Agを所定値Kgnpに設定する。この突き当て目標カウント値Ag(Kgnp)は、NotPレンジ側突き当て制御によってディテントバネ23の係合部23aをディテントレバー15のNotPレンジ保持凹部25の側壁に確実に突き当てることができるように設定される。
【0221】
NotPレンジ側突き当て制御中フラグXexnp=ONの場合は、後述する図45の目標カウント値設定ルーチンによって目標カウント値Acntが突き当て目標カウント値Ag(Kgnp)にセットされるため、NotPレンジ側突き当て制御が実行され、ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の側壁に突き当てられる。
【0222】
NotPレンジ側突き当て制御中は、図43のステップ751で、突き当て制御時間カウンタCTgをカウントアップして、NotPレンジ側突き当て制御の実行時間を計測する。そして、次のステップ752で、NotPレンジ側突き当て制御の実行時間CTgが許容最大学習時間Kg(例えば500ms)を越えたか否かを判定する。NotPレンジ側突き当て制御が正常に実行されれば、許容最大学習時間Kgよりも短い時間でディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の側壁に突き当たった状態になって、NotPレンジ側突き当て時のエンコーダカウント値Nnpの学習(NotPレンジ側突き当て制御)が終了する。従って、許容最大学習時間Kgを越えてNotPレンジ側突き当て制御が終了しない場合は、SRモータ12の故障やエンコーダ46の故障等、何等かのシステム異常が発生しているものと思われるため、このような場合は、NotPレンジ側突き当て制御を強制的に終了させるために、ステップ753に進み、NotPレンジ側突き当て制御中フラグXexnp=OFF、NotPレンジ側突き当て完了フラグXnp=OFF、停止時間カウンタCTstop=0、mode3時間カウンタCT3np=0、mode0時間カウンタCT0np=0、突き当て制御時間カウンタCTg=0にセットして、本ルーチンを終了する。
【0223】
これに対して、NotPレンジ側突き当て制御の実行時間CTgが許容最大学習時間Kgを越えていない場合は、ステップ754に進み、出力軸センサ14のNotPレンジ出力学習値Vnpを次式により更新する。
Vnp(i) =Vnp(i-1) +{Vnsw−Vnp(i-1) }/Rnsw
ここで、Vnp(i) は今回のNotPレンジ出力学習値、Vnp(i-1) は前回のNotPレンジ出力学習値、Vnswは今回の出力軸センサ14の出力、Rnswはなまし係数である。
【0224】
そして、次のステップ755で、NotPレンジ側突き当て時のエンコーダカウント値の学習値(以下「NotPレンジ側突き当て学習値」という)GNnpを次式により更新する。
GNnp(i) =max{GNnp(i-1) ,Ncnt}
【0225】
ここで、GNnp(i) は今回のNotPレンジ側突き当て学習値、GNnp(i-1) は前回のNotPレンジ側突き当て学習値、Ncntは今回のエンコーダカウント値である。また、関数maxはGNnp(i-1) とNcntを比較して大きい方を選択する関数である。尚、エンコーダカウント値Ncntは、前記図8及び図9の初期駆動ルーチンで学習された初期位置ずれ学習値Gcntによって補正された値を用いる。
【0226】
この後、ステップ756に進み、今回のNotPレンジ側突き当て学習値GNnp(i) と前回のNotPレンジ側突き当て学習値GNnp(i-1) が同じであるか否かで、ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の側壁に突き当たった状態になったか否かを判定する。
【0227】
NotPレンジ突き当て制御中に、ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の側壁に突き当たった状態になるまでは、ロータ32が回転してエンコーダカウント値Ncntが徐々に増加していくため、今回のNotPレンジ側突き当て学習値GNnp(i) が前回の学習値GNnp(i-1) よりも大きくなる。その後、ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の側壁に突き当たった状態になると、ロータ32の回転が停止して、エンコーダカウント値Ncntが変化しなくなるか、又は、振動するが、学習値GNnp(i) は更新されなくなるため、今回のNotPレンジ側突き当て学習値GNnp(i) と前回のNotPレンジ側突き当て学習値GNnp(i-1) が同じであるか、又は、今回のNotPレンジ側突き当て学習値GNnp(i) の方が大きくなる。
【0228】
図43のステップ756で、「No」と判定された場合は、ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の側壁に突き当たった状態になっていないため、ステップ757に進み、停止時間カウンタCTstopをリセットする。
【0229】
これに対し、ステップ756で、「Yes」と判定された場合は、ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の側壁に突き当たった可能性があると判断して、ステップ758に進み、この突き当て状態の時間をカウントする停止時間カウンタCTstopをカウントアップする。
【0230】
この後、ステップ759に進み、停止時間カウンタCTstopの値が所定時間Kstop(例えば60ms)を越えるまで、NotPレンジ側突き当て制御を継続する。そして、突き当て状態が所定時間Kstop以上続いた時点で、突き当て状態になっていることが確認できたと判断して、ステップ760に進み、NotPレンジ側突き当て制御を終了するために、NotPレンジ側突き当て制御中フラグXexnp=OFF、NotPレンジ側突き当て完了フラグXnp=ON、NotPレンジ側突き当て時のエンコーダカウント値Nnp=GNnp−ΔNover(ΔNoverは乗り上げ補正量)、停止時間カウンタCTstop=0、mode3時間カウンタCT3np=0、mode0時間カウンタCT0np=0にセットして、本ルーチンを終了する。
【0231】
図44は、Pレンジ側突き当て制御とNotPレンジ側突き当て制御の実行タイミングの一例を示すタイムチャートである。図44の例では、イグニッションスイッチのオン操作後(電源投入後)、暫くして、指令シフトレンジがPレンジからNotPレンジに切り換えられると、目標カウント値AcntがNotPレンジの暫定的な目標カウント値(例えば18°)に設定される。この暫定的な目標カウント値Acnt(18°)は、ディテントバネ23の係合部23aがディテントレバー15の両保持凹部24,25間の山部を確実に乗り越える回転角度に相当する。
【0232】
従って、F/B制御により暫定的な目標カウント値Acnt(18°)までロータ32を回転させた後は、ディテントバネ23の弾性力によってディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の傾斜側壁に沿って底部に落ち込む力を利用して、ロータ32をNotPレンジの目標位置(NotPレンジ保持凹部25の底部)まで回転させる。
【0233】
この後、NotPレンジ側突き当て制御中フラグXexnp=ONにセットされた時点で、目標カウント値AcntがNotPレンジ側の突き当て目標カウント値Ag(Kgnp)にセットされ、NotPレンジ側突き当て制御が実行される。これにより、ディテントバネ23の係合部23aがディテントレバー15のNotPレンジ保持凹部25の側壁に突き当たったときに、エンコーダカウント値Nnp(GNnp)が学習される。この学習終了後、NotPレンジ側突き当て制御中フラグXexnp=OFFにセットされ、NotPレンジ側突き当て制御が終了する。
【0234】
その後、指令シフトレンジがNotPレンジからPレンジに切り換えられると、目標カウント値AcntがPレンジの暫定的な目標カウント値(例えば0°)に設定される。これにより、F/B制御により暫定的な目標カウント値Acnt(0°)までロータ32を回転させた後は、ディテントバネ23の弾性力によってディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の傾斜側壁に沿って底部に落ち込む力を利用して、ロータ32をPレンジの目標位置(Pレンジ保持凹部24の底部)まで回転させる。
【0235】
この後、Pレンジ側突き当て制御中フラグXexp=ONにセットされた時点で、目標カウント値AcntがPレンジ側の突き当て目標カウント値Ag(Kgp)にセットされ、Pレンジ側突き当て制御が実行される。これにより、ディテントバネ23の係合部23aがディテントレバー15のPレンジ保持凹部24の側壁に突き当たったときに、エンコーダカウント値Np(GNp)が学習される。この学習終了後、Pレンジ側突き当て制御中フラグXexp=OFFにセットされ、Pレンジ側突き当て制御が終了する。
【0236】
[目標カウント値設定]
図45及び図46に示す目標カウント値設定ルーチンは、初期駆動終了後に所定周期(例えば8ms周期)で実行される。本ルーチンが起動されると、まずステップ771で、突き当て制御実行中(Pレンジ側突き当て制御中フラグXexp=ON又はNotPレンジ側突き当て制御中フラグXexnp=ON)であるか否かを判定し、突き当て制御実行中であれば、ステップ772に進み、目標カウント値Acntを突き当て目標カウント値Agに設定する。この突き当て目標カウント値Agは、図39のステップ720又は図42のステップ750で設定される。
【0237】
一方、突き当て制御実行中でなければ、ステップ773に進み、ECU41のRAMに記憶されている指令シフトレンジsftがPレンジであるか否かを判定し、Pレンジであれば、ステップ774に進み、Pレンジ側突き当て制御を完了したか否か(Pレンジ側突き当て完了フラグXp=ONであるか否か)を判定し、Pレンジ側突き当て制御が完了していれば、ステップ775に進み、Pレンジの目標カウント値Acntを次式により算出する。
Acnt=Np+ΔGp
【0238】
ここで、NpはPレンジ側突き当て時のエンコーダカウント値であり、図39及び図40のPレンジ側突き当て制御ルーチンによって学習した値GNpが用いられる。また、ΔGpはPレンジ側の遊び量の学習値であり、図36の遊び量学習ルーチンのステップ706で、今回の遊び量の学習値ΔGpが算出されてECU41の不揮発性メモリの記憶値が更新されるまでは、該不揮発性メモリに記憶されている前回値が用いられる。
【0239】
一方、Pレンジ側突き当て制御が完了していない場合は、ステップ774で「No」と判定されて、ステップ776に進み、NotPレンジ側突き当て制御を完了したか否か(NotPレンジ側突き当て完了フラグXnp=ONであるか否か)を判定し、NotPレンジ側突き当て制御が完了していれば、ステップ777に進み、Pレンジの目標カウント値Acntを次式により算出する。
Acnt=Nnp−ΔNact+ΔGp
【0240】
ここで、Nnpは、NotPレンジ側突き当て時のエンコーダカウント値で、図42及び図43のNotPレンジ側突き当て制御ルーチンによって学習した値GNnpが用いられる。また、ΔNactは可動範囲の実測値であり、図36の遊び量学習ルーチンのステップ705で、今回の可動範囲の実測値ΔNactが算出されてECU41の不揮発性メモリの記憶値が更新されるまでは、該不揮発性メモリに記憶されている前回値が用いられる。
【0241】
尚、Pレンジ側とNotPレンジ側の突き当て制御が両方とも完了していない場合(Pレンジ側・NotPレンジ側の両突き当て完了フラグXp,Xnpが両方ともOFFの場合)は、Pレンジ側突き当て時及びNotPレンジ側突き当て時のエンコーダカウント値Np,Nnpが学習されていないため、遊び量ΔGp,ΔGnpによる目標カウント値Acntの補正を行うことができない。従って、この場合は、ステップ778に進み、Pレンジの目標カウント値AcntをPレンジの暫定的な目標カウント値である0に設定する。
【0242】
一方、上記ステップ773で、指令シフトレンジsftがNotPレンジと判定された場合には、図46のステップ779に進み、NotPレンジ側突き当て制御を完了したか否か(NotPレンジ側突き当て完了フラグXnp=ONであるか否か)を判定し、NotPレンジ側突き当て制御が完了していれば、ステップ780に進み、NotPレンジの目標カウント値Acntを次式により算出する。
Acnt=Nnp−ΔGnp
【0243】
ここで、ΔGnpはNotPレンジ側の遊び量の学習値であり、図36の遊び量学習ルーチンのステップ706で、今回の遊び量の学習値ΔGnpが算出されてECU41の不揮発性メモリの記憶値が更新されるまでは、該不揮発性メモリに記憶されている前回値が用いられる。
【0244】
一方、NotPレンジ側突き当て制御が完了していない場合は、ステップ779で「No」と判定されて、ステップ781に進み、Pレンジ側突き当て制御を完了したか否か(Pレンジ側突き当て完了フラグXp=ONであるか否か)を判定し、Pレンジ側突き当て制御が完了していれば、ステップ782に進み、NotPレンジの目標カウント値Acntを次式により算出する。
Acnt=Np+ΔNact−ΔGnp
【0245】
また、Pレンジ側とNotPレンジ側の突き当て制御が両方とも完了していない場合(Pレンジ側・NotPレンジ側の両突き当て完了フラグXp,Xnpが両方ともOFFの場合)は、ステップ783に進み、NotPレンジの目標カウント値AcntをNotPレンジの暫定的な目標カウント値Knotp(例えば、18.5°)に設定する。
【0246】
尚、本ルーチンでは、目標カウント値Acntを設定する際に、遊び量の学習値ΔGp,ΔGnpと可動範囲の実測値ΔNactについては、ECU41の不揮発性メモリの記憶値が更新されるまでは、該不揮発性メモリに記憶されている前回値を用いるようにしたが、該不揮発性メモリの記憶値が更新されるまで、暫定的な目標カウント値(0又はKnotp)に設定するようにしても良い。
【0247】
[指令シフトレンジ設定]
図47に示す指令シフトレンジ設定ルーチンは、所定周期(例えば8ms周期)で起動される。本ルーチンが起動されると、まずステップ801で、起動時(ECU41のCPUのリセット後又は電源投入後)であるか否かを判定し、起動時であれば、ステップ806に進み、出力軸センサ14の出力Vnswから検出した実際のシフトレンジを起動時の指令シフトレンジsftにセットして、本ルーチンを終了する。
【0248】
これに対して、上記ステップ801で、起動時でないと判定された場合は、ステップ802に進み、Pレンジスイッチ43が操作されたか否かを判定し、Pレンジスイッチ43が操作されていれば、ステップ803に進み、指令シフトレンジsftをPレンジに設定する。
【0249】
また、Pレンジスイッチ43が操作されていない場合は、ステップ804に進み、NotPレンジスイッチ44が操作されたか否かを判定し、NotPレンジスイッチ44が操作されていれば、ステップ805に進み、指令シフトレンジsftをNotPレンジに設定する。
【0250】
次に、図48のタイムチャートを用いて指令シフトレンジsftの設定方法を説明する。図48は、指令シフトレンジsftをNotPレンジにセットして車両を運転しているときに、ECU41のCPUが何等かの原因でリセットされた場合の制御例を示している。車両走行中に、ECU41のCPUが何等かの原因でリセットされると、その直後に、起動時と判定され、出力軸センサ14の出力Vnswから検出した実際のシフトレンジが指令シフトレンジsftにセットされる。車両走行中は、実際のシフトレンジがNotPレンジであるため、ECU41のCPUが何等かの原因でリセットされた後の起動時には、出力軸センサ14の出力Vnswに基づいて指令シフトレンジsftがNotPレンジにセットされる。
【0251】
このように、車両走行中にECU41のCPUが何等かの原因でリセットされても、そのリセットの前後で指令シフトレンジsftがNotPレンジのまま変更されず、運転者の意思に反してシフトレンジが勝手にPレンジに切り換えられてしまう不具合を解消できる。
【0252】
尚、起動時以外の場合は、指令シフトレンジsftは、Pレンジスイッチ43又はNotPレンジスイッチ44の操作によってPレンジ又はNotPレンジに切り換えられる。
【0253】
《実施形態(2)》
上記実施形態(1)では、SRモータ12の出力軸13の回転位置(実際のシフトレンジ)を検出する出力軸センサ14が設けられていることに着目し、起動時(ECU41のCPUのリセット後や電源投入後)に、出力軸センサ14で検出した実際のシフトレンジを起動時の指令シフトレンジsftにセットするようにしたが、出力軸センサ14が設けられていない場合は、図49及び図50に示す本発明の実施形態(2)のように起動時の指令シフトレンジsftをセットすれば良い。尚、本実施形態(2)の指令シフトレンジ設定方法を、出力軸センサ14が設けられたシステムに適用しても良いことは言うまでもない。
【0254】
本実施形態(2)では、車両運転中に、最新の指令シフトレンジsftをECU41のSRAM等の不揮発性メモリに記憶しておき、起動時(ECU41のCPUのリセット後や電源投入後)に、不揮発性メモリの指令シフトレンジ記憶値SRAMsftを起動時の指令シフトレンジsftにセットする。
【0255】
電源オフ中にバッテリからの電源のバックアップを必要とするSRAM等の不揮発性メモリは、バッテリが取り外されると、指令シフトレンジの記憶値SRAMsftが消えてしまう。そこで、本実施形態(2)では、バッテリの取り外しが検出されたときに、起動時の指令シフトレンジsftを例えばバッテリの取り外し作業が行われるときのシフトレンジであるPレンジにセットする。
【0256】
また、バッテリが取り外されると、不揮発性メモリに記憶されている突き当て学習値GNp等も消えてしまうため、バッテリの取り外しが検出されたときには、起動時の指令シフトレンジsftをPレンジにセットすると共に、Pレンジ側突き当て制御を強制的に実行し、Pレンジ側突き当て学習値GNpを求める。
【0257】
更に、本実施形態(2)では、不揮発性メモリに記憶される指令シフトレンジSRAMsftを、該不揮発性メモリへの電源投入時にセットされる初期値(0)とは異なる値にセットする。具体的には、Pレンジを表す値を例えば10とし、NotPレンジを表す値を例えば20として不揮発性メモリに記憶する。これにより、起動時に、不揮発性メモリに記憶されている指令シフトレンジSRAMsftが初期値(0)であるか否かを判定することで、バッテリの取り外しが行われたか否かを判定することができる。以下、前記実施形態(1)と異なるルーチンについてのみ説明する。
【0258】
[指令シフトレンジ設定]
図49に示す指令シフトレンジ設定ルーチンは、所定周期(例えば8ms周期)で起動される。本ルーチンが起動されると、まずステップ901で、起動時(ECU41のCPUのリセット後又は電源投入後)であるか否かを判定し、起動時でないと判定された場合は、ステップ902に進み、Pレンジスイッチ43が操作されたか否かを判定し、Pレンジスイッチ43が操作されていれば、ステップ903に進み、指令シフトレンジsftをPレンジに設定する。
【0259】
また、Pレンジスイッチ43が操作されていない場合は、ステップ904に進み、NotPレンジスイッチ44が操作されたか否かを判定し、NotPレンジスイッチ44が操作されていれば、ステップ905に進み、指令シフトレンジsftをNotPレンジに設定する。
その後、ステップ906に進み、最新の指令シフトレンジsftをECU41の不揮発性メモリに記憶して本ルーチンを終了する。
【0260】
これに対して、前記ステップ901で、起動時と判定された場合は、ステップ907に進み、不揮発性メモリに記憶されている指令シフトレンジSRAMsftが初期値(0)であるか否かを判定することで、バッテリの取り外しが行われたか否かを判定する。その結果、バッテリの取り外しが行われなかったと判定された場合は、ステップ910に進み、不揮発性メモリの指令シフトレンジ記憶値SRAMsftを起動時の指令シフトレンジsftにセットして本ルーチンを終了する。
【0261】
もし、上記ステップ907で、バッテリの取り外しが行われたと判定された場合は、ステップ908に進み、Pレンジ側突き当て制御を行わせるために、バッテリ取り外しフラグXbatを「1」にセットして、次のステップ909で、不揮発性メモリの指令シフトレンジ記憶値SRAMsftをPレンジにセットする。この後、ステップ910に進み、不揮発性メモリの指令シフトレンジ記憶値SRAMsftを起動時の指令シフトレンジsftにセットして本ルーチンを終了する。
【0262】
[Pレンジ側突き当て制御]
図50のPレンジ側突き当て制御ルーチンは、前記実施形態(1)で説明した図39のPレンジ側突き当て制御ルーチンのステップ711の前にステップ710の処理を追加したものであり、その他の各ステップの処理は前記実施形態(1)と同じである。
【0263】
図50のPレンジ側突き当て制御ルーチンが起動されると、まずステップ710で、バッテリ取り外しフラグXbat=1であるか否かで、バッテリの取り外しが行われたか否かを判定し、バッテリの取り外しが行われていない場合は、ステップ711以降の処理を前記実施形態(1)と同様の方法で実行する。
【0264】
これに対して、バッテリ取り外しフラグXbat=1(バッテリの取り外しが行われた)と判定された場合は、ステップ710からステップ717に進み、Pレンジ側突き当て制御中フラグXexp=ONにセットして、前記実施形態(1)と同様の方法でPレンジ側突き当て制御を実行し、Pレンジ側突き当て学習値GNpを求める。
【0265】
以上説明した本実施形態(2)では、車両運転中に最新の指令シフトレンジsftをECU41の不揮発性メモリに記憶しておき、起動時に、不揮発性メモリの指令シフトレンジ記憶値SRAMsftを起動時の指令シフトレンジsftにセットするようにしたので、車両運転中にECU41のCPUが何等かの原因でリセットされても、そのリセットの前後で指令シフトレンジsftが変更されず、運転者の意思に反してシフトレンジが勝手に切り換えられてしまう不具合を解消できる。
【0266】
しかも、本実施形態(2)では、バッテリが取り外されると、不揮発性メモリに記憶されている指令シフトレンジ記憶値SRAMsftが消えてしまうことを考慮して、バッテリの取り外しが検出されたときに、起動時の指令シフトレンジsftをバッテリの取り外し作業が行われるときのシフトレンジであるPレンジにセットするようにしたので、起動時の安全性を確保することができる。
【0267】
尚、不揮発性メモリとして、バックアップ電源が不要なEEPROM等を用いるようにしても良く、この場合は、バッテリ取り外し時でも、指令シフトレンジ記憶値を保持できるため、バッテリ取り外しの有無を問わず、起動時に、不揮発性メモリの指令シフトレンジ記憶値を起動時の指令シフトレンジsftにセットするようにすれば良く、また、バッテリの取り外しがあっても、改めてPレンジ側突き当て制御を実行する必要がない。
【0268】
また、本発明に用いるエンコーダは、磁気式のエンコーダ46に限定されず、例えば、光学式のエンコーダやブラシ式のエンコーダを用いても良い。
また、本発明に用いるモータは、SRモータ12に限定されず、エンコーダの出力信号のカウント値に基づいてロータの回転位置を検出してモータの通電相を順次切り換えるブラシレス型のモータであれば、SRモータ以外のブラシレス型のモータを用いても良い。
【0269】
また、本実施形態のレンジ切換装置は、PレンジとNotPレンジの2つのレンジを切り換える構成であるが、例えば、ディテントレバー15の回動動作に連動して自動変速機のレンジ切換弁とマニュアルバルブを切り換えて、自動変速機のP、R、N、D、…の各レンジを切り換えるレンジ切換装置にも本発明を適用して実施できる。
【0270】
その他、本発明は、レンジ切換装置に限定されず、SRモータ等のブラシレス型のモータを駆動源とする各種の装置に適用して実施できることは言うまでもない。
【図面の簡単な説明】
【図1】本発明の実施形態(1)を示すレンジ切換装置の斜視図
【図2】SRモータの構成を説明する図
【図3】SRモータを駆動する回路構成を示す回路図
【図4】レンジ切換装置の制御システム全体の構成を概略的に示す図
【図5】エンコーダのロータリマグネットの構成を説明する平面図
【図6】エンコーダの側面図
【図7】(a)はエンコーダの出力波形を示すタイムチャート、(b)は通電相切り換えパターンを示すタイムチャート
【図8】初期駆動ルーチンの処理の流れを示すフローチャート(その1)
【図9】初期駆動ルーチンの処理の流れを示すフローチャート(その2)
【図10】Pレンジ初期駆動ルーチンの処理の流れを示すフローチャート
【図11】NotPレンジ初期駆動ルーチンの処理の流れを示すフローチャート
【図12】Pレンジで初期駆動を行ったときの制御例を示すタイムチャート
【図13】初期駆動中にレンジ切換操作されたときの制御例を示すタイムチャート
【図14】初期駆動中にレンジ切換操作されたときの初期位置ずれ学習方法を説明するタイムチャート
【図15】エンコーダカウンタルーチンの処理の流れを示すフローチャート
【図16】カウントアップ値ΔN算出マップの一例を示す図
【図17】指令レンジシフト、A相信号、B相信号、エンコーダカウント値の関係を示すタイムチャート
【図18】SRモータの制御例を示すタイムチャート
【図19】F/B制御から目標位置停止保持処理へ移行するタイミングを説明するタイムチャート
【図20】制御モード設定ルーチンの処理の流れを示すフローチャート(その1)
【図21】制御モード設定ルーチンの処理の流れを示すフローチャート(その2)
【図22】制御モード設定ルーチンの処理の流れを示すフローチャート(その3)
【図23】時間同期モータ制御ルーチンの処理の流れを示すフローチャート
【図24】mode1ルーチンの処理の流れを示すフローチャート
【図25】mode3ルーチンの処理の流れを示すフローチャート
【図26】mode4ルーチンの処理の流れを示すフローチャート
【図27】通電処理ルーチンの処理の流れを示すフローチャート
【図28】1−2相励磁方式の場合のMptn%12から通電相への変換テーブルの一例を示す図
【図29】突き当て制御中にバッテリ電圧に応じて通電デューティ比を設定するテーブルの一例を示す図
【図30】F/B制御ルーチンの処理の流れを示すフローチャート
【図31】通電相設定ルーチンの処理の流れを示すフローチャート
【図32】UW相から回転を開始する時の通電処理を説明するタイムチャート
【図33】ロータ回転速度演算ルーチンの処理の流れを示すフローチャート
【図34】速度位相進み補正量設定ルーチンの処理の流れを示すフローチャート
【図35】ディテントバネの係合部とディテントレバーのPレンジ保持凹部とNotPレンジ保持凹部との関係を説明する図
【図36】遊び量学習ルーチンの処理の流れを示すフローチャート
【図37】バッテリ電圧に応じて乗り上げ補正量ΔVoverを設定するテーブルの一例を示す図
【図38】可動範囲の実測値ΔNactと設計値ΔNdと遊び量ΔGp,ΔGnpとの関係を説明する図
【図39】Pレンジ側突き当て制御ルーチンの処理の流れを示すフローチャート(その1)
【図40】Pレンジ側突き当て制御ルーチンの処理の流れを示すフローチャート(その2)
【図41】Pレンジ側突き当て制御の一例を説明するタイムチャート
【図42】NotPレンジ側突き当て制御ルーチンの処理の流れを示すフローチャート(その1)
【図43】NotPレンジ側突き当て制御ルーチンの処理の流れを示すフローチャート(その2)
【図44】Pレンジ側突き当て制御とNotPレンジ側突き当て制御の実行タイミングの一例を説明するタイムチャート
【図45】目標カウント値設定ルーチンの処理の流れを示すフローチャート(その1)
【図46】目標カウント値設定ルーチンの処理の流れを示すフローチャート(その2)
【図47】実施形態(1)の指令シフトレンジ設定ルーチンの処理の流れを示すフローチャート
【図48】指令シフトレンジsftをNotPレンジにセットして車両を運転しているときに、CPUがリセットされた場合の制御例を示すタイムチャート
【図49】実施形態(2)の指令シフトレンジ設定ルーチンの処理の流れを示すフローチャート
【図50】実施形態(2)のPレンジ側突き当て制御ルーチンの前半部の処理の流れを示すフローチャート
【符号の説明】
11…レンジ切換機構、12…SRモータ、14…出力軸センサ、15…ディテントレバー、18…パーキングロッド、20…パーキングギヤ、21…ロックレバー、23…ディテントバネ、23a…係合部、24…Pレンジ保持凹部、25…NotPレンジ保持凹部、26…減速機構、27…自動変速機、31…ステータ、32…ロータ、33,34…巻線、35,36…モータ励磁部、37,38…モータドライバ、41…ECU(制御手段)、43…Pレンジスイッチ、44…NotPレンジスイッチ、46…エンコーダ、47…ロータリマグネット、48…A相信号用の磁気検出素子、49…B相信号用の磁気検出素子、50…Z相信号用の磁気検出素子。
Claims (7)
- 制御対象を回転駆動するモータのロータの回転に同期してパルス信号を出力するエンコーダと、このエンコーダの出力信号のカウント値に基づいて前記ロータの回転位置を検出して前記モータの通電相を順次切り換えることで前記ロータを目標位置設定手段により設定された目標位置まで回転駆動する制御手段とを備えたモータ制御装置において、
前記目標位置設定手段により設定された目標位置を記憶する不揮発性メモリを備え、
前記制御手段は、起動時に前記不揮発性メモリに記憶されている目標位置を起動時の目標位置にセットすることを特徴とするモータ制御装置。 - 前記不揮発性メモリは、前記制御手段の電源オフ中にバッテリから電源の供給を受けて前記目標位置の記憶を保持し、
前記制御手段は、前記バッテリが取り外されたことを検出する手段を備え、前記バッテリが取り外された場合に、起動時の目標位置を予め決められた目標位置にセットすることを特徴とする請求項1に記載のモータ制御装置。 - 前記不揮発性メモリに記憶される目標位置のデータは、該不揮発性メモリへの電源投入時にセットされる初期値と異なる値が用いられ、
前記制御手段は、前記不揮発性メモリに記憶されている目標位置のデータが前記初期値であるか否かで前記バッテリが取り外されたか否かを判定することを特徴とする請求項2に記載のモータ制御装置。 - 前記制御手段は、前記バッテリが取り外された場合に、起動時に前記モータを前記予め決められた目標位置の方向に駆動してその限界位置に突き当てて当該限界位置を学習することを特徴とする請求項3に記載のモータ制御装置。
- 制御対象を回転駆動するモータのロータの回転に同期してパルス信号を出力するエンコーダと、このエンコーダの出力信号のカウント値に基づいて前記ロータの回転位置を検出して前記モータの通電相を順次切り換えることで前記ロータを目標位置設定手段により設定された目標位置まで回転駆動する制御手段とを備えたモータ制御装置において、
前記モータの出力軸の回転位置又はそれに相関する位置情報を検出する出力軸センサを備え、
前記制御手段は、起動時に前記出力軸センサで検出した位置を起動時の目標位置にセットすることを特徴とするモータ制御装置。 - 前記モータは、スイッチトリラクタンスモータであることを特徴とする請求項1乃至5のいずれかに記載のモータ制御装置。
- 前記制御対象は、車両のパーキングレンジと他のレンジとを切り換えるレンジ切換装置であることを特徴とする請求項1乃至6のいずれかに記載のモータ制御装置。
Priority Applications (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002207560A JP3888940B2 (ja) | 2002-07-16 | 2002-07-16 | モータ制御装置 |
US10/443,795 US7084597B2 (en) | 2002-06-03 | 2003-05-23 | Motor control apparatus |
DE10324846A DE10324846A1 (de) | 2002-06-03 | 2003-06-02 | Motorsteuerungsgerät |
DE10362105.9A DE10362105B4 (de) | 2002-06-03 | 2003-06-02 | Motorsteuerungsgerät |
US11/257,306 US7221116B2 (en) | 2002-06-03 | 2005-10-25 | Motor control apparatus |
US11/404,869 US20060197489A1 (en) | 2002-06-03 | 2006-04-17 | Motor control apparatus |
US11/730,871 US7609012B2 (en) | 2002-06-03 | 2007-04-04 | Motor control apparatus |
US12/382,603 US8013563B2 (en) | 2002-06-03 | 2009-03-19 | Motor control apparatus |
US12/926,585 US8134322B2 (en) | 2002-06-03 | 2010-11-29 | Motor control apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002207560A JP3888940B2 (ja) | 2002-07-16 | 2002-07-16 | モータ制御装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004056858A JP2004056858A (ja) | 2004-02-19 |
JP3888940B2 true JP3888940B2 (ja) | 2007-03-07 |
Family
ID=31931974
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002207560A Expired - Fee Related JP3888940B2 (ja) | 2002-06-03 | 2002-07-16 | モータ制御装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3888940B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012095407A (ja) * | 2010-10-25 | 2012-05-17 | Denso Corp | モータ制御装置 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4320648B2 (ja) | 2005-06-06 | 2009-08-26 | 株式会社デンソー | シフトレンジ切替装置 |
JP5817747B2 (ja) | 2013-01-25 | 2015-11-18 | 株式会社デンソー | レンジ切換装置 |
JP5949702B2 (ja) | 2013-08-20 | 2016-07-13 | 株式会社デンソー | レンジ切替装置 |
JP5762582B1 (ja) * | 2014-02-04 | 2015-08-12 | 三菱電機株式会社 | シフトレンジ切り替え装置 |
JP2019205323A (ja) * | 2018-05-25 | 2019-11-28 | 愛三工業株式会社 | モータ制御装置及びモータ制御方法 |
CN113040804B (zh) * | 2021-03-09 | 2023-10-17 | 明峰医疗系统股份有限公司 | 一种防止扫描床运动失控的方法 |
-
2002
- 2002-07-16 JP JP2002207560A patent/JP3888940B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012095407A (ja) * | 2010-10-25 | 2012-05-17 | Denso Corp | モータ制御装置 |
Also Published As
Publication number | Publication date |
---|---|
JP2004056858A (ja) | 2004-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7667427B2 (en) | Motor control apparatus | |
US7084597B2 (en) | Motor control apparatus | |
US7161314B2 (en) | Motor control apparatus having current supply phase correction | |
JP3886042B2 (ja) | モータ制御装置 | |
JP3849864B2 (ja) | モータ制御装置 | |
JP3849930B2 (ja) | モータ制御装置 | |
JP3800529B2 (ja) | モータ制御装置 | |
JP2004023890A (ja) | モータ制御装置 | |
JP3888940B2 (ja) | モータ制御装置 | |
JP4189953B2 (ja) | 位置切換制御装置 | |
JP3849931B2 (ja) | モータ制御装置 | |
JP3947922B2 (ja) | モータ制御装置 | |
JP4082164B2 (ja) | モータ制御装置 | |
JP3871130B2 (ja) | モータ制御装置 | |
JP2017161455A (ja) | 制御装置 | |
JP3800532B2 (ja) | モータ制御装置 | |
JP3888278B2 (ja) | モータ制御装置 | |
JP3849627B2 (ja) | モータ制御装置 | |
JP2004023889A (ja) | モータ制御装置 | |
JP4748611B2 (ja) | 位置切換制御装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040311 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20040311 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20040311 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20040408 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041216 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060719 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060721 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20061128 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061128 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 3888940 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091208 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101208 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111208 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121208 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131208 Year of fee payment: 7 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |