★★★ 回転数信号の解析と取得方法 ★★★
動機)
RX-8の回転数信号の情報は、各社パーツでR-○mpが必要とか、色々書かれています。この際なんで速度信号同様に自作パーツのために解析しました。
解析方法)
解析の対象線は、
ECUユニットの左から2つめのコネクタのこの白色線から取得(とりあえずPI○OTではこれが回転数信号とあり)
です 。
解析には、オシロがあれば楽ですが、そんなもの素人は持っていないので(あれば速度信号もそうする)、以下3つで行いました。
使用したのは速度信号解析と同じツールです。
① 電圧計(電圧、電流しか測れない980円ハンディメーター)
② Excel(計算できれば電卓でも)
③ 以下回路図に示す自作検証回路
図1 回路図 図2 完成回路(裏は大変・・・)
【 回路図の補足 】
・ 設定用7セグのGNDをトランジスタで制御し、ダイナミック点灯を実施(2つの7セグを交互に点灯し残像現象で両方表示する)
・ 測定した回転数信号は5v以下と予想のしおてで、そのままRBポートに接続
→ 回転数信号の予測は、各社発売機器がそのままでは測れない = 各種IC等考えれば5v以下であろう・・・と勝手に予測
解析)
① パルス数の予想
回転数信号は通常レシプロはクランク1回転で1,2,4,8,16,32パルスが出ます。このパルス数は車、メーカーによって異なり、RX-8はわかりません。
とりあえず、電圧計で測定すると、パルスは1パルスで信号は3v程度であることはわかりました (後で色々検索すると3vとありました・・・)。
各回転数での周波数を計算した結果が以下表1の通り。
ちなみに高回転になれば周波数は高くなる→1回転1パルスとした場合の時間間隔は短くなります。
これを計算したのが表2。
表1 各回転数での周波数と信号数 表2 高速回転時の周波数と信号数
とりあえず、高速域でも回転数信号線から回転数を取得する方法としては以下の2通り(速度パルス同様です)。
1) パルス~パルス間の時間を測定し、そこから計算して回転数を取得
【長所】 プログラムが比較的簡単
【短所】 回転数毎にパルス~パルス間時間が異なり、一定周期で実行するようなプログラムに使うには困難
(例:2000rpmでは0.03secだが7500rpmでは0.008secと回転数により次の処理へ行けるまでの時間が大幅に異なる)
2) 基準時間当りのパルス数をカウントして、カウント数から計算して速度を取得
【長所】 回転数毎によるパルス取得の時間差が無いため、一定周期で実行するプログラムに適している
【短所】 回転数信号は、1000rpmでもパルス~パルス間が0.06secと非常に短いため、速度信号とは異なり特に問題無し
上記より、まず解析ということで、速度信号検出同様に、『 1) パルス~パルス間の時間を測定 』を採用し次に進めます。
② 解析プログラム内容とパルス数確定方法
回転数パルス~パルス間の時間を測定するに当たり、まずは『RX-8のクランク1回転で何パルスなの?』になりますので
これを解析します。方法としては自作回路にプログラムを書込み・・・
(1) 最初の回転数パルスを取得し、
(2) 表2の8900rpmと9000rpmの差である1回転当り75usecを検出するため、40usec毎に次のパルスがあるまで、回数をカウント(速度検出の使いまわし)
(3) (1)で受けたパルスの次のパルスがあればカウント終了
(4) 7セグに、カウントした結果の100の位と10の位を表示する
こうしてプログラムした回路をRX-8につなぎ、走りながら速度と7セグを見比べれば、何パルスかわかります。
計算では1パルスでは、表3のカウントになるはず。
表3 1パルスを40usecでカウントした場合の回数
こうした解析をした結果、
RX-8の回転数信号は、『 クランク1回転で1パルス 』
とわかりました。
③ 回転数表示テスト
上記の結果から、パルス数もわかったので、自作回路による回転数表示テストをしてみます。
プログラムとしては、先のプログラムに・・・
(1) 最初の回転数パルスを取得し、
(2) 9000rpm時の100rpm差を検出できる40usec毎に次のパルスがあるまで、回数をカウントする
(3) (1)で受けたパルスの次のパルスがあればカウント終了
(4) 7セグに、カウントした結果の100の位と10の位を表示する → 変更
基準数を(3)まででのカウントで割り、回転数を計算する
(5) 速度を7セグにダイナミック点灯する
なお、基準数からの回転数計算ですが、上記表3から、1000rpmでは40usec毎にカウントすると1500カウントなので
1500×10 = 15000 → 基準数
となり、この『15000』をカウントした回数を割れば、その時の回転数が計算できます。
このプログラムにより、RX-8メーターと自作回路は+100/-100rpmの誤差以内で表示できました。
ちなみに、回転数信号はノイズが多く、そのまま検出しても回転数がうまいこと表示できません。
よって、以下プログラムはノイズリダクション処理をしています。
①パルスをカウントする
②1回目として記憶する
③パルスカウント(2回目)
④1回目と比較して、大きいカウントを記憶する
⑤パルスカウント(3回目)
⑥④のカウントと比較し、大きいカウントを回転数カウントとして処理する
→ ノイズが入ると、実際の回転パルス~パルス間にカウントが終了してしまい、カウントは小さくなります。
よって、3回取得して、その最大値がノイズが無いもの・・・と判断しています。
このカウント比較は3,5,7回と変更できるようプログラムしてますが、3回でおおよそ問題無。
もちろんハードでの対策も可能ですが、私はソフトの方が得意なので・・・。
そのプログラムはこちら。なおこれを使用するにはマクロファイルが必要です(説明はこちら)。
④ 回転数信号解析まとめ
RX-8の回転数信号の解析結果をまとめると以下の通りである。
・ 回転数信号線はECU左から2つめのコネクタの『白線 』
・ 信号は0v/3vの繰返しパルス
・ クランク1回転につき1パルス
間違っていたらすいません・・・。とりあえず上の仕様を満足するPIC、自作回路、自作プログラムで問題無く動いてます。
【 おまけ 】
ちなみに今回の自作回路の仕様は以下の通り。
・ 分解能は50rpm
・ 回転数は100~12000rpmまで検出可能(12000rpm以上はカウントを40→15usec等にすれば20000rpmまで可能)
・ 回転数測定は、1000rpmで0.06秒毎と非常に高速で、他のプログラムへの活用可能なプログラム実行速度
活用例)
・ シフトポイントインジケータ