RCDIも、1年前のクイックシフター導入から、あれだこれだと機能を入れて来たので、久しぶりに処理時間の測定をしてみた。

なんでこんな事をしないといけないか。
マイコンの進角制御は、BTDC70度付近で発生するマイナス波形を感知して、BTDC0〜40度位までの間にプラグに点火をする。
tenka
例えば、エンジンが12,000rpmで回っている場合、
クランク一周が5ms周期で回り、1度進む時間は僅か13.9us(マイクロ秒)、つまり0.000013秒となる。
これが数十度進む間に回転数の割り出しから、点火タイマーセット、クイックシフターのステート制御、等を行う必要がある。
非常に慌ただしい。

マイコン側はPIC16F1455が16MHzで駆動されている。
このマイコンは一つの命令を処理するのに大体0.25us程度必要なので、思ったよりは余力が無い。
12,000rpmで回るエンジンをBTDC20で点火させるとすると、70-20=50度、650usの間に全ての点火前の処理を行わなければならない。

話はそれるけど、クランクが一回転する間、決して等速で回っている訳ではなく、例えば圧縮行程ではクランクの速度はどんどん遅くなっていく。
純正のフライホイール使っている限りはあんまり気にしなくても良いんだけれども、軽量化されたフライホイールを投入すれば、最終的に点火時期にまで影響を与える。

閑話休題。
SDR(NSRやTZRも同じ)は12,000rpmで30度進角させるなんて事はしないので、多少は楽なんだけども、要件としては満たしたいラインとして、30度進角@12,000rpmは守りたい。
この場合は556us。

実際それをどうやって調べるかというと、PICマイコンの開発環境上でシミュレータを動かして計測する。
シミュレータはStimulusという機能で実装されており、各種信号を観測したり、入力したりできる。
またStopwatch機能というものがあって、ステップ実行中にどの操作がどの程度時間を消費するのかがわかる。
RCDIの場合、割り込み信号ピンをオンにして、割り込み中の動作を測定する。
stimulus

大体300us内で処理が終わるので、まだ250us程度の余力あり。

この辺は結構詰めている部分だけど、現れるとダメな部分なのでコードに現れない。 

秋月千石部品だけで作るRCDI for SDR。
最初のPIC12F1822で作ったときは、メイン処理は50行にも満たず、割り込み処理は60行程度。
今はそれぞれ倍近くに増加している。

今後、誰かがソースコードをメンテナンスしていくことがあるのかないのか分からないけど、しっかりコメントに残していかないと、と思う2016年の秋なのでした。