アルドウィーノを使った
オープンソース、オープンハードの
ローコストECU
テージのECUが壊れているみたいなので
Speeduino(STM32)に装換しました。
その21:
Speeduinoに不均等プライマリパルスが
入力された時の対策
2025年
3月7日
メイン関数のコードを修正します。広域変数と定数の定義を追加しました。

続いて、メイン関数のループの1Hz毎に実行される部分で、TunerStudioで設定したファンの開始温度(fanSP変数)を時間に変換します。fanSPは40オフセットされているので、0の時は40になっています。0以下であればcranking_timeoutを50uSec(短い待ち時間)に設定し、それ以外はmSecに変換するために1000を掛けます。

下はIGN1の点火登録の修正部分です。エンジンがクランキング中で、かつファンがON/OFF制御であれば、プライマリパルスが30になったところで、cranking_timeoutを待ち時間にして点火登録します。登録はクランク1回転に1回行われるように、フラグで制御します。IGN2も同様にプライマリパルスが7になったところで、待ち時間を50uSecに固定して登録します。プライマリパルスが30と7でフラグを交互にクリアします。

早速、コンパイルとダウンロードを行い、エンジンエミュレータとアナログディスカバリの不均等プライマリパルスで動作確認します。

初めはファンの設定をOFFにします。

今までと同様に、赤枠の不要な点火パルスが出ています。

ファンの設定をON/OFFに変更します、ファン開始温度は0℃(待ち時間は短い50uSec)です。

プライマリパルスが30の位置で直ぐに点火パルスが出ています。ここでは少し早すぎで、実際には30.5の位置に出力する必要があります。

ファン開始温度を10℃(待ち時間10mSec)に設定します。

点火パルスが30.5の近くで出ています。上のダイアログの設定に従い、パルスの位置が動くことを確認しました。エンジンエミュレータ上では正しく動作してるようです。

早速、実車に取り付けて車載のバッテリでクランキングしてみます。まだ、点火コイルは付けていないので、高電圧は発生していません。IGN1の待ち時間の設定は10mSecです。ガレージ内の気温は約17℃です。

全体的にパルスが重複しているところは無いようです。

波形を拡大してみます。中央の緑線が基準です。プライマリパルスは30番の後、10mSec後に通電開始しています。左の緑線が基準から6.5パルス幅です。右の緑線は7パルス幅です。修正した通りの動作をしているようです。

3月8日
ファンの設定をON/OFFに設定すると、本来のファン制御が動いて気持ちが悪いので、探して動かないようにします。FAN_ONを検索すると、auxiliraies.cppが見つかります。

auxiliraies.cpp内を検索すると、FAN_ONを使っているのはfanControl関数です。

続いて、どこからfanControl関数が呼ばれているか探すと、timer.cppから呼ばれていました。

早速、fanControl関数を呼ばないように修正しました。

ソースツリー全体からのキーワード検索はCygwinでfindとgrepを組み合わせるのが定番ですが、結果がスクロールしたり、エディタを併用する必要があり、面倒です。VSCでもソースツリーから検索できそうなので、やってみました。ViewメニューにSearchがあります。

FAN_ONをサーチすると、直ぐに、auxiliraies.cppの中にあることが見つかります。FAN_ONをクリックすると、ソースコードのFAN_ONの位置に飛びます。

関数名のfanControlで右クリックすると、メニューがでてきます。この中で、Find All Referenceを選択します。

左枠にtimer.cpp内にfanControlがあることが表示されます。シェルより早く見つけることができました。

3月9日
エンジンを始動する準備です。車体右側は開放型レギュレータのサイズが大きくなったため、レギュレータ配線の奥に垂直気筒の点火コイルがあり、一度、レギュレータを外してから、点火コイルとハイテンションコードを取り付ける必要があります。ハイテンションコードはシールドと熱収縮チューブを被せたので、硬く、取り回しがしにくいです。

左側は水平気筒用です。こちらは従来通りでアクセスしやすいです。エンジンを始動する前に、噴射無しで点火のみ駆動して、クランキングを行いノイズの影響を確認をします。

3月14日
不具合が発生したので、備忘録として残しておきます。以前、別のSTM32プロジェクト(CNCフライスからのISAボードを無くしたい)のuCNCのビルド時にフレームワークのarduinostm32が更新されました。その後、インクルードファイルが無いというエラーが出ましたが、インクルードパスを追加してビルドできるようになりました。その後にビルドしたSpeeduinoを動かすと、点火、噴射、カム角入力などの基本部分は動きますが、プログラマブル出力とAux入力が動作しなくなりました。プログラマブル出力はイグニッションやライトのリレー駆動、ECUのワーニング出力などに使っていて、イグニッションリレーが動かないとエンジン始動できません。左はクランキング時のイグニッションパルス重複の不具合を修正した新しいファームウェアのエンジンエミュレータです。赤枠のライト用リレーのインジケータが消灯しています。右は古いファームウェアで同じTunerStudioプロジェクトですが、こちらは点灯して問題無いです。


TunerStudioのウインドでは中央下の赤枠のライト用リレーのインジケータは緑でオンになっています。また、左赤枠のAux0のポート入力はエンジンエミュレータのスイッチに対して無反応です。

プログラマブル出力、Aux入力の設定が全滅のようです。TunerStudio上は、出力は正常に見え、入力は信号が伝達されていない現象です。

VSCでプログラマブルポート出力部をSTLINKでデバッグすると、別ポートに設定していました。ここで原因が判明しました。開発環境の構築手順に含まれる、STM32_MEGAボード専用のバリアントファイルをパッケージ下に上書きする必要がありました。これはSTM32_MEGAのハードウェアがBlack STM32 F407VEボードをベースに作成されていて、作者がこれを使ってSTM32_MEGAのバリアントファイルを作成したためです。ファイルの上書きを行わないと、ポート設定がBlack STM32 F407VEボードになってしまいます。フレームワークが更新されたら、忘れないように必ず、上書きする必要があります。

3月15日
プログラマブル出力の問題が解決したので、対策済みの新しいファームウェアで実車でクランキングして動作確認します。プラグを付けて点火駆動、バッテリは車載です。タンクは外れているので燃料ポンプは駆動していません。

ロジックアナライザで点火信号を確認します。はじめに全体です。点火パルスは重複していません。

波形を拡大してみます。プライマリパルス30番で10mSecの待ち時間で通電開始なので、動作良好です。上死点は基準より6.5パルス手前なので、もう少し待ち時間を加算した方が良いかもしれません。この後、タンクを付けてエンジンの始動してみます。

3月18日
クランキング時の重複パルス対策済みの新しいファームウェアでエンジンを始動してみます。とりあえず、エアクリーナBOX無しです。ケッチン状態にならずに始動しました。ガレージ内は16〜17℃くらいで暖かいので、もう少し気温が低い時に確認が必要です。

スマートコイル用の予備ドライバ基板を作製しています。フライス盤とV字カッタで基板を作るのは時間がかかるので、ユニバーサル基板で作製しています。点火コイルと接続するコネクタはアリエクスプレスで購入しました。

購入したのはテージのオリジナルデュアルスパーク点火コイル用の2極の防水コネクタです。10個セット、送料無料で1000円以下です。アリエクスプレスのコネクタの検索は極数と用途で検索して、後は画像を見て絞り込んでいくと、大抵のコネクタが見つかります。

3月19日
この日は午前中に雪が降り、ガレージ内は5〜6℃と寒いです。エンジン始動してみました。クリックすると、短い動画をダウンロードします。

予備のスマートコイル用のドライバ基板が2個完成しました。ドエル時間の設定によってはFETが少し発熱するので、この予備の2枚は小さいヒートシンクを取り付ける予定です。

実車から点火コイルを外してドライバ基板の動作確認をしました。赤枠でスパーク確認しました。

3月21日
ガレージ内で暖機してスロットルポジションセンサのキャリブレーションをしていると、油圧スイッチ付近から、またオイル漏れしてきました。以前、油圧スイッチと油温センサのアダプタを再作しましたが、原因は油圧スイッチ、その物だったみたいです。スイッチの取付部より上から漏れています。

コネクタを抜くとオイルが付いているので、コンタクトの隙間からオイルが上がっているようです。

ちょうど、ヤフーオーク
ションに油圧スイッチが出ていたので、早速、購入しておきました。兵庫からレターパックライトなので3〜4日はかかりそうです。同じ部品だと、またオイル漏れする可能性があるので、少し心配です。851にもファストン端子仕様の油圧スイッチが付いてますが、漏れたことは無いです。

3月22日
スマートコイル用の予備ドライバ基板作製の続きです。CPUのヒートシンクを切り出して、FETに熱伝導接着剤で接着しました。

3月23日
油圧スイッチが到着しました。下が新品部品です。コネクタハウジングの形状が少し違いますが、コネクタは問題無く勘合しました。

ユニクロ?メッキ部がちょっとチープなので、黒染めしてみました。

3月24日
油圧スイッチを交換しました。暖機で70℃くらいまで油温を上げて、漏れが無いことを確認しました。クリックすると、短い動画をダウンロードします。

部品を戻して試走する準備を行います。初めに、エアクリーナBOXを戻します。

続いて、タンク、カウル、フェンダを元に戻して、試走できる状態になりました。確認事項はクラッチのジャダーの有無と開放型レギュレータの動作です。

3月25日
スマートコイル用の予備ドライバ基板作製の続きです。セメダインのスーパーXの黒で両面を防水処理しました。

