いろいろセッティングを変えたROMを試す場合、いちいちエンジン止めてROMを交換するのって面倒です。スイッチ一つで走行中でもROMを切り替えることができれば、効率良くセッティングの違いによる効果を比較することができると思います。
と云う訳で、ROMチェンジャー回路を考えてみましょう。
具体的な回路は、4個のROMをバス上に並べて、CE(Chip Enable)端子をマニュアルでコントロールすることでROMの切り替えを行います。だた、走行中の切り替えに対応するためにはメモリリードサイクルを考慮したタイミングで切り替える必要があり、そのタイミングを合わせる回路を組み込みます。
そんなことを考えて設計した回路図がこれ。
ROM-changer.pdf
本体基板はROMを差すICソケット×4にゲートIC×3だけなので、ECUの筐体内に収まると思います。切り替えSWとインジケーター部はハーネスで延長して、走行中に手の届く所に設置します。これをご覧になって、ROMの交換が容易なように、このチェンジャー基板をECUの筐体内ではなく外部へ引き出したらどうか、と思われた方もいるかと思いますが、下手な配線で引き延ばすと誤動作する可能性が出てきます。まあ、クロックは8MHz程度と高速ではないので、やってやれないことは無いと思いますが、作ってみてOKかNGかは、然るべき測定器を使用して波形を観測して判断する必要があります。動かしてみて誤動作しなければOKというわけにはいきません。マージンがどれだけあるか分からないからです。例えば、自分の家の近くでは正常に動いていたけれど、首都高を走っていたら芝公園あたりで急におかしくなった、とか、やたらでかいアンテナをたてたトラックに接近したらおかしくなった、なんてことが起こるかもしれません。(どちらも強電界下での電波障害のこと)
そんなわけで、ROM交換はちょっと面倒ですが、チェンジャー基板はECU本体に取りつけます。
...と思っていましたが、後で気が変わりました。(^^;)
SWによって4つのROMのうち1つのCE(Chip Enable)端子をアクティブにして、データを吐き出させるROMを選択します。ただし、CE信号を切り替えるタイミングが肝心でして、CPUがROMの内容を読み出している最中にデータが切り替わったりすると上手くありません。場合によってはマイコンが暴走します。このような事が起きないようにフリップフロップによる同期回路を入れました。アドレスラインのA0をフリップフロップのクロックに使って、SWの状態がアドレスの切り替わるタイミングでのみ反映されるようになっています。後はSWを中途半端なポジションで止められた場合の誤動作対策を入れてあります。
正しいROMが実装されているかどうかの検出は行いませんので、誤って空きソケットを選択してしまうと誤動作します。(バックアップ回路が働くハズなので、エンジンがいきなり止まることはないとは思います) 一応4つすべてのソケットにちゃんと焼かれたROMを実装しておいた方が無難でしょう。さらに、停止状態で切り替えてみてどのROMでも動作することを確認してから走行に入るようにします。さらに^2、周囲に車が走行している一般道路での使用は万一の場合危険ですので、安定動作が確認出来るまでは避けるべきです。使用する場合は自分の責任において行うように。
話は戻って、仮にROMの実装チェックをやろうとすると結構面倒です。ソケットにマイクロSWを仕込めばROMを物理的に検出することは容易ですが、中身のプログラムが正しいものかどうかが判別できませんのでチェック用のマイコンを追加したりと、大げさな回路になってしまいます。結局のところ使う人間が注意して実装するしかないというのが現実的なラインです。
必要な部品は、R、C、LED、IC、ICソケット、ユニバーサル基板、線材、スイッチ、ケースなど。ところで、28pinのROMを4個の配線をするとなると本数が多くてユニバーサル基板で配線するのはちょっと面倒です。パターン作るのも回路に修正が入るだろうからパス。何か良いものは無いだろうかと思っていたらありました、丁度27C256×4用の基板が。
写真下側の基板がそれ。
Sunhayato ICB-021という品番で、千石電商で買いました。これで配線の手間が大幅に省けると喜んだのも束の間、よ〜く見るとこの基板のレイアウトだとZIFソケット(写真左上)を4個並べられません。ZIFソケットは只のICソケットより幅が広いのです。この基板のIC間隔でも並べることのできるスリムなZIFソケットは3Mの製品に存在しますが、アキバでは現物を見つけることができませんでした。
仕方ありません、原理試作っちゅうことで最初の一発は普通のICソケットをマウントすることにします。
![[試作回路]](board-2s.jpg)
もう一枚のユニバーサル基板にゲート回路を載せて組み立てた回路。
かなり不細工(^^;)。
ニーズがたくさんあったらパターン起こしてちゃんとした基板を作ろう。
スイッチやLEDへの配線はまだありません。ケースへの収め方が決まってから配線します。
前に、誤動作の危険性があるからチェンジャーをECU本体から外に引きだすのはやめたほうが良い、と書きましたが、やっぱり外に引きだせたほうが絶対便利なので、検討してみます。CAR BOY誌にも引き出している写真が見うけられますので、結構大丈夫なのかもしれません。
NA8C Sr.1のECUを加工したついでにアドレスラインの信号を観測してみたところ、CPUクロックの8MHzの4分周、2MHzでメモリにアクセスしているようです。SCSIが1.5mとか考えると、このスピードならインピーダンスマッチング無視でも1mぐらいはイケそうな気もしてきましたので、とりあえず作ってみましょう。
![[ハーネス]](DIP-CNs.jpg)
ECUのROMソケットからはこのようなハーネスで引き出します。
できればフラットケーブルはシールド付きが良いのですが、見つからなかったので普通のにしました。ノイズが乗るようだったら後で銅箔テープ貼ろう。
青いDIP ICタイプの圧接コネクタは¥400弱で買いましたが、そのお店では圧接加工はやっていないようでしたので、自分で圧接加工(万力使った必殺技 (^^;)) をやりました。
圧接加工をしてくれるお店(普通そうだ)もありますが、コネクタが¥1000弱と高かったのでパス。
![[仮接続]](ROMchg1.jpg)
製作途中のROMチェンジャー基板をECUに接続した様子。
フラットケーブルの長さは1mとしました。この状態でECUにDC12Vを供給してバスの波形を観測してみることにします。まだ切り替えスイッチを配線していませんが、切り替わらないだけで1番のROMで動作します。
![[オシロ波形その1]](A0-ECU.jpg)
ECU上でのアドレスライン(A0)の波形。
普通に奇麗です。(当たり前)
下側はOutput Enableの波形。
![[オシロ波形その2]](A0-EXT.jpg)
これが遥か1m彼方のROMチェンジャー基板に辿り着く頃にはこのようになります。
波形がギザギザになっておりまして、これをリンギングと呼びます。インピーダンスのマッチングを全く取っていないので、反射が起きてこうなります。このままケーブルの長さをさらに延ばしていくとどんどんこのギザギザが大きくなって、しまいにはHi/Lowのしきい値をはみ出してしまい、正しい0/1が伝送されなくなってしまいます。
とは言っても、この写真の程度ならOKレベルだと思います。但し「ノイズが飛び込まなければ」という条件つきです。と、言うのも...
オシロのトリガーをA0の2.4Vでかけて、卓上の蛍光燈をON/OFFさせてノイズを発生させると、かなりの確率で同期が乱れる現象が確認されました。同期が乱れたということは、本来のA0立ち下がりとは違うところでノイズが飛び込み、信号が2.4Vを横切ったということになります。要するにその瞬間はでたらめのアドレスを差しているわけで、誤動作する可能性があるっちゅうことです。やっぱりシールドは必要かな。
信号がひ弱な理由としてケーブルを1m延ばしたことの他に、ROMを4コぶらさげたことによる容量負荷の増大があります。アドレスバスにバッファを追加した方が良いかもしれません。んが、とりあえずシールドだけでいってみましょう(笑)。
![[オシロ波形その3]](D0-ECU.jpg)
かたや、データラインの方はどうでしょう?
1m彼方のROMが出力したデータ波形(D0)はECU上ではこのようになっています。
なんかこう ぶわぁーっと(笑)ダブっている部分は見ないでよろし。データ不定のその期間、CPUもデータを読んでおりません。
見るべきはアタマの部分。OEがLowの間、D0もじたばたせず大人しくLowに張りついているかどうか?
こちらは大丈夫そうです。
![[プロトタイプの写真]](koumi018.jpg)
プロトタイプが完成しました。
フラットケーブルにはノイズ防止のためにDoitで買ったアルミテープを貼ってあります。
本来ならば、接着面越しでも導通が保証されている専用の銅箔テープを使いたかったのですが、非常に高価なので日曜大工品で代用しました。
ですから、筐体との導通が確実に取れるよう留意が必要です。
データの異なるROMがまだ用意出来なかったので、ROMの切り替え無しで走行テストを行いましたが、問題ないようです。但し、ノイズの少ない環境だったので、強電界地域を走ってもう少しテストする必要はあります。
何種類か違うマップデータを入手しましたので、これからテスト用のROMを作成して切り替え動作の確認を行います。
今回作成したROMチェンジャーに搭載するROMを作成する際の注意事項として、
データの異なる部分はマップ部分に限定されるというのがあります。他のコード部分やチェックサムといった、プログラムの制御自体に関る部分は全く同一でないと動作は保証できません。
NA8Cの初期型のように、チェックサムが異常と判断されるとバックアップモードに入ってしまうプログラムの場合、切り替えのタイミング次第でそれに引っかかってしまう可能性があります。但し、どういうプログラム構造で、いつチェックサムを見ているか判らないので断言は出来ません。
もしかしたら一度始動してしまえば大丈夫なのかもしれません。
幸い、後期(どの車台番号からかは判りませんが)のECUでは、チェックサムを見ていないらしいROMも確認されていますので、このROMを元にマップを書き換えます。
さて、結果の方は... 今のところ全く問題ありません。 ただボクが鈍いのか、上まで回す機会があまり無かったので、ROMの違いによる差は良く判らなかったです。5000rpm以下ではフィードバックゾーンになっているようで、FUELマップをどう変えても一緒なのです。アクセルをスパッと全開にすれば、4000rpm辺りでも加速時増量補正が掛かるのは確認できましたが、ボクが思っていたよりフィードバックゾーンは広いようで、普段の走りでは殆どフィードバックゾーン内で走っている感じです。
後日わかったことですが、上記の事は使っているA/F計の方に問題があることが判明しました。センサの温度特性の為、センサ温度が高温になるとRich側に振れなくなっていました。試しにセンサのヒーターを殺して温度を下げて走行したところ、マップの違いがA/Fにきちんと反映されることが確認できました。
試作は上手くいきました。次のステップはちゃんとした基板を作ってCDRSの希望者に配布するためのキット化です。