アルドウィーノを使った
オープンソース、オープンハードの
ローコストECU

テージのECUが壊れて
いるみたいなので
Speeduino(STM32)に装換しました。


その23:
アイドリング中のエンジン停止の解析
ダイレクトイグニッションへの変更



2025年
4月28日

エンジンをかけないで、疑似パルスでシンク・ロスが出るか確認の続きです。通常状態では現象が再現しないので、プラグコード抜いてみました。少し待つと、現象が再現しました。下のロジックアナライザ波形は意図した所とは別の前側の緑枠でトリガがかかっていますが、その後の緑枠に点火パルス、噴射パルスが非常に多く出る波形が測定できました。プラグコードを抜くと現象が再現するのは、高電圧の信号の行先無いため、エネルギが空間放射されるためと思います。


問題の部分拡大します。丸々1サイクル中(クランク2回転)、プライマリパルスと同じようなタイミングで点火パルス、噴射パルスが多数出力されています。点火パルスはメータユニット回転信号にも繋がっているので、この時はアイドリング中にも関わらず、18000rpmのような異常な表示をします。疑似パルスではエンジンは止まらないので継続しますが、この状態で実車ならエンジン停止すると思われます。


異常状態の前の部分拡大します。ここではプライマリセカンダリパルス異常があるようには見えませんロジックアナライザの特性上、短いノイズは見えないだけで、実際にはノイズによる不具合がECU内で発生しているのだと思います。



4月29日
点火系の放射ノイズ軽減させるためにダイレクトイグニッションコイルを使ってみます。
フーオークションでちょっと昔のホンダのVFR800のダイレクトイグニッションコイルが売っていたので、購入しました。動作未確認品なので、動かないものもあるかもしれません。ダイレクトイグニッションは高電圧部の配線が短いので、大幅放射ノイズ減るはずです。テージのエンジンは右側のプラグはタイミングベルト越しなのでプラグキャップ長く左側短いのでプラグ接続部の改造が必要と思います。因みにVFR800のプラグはCRxなので、プラグのネジ径は10mmでテージの12mmより細いプラグです。


行きつけのお店からVFR800配線図を送ってもらいました。中央GNDだということは分かりますが、どちらが電源なのか、この図からは不明です。


ホンダのフィット
ダイレクトイグニッションコイルもヤフーオークションで売っていたので、購入しておきました。ちょっとコイル部大きいですが、こちらは動作確認済みとのことでした。


こちらは同じコイルと思われる、コネクタのピン配置WEBで見つかりました。中央GNDなので、VFR800のピン配置も同じかもしれません。


このコイルはプラグキャップの部分が外れるようで、これならプラグキャップの左側接続簡単そうです。



4月30日
フーオークションのVFR800のコイルが到着しました。


コネクタのピン配置を調べます。コイルにあったマーキングの部品番号の099700−070で調べるとケーブルが付いたものが見つかりました。ケーブルの色は左から赤青白黒です。上の配線図と比べると、赤青は点火信号、黒がGND、白黒が12Vです。


早速、電源点火信号を繋げて動作確認します。4本とも動作良好でした。


K20Aで検索すると、インテグラシビックにも使われてたようで、アマゾンにコイルの内部構造が載っていました。上部にイグナイタ(トランジスタスイッチ回路)、下の部分に1/2次コイルがあるようです。残念ながら、短く加工することはできなさそうです。



5月2日
フィット
ダイレクトイグニッションコイルが到着しました。早速、動作確認を行います。4本とも動作良好です。


このコイルはイグナイタコイルが上部にあり、接続部には抵抗スプリングが入っているだけです。抵抗を入れなければ、寸法は自由に調整できます。短い方は接続部外しゴムキャップを取り付けました。長い方はゴミの日に捨てられていた永井のシリコンコードに付属していたプラグキャップを短く加工してゴムキャップを取り付けました。


短い方左側仮止めしてみます。ちょっと飛び出していますが、良いようです。


続いて、長い方右側に取り付けてみました。こちらも良いようです。この後、双方に芯線スプリングを入れて動作確認を行います。



5月3日
長い方をもう1個作ります。永井のシリコンコードに付属していたプラグキャップを分解します。


プラグキャップは短くして使います。内径をコイルに合うように大きくして、電極のスプリングを取り付けます。


フィットのコイルはカバー下に隠れる部品なので、見せるように出来ていません。色も黒で地味なので、ステッカを作って貼ります。Qcadで図面を書いて、jpegに変換します。


ステカインポートでjpegを取り込み、輪郭抽出します。赤のカッティングシートを切り出して貼りました。



5月6日
ダイレクトイグニッションコイルを仮配線します。ケーブルは専用コネクタが来た時のために、少し長くしておきます。


残念ながら、ダイレクトイグニッションコイルに変更してもシンク・ロス発生してエンジンが止まりました。別のSTM32ボードに変更しても同じでした。コントローラボードをSTM32からアルドウィーノに変更すると発生しなくなるようです。ガレージ内での短い間なので、少し遠乗りして確認する必要があります。


5月6日
コントローラボードをアルドウィーノに変更して、少し遠乗りしてみます。40kmほど走ってシンク・ロスです。アイドリング中にエンジンが止まることはありませんでした。Speeduinoベースボードは同じなので、シンク・ロスでエンジンが止まるのはSTM32コントローラボードに原因があるようです。


アリエクスプレスで購入のフィット用のダイレクトイグニッションコイルの専用コネクタが到着しました。見た目だけで注文したので、心配していましたが、勘合しました。



5月8日
ヤフーオークションでフィットのコイルが1000円で売っていたので、予備に買っておきました。


ダイレクトイグニッションの配線用6mmの熱収縮チューブを購入しました。


5月9日
ステーを伸ばしてコイル固定して、熱収縮チューブとアリエクスプレスで購入の専用コネクタを使ってハーネスを作り代えました。


STM32を使うとシンク・ロスが出る件を考察してみます。コントローラボードによっているので、アルドウィーノMEGASTM32_MEGAを比べてみます。シンク・ロスはプライマリ/セカンダリパルスの不具合なので、ソフトウェアでは割り込みハンドラの動作、ハードウェアでは動作電圧、IO電圧ノイズ耐性が問題になると思います。

<Arduino_MEGA>
CPU:ATmega2560
動作クロック:16MHz
動作電圧:5V
IO電圧:5V
ファーム:Speeduino-2023.05版

<STM32_MEGA>
CPU:STM32F407VET6
動作クロック:168MHz
動作電圧:3.3V
IO電圧:3.3/5Vトレラント
ファーム:Speeduino- 2024.02版

上が
アルドウィーノMEGAが互換ボード、下がSTM32_MEGAボードです。機能面では動作クロックSDログの有無が主な違いです。動作クロックが16MHzのアルドウィーノMEGA9000rpmくらいが上限で、テージの1100DSエンジンで余裕が無く、ギリギリです。



5月11日
STM32_MEGAボードでは使わないGPIOポートを後からTunerStudioのプログラマブル出力Aux入力に使えるように、コメントにして削除していたのですが、削除すると初期が行われず、用途が出力ポートでもリセット時のままの入力ポートになります。入力ポートだと、ノイズ弱いと思われるので、これを復活させました。これにより、用途が出力のポートは未使用ですが出力ポートになります。


未使用ポート設定を修正したファームウェアで往復50kmほど試走してみました。シンク・ロスでエンジン停止したのは1回で、頻度が減ったようです。


5月12日
さらに、VSCST−LINKでデバッグして、未使用ポートを調べます。デスクトップPCには本物のシリアルポートが付いているのでレベル変換モジュールを介してシリアルケーブル接続してTunerStudioと接続します。


シリアルケーブル接続ではデバッガでプログラムを停止しても一旦OffLineになりますが、再実行で接続復活します。USB接続では復活しないです。


VSCはペリフェラルレジスタが参照できます。ポートA〜モードレジスタを調べて、未使用入力になっているポートを探します。レジスタの内容もビットフィールド表示され、レジスタ名も出るので、直ぐに確認できます。00なら入力ポートです。


ポート設定CALCまとめました。


未使用入力になっているポートを出力に設定するコードを追加しました。


未使用のアナログポート下側の分割抵抗の910Ωだけ実装して電位をGNDにしました。



5月13日
未使用ピン対策したSTM32試走しました。片道約30kmの鶴ヶ島のスーパまで行きましたが、残念ながら、行きに1回だけ
シンク・ロスエンジン停止しました。帰りは1区間だけ高速に乗り、工事渋滞もありましたが、シンク・ロス無しでした。


5月14日
シンク・ロスの考察をしてみます。初めにプライマリセカンダリパルス入力部です。センサは秋月電子の2ピンの非接触回転速度センサを使っています。



High時14mALow時7mAを流す定電流出力で内部のデバイスの電源もこの電流で賄っています。電源電圧にあまり影響されず、8〜20Vまでほぼ一定の出力をします。110Ωの負荷で0.8〜1.6Vを交番します。センサの電源はIG電源に直付けしていますが、仕様上は問題無さそうです。


昨日の試走でSDログのバッテリ電圧を確認します。がバッテリ電圧です。最小13.7V最大14.8Vでした。開放型レ ギュレータの出力は1Vほど変動しています。9V三端子レギュレータで電源を安定化させると何か変化があるかもしれません。


非接触回転速度センサの出力はヒステリシスコンパレータ5V系に変換しています。LTspiceのシミュレーションではLow−>High時に1.39VHigh−>Low時に1.04Vです。入力は0.8〜1.6Vなので、閾値は良さそうです。


9V100mA級の三端子レギュレータLDOをさがしましたが、短納期のものは見つかりませんでした。秋月にちょっと大きいですがドロップ0.3V1ALDOがあったので注文しておきました。


TunerStudioにはトリガフィルタの設定があります。設定は無し、ウイークミディアムアグレッシブの4種類です。プログラムを解析して動きを調べます。


トリガフィルタのアルゴリズムは緑枠のようにプラ イマリパルス割り込みハンドラで前回とのギャップ時間を計算し、フィルタ時間未満なら本来の割り込みハンドラの処理しないで終了するというものです。 フィルタ時間より短い時間で入ったプライマリパルスはノイズとして無かったことになります。


ィルタ時間setFilter関数で、ギャップ時間からプライマリパルスの割り込みの都度計算します。ウイークミディアムアグレッシブ計算はギャップ時間のそれぞれ25%50%75%だけ短い時間に設定します。プライマリパルスの割り込み ハンドラはクランク2回転36パルス発生します。例えば1000rpmでアイドリング中は毎秒300回(3.3mSec)です。今まで、ウイークミディア ムに設定しましたが、シンク・ロスは防げないようです。マニュアルではなるべく、軽いフィルタを使うように書いてあります。これは速いエンジン回転の変化についていけなくなるからですが、普通のエンジンではギャップ間(クランク回転の1/18期間)に75%短くなる、回転上昇はなさそです。エンジンエミュレータアグレッシブに設定してみましたが、素早く回転数を変化させても特に問題無さそうです。



5月15日
秋月の9VLDOが到着しました。


ハーネスを確認します。ECUから出力される12V電源を使っているのはプライマリセカンダリパルスセンサのみです。


早速、空きエリア実装しました。


エンジンエミュレータ動作確認します。非接触回転速度センサは電源電圧依存しないので、他の修正無しで動作します。


シンク・ロス考察の続きです。セカンダリパルスの割り込みハンドラ内でプライマリパルスの数が36でない時シンク・ロス判定です。そこで、使っていないパラメータにシンク・ロス判定が起きた時のプライマリパルス数toothCurrentCounter)を代入すればTunerStudioで表示できます。同じ型のuint16のCurrentStatus.vss(車速)があるので、プログラムを修正してみます。decoder.cppに新しい変数loss_toothCurrentCounterを追加します。


同じく、シンク・ロス判定の所でloss_toothCurrentCounterCurrentStatus.vsstoothCurrentCounterを代入します。


decoder.hにはloss_toothCurrentCounterエクスターン定義します。


logger.cpp車速の代わりにloss_toothCurrentCounterをログに記録します。


メインループでgetSpeed関数で車速をCurrentStatus.vssに代入しているので上書きされないようにコメントに変更します。


エンジンエミュレータで動作確認を行います。赤枠にシンク・ロス車速を表示して、わざとシンク・ロス発生させます。車速プライマリパルスカウント数が表示されるようになりました。2回目のシンク・ロスの時のプライマリパルスカウントは20でした。ログを確認しなくてもゲージリアルタイム表示できます。36より多ければプライマリパルスにノイズが乗っている、また36より少なければセカンダリパルスにノイズが乗っている可能性が高いと思われます。