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

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


その24:
アイドリング中のエンジン停止の解析
デュアルホイールをフォトインタラプタ用に変更



2025年
5月17日
プライマリセカンダリパルス電圧を確認します。コネクタの間に緑枠のアダプタを入れて信号を分岐します。



プラグを外して、クランキングします。全体的にシフトしているようです。理論値はLOWが0.84V、HIGHが1.68Vです。原因は定電流出力がTypの14mAを超えているからだと思われます。データシートの定電流出力の範囲はMin5.611.2mAMax8.416.8mAです。


現在のヒステリシスコンパレータの閾値は理論値を元に、以下のようになっています。シフトしているとLOW側マージン少ないです。


R12Kから2.4KΩにすると良さそうです。



5月19日
以前に行った、シンク・ロスが発生した時にプライマリパルスカウント数を表示する
コードを少し変更しました。割り込みハンドラ内でvss(車速)に代入するのを止めて、新しく宣言したloss_toothCurrentCounterのみカウント数を代入します。割り込みハンドラはなるべく早く抜けた方が良いです。


logger.cppは元のvss(車速)に戻します。


メインループ内でgetSpeed()の代わりにvss(車速)loss_toothCurrentCounterを代入します。



5月20日
ダイレクトイグニッションに変更したので、ベースボードに載っている、緑枠のイグニッションドライバの電源5Vに変更しました。このコイルの点火信号は3.3Vでも点火しますが上限不明なので、念のため、駆動電圧を下げました。


上記に加えて、ヒステリシスコンパレータ閾値も変更しました。気温が高いので、午後の4時過ぎてから、1時間ほど試走しました。今のところシンク・ロスによるエンジン停止出ていません。



5月21日
ダイレクトイグニッションのステーはアルミで作製しましたが、カーボン再作します。


1mm厚のアルミ板でを作ります。全部で4個雄雌型が必要です。


ポリエステル樹脂で積層します。クリップが足らないので2個つづ作ります。


シンク・ロスの続きです。近所を1時間ほど試走しました。シンク・ロスエンジン停止ありませんでしたが、急にイグニッションオフになりエンジン停止しました。メータユニットの電源も落ちるので直ぐに分かります。イグニッションスイッチ接触不良のようです。たまに、イグニッションスイッチをひねっても電源入らない時があり、分解して確認する必要がありそうです。


初めの2個離型しました。


続いて、残りの2つを積層します。



5月22日
ステーの続きです。整形して取り付けます。垂直気筒左側です。


こちらは、水平気筒左側右側です。


イグニッションスイッチを外して分解します。タンクエアフィルタボックス上側を取り外して、固定ボルトを2本外すとスイッチが外れます。


スイッチを分解して、接点を2000番のサンドペーパで磨きました。接点には接点グリスを塗っておきます。


組み立てて、何回か切り替えて、テスタで導通確認します。微妙な位置でオフならない事確認しました。



5月24日
細かい不具合が2件発生しました。1つ目はフロントブレーキのストップスイッチ故障です。ブレンボのブレーキマスタはストップスイッチが無いので、マイクロスイッチを後付けしています。


使用しているのはアマゾンで購入したオムロン互換のマイクロスイッチで、10個で800円の安売り品です。故障の原因は振動と思われますが、クリックが無くなり動作しなくなります。


今回は本物を買ってみます。価格は互換品の約10倍です。これでダメなら油圧スイッチに交換します。


2つ目は右ハンドルの汎用スイッチ動作不安定です。このスイッチはSDログの開始/停止、燃調マップ切替に使っています。テスタで測ると、スイッチに問題は無く、別ボードとエンジンエミュレータでは正常に動作するので、ハーネスECUの内部の不具合と思われます。


汎用スイッチ緑枠のように、5VプルアップをスイッチでGND接続してロジックレベルを作っています。信号はD24(STM32のPA15)に接続されています。元々、未使用ポートなので、Speeduinoのベースボードジャンパ接続しています。



5月25日
アマゾンで購入の本物マイクロスイッチが到着しました。下が購入したオムロン製です。


早速、レバー部加工をして、取り付けました。



5月26日
汎用スイッチの不具合の続きです。ECUのコネクタにピンを挿してハーネス側を調べます。


テスタで調べると、汎用スイッチのピンと+5Vが抵抗で接続されていないことが分かりました。熱収縮チューブを取ると、抵抗のリード線切れていました。イグニッションキーのコネクタの近くなので、イグニッションキー修理した時に切れてしまったようです。


コネクタのコンタクトに直接抵抗を圧着するのをやめて、短いケーブル分岐させました。


ハーネスは元に戻りましたが、SDログが汎用スイッチによらず、常時SDロギング状態になりました。以下は上手く行かない時の手順です。赤枠のように外部ピンのログ開始機能禁止にして電源を投入します。


その後、電源を投入したまま、D24を使って汎用スイッチによるログ開始を有効にします。


この時のTunerStudioのウインドをキャプチャしました。左下のAux2(D24)ゲージは汎用スイッチに応じて1/0交番しますが、中央下のSDログのインジケータ常時SDログ中になっています。実際にもログが記録されています。原因は電源の投入時に実行されるinit.cpp内で外部ピンの設定をしているためです。TunerStudioを立ち上げたまま、Speeduinoの電源を再投入すると正常に戻ります。TunerStudioは電源の再投入が必要な時はメッセージが出るのですが、このSDログではメッセージは出ないです。ハーネス不具合と重なって混乱でした。クリックすると、約4.7Mバイトの動画をダウンロードします。


ログ開始の外部ピンの設定のプログラムを確認しておきます。speeduino.inoのsetup関数からinitialiseAll関数が呼ばれ、そこからsetPinMpping関数でボードの種類に対応したピン(ポート)の設定が行われます。


setPinMpping関数内でTunerStudioで設定された選択可能なピンを設定します。緑枠ログ開始外部ピン設定部分です。条件外部ピン有効でかつ、設定されたピン番号がデバイスの最大番号未満ならピンの番号を設定します。setup関数はSpeeduinoの電源投入時1回実行されるので、設定を反映させるには電源の再投入が必要です。外部ピンが有効かの条件はなぜか、重複しています。コンパイラは賢いので、影響は無いと思われます。


下はTunerStudioが電源の再投入が必要な時に出すメッセージです。



5月27日
ストップスイッチ汎用スイッチの不具合が解消したので、鶴ヶ島のスーパマーケットまで試走しました。気温が低く、メッシュのジャンパでは少し寒かったです。行きは毛呂山、帰りは東松山市経由の下道で往復約60kmでした。行きにシンク・ロスが3回記録されました。この時のプライマリパルスの数は36より少ない、13などで、ノイズなどでセカンダリパルスが本来より前に発生しているのではと思われます。アイドリング中にメータユニットの回転数が異常高くなってエンジンが停止することはありませんでした。



5月29日
Androidで動くSpeeduino用アプリのmsdroid有償版を買ってみました。価格は2100円です。無償版との違いはボタンインジケータヒストグラムが表示できることです。難点は更新が停止している事、GPSを使った車速ゲージが動作不安定です。何故か、googleマップを起動した後でないと、正しく表示されないです。また、
ボタンはグローブがタッチパネル対応じゃないと押せないです。ゆくゆくはWinの10インチタブレットは大きいので廃止したいです。


熊谷のアストロプロダクツまで試走しました。残念ながら、行きにシンク・ロス2回発生しました。アイドリング中の1回はメータユニットの回転数が異常高くなってエンジン停止しました。走行中にも1回発生し、一瞬回転が落ちましたが、走行中なので、当然エンジンは停止しません。今回もなぜか、行きのみに発生しています。残念ながら、行きはmsdroidで走っていたので、シンク・ロス時のプライマリパルス数は表示されず、確認できませんでした。90分走ったとして、平均回転数が3000rpmだとすると、エンジンは90分間に270000回転し、この間に2回シンク・ロスが発生したということです。


5月31日
Speeduinosynclossで検索すると、色々と見つかり、やはりノイズ関連の不具合が多いです。以下、GitHub問題がちょっと気になりました。現在使っているファームウェア同じバージョンsynclossの不具合です。質問主はsynclossが出ないバージョンもあると言っています。このスレッドは途中で中断しているので、解決したのかは不明なのですが、新しいバージョンのファームウェアも出ているので、試してみる価値がありそうです。



6月2日
新しいファームウェアに今までの修正(RTCの時間ズレ、クランキング時の点火パルスの重複対策、車速にシンク・ロス時にプライマリパルス数を入れ替え)を追加してビルド、ダウンロードしました。今まで使っていたのは202402で、pazi88さんの最新は202501.1です。本家のGitHubで確認したところ、202402にはフックスパックの.1.2があり、その後、202501になって最新は202501.3です。STM32に関連した修正で明記されているのは202402.2”STM32デバイスで非常に特殊なチューニング条件下での潜在的なロックアップを防止します”がありますが、これがシンク・ロスに関連しているか不明です。


新しいファームウェアドン・キホーテ北鴻巣店まで片道約29km、時間約40分試走しました。今までのところ、往復ともシンク・ロス発生していません



6月4日
新しいファームウェアの試走の続きです。ジョイフル本田新田店に向かいます。


40分ほど走って、深谷の先でシンク・ロス発生しました。プライマリパルス数です。


ジョイフル本田行きは中止して、帰る途中でもシンク・ロス発生しました。同じく、プライマリパルス数です。これはカンダリパルス割り込みハンドラプライマリパルス数になっていることを示しています。ファームウェアのバージョンとシンク・ロスは無関係でした。


セカンダリパルス割り込みハンドラプライマリパルス数になる現象を考察してみます。プライマリパルス数は37番目のハンドラ内でに初期化されます。ここで不正にセカンダリパルス割り込みハンドラが実行されると、シンク・ロスが発生して、この状態になります。下はセカンダリパルスが発生した直後のデュアルホイールの位置です。緑枠鉄ボルトセカンダリパルスセンサ緑線1番目プライマリパルスです。ホイールの回転は反時計回りで、この後、少し回転すると1番目(37番目)のプライマリパルス割り込みが発生します。


下はロジックアナライザ波形です。プライマリパルス立ち上がりエッジ、セカンダリパルス立下りエッジで割り込みます。プライマリパルスが期間に不正にセカンダリパルス割り込みが発生すると、この現象が発生します。プライマリパルスの磁束?がセカンダリパルスセンサに干渉すると、この現象が出る可能性があります。ホイールセンサギャップ広げると変化があるか確認します。


秋月非接触回転速度センサoh182という型番ですが、同じデバイスで文字情報の入ったKIM14のPDFがあるので、動作原理を確認しておきます。(a)磁束がY側に傾いた時に立ち下がりエッジを発生。(b)磁束が開いている時はLOWレベル出力。(c)の磁束が−Y側に傾いた時に立ち上がりエッジを発生。(d)の磁束が収束している時はHIGHレベル出力です。



6月5日
デュアルホイールとセンサのギャップを広げてみます。セカンダリパルスのギャップを約1.8mmプライマリパルスのギャップを約1.2mmにしました。


ギャップを広げると頻繁にシンク・ロス発生します。この時のプライマリパルス数はランダムでは無く、35でほぼ固定しています。やはり2つのセ ンサが干渉しているようです。現在のプライマリパルス歯は36ですが、クランキング時の点火パルス重複対応で、プライマリパルスを40歯にする予定なので、それに合わせてフォトインタラプタ式に変 更します。透過型フォトインタラプタを使うので、ホイールのかさ上げと直径も少し大きくする必要があります。


秋月フォトインタラプタを使います。難点は懐が浅いのと、コレクタ電流のスペックが最小/最大で30倍違うので個別に調整が必要です。外来光遮断する必要があるかも知れません。


ホイールを設計しました。2mm穴を40個開けて、プライマリパルスを発生します。セカンダリパルスは外周のスリットを使います。現在使用中の36歯はモジュール1.5の平歯車で直径は57mmです。今回作製するホイールは1.5mm厚のアルミ板で直径は66mmで作製します。


図面にフォトインタラプタを追加して、スリット位置確認します。プライマリパルス用のフォトインタラプタは足らないので改造が必要です。


オムロンのサイトフォトトランジスタの使い方が詳しく出ています。直近にトランジスタをバッファとして追加するように推奨しています。