about MR2 回転数の制限と、回転数変換テーブル
99年12月14日 回転数の制限と、回転数変換テーブル
ロードスターB6のプログラムにおいて、燃料マップの拡大をするには、
ただマップを大きくするだけではなく、数ヶ所書き換えたり、
プログラムを追加する必要があるとのヒントを丸山さんからいただいた。
そこで、回転数を制限している部分と、回転数の変換テーブルが
あると予想して解析をはじめることにした。
解析といっても、先に逆アセンブルしたリストを読み進めていくだけなのだ。
ただ漫然と読んでいっても何の処理をしているかまったくわからないので
(CやBASICのプログラムのように処理の名前や変数名が残っているわけ
じゃないのだ)わかっている部分から逆にたどっていくことになる。
私の場合は、リセット(電源投入)で実行が始まる部分や、マップを
読む部分からたどっていくことにしている。
まず、回転数の制限である。マップを牽く関数を逆にたどっていくと
実際の回転数からマップを牽く変数を生成している関数を発見した。
ここで、7000rpmに制限している部分を見つけた。これは簡単だった。
回転数変換テーブルは難航した(^^;;。日産のようにマップの
横軸というか、たとえば回転数の格子を可変にするようなテーブルが
あると思ったのだが...。ちなみに日産のものを説明すると、
普通[1,2,3,4,5,6,7]というテーブルになっていると、1000回転では
1を2000回転では2を、3000回転では3をというようにリニアにテーブルと
牽いていくと考えやすい。
f(x) = [1,2,3,4,5,6,7]とすると。値 = f(回転数/1000)で求まることになる。
しかし、日産のものでは、回転数変換テーブルa(x)=[1000,2000,4000,6000,9000,,,,]
というようなテーブルを別に用意して、1000回転以下では1、1000-2000回転では
2、2000-4000回転では3、4000-6000回転では4,,,と読む。この結果をつかって
f(x)を牽くのである。
この方法を使うと、マップの一部を細かく書いたり粗く書いたりすることが可能になる。
具体的には回転数の低いところは細かく制御して、高回転では粗く制御するような
ことが行われている。これが日産方式の回転数変換テーブルである。
さて、話は戻る。結局いろいろ探したが日産形式の回転数変換テーブルはみつから
なかった。かわりにAE86のときにも見つけていた、クランクアングル(CA)に対応
する回転数のテーブルを発見した。
どうやら、AE86やB6のプログラムでは(他もそうかもしれないけど)、特定のクランク
アングル(たとえば60度)の間にCPUのカウントがいくつ進むかを数えていて、これから
回転数を生成しているようである。
#クランクアングル(CA)とはエンジンのクランクの回転角度である
#クランクの回転はクランクアングルセンサで知ることができる(そのままだけど...)。
わかりにくいと思うので、具体的に計算してみよう。
クランクアングル60度ごとに、CPUのカウンタがいくつ進むかを数えているとすると、
CPUは1MHzだから、1秒に1000x1000回である。
60度ごとだから、クランク1/6回転。
1000rpmを考えると、1秒に1000/60回転。1回転あたり60/1000秒。
60度は、10/1000 = 1/100 = 0.01秒である。
0.01秒でカウンタはいくつ進むかというと1000*1000*0.01で10,000回である。
また、10,000rpmを考えると、1回転あたり60/10,000秒。
60度は10/10,000 = 1/1,000秒である。
1/1,000秒でのカウントは、1000*1000/1,000 = 1000回である。
つまり、
b(x) = [10000,9000,8000,7000,6000,5000,4000,3000,2000,1000]
というテーブルを用意して
あるクランクアングル60度の経過カウントから、
回転数 = b(経過カウント/1000)
で求められることになる。は〜、つかれた。こんな説明でわかります?
まぁ大体こんなプログラムになっていました。
プログラムを読む限りは15,000rpmまでは回転数がちゃんと生成されそうでしたが、
実際どうなんだろう?
shmz@cds.ne.jp