本発明の一実施形態を添付の図面を参照して説明する。
図1は、本実施形態であるグリップヒータ制御装置が備えられた乗物の左側グリップの外観図であり、図2は、本実施形態であるグリップヒータ制御装置のシステムブロック図であり、図3は、図2のグリップヒータ制御装置における発電機から出力されるピックアップ信号の時間変化を示すグラフであり、図4は、図2のグリップヒータ制御装置の回路図である。また、図5〜図12は、図2のグリップヒータ制御装置の制御処理を示すフローチャートである。また、図13は図2のグリップヒータ制御装置における発電機の発電周期とヒータへの上限電力量との関係を示すグラフである。なお、本実施形態では、乗物としてオートバイ(自動二輪車)を例にとる。
まず、図1を参照して、本実施形態におけるグリップヒータ制御装置は、オートバイのステアリングハンドルSHに設けられる左側グリップ1及び図示しない右側グリップにそれぞれ内蔵されるフレキシブルプリント配線基板等からなるヒータ(電熱ヒータ)2への電力量を制御するものである。左側グリップ1及び右側グリップは、ゴム等の樹脂から形成された有底筒状のものであり、ステアリングハンドルSHのフレームSHFの各端部(左端部および右端部)にそれぞれ挿着されている。左側グリップ1のヒータ2は、該グリップ1の内周面とステアリングハンドルSHのフレームSHFの外周面との間に介装され、このヒータ2の発熱によって左側グリップ1が加温される。図示を省略するが、右側グリップのヒータも、左側グリップ1のヒータ2と同様に設けられている。なお、以降の説明では、右側グリップのヒータにも参照符号2を付する。
また、左側グリップ1の右端部(オートバイの中心寄りの端部)に形成されたフランジ部3には、両ヒータ2,2への通電状態を表示して運転者に報知するLED4と、両ヒータ2,2の温度を調節する(より正確には、両ヒータ2,2への電力量を設定する)ために運転者によって操作されるヒータ温度操作子であるUPスイッチ5及びDOWNスイッチ6が備えられている。UPスイッチ5はヒータ2,2の温度(電力量)を上げるとき、あるいはヒータ2,2の通電を開始するときに操作される押圧操作型のスイッチであり、DOWNスイッチ6はヒータ2,2の温度(電力量)を下げるとき、あるいはヒータ2,2の通電を停止するときに操作される押圧操作型のスイッチである。
次に、図2を参照して、本実施形態におけるグリップヒータ制御装置7は、電子回路等で構成されたコントローラ8と、前記ヒータ2,2と、前記LED4、UPスイッチ5及びDOWNスイッチ6とを備えている。また、グリップヒータ制御装置7は、オートバイに搭載され、図示しないエンジンの回転に連動して発電する発電機9と、発電機9によって充電されるバッテリ10とに接続されている。なお、エンジンはオートバイの推進源である。
発電機9は、例えば、三相交流発電機(ACG)であり、そのロータが、エンジンの出力軸の回転に連動して回転するように、エンジンの出力軸に接続されている。この発電機9の発電量は、エンジンの回転数(出力軸の回転速度)が低いほど小さくなる。また、発電機9のロータには、9個の爪状の突起29aを外周に備えた金属板であるピックアップロータ29が、該ロータと同軸に接続されている。ピックアップロータ29の近傍には、ピックアップロータ29の回転に応じたピックアップ信号を出力するためのピックアップコイル30が取り付けられている。ピックアップコイル30は、ピックアップロータ29の回転時に、各突起29aに順次対向し、その都度、パルス状のピックアップ信号を出力する。これにより、発電機9の回転数(ロータの回転速度)に応じたピックアップ信号が出力され、コントローラ8に入力される。
ここで、図3は、発電機9からコントローラ8へ出力されるピックアップ信号の時間変化を示すグラフであり、縦軸は信号電圧を示し、横軸は時間を示す。ピックアップ信号は、発電機9の回転数に応じた周期を有する波形を示すものであり、その周期は、発電機9の回転数の増加に伴い短くなる。なお、本実施形態の発電機9では、前記ピックアップロータ29の突起29aは、該ロータ29の外周の全周に等間隔で配列されていないので、発電機9のロータが連続的に回転している状態であっても、図3の期間ta〜tbのように、ピックアップ信号が出力されない期間が周期的に現れるようになっている。
バッテリ10は、例えば、鉛蓄電池であり、オートバイの全電気系統に電力を供給するものである。バッテリ10は、その負極10aと正極10bとが、整流回路31を介して、発電機9に接続されており、発電機9の発電電圧を整流回路31で整流してなる直流電圧により充電される。ここで、整流回路31は、例えば、全波整流回路または半波整流回路である。また、バッテリ10は、その負極10aが接地されると共に、正極10bにオートバイのメインスイッチ11とヒューズ12とが直列に接続され、これらのメインスイッチ11とヒューズ12とを介してコントローラ8にバッテリ10の出力電圧を供給するようにコントローラ8に接続されている。
さらに、バッテリ10は、メインスイッチ11とヒューズ12とを介してヒータ2,2に通電するように該ヒータ2,2に接続されている。さらに詳しくは、ヒータ2,2は直列に接続され、その直列回路の一端がバッテリ10の正極10bにメインスイッチ11とヒューズ12とを介して接続されると共に、該直列回路の他端がコントローラ8に接続されている。この場合、ヒータ2,2の直列回路の他端は、コントローラ8の後述するヒータ出力I/F20により接地又は開放されるようになっており、その接地時に、バッテリ10からヒータ2,2の直列回路に通電される。
コントローラ8は、本実施形態では、例えばオートバイのヘッドランプのハウジング(図示しない)に収容されており、制御演算を行うCPU13と、CPU13にクロック信号を発信するクロック発信部14と、CPU13を初期化する外部リセット回路15とを備える。また、コントローラ8は、バッテリ10の出力電圧(以下、バッテリ電圧という)を供給される電源入力部16と、電源入力部16の出力電圧から5Vの定電圧Vddを生成して出力する5V電源部17と、電源入力部16の出力電圧を分圧してなる分圧電圧Vsを出力する電源電圧分圧部18とを備える。
また、コントローラ8は、発電機9から出力されるピックアップ信号を受けて、このピックアップ信号に同期したパルス信号をCPU13に出力するACG信号入力I/F19と、CPU13の指令に応じてバッテリ10からヒータ2へ通電及びその遮断を制御し、ヒータ2への電力量を制御(PWM制御)するヒータ出力I/F20とを備えている。ヒータ2への電力量は、UPスイッチ5及びDOWNスイッチ6の操作によって、レベル0〜レベル5の6段階に設定可能とされている。レベル0ではヒータ2はOFF(ヒータ2の通電停止状態)であり、レベルが高くなるほどヒータ2への電力量は大きくなる。なお、本明細書では、「I/F」はインタフェース回路を意味する。
また、コントローラ8は、CPU13からの出力(動作指令信号)に応じてLED4を点灯・消灯させるLED出力I/F21と、UPスイッチ5の操作に応じた信号を生成して、それをCPU13に出力するUPスイッチ入力I/F22と、DOWNスイッチ6の操作に応じた信号を生成して、それをCPU13に出力するDOWNスイッチ入力I/F23とを備えている。
コントローラ8について、図4を参照して、より詳細に説明する。CPU13は、外部リセット回路15、電源電圧分圧部18、ACG信号入力I/F19、ヒータ出力I/F20、LED出力I/F21、UPスイッチ入力I/F22、DOWNスイッチ入力I/F23に、CPU13の端子とそれぞれ接続された複数の信号線を束にした信号線群26を介して接続されている。なお、図4において、CPU13中の参照符号「Pnm」(n,mは整数)と、信号線群26の近くに併記した参照符号「Pnm」は、CPU13の端子と、この端子に信号線群26を介して接続される回路との関係を示している。例えば「P23」は、CPU13の端子P23がACG信号入力I/F19に信号線群26を介して接続されていることを示している。
電源入力部16は、ダイオードD1,D2、電解コンデンサC1、およびコンデンサC5を図示の如く接続して構成されており、バッテリ10から供給されるバッテリ電圧(これは発電機9の発電電圧による変動を生じる)を、整流用のダイオードD1を介して電解コンデンサC1に充電し、その充電したバッテリ電圧を5V電源部17と電源電圧分圧部18とに供給する。なお、コンデンサC5は、電解コンデンサC1の充電電圧からノイズ成分を除去するためのものである。また、電源入力部16は、バッテリ10から供給されるバッテリ電圧をダイオードD2を介してLED出力I/F21に供給する。以降、電解コンデンサC1に充電されたバッテリ電圧に参照符号Vb_Aを付し、ダイオードD2から出力されるバッテリ電圧に参照符号Vb_Bを付する。Vb_A,Vb_Bは、概ね等しい電圧(例えば12V)であるが、Vb_Aの方がVb_Bよりも安定性が高い。
なお、本実施形態においては、5V電源部17及び電源電圧分圧部18に供給するバッテリ電圧(Vb_A)と、LED出力I/F21に供給するバッテリ電圧(Vb_B)とを、ダイオードD1,D2を介して2つの回路に分けることで、LED4の点滅(LED4のON・OFF)により生じるバッテリ電圧の変化によって電源電圧分圧部18が受ける影響を少なくしている。
5V電源部17は、トランジスタQ1、抵抗R1、コンデンサC4、ツェナーダイオードZD1、コイルEMI、コンデンサC3、および電解コンデンサC2を図示の如く接続して構成されており、基本的には、トランジスタQ1、ツェナーダイオードZD1、および抵抗R1とから構成された回路によって、電源入力部16から供給されるバッテリ電圧Vb_Aから5Vの定電圧Vddを生成し、それを電解コンデンサC2に充電しつつ出力する。なお、コンデンサC4と、コイルEMIおよびコンデンサC3とは、定電圧Vddからノイズ成分を除去のためのものである。この定電圧Vddは、CPU13、外部リセット回路15、ACG信号入力I/F19、UPスイッチ入力I/F22、DOWNスイッチ入力I/F23の電源電圧として使用される。
電源電圧分圧部18は、抵抗R2,R3,R4、ダイオードD4、およびコンデンサC6を図示の如く接続して構成されており、電源入力部16に入力されたバッテリ電圧Vb_Aを、直列接続された抵抗R2,R3によって分圧してなる分圧電圧Vsを、抵抗R4および信号線群26を介してCPU13の入力端子P60に出力する。分圧電圧Vsは、バッテリ電圧Vb_Aのレベルを示す電圧信号である。なお、コンデンサC6は分圧電圧Vsからノイズ成分を除去するためのコンデンサであり、ダイオードD4は分圧電圧VsがCPU13の電源電圧である定電圧Vddを超えるのを防止するためのダイオードである。
ACG信号入力I/F19は、ダイオードD3、抵抗R23、ツェナーダイオードZD2、抵抗R25,R24、コンデンサC11,C12、トランジスタ(スイッチングトランジスタ)Q5、および抵抗R26,R27を図示の如く接続して構成されている。このACG信号入力I/F19は、発電機9から入力されるピックアップ信号をダイオードD3で整流し、さらに、その整流した信号のピーク値をツェナーダイオードZD2で5Vに制限した後、抵抗R25,R24およびコンデンサC11,C12から構成されたフィルタを介して矩形波状に整形してトランジスタQ5のベースに入力するようにしている。また、トランジスタQ5は、そのエミッタが接地されると共に、コレクタに5V電源部17から抵抗R26を介して定電圧Vddが付与されている。このため、トランジスタQ5は、ピックアップ信号に同期してON・OFFして、トランジスタQ5のコレクタにピックアップ信号に同期したパルス信号が生成される。このパルス信号は、ピックアップ信号が正電圧になっている時に0Vとなり、ピックアップ信号が正電圧から負電圧に立ち下がった時に、0VからVdd(5V)に立ち上がる矩形波信号である。そして、このパルス信号が抵抗R27および信号線群26を介してCPU13の入力端子P23に出力される。
ヒータ出力I/F20は、CPU13とヒータ2,2の直列回路との間で、トランジスタ(FET)Q2、および抵抗R17,R18を図示の如く接続して構成されており、CPU13の端子P21からトランジスタQ2のゲートに信号線群26および抵抗R17を介して付与される指令信号(高電位または低電位の信号)によってトランジスタQ2がON・OFFするようになっている。この場合、CPU13の端子P21からの指令信号が高電位(5V)となる期間は、トランジスタQ2がON状態になり、このとき、トランジスタQ2のドレインに接続されているヒータ2,2の直列回路にバッテリ10から通電される(バッテリ10から電力が供給される)ようになっている。また、CPU13の端子P21からの指令信号が低電位(約0V)となる期間は、トランジスタQ2がOFF状態になり、このとき、ヒータ2,2の直列回路への通電が遮断されるようになっている。
LED出力I/F21は、CPU13とLED4との間で、トランジスタ(スイッチングトランジスタ)Q3,Q4と抵抗R15とを図示の如く接続して構成されており、CPU13の端子P10から信号線群26を介してトランジスタQ4のベースに付与される指令信号(高電位または低電位の信号)によってトランジスタQ3,Q4がON・OFFするようになっている。この場合、トランジスタQ3のエミッタには、電源入力部16からバッテリ電圧Vb_Bが付与されると共に、トタンジスタQ3のコレクタに抵抗R15を介してLED4が接続されている。そして、CPU13の端子P10からの指令信号が高電位(5V)となる期間は、トタジスタQ3,Q4が共にON状態になり、このとき、電源入力部16からバッテリ電圧Vb_BがトランジスタQ3および抵抗R15を介してLED4に印加され、これによりLED4に通電されて、LED4が点灯するようになっている。また、CPU13の端子P10からの指令信号が低電位(0V)となる期間は、トランジスタQ3,Q4が共にOFF状態になり、LED4の通電が遮断されて、LED4が消灯するようになっている。
UPスイッチ入力I/F22は、UPスイッチ5とCPU13との間で、ダイオードD6、抵抗R5,R6、コンデンサC7、および抵抗R7を図示の如く接続して構成されており、UPスイッチ5が押圧操作されていない定常状態では、5V電源部17から抵抗R5,R6を介して定電圧Vddに充電されるコンデンサC7の充電電圧を抵抗R7および信号線群26を介してCPU13に出力するようにしている。また、UPスイッチ5が押圧操作された時には、コンデンサC7が抵抗R6、ダイオードD6およびUPスイッチ5を介して接地され、このとき、UPスイッチ5の押圧操作が所定時間(例えば0.5ミリ秒)継続すると、コンデンサC7の充電電圧が定電圧Vddから低電位(約0V)に低下する。そして、この低電位の電圧がUPスイッチ5が押圧操作されたことを示す信号として、コンデンサC7からCPU13に抵抗R7および信号線群26を介して出力されるようになっている。
DOWNスイッチ入力I/F23は、DOWNスイッチ6とCPU13との間で、ダイオードD7、抵抗R8,R9、コンデンサC8、および抵抗R10を、UPスイッチ入力I/F22と同様の構成で接続して構成されている。従って、DOWNスイッチ入力I/F23のCPU13への出力(コンデンサC8の充電電圧)は、DOWNスイッチ6が押圧操作されていない定常状態では、定電圧Vddとなり、DOWNスイッチ6の押圧操作が所定時間(例えば0.5ミリ秒)継続すると、定電圧Vddから低電位(約0V)に低下する。なお、UPスイッチ入力I/F22及びDOWNスイッチ入力I/F23は、本発明の操作信号出力手段に相当する。
外部リセット回路15は、複数の抵抗(R19など)と複数のコンデンサ(C9など)とが接続されたリセット用IC27を備え、このリセット用IC27によってCPU13の動作を適宜、初期化するものである。この場合、外部リセット回路15は、CPU13の端子P11からの出力(クリア信号)が所定時間経過しても出力されなかった場合や、動作中のCPU13の電圧が異常である場合に、CPU13の端子!RSTへリセット信号を出力してCPU13の動作を初期化させる。
クロック発信部14は、CPU13に接続された水晶振動子XTALを備え、この水晶振動子により、一定周期のクロック信号を発振し、それをCPU13に入力する。
なお、図4中、参照符号28を付した回路は、メモリ処理回路であり、このメモリ処理回路28は、CPU13がデータを読み書きするためのフラッシュメモリ(図示省略)に係るI/Fである。
なお、本実施形態では、前記図2に示したように、LED4、UPスイッチ5及びDOWNスイッチ6は、アッセンブリ24として、共通の接地線(アース線)25を介して接地されている。この場合、LED4は、そのカソード側を接地線25に接続して接地し、且つ、アノード側をコントローラ8のLED出力I/F21に接続して、LED出力I/F21からLED4を点灯させるための電流をLED4に流すようにしている。このため、LED4、UPスイッチ5及びDOWNスイッチ6のアッセンブリ24に、LED4を駆動するための専用的な2本の接続線を接続する必要がなく(LED4に専用的な接続線は1本で済む)、アッセンブリ24に接続すべき接続線の本数を少なくできると共にアッセンブリ24を小型化できる。
CPU13は、5V電源部17から入力される定電圧Vddによって駆動され、外部リセット回路15によって初期化される。CPU13は、図示しないROMに書き込まれたプログラム等により、ACG信号入力I/F19から入力されるパルス信号の周期(平均周期。以下、ACG周期という)を、エンジン又は発電機9の回転数を示すものとして検出する機能を持つ(本発明の回転数検出手段)。また、CPU13は、ACG周期に応じてヒータ2への上限電力量を設定する機能を持つ(本発明の上限電力量決定手段)。また、CPU13は、UPスイッチ入力I/F22及びDOWNスイッチ入力I/F23からの入力に応じてヒータ2への目標電力量を決定する機能を持つ(本発明の目標電力量設定手段)。
また、CPU13は、電源電圧分圧部15から入力される分圧電圧Vsを用いて、バッテリ電圧を検出し、その検出値を所定の電圧と比較して、バッテリ電圧の低下を判定する機能を持つ。なお、コントローラ8とバッテリ10とを接続する配線において生ずる電圧降下分や電源電圧分圧部15の出力の誤差分を、バッテリ電圧の検出値に加算した補正バッテリ電圧を平均して平均補正バッテリ電圧を求め、この平均補正バッテリ電圧に基づいてバッテリ電圧の低下を判定するようにしてもよい。
また、CPU13は、ヒータ2に供給する電力量を、ヒータ2への上限電力量と目標電力量とのうちの小さいほうの電力量に決定し、決定された電力量に従ってヒータ出力I/F17へ指令信号を出力し、バッテリ10からヒータ2への通電のON時間とOFF時間の比を制御し、ヒータ2への電力量を調節する(ヒータ2への電力量をPWM制御により調節する)。また、CPU13は、バッテリ電圧の低下時には、ヒータ出力I/F17へOFF信号(ヒータ出力I/F20のトランジスタQ2をOFFにする指令信号)を出力し、ヒータ2をOFFする(ヒータ2への電力量を0にする)。これらのヒータ2への電力量を調節する機能は、本発明のヒータ制御手段に相当する。
また、CPU13は、スイッチ5,6の故障、バッテリ電圧の低下、ヒータ2への電力量に応じて、LED出力I/F21へ指令信号を出力し、LED4の点灯・消灯を制御する。
次に、本実施形態のシステムの作動を説明する。まず、全体の作動概要を説明すると、グリップヒータ制御装置7のメイン制御処理(CPU13のメイン制御処理)では、バッテリ電圧検出処理、スイッチ入力処理、ヒータ出力処理、インジケータ出力処理が順番に繰り返し行われる。これらの処理を実行するタイミングは、タイマ割込処理によって決定される。
バッテリ電圧検出処理では、CPU13は、電源電圧分圧部18から入力される分圧電圧Vsを用いて、バッテリ電圧を検出し、検出した電圧値が所定の電圧(例えばエンジンを始動する(スタータモータを駆動する)のに必要とする最低限の電圧よりも若干高い電圧)を超えているか否か等の判定を行い、バッテリ電圧が低下している状態(バッテリ電圧低下状態)を検出する。
スイッチ入力処理では、CPU13は、UPスイッチ入力I/F22及びDOWNスイッチ入力I/F23から入力されるON入力(スイッチ5,6が押圧操作されたことを示す低電位の信号)とOFF入力(スイッチ5,6が押圧操作されていないことを示す高電位の信号)とを各スイッチ5,6毎に監視する。そして、スイッチ5,6から所定期間以上ON入力が入力されているか否か、UPスイッチ5及びDOWNスイッチ6から同時にON入力が入力されているか否か等の判定を行い、スイッチ5,6が故障している状態(スイッチ故障状態)と、ヒータ2の温度を調節するためのスイッチ5,6の操作とを検出する。
ヒータ出力処理では、CPU13は、バッテリ電圧検出処理でバッテリ電圧低下状態が検出された場合、ヒータ出力I/F20に指令信号を出力し、ヒータ2をOFFする。また、スイッチ入力処理で検出されたスイッチ5,6の操作に基づいてヒータ2への目標電力量のレベルを設定し、設定された目標電力量のレベルをヒータ2への上限電力量のレベルと比較して、ヒータ出力レベル(ヒータ2に供給する実際の電力量)を決定する。上限電力量のレベルは、後述するACG入力割込処理で、ACG周期に基づいて設定される。さらに、決定したヒータ出力レベルに応じて、ヒータON_DUTYを設定する。ヒータON_DUTYは、ヒータ2への電力量のPWM制御における、バッテリ10からヒータ2への通電のON時間である。ヒータ2のPWM制御の実際の処理は、設定されたヒータON_DUTYを用いて、タイマ割込処理で行われる。
インジケータ出力処理では、CPU13は、バッテリ電圧検出処理でバッテリ電圧低下状態が検出された場合、電圧低下検出点灯パターン制御を行うことを設定する。電圧低下検出点灯パターン制御では、LED4を減光点灯するように制御する。実際の電圧低下検出点灯パターン制御は、タイマ割込処理で行われる。また、スイッチ入力処理でスイッチ故障状態が検出された場合、LED出力I/F21へ指令信号を出力し、スイッチ故障検出点灯パターン制御を行う。スイッチ故障検出点灯パターン制御では、LED4を所定の周期で点灯・消灯する(点滅する)ように制御する。このとき、LED4の消灯時間が点灯時間より比較的長くなるように点灯時間と消灯時間とを設定する。また、ヒータ出力処理で設定されたヒータ出力レベルに応じて、LED出力I/F21へ指令信号を出力し、LED4をヒータ出力レベルに応じた点滅周期で点滅させる。
タイマ割込処理は、例えば、100マイクロ秒毎に発生するもので、タイマ割込処理の実行時には、メイン制御処理が一時的に中断される。タイマ割込処理では、クロック発信部14からの入力に基づいて時間を計測する時間計測カウンタのカウント値を設定する。タイマ割込処理では、メイン制御処理で繰り返し実行される処理の実行タイミングの決定と、ヒータ2のPWM制御と、バッテリ電圧低下状態が検出された時にLED4を減光点灯する制御と、ACG周期の計測のためのカウント値の設定とが行われる。
ACG入力割込処理は、ACG信号入力I/F19から入力されるパルス信号の立ち下がりのタイミングで発生する(該パルス信号の立ち下がり毎に発生する)。つまり、ACG入力割込処理は、ピックアップ信号に同期して発生する。なお、ACG信号入力I/F19が接続されているCPU13のポートは、タイマ割込処理よりも優先順位が高い割込ポートであり、ACG割込処理の実行時には、メイン制御処理及びタイマ割込処理のいずれもが一時的に中断される。
ACG入力割込処理では、タイマ割込処理で設定されたカウント値を割込処理が発生する毎に読み込んでACG周期を算出し、算出したACG周期と、あらかじめ定めた所定の閾値とに基づいて、ACG制限レベルと、ヒータ2への上限電力量のレベルを決定する。ACG制限レベルは、発電機9(又はエンジン)の回転数の大きさを段階的に示すものであり、本実施形態においては、レベル0〜レベル2の3段階に設定される。ACG制限レベルは、回転数が低いほど、小さくなる(ACG制限レベルが0のときは、上限電力量のレベルはレベル5に設定され、上限電力量によるヒータ2への電力量の制限は解除されている。ACG制限レベルが1のときは、上限電力量のレベルはレベル2に設定され、ACG制限レベルが2のときは、上限電力量のレベルはレベル1に設定される)。
次に、本実施形態のシステムの詳細な作動を、図5〜図12に示したフローチャートに従って説明する。図5はメイン制御処理を示すフローチャート、図6は初期化処理を示すフローチャート、図7はバッテリ電圧検出処理を示すフローチャート、図8はスイッチ入力処理を示すフローチャート、図9はヒータ出力処理を示すフローチャート、図10はインジケータ出力処理を示すフローチャート、図11はタイマ割込処理を示すフローチャート、図12はACG入力割込処理を示すフローチャートである。
図5を参照して、グリップヒータ制御装置7の作動が開始されると(オートバイのメインスイッチがONにされて、コントローラ8にバッテリ10からバッテリ電圧が供給されると)、最初に、初期化処理が行われる(ステップS501)。初期化処理は、図6に示す如く実行される。まず、ステップS601で、時間計測カウンタのカウント値が初期化される(カウント値が0にされる)。時間計測カウンタには、メイン周期カウンタ、ヒータPWMカウンタ、LED周期カウンタ、ACG周期カウンタの4つがある。前記4つの時間計測カウンタは、タイマ割込処理で用いられる(タイマ割込処理については後述する)。
次に、バッテリ電圧のサンプリング値を時系列順に記憶保持する格納バッファ(バッテリ電圧サンプリング値格納バッファ)が初期化される(ステップS602)。次に、ACG周期のサンプリング値を時系列順に記憶保持する格納バッファ(ACG周期サンプリング値格納バッファ)が初期化される(ステップS603)。バッテリ電圧サンプリング値格納バッファ及びACG周期サンプリング値格納バッファには、それぞれ8個のデータが格納される。
次に、図5に戻り、ステップS502で、メイン制御周期経過フラグFmainが1であるか否かが確認される。メイン制御周期経過フラグFmainは、その初期値は0に設定されており、タイマ割込処理によって所定の制御周期(例えば10ミリ秒)が経過する毎に1に設定されるフラグである。メイン制御周期経過フラグFmainが1になるまで、ステップS502が繰り返される。メイン制御周期経過フラグFmainが1になった場合、ステップS503に進み、外部リセット回路15に対してクリア信号が出力される(外部リセット回路のクリア)。次に、ステップS504に進み、バッテリ電圧検出処理が行われる。
バッテリ電圧検出処理は、図7に示す如く実行される。まず、電源電圧分圧部18から分圧電圧Vsが入力され、CPU13内に一体的に組み込まれているA/D変換回路に対しA/D変換を行うための指令が送られる(ステップS701)。これにより分圧電圧VsがA/D変換される。次に、変換された今回の(現在の制御周期の)Vsの値が現在のバッテリ電圧値を示すものとして読み込まれる(ステップS702)。なお、Vsに所定の比例係数を乗算して実際のバッテリ電圧値を算出してもよい。次に、バッテリ電圧サンプリング値格納バッファ内の最も古いデータが破棄され(ステップS703)、今回のバッテリ電圧値が該バッファに格納される(ステップS704)。次に、格納されたデータから移動平均値Vaveを算出する(ステップS705)。
次に、ステップS706に進み、移動平均値Vaveを、バッテリ電圧が正常である(バッテリ電圧低下状態が検出されていない)と判定する閾値であるバッテリ電圧正常判定値Vth1と比較し、VaveがVth1以上の場合は、バッテリ電圧が正常であると判定し、電圧低下検出フラグFbatを0に設定し(ステップS707)、図5のステップS504に戻る。電圧低下検出フラグFbatは、バッテリ電圧が低下しているか否かを示すためのフラグであり、バッテリ電圧低下状態が検出された場合は1に設定され、バッテリ電圧が正常である場合は0に設定される。ステップS706でVaveがVth1未満の場合は、ステップS708に進み、Vaveを、バッテリ電圧が低下していると判定する閾値であるバッテリ電圧低下判定値Vth2と比較する。バッテリ電圧低下判定値は、Vth1より低い値であり、エンジンを始動する(スタータモータを駆動する)のに必要とする最低限の電圧よりも若干高い電圧に設定されている。VaveがVth2以下の場合には、バッテリ電圧が低下していると判定し、電圧低下検出フラグを1に設定し(ステップS709)、図5のステップS504に戻る。VaveがVth2より大きい場合には、電圧低下検出フラグFbatは更新せず、図5のステップS504に戻る。Vth1は、例えば、12.5Vとし、Vth2は、12.0Vとする。このようにVth1とVth2とを異なる値に設定して、ステップS706〜S709の処理を行うことで、バッテリ電圧の変化に対するバッテリ電圧の判定結果(Fbatの値)の変化にヒステリシス特性を持たせている。したがって、バッテリ電圧の変動による影響で、閾値付近でバッテリ電圧の正常状態と低下状態との判定が頻繁に切り替わる事態を防止することができる。なお、Vth1、Vth2は、回路の電圧降下や他の機器の駆動の負荷によるノイズなどの影響を考慮して決定される。
図5に戻り、次に、スイッチ入力処理を行う(ステップS505)。スイッチ入力処理は、図8に示す如く実行される。まず、UPスイッチ入力I/F22から入力される信号(UPスイッチ入力)を読み込み(ステップS801)、読み込んだUPスイッチ入力をUPスイッチ用サンプリングバッファに格納する(ステップS802)。UPスイッチ用サンプリングバッファは、UPスイッチ入力を時系列順に記憶保持するバッファである。次に、格納された最新4回のUPスイッチ入力がON入力であるか否かを判断し(ステップS803)、YESの場合、UPスイッチONフラグFup_newを1にして(ステップS804)、ステップS807に進む。UPスイッチONフラグFup_newは、UPスイッチ5がON状態(UPスイッチ入力I/F22からON入力が継続して入力されている状態)にあるかOFF状態(UPスイッチ入力I/F22からOFF入力が継続して入力されている状態)にあるかを示すフラグで、ON状態にあるときは1に設定され、OFF状態にあるときは0に設定される。ステップS803の判断結果がNOの場合、格納された最新4回の入力がOFF入力であるか否かを判断し(ステップS805)、YESの場合、UPスイッチONフラグFup_newを0にして(ステップS806)、ステップS807に進む。ステップS805の判断結果がNOの場合、UPスイッチONフラグFup_newは変更せず、ステップS807に進む。これにより、UPスイッチ入力I/F22から前記制御周期の4回分の期間、連続してON入力が入力されたときのみ、UPスイッチ5が押されている(UPスイッチ5がON状態にある)と判断される。また、UPスイッチ入力I/F22から前記制御周期の4回分の期間、連続してOFF入力が入力されたときのみ、UPスイッチ5が押されていない(UPスイッチ5がOFF状態にある)と判断される。
ステップS807で、UPスイッチ5と同様、DOWNスイッチ入力I/F23から入力される信号(DOWNスイッチ入力)を読み込み、読み込んだDOWNスイッチ入力をDOWNスイッチ用サンプリングバッファに格納する(ステップS808)。DOWNスイッチ用サンプリングバッファは、DOWNスイッチ入力を時系列順に記憶保持するバッファである。次に、格納された最新4回のDOWNスイッチ入力がON入力であるか否かを判断し(ステップS809)、YESの場合、DOWNスイッチONフラグFdown_newを1にして(ステップS810)、ステップS813に進む。DOWNスイッチONフラグFdown_newは、DOWNスイッチ6がON状態(DOWNスイッチ入力I/F23からON入力が継続して入力されている状態)にあるかOFF状態(DOWNスイッチ入力I/F23からOFF入力が継続して入力されている状態)にあるかを示すフラグで、ON状態にあるときは1に設定され、OFF状態にあるときは0に設定される。ステップS809の判定結果がNOの場合、格納された最新4回の入力がOFF入力であるか調べ(ステップS811)、YESの場合、DOWNスイッチONフラグFdown_newを0にして(ステップS812)、ステップS813に進む。ステップS811の判定結果がNOの場合、DOWNスイッチONフラグFdown_newは変更せず、ステップS813に進む。これにより、DOWNスイッチ入力I/F23から前記制御周期の4回分の期間、連続してON入力が入力されたときのみ、DOWNスイッチ6が押されている(DOWNスイッチ6がON状態にある)と判断される。また、DOWNスイッチ入力I/F23から前記制御周期の4回分の期間、連続してOFF入力が入力されたときのみ、DOWNスイッチ6が押されていない(DOWNスイッチ6がOFF状態にある)と判断される。
次に、UPスイッチ5が故障しているか否かを判定する処理を行う。まず、UPスイッチONフラグFup_newが1であるか確認する(ステップS813)。UPスイッチONフラグFup_newが0の場合、UP側ON状態継続時間カウンタを初期化し(ステップS817)、UPスイッチ故障検出フラグFup_failに0を設定し(ステップS818)、ステップS819に進む。UP側ON状態継続時間カウンタは、UPスイッチ5のON状態が継続している時間を計測するためのカウンタである。また、UPスイッチ故障検出フラグFup_failは、UPスイッチ5が故障していることを示すためのフラグで、UPスイッチ5が故障していると判定された場合には1が設定され、UPスイッチ5が故障していないと判定された場合は0が設定される。UPスイッチONフラグFup_newが1の場合、ON状態が継続している時間が所定時間以上であるか判断する(ステップS814)。所定時間は、例えば10秒とする。ステップS814の判断結果がYESの場合、UPスイッチ5が故障していると判定し、Fup_failに1を設定する(ステップS815)。ステップS814の判断結果がNOの場合、UP側ON状態継続時間カウンタのカウント値を1だけ増やす(ステップS816)。これにより、UPスイッチ5に係る回路がショートしていたり、運転者によって意図せずにUPスイッチ5が押さえつけられていたりしたときに、UPスイッチ5の異常を検出することができ、UPスイッチ5が押圧操作されたと誤判断されることを防ぐことができる。
次に、UPスイッチ5が押圧操作されたか否か(OFF状態からON状態への切り替わりであるか否か)を判定する処理を行う。まず、ステップS819で、UPスイッチ操作検出フラグFup_swを0にする。UPスイッチ操作検出フラグFup_swは、UPスイッチ5が操作されたと判定された場合には1が設定され、UPスイッチ5が操作されていないと判定された場合は0が設定される。次に、ステップS820で、UPスイッチ故障検出フラグFup_failが0であるか確認する。UPスイッチ5の故障が検出されている場合(Fup_fail=1)は、ステップS824に進み、UPスイッチ5の故障が検出されていない場合(Fup_fail=0)は、ステップS821に進み、DOWNスイッチONフラグFdown_newを確認する。DOWNスイッチ6が押されている場合(Fdown_new=1)は、ステップS824に進む。これにより、UPスイッチ5とDOWNスイッチ6とが同時に押されている場合には、スイッチ5,6の操作が無効となる。
ステップS821で、DOWNスイッチ6が押されていない場合(Fdown_new=0)は、ステップS822に進み、今回の制御周期でUPスイッチ5が押されていて、かつ、UPスイッチ前回状態フラグFup_buf=0であることを確認する。UPスイッチ前回状態フラグFup_bufは、前回の制御周期のスイッチ入力処理における、UPスイッチONフラグFup_newの値を記憶保持するフラグである。ステップS822でYESの場合は、UPスイッチ5が押圧操作されたと判定し、UPスイッチ操作検出フラグFup_swに1を設定する(ステップS823)。このUPスイッチ操作検出フラグFup_swは、UPスイッチ5が正常であると判断されている状態(Fup_fail=0の状態)で、UPスイッチ5が押圧操作されていない状態から押圧操作されたと判断したとき(Fup_new=0の状態からFup_new=1の状態に切り替わったとき)のみ1に設定されるフラグである。次に、ステップS824に進み、UPスイッチ前回状態フラグFup_bufに現在のUPスイッチONフラグFup_newの値を設定する。
次に、ステップS825〜ステップS830において、UPスイッチ5と同様に、DOWNスイッチ6が故障しているか否かを判定する処理を行う。まず、DOWNスイッチONフラグFdown_newが1であるか否かを判断する(ステップS825)。DOWNスイッチONフラグFdown_newが0の場合、DOWN側ON状態継続時間カウンタを初期化し(ステップS829)、DOWNスイッチ故障検出フラグFdown_failに0を設定し(ステップS830)、ステップS831に進む。DOWN側ON状態継続時間カウンタは、DOWNスイッチ6のON状態が継続している時間を計測するためのカウンタである。また、DOWNスイッチ故障検出フラグFdown_failは、DOWNスイッチ6が故障していることを示すためのフラグで、DOWNスイッチ6が故障していると判定された場合には1が設定され、DOWNスイッチ6が故障していないと判定された場合は0が設定される。DOWNスイッチONフラグFdown_newが1の場合、ON状態の継続時間が所定時間以上であるか判断する(ステップS826)。所定時間は、例えば10秒とする。ステップS827の判断結果がYESの場合、DOWNスイッチ6が故障していると判定し、Fdown_failに1を設定する(ステップS827)。ステップS826の判断結果がNOの場合、DOWN側ON状態継続時間カウンタのカウンタ値を1だけ増やす(ステップS828)。これにより、DOWNスイッチ6に係る回路がショートしていたり、運転者によって意図せずにDOWNスイッチ6が押さえつけられていたりしたときに、DOWNスイッチ6の異常を検出することができ、DOWNスイッチ6が押圧操作されたと誤判断されることを防ぐことができる。
次に、DOWNスイッチ6が押圧操作されたか否かを判断する処理を行う。まず、ステップS831で、DOWNスイッチ操作検出フラグFdown_swを0にする。DOWNスイッチ操作検出フラグFdown_swは、DOWNスイッチ6が操作されたと判定された場合には1が設定され、DOWNスイッチ6が操作されていないと判定された場合は0が設定される。次に、ステップS832で、DOWNスイッチ故障検出フラグFdown_failが0であるか確認する。DOWNスイッチ6の故障が検出されている場合(Fdown_fail=1)は、ステップS836に進み、DOWNスイッチ6の故障が検出されていない場合(Fdown_fail=0)は、ステップS833に進み、UPスイッチONフラグFup_newを確認する。UPスイッチ5が押されている場合(Fup_new=1)は、ステップS836に進む。これにより、UPスイッチ5とDOWNスイッチ6とが同時に押されている場合には、スイッチ5,6の操作が無効となる。
ステップS833で、UPスイッチ5が押されていない場合(Fup_new=0)は、ステップS834に進み、DOWNスイッチ6が押されていて、かつ、DOWNスイッチ前回状態フラグFdown_buf=0であることを確認する。DOWNスイッチ前回状態フラグFdown_bufは、前回の制御周期のスイッチ入力処理における、DOWNスイッチONフラグFdown_newの値を記憶保持するフラグである。ステップS834でYESの場合は、DOWNスイッチ6が押圧操作されたと判定し、DOWNスイッチ操作検出フラグFdown_swに1を設定する(ステップS835)。このDOWNスイッチ操作検出フラグFdown_swは、DOWNスイッチ6が正常であると判断されている状態(Fdown_fail=0の状態)で、DOWNスイッチ6が押圧操作されていない状態から押圧操作されたと判断したとき(Fdown_new=0の状態からFdown_new=1の状態に切り替わったとき)のみ1に設定されるフラグである。次いで、ステップS836に進み、DOWNスイッチ前回状態フラグFdown_bufに現在のDOWNスイッチONフラグFdown_newの値を設定する。
図5に戻り、次に、ヒータ出力処理を行う(ステップS506)。ヒータ出力処理は、図9に示す如く実行される。まず、ステップS901で、バッテリ電圧検出処理において設定された電圧低下検出フラグFbatを確認する。バッテリ電圧低下状態が検出されている場合(Fbat=1)、ステップS916に進み、ヒータ出力I/F20に指令信号を出力し、ヒータ2をOFFして、図5のステップS506に戻る。これにより、バッテリ電圧が低下している場合は、ヒータ2を強制的にOFFし、バッテリ電圧が過剰に低下することを防ぐことができる。
バッテリ電圧が正常な状態である場合(Fbat=0)、スイッチ5,6の押圧操作に基づいて、ヒータ2への目標電力量のレベルLVswの設定を行う。まず、UPスイッチ5の押圧操作に対してLVswを設定する。スイッチ入力処理で設定されたUPスイッチ操作検出フラグFup_swを確認する(ステップS902)。UPスイッチ5の押圧操作が検出されていない場合(Fup_sw=0)には、ステップS906に進む。UPスイッチ5の押圧操作が検出されている場合(Fup_sw=1)には、ステップS903に進み、LVswを1だけ大きくする。次に、LVswが5より大きいか確認し(ステップS904)、LVswが5以下の場合には、ステップS906に進み、LVswが5より大きい場合には、LVswを5とし(ステップS905)、ステップS906に進む。
次に、UPスイッチ5の押圧操作と同様、DOWNスイッチ6の押圧操作に対してLVswを設定する。まず、スイッチ入力処理で設定されたDOWNスイッチ操作検出フラグFdown_swを確認する(ステップS906)。DOWNスイッチ6の押圧操作が検出されていない場合(Fdown_sw=0)には、ステップS910に進む。DOWNスイッチ6の押圧操作が検出されている場合(Fdown_sw=1)には、ステップS907に進み、LVswを1だけ小さくする。次に、LVswが0より小さいか確認し(ステップS137)、LVswが0以上の場合には、ステップS910に進み、LVswが0より小さい場合には、LVswを0とし(ステップS909)、ステップS910に進む。以上のステップS909までの処理により、スイッチ5,6の押圧操作に応じてLVswが0から5の範囲で段階的に設定される。
次に、スイッチ5,6の押圧操作に基づいて設定された目標電力量のレベルLVswと、ACG周期に基づいて設定された上限電力量のレベルLVacgとを比較して、小さい方のレベルをヒータ出力レベルLVとして設定する。まず、ステップS910で、ACG入力割込処理で設定されたACG制限レベルACGlevelを確認する(ACG入力割込処理については後述する)。ACGlevelが0である場合(発電機9の回転数が十分に高い場合)は、ステップS911に進み、ヒータ出力レベルLVにLVswを設定する。
ACGlevelが0でない場合(発電機9の回転数が低い場合)には、ステップS912に進み、LVacgとLVswとを比較する。LVacgがLVswより小さい場合には、ヒータ出力レベルLVにLVacgを設定し(ステップS913)、LVacgがLVsw以上の場合には、ヒータ出力レベルLVにLVswを設定する(ステップS914)。これにより、LVacg(上限電力量)がLVsw(目標電力量)以上のときには、ヒータ出力レベルLV、すなわちヒータ2に実際に供給する電力量は目標電力量に制御されるので、ヒータ2を運転者の要望に応じた温度にすることができる。また、LVacg(上限電力量)がLVsw(目標電力量)より小さいときには、ヒータ出力レベルLV(ヒータ2への実際の電力量)は上限電力量に制限されるので、バッテリ10の電圧低下を抑制しつつ、ヒータ2によるグリップ1の加温を行うことができる。
次に、ステップS915に進み、設定したヒータ出力レベルLVに応じて、ヒータ2のPWM制御における前記ヒータON_DUTYを設定する。ヒータON_DUTYは、LVが0であるとき0で、LVが高くなるほど大きな値に設定される。この処理で設定されたヒータON_DUTYに基づいて、タイマ割込処理で、ヒータ2のPWM制御が行われる(タイマ割込処理については後述する)。
次に、図5に戻り、インジケータ出力処理に進む(ステップS507)。インジケータ出力処理は、図10に示す如く実行される。まず、ステップS1001で、バッテリ電圧検出処理で設定された電圧低下検出フラグFbatを確認する。バッテリ電圧低下状態である場合(Fbat=1)は、ステップS1020に進み、LED減光点灯フラグFledに1を設定し、前記電圧低下検出点灯パターン制御を行い、図5のステップS507に戻る。LED減光点灯フラグFledは、電圧低下検出点灯パターン制御を行うか否かを設定するためのフラグで、バッテリ電圧低下状態である場合には1が設定され、バッテリ電圧低下状態でない場合は0が設定される。実際の電圧低下検出点灯パターン制御は、タイマ割込処理で行われる(タイマ割込処理については後述する)。
バッテリ電圧が正常である場合(Fbat=0)には、ステップS1002に進み、LED減光点灯フラグFledに0を設定する。次に、スイッチ故障状態を確認する。まず、スイッチ入力処理で設定されたUPスイッチ故障検出フラグFup_failを確認する(ステップS1003)。UPスイッチ5の故障が検出されている場合(Fup_fail=1)、ステップS1021に進み、UPスイッチ5の故障が検出されていない場合(Fup_fail=0)、ステップS1004に進んで、DOWNスイッチ故障検出フラグFdown_failを確認する。DOWNスイッチ6の故障が検出されている場合(Fdown_fail=1)、ステップS1021に進む。
ステップS1021では、前記スイッチ故障検出点灯パターン制御を行い、図5のステップS507に戻る。このパターン制御では、例えば、LED4が0.1秒間の点灯を5秒周期で行うように制御する。これにより、他の通電状態と異なる長い周期の表示になり、スイッチの故障を運転者に明確に認識させることができる。
ステップS1004で、スイッチ6の故障が検出されていない場合、ステップS1005に進み、スイッチ入力処理で設定されたUPスイッチ操作検出フラグFup_swとDOWNスイッチ操作検出フラグFdown_swとを確認する。両スイッチ5,6の押圧操作が検出されていない場合(Fup_sw=0かつFdown_sw=0)、ステップS1009に進む。スイッチ5,6の押圧操作が検出されている場合(Fup_sw=1またはFdown_sw=1)、ステップS1006に進み、LVswが0より大きいか否かを判定する。LVswが0より大きい場合、レベル表示時間カウンタを初期化し(ステップS1007)、レベル変更表示フラグFlevelを1に設定し(ステップS1008)、ステップS1009に進む。レベル表示時間カウンタは、ヒータ出力レベルLVに応じたレベル表示点灯パターン制御を継続する時間を計測するためのカウンタである。また、レベル変更表示フラグFlevelは、レベル表示点灯パターン制御を行うか否かを設定するためのフラグであり、その初期値は0に設定されており、ヒータ出力レベルLVが変更されたときに1が設定され、1が設定されてから所定の表示時間が経過すると0が設定される。所定の表示時間は、例えば10秒間とする。ステップS1006で、LVswが0以下の場合、そのままステップS1009に進む。
ステップS1009では、レベル変更表示フラグFlevelが1であるか否かを確認し、1である場合は、レベル表示時間カウンタのカウント値を1だけ増やす(ステップS1010)。次に、レベル表示時間カウンタのカウント値を所定の表示時間と比較する(ステップS1011)。ステップS1011で、レベル表示時間カウンタが所定の表示時間より小さい場合には、ステップS1012に進み、レベル表示点灯パターン制御を行い、図5のステップS507に戻る。ステップS1011で、レベル表示時間カウンタが所定の表示時間以上の場合は、レベル変更表示フラグFlevelに0を設定し(ステップS1013)、図5のステップS507に戻る。
レベル表示点灯パターン制御では、LED4を、ヒータ出力レベルLVに応じて設定される所定周期で点滅させる。この点滅は、スイッチ5,6が押圧操作された後、押圧操作が検知された直後から所定の表示時間(例えば10秒間)継続される。これにより、LED4の点滅で、多段階のヒータ2の通電状態を運転者に容易に認識させることができる。このとき、LED4を点滅させる所定周期は、ヒータ出力レベルLVが高くなるほど周期が短くなるように設定される。例えば、LVがレベル1の場合、2秒の周期でLED4を点滅させ、レベル5の場合、0.25秒の周期でLED4を点滅させる。これにより、ヒータ2への電力量の変化の度合に応じて、ヒータ2への電力量が大きくなるほど、LED4の点滅の周波数が高く(周期が短く)なるので、運転者にとってヒータ2への電力量の大きさが感覚的に把握しやすくなり、運転者にヒータ2の通電状態をより容易に認識させることができる。
ステップS1009で、レベル変更表示フラグFlevelが0である場合、ステップS1014に進み、ACGlevelが0であるか否かを確認する。ACGlevelが0である場合(発電機9の回転数が十分に高い場合)は、ステップS1015に進む。ステップS1014で、ACGlevelが0でない場合(発電機9の回転数が低い場合)、ステップS1018に進み、LVswとLVとを比較する。LVswがLV以下の場合、ヒータ2への電力量は、目標電力量に制御されている。このときは、ステップS1015に進む。
ステップS1015では、ヒータ出力レベルLVが0であるか否かを確認する。LVが0である場合は、ステップS1016に進み、LED4を消灯し、図5のステップS507に戻る。これにより、ヒータ出力レベルLVがレベル0(ヒータ2がOFF状態)の場合には、LED4が消灯するので、運転者の操作によってヒータ2が停止されていることを、運転者に明確に認識させることができる。
ステップS1015でヒータ出力レベルLVが0でない場合は、ステップS1017に進み、LED4を点灯し、図5のステップS507に戻る。これにより、所定の表示時間(例えば10秒間)経過後に、バッテリ電圧低下状態、スイッチ故障状態、ヒータ2のOFF状態のいずれでもなく、ヒータ2が運転者の設定した目標電力量で制御されている場合は、LED4が継続的に点灯する。よって、前記レベル表示点灯パターン制御が行われていないときに、ヒータ2が運転者の設定した目標電力量で定常的に通電されていることを、運転者に明確に認識させることができる。なお、所定の表示時間経過後に、バッテリ電圧低下状態である場合には、前記電圧低下検出点灯パターン制御によって、LED4が減光点灯され、スイッチ故障状態である場合には、前記スイッチ故障検出点灯パターン制御によって、比較的ゆっくりした周期で間欠的にLED4が点灯される。
次に、ステップS1018で、LVswがLVより大きい場合、ヒータ2への電力量は、上限電力量に制御されている。このとき、ステップS1019に進み、ACGレベル制限作動中の点灯パターン制御を行う。ACGレベル制限作動中(LVをLVacg(<LVsw)に制御しているとき)には、ヒータ出力レベルLVに応じた点滅周期で、LED4を継続的に点滅させる。これにより、ACGレベル制限作動中である(ヒータ2への実際の電力量が上限電力量に制限されている)ことを、運転者に明確に認識させることができる。
さらに、図5のステップS507に戻り、メイン制御周期経過フラグFmainを0にリセットして(ステップS508)、ステップS502に戻り、処理を繰り返す。これにより、ステップS503〜S508の処理が、所定の制御周期で繰り返される。
次に、タイマ割込処理について説明する。図11を参照して、まず、メイン周期カウンタに関する処理を行う。メイン周期カウンタは、メイン制御処理のステップS503〜S508の処理を実行するタイミングを決定するために時間を計測するカウンタである。ステップS1101で、メイン周期カウンタのカウント値を1だけ増やす。次に、メイン周期カウンタのカウント値がメイン周期設定値であるか否かを確認する(ステップS1102)。メイン周期設定値は、メイン制御処理のステップS503〜S508の処理を行う前記制御周期である。ステップS1102でYESの場合、メイン周期カウンタを初期化し(ステップS1103)、メイン制御周期経過フラグFmainに1を設定して(ステップS1104)、ステップS1105に進む。ステップS1102でNOの場合、そのままステップS1105に進む。
次に、ヒータPWMカウンタに関する処理を行う。これは、ヒータ2のPWM制御を行う処理である。ヒータ2のPWM制御では、PWM制御周期の間の、ヒータ2のON時間とOFF時間との比を変更することで、ヒータ2への電力量を調節する。
まず、ステップS1105で、ヒータPWMカウンタのカウント値を1だけ増やす。ヒータPWMカウンタは、ヒータ2のPWM制御で、ヒータ2をONする時間とOFFする時間とを計測するためのカウンタである。次に、ヒータPWMカウンタのカウント値がヒータON_DUTY以下であるか否かを判断する(ステップS1106)。この判断結果がYESの場合、ヒータ2をONし(ステップS1107)、NOの場合、ヒータ2をOFFする(ステップS1108)。次に、ステップS1109に進み、ヒータPWMカウンタがPWM周期設定値であるか否かを確認する。PWM周期設定値は、ヒータ2のPWM制御を行う周期としてあらかじめ定められた値である。ステップS1109でYESの場合、ヒータPWMカウンタを初期化し(ステップS1110)、ステップS1111に進む。ステップS1109でNOの場合、そのままステップS1111に進む。
次に、LED周期カウンタに関する処理を行う。これは、LED4の減光点灯表示を行う処理である。LED4の減光点灯は、LED4の通電のON時間とOFF時間との比を制御して行う(LED4への電力量をPWM制御により調節する)。まず、ステップS1111で、LED減光点灯フラグFledが1であるか否か確認する。減光点灯状態でない場合(Fled=0)、ステップS1118に進む。
減光点灯状態である場合(Fled=1)、LED周期カウンタのカウント値を1だけ増やす(ステップS1112)。LED周期カウンタは、LED4のPWM制御で、LED4をONする時間とOFFする時間とを計測するためのカウンタである。次に、LED周期カウンタのカウント値がLED_ON_DUTY(PWM制御の1周期内でのLED4の点灯時間)以下であるか否かを判断する(ステップS1113)。LED_ON_DUTYはあらかじめ定められている。ステップS1113の判断結果がYESの場合、LED出力I/F21にON信号(高電位信号)を出力してLED4を点灯し(ステップS1114)、NOの場合、LED出力I/F21にOFF信号(低電位信号)を出力してLED4を消灯する(ステップS1115)。次に、ステップS1116に進み、LED周期カウンタがLED周期設定値であるか否かを確認する。LED周期設定値は、LED4のPWM制御を行う周期としてあらかじめ定められた値である。ステップS1116でYESの場合、LED周期カウンタを初期化し(ステップS1117)、ステップS1118に進む。ステップS1116でNOの場合、そのままステップS1118に進む。
次に、ACG周期カウンタに関する処理を行う。ACG周期カウンタは、ACG信号入力I/F19から入力されるパルス信号から、発電機9の回転数を示すものであるACG周期を計測するための時間を計測するカウンタである。まず、ステップS1118で、ACG周期カウンタのカウント値を1だけ増やす。次に、ACG周期カウンタのカウント値がACG周期最大値より大きいか否かを判断する(ステップS1119)。ACG周期最大値は、例えばエンジンが停止中であるような状態を検出するために、あらかじめ定められた値である。その値は、エンジンの運転中に取り得るACG周期よりも十分に大きい値である。ステップS1119で、ACG周期カウンタのカウント値がACG周期最大値以下の場合は、タイマ割込処理を終了する。
ステップS1119で、ACG周期カウンタのカウント値がACG周期最大値より大きい場合(エンジンの停止中の場合)、ACG制限レベルACGlevelに2を設定し(ステップS1120)、ヒータ2への上限電力量のレベルLVacgに1を設定し(ステップS1121)、タイマ割込処理を終了する。これにより、ACG周期がACG周期最大値より大きい場合(エンジンの停止中の場合)は、上限電力量のレベルはレベル1(最低レベル)に設定されるので、発電機9の発電がされない状態で、バッテリ10からヒータ2に供給する電力量を極力小さくして、バッテリ電圧が過剰に低下することを防止することができる。
次に、ACG入力割込処理について説明する。図12を参照して、まず、タイマ割込処理で設定されているACG周期カウンタのカウント値を読み込む(ステップS1201)。次に、ACG周期サンプリング値格納バッファの中の最も古いデータ破棄を破棄し(ステップS1202)、読み込んだ該カウント値をACG周期サンプリング値格納バッファに格納する(ステップS1203)。次に、ACG周期カウンタを初期化する(ステップS1204)。次に、ACG周期サンプリング値格納バッファに格納された8個のデータの中から、最大値を検出し(ステップS1205)、その最大値を除く7個のデータを平均してACG周期ACGaveを算出する(ステップS1206)。これにより、ピックアップ信号に、部分的に信号が出力されない期間が含まれていても、適切にACG周期を算出することができる。
次に、ACGaveと閾値ACGth1とを比較する(ステップS1207)。ACGth1は、ACG周期が短くなっていくとき(発電機9の回転数が増加しているとき)に、ACG制限レベルがレベル0であるかレベル1であるかを判定するための閾値である。ステップS1207で、ACGaveがACGth1以下の場合には、ACGlevelに0を設定し(ステップS1208)、LVacgに5を設定し(ステップS1209)、ACG入力割込処理を終了する。
例えば、ACGth1を0.03秒(エンジンの回転数が2000rpm)として、ACG周期が0.03秒以下(エンジンの回転数が2000rpm以上)のときには、ヒータへの上限電力量はレベル5(最大レベル)に設定され、実質的にヒータ2への電力量の制限が解除される。したがって、必ずヒータ2への電力量は目標電力量に制御されるので、回転数が大きく発電機9の発電量がヒータ2の必要とする電力量に対して十分大きいときには、ヒータ2への電力量を制限することなく、ヒータ2が運転者の要望に応じた温度になるように、ヒータ2への電力量を制御することができる。なお、ACG周期が0.03秒以下のときには、ヒータ2への上限電力量を設定せずに、必ずヒータ2への電力量を目標電力量にするものとしてもよい。
ステップS1207で、ACGaveがACGth1より大きい場合は、S1210に進み、ACGaveと閾値ACGth2とを比較する。ACGth2は、ACGth1より大きい値であり、ACG周期が短くなっていくときに、ACG制限レベルがレベル1であるかレベル2であるかを判定するための閾値である。ACGaveがACGth2以下の場合には、ステップS1211に進み、ACGlevel=0でかつACGaveが閾値ACGhys1以下であるか否かを判断する。ACGhys1は、ACGth1より大きく、ACGth2より小さい値であり、ACG周期が長くなっていくとき(発電機9の回転数が減少しているとき)に、ACG制限レベルがレベル0であるかレベル1であるかを判定するための閾値である。ACGhys1は、例えば、ACGth1より10%程度大きい値とする。ステップS1211の判断結果がYESの場合には、ACGlevelに0を設定し(ステップS1212)、LVacgに5を設定して(ステップS1213)、ACG入力割込処理を終了する。ステップS1211の判断結果がNOの場合には、ACGlevelに1を設定し(ステップS1214)、LVacgに2を設定して(ステップS1215)、ACG入力割込処理を終了する。
ステップS1210で、ACGaveがACGth2より大きい場合には、ステップS1216に進み、ステップS1211〜S1215と同様に、ACG制限レベルを設定する。まず、ステップS1216で、ACGlevel=1でかつACGaveが閾値ACGhys2以下であるか否かを判断する。ACGhys2は、ACGth2より大きい値であり、ACG周期が長くなっていくときに、ACG制限レベルがレベル1であるかレベル2であるかを判定するための閾値である。ACGhys2は、例えば、ACGth2より10%程度大きい値とする。ステップS1216の判断結果がYESの場合には、ACGlevelに1を設定し(ステップS1217)、LVacgに2を設定して(ステップS1218)、ACG入力割込処理を終了する。ステップS1216の判断結果がNOの場合には、ACGlevelに2を設定し(ステップS1219)、LVacgに1を設定して(ステップS1220)、ACG入力割込処理を終了する。
上述の処理において、例えば、ACGth2を0.04秒(エンジンの回転数が1500rpm)、ACGhys1を0.033秒(エンジンの回転数が1800rpm)、ACGhys2を0.044秒(エンジンの回転数が1350rpm)とする。このとき、ACG周期が0.0375秒(エンジンの回転数が1600rpm)のときは、ヒータ2への上限電力量はレベル2に設定され、ACG周期が0.05秒(エンジンの回転数が1200rpm)のときは、ヒータ2への上限電力量のレベルはレベル1に設定される。この処理により、発電機9の発電量に見合った適切な上限電力量を設定することができ、発電機9の発電量に対して、ヒータ2に供給される電力量が過剰にならず、ひいては、バッテリの電力消費を抑えるようにヒータ2に供給される電力量を制御できる。すなわち、回転数が低く発電機9の発電量が少ない時には、ヒータ2への電力量を少なくするように制御することができる。これにより、バッテリ10の電圧低下を抑制しつつ、ヒータ2によるグリップの加温を可能とする機会を多くすることができる。
ACG入力割込処理におけるヒータ2への上限電力量の設定方法について、図13を用いてより詳細に説明する。図13は、エンジン又は発電機9の回転数を示すものであるACG周期と、ヒータ2への上限電力量との関係を示すグラフであり、横軸は時間を示し、縦軸はACG周期を示す。図13の実線のようにACG周期が変化する場合、まず、時刻t0ではACG制限レベルACGlevelは2に設定されている(ヒータ2への上限電力量はレベル1に設定されている)。ACG周期が短くなっていく期間t0〜t1では、ACGlevelは2に設定され続ける(ヒータ2への上限電力量はレベル1に設定され続ける)。ACG周期が短くなっていき、閾値ACGth2より低くなると、ACGlevelは1に設定される(ヒータ2への上限電力量はレベル2に設定される)。さらにACG周期が短くなっていき、時刻t2でACGth1以下になると、ACGlevelは0に設定され(ヒータ2への上限電力量はレベル5(最大レベル)に設定され)、実質的にヒータ2への電力量の制限が解除される。期間t2〜t3ではヒータ2への電力量の制限は解除され続け、その後、ACG周期が長くなっていき、時刻t3でACGhys1以上になると、ACGlevelは1に設定される(ヒータ2への上限電力量はレベル2に設定される)。さらにACG周期が長くなっていき、時刻t4でACGhys2以上になると、ACGlevelは2に設定される(ヒータ2への上限電力量はレベル1に設定される)。このようにヒータ2への上限電力量のレベルLVacgを決定することにより、エンジン回転数の変化に対する上限電力量の変化にヒステリシス特性を持たせることができ、回転数の変動により上限電力量の変更が頻繁に繰り返されて不安定な作動をする事を防ぐことができる。
なお、本実施形態においては、乗物はオートバイであるとしたが、スノーモービル、水上バイク等であるとしてもよい。
1…グリップ、2…ヒータ、5,6…スイッチ(ヒータ温度操作子)、7…グリップヒータ制御装置、9…発電機、10…バッテリ、13…CPU(ヒータ制御手段、回転数検出手段、上限電力量設定手段、目標電力量設定手段)、22,23…スイッチ入力I/F(操作信号出力手段)。