サブコン制作 2016/06/19

準備中 2016/03/06
ソフトができました 2016/03/18
回路です 2016/03/19
うまくいきません x_x 2016/03/26
通信速度と0xffと 2016/04/09
素人らしい勘違いが・・・ 2016/04/13
FET駆動回路みなおし 2016/04/17
実機へ搭載実験。失敗と問題点 2016/04/23
動き出すサブコン 2016/04/30
失敗の連続 2016/05/08
できていること、いないこと 2016/05/15
ハードウェア問題クリア、燃調OK 2016/05/21
勘違い、そして完成 2016/05/29
資料 2016/06/12
WIFIに苦戦中 2016/06/05
WIFI版完成 2016/06/12
サブコンまとめ 2016/06/19
WIFI版全資料 comming soon
   

準備中2016/03/06

FIについては以前もやっていますので、本体を作るのはそんなに大変ではありません。
しかし昨今ではスマホで無線というのは自然な流れだと思いますので、まずはECU本体よりも先に、スマホと連携するメカニズムを構築してます。

Windows10とAndroid Studioを使用して、ブレッドボードを使いながら試験中です。思ったより大変ですx_x。

ちょっと相当日数がかかりそうです。

何段階かにわけて制作しなければなりません。しかしFIコントローラとしてのソフトのコア部分はできあがっています。
現在の予定では・・・

1・まず、スマホからプログラムを更新できるメカニズムを作る
2・燃調と進角マップを編集できるシステムを作る
3・実機に実装し、実際の信号をすべて調査し、基本数値を割り出す
4・プログラムに実装し、走れるところまで実装
5・手直し

となるかと思います。
プランでは、燃料と点火の制御ですね。
フルトランジスタなのでCDIみたいに高圧で誤動作もないでしょうから、回路的には簡単と思います。

Androidのプログラムがきれいに作れません、JAVAってかゆいところに手が届きません。
画面は4画面切り替え式で・・・

・回転数などの基本情報
・オシロスコープ機能
・プログラムやマップなどのファイル更新機能画面
・設定値設定画面

にする予定です。


ソフトができました 2016/03/18

だいたいのソフトウェアができあがり、後はハードウェアの作成となりました。
ハードウェアでは、マイコン工作およびハーネスについてなんとかしたいと思ってます。

ハーネスで接続する金具部分をコンタクトというのですけど、そのパーツを購入してもコネクタがありません。
このような車の電装部品のコネクタはなかなか入手できないですね、そこでエポキシパテで無理やり形成してしまうことを考えています。

まぁ、この先も色々な問題がでてきますけど、逐次越えていければいいなって思います。


さて、サブコンピューターとして、まずどういうものを作ろうとしているのかをというと、

★ECUと、インジェクターおよびイグナイターに割り込ませる形で実装するユニット
☆Android端末で動的に設定ができるシステム

なのですね、で、どんな基本動作なのかというと・・・

・3000回転未満では、ノーマルの信号と同じ動作をさせる
・3000回転以上では、現在の回転数とアクセル開度から、
   A・もともとの噴射に対して、0.1%単位で増加、減量させる
   B・もともとの進角に対して、0.5度単位で進角、遅角して点火させる
   C・アクセルの急激な開度に対して、一定時間増加噴射させる
   
という仕様にしました。


ソフトウェアは・・・
ハードウェアのファームウェアになるものが2つ、(Bluetooth通信と、プログラム書換用ローダ)
ECU本体のメインプログラムが1つ
Android端末用のクライアントアプリが1つ

の4点構成です。
で、とりあえずAndroidのアプリの説明をすることで、実際にどういうことをするのかを紹介しようと思います。

----------------------------------------------------------------------------------------------------

Android用ECUクライアント PenECU

このアプリは、画面下部のボタンで表示を切り替えて使用します。
画面は以下の画面になります。

・一般情報
・オシロスコープ
・データ管理
・マップ編集

また、諸設定ということで
・設定画面

の大きくわけて5画面です。

一般情報画面では、現在の回転数、インジェクター通電時間、電圧、水温、O2センサーの値や吸気温度などの情報表示をします。
通常はこの画面のみ見ることになるかと思います。

オシロスコープでは繋いだセンサーに対して全てサンプリングしてますので、その情報をみることができます。
O2
アクセル開度
バキューム
水温
吸気温度
本来の噴射タイミング
本来の点火タイミング
クランクパルス
について、1または2グラフで確認できます。
サンプリングレートは0.1ミリ秒で500本です。

データ管理画面ではECU本体のフラッシュメモリに対しての操作になります。

ECU本体プログラムの更新
マップテーブル丸ごと取得
マップテーブル丸ごと設定

ができます。
マップ編集画面では、各種マップに対しての設定が行えます。

・噴射増減テーブル (アクセル開度と回転数)
・進角増減テーブル (アクセル開度と回転数)
・加速増加テーブル 16段階

設定画面では、諸設定が行えます

アクセル開度最小
アクセル開度最大
トンネルモード指定(オンならば本体の信号をそのまま再現する)
使用マップ指定
加速ポンプ使用可否


回路です 2016/03/18

さて、いよいよハードウェアの制作ですね、まずは回路図…なんて書かずに、回路図を兼ねた基板でのデザインをしました。

久しぶりなのでかなりアバウトですけど、レイアウトを考えて回路にしていきます。

AD変換のためのボルテージフォロアのためのオペアンプと、インジェクターなどの信号が12V以上ありますからレベルシフタ用のICを使ってマイコンで信号を拾うことにしました。

いいのか悪いのかわかりませんけど、やってみることにします。
 
赤い線が基板の裏側にはわせる線、緑が上からはわせる線です。
黄色の線だけ、12Vからひっぱることを想定しています。

これを基本にして、パスコンを適当にいれていこうと思います。
大電流流れる部分がありませんので、電解コンデンサはすこしだけ入れる予定です。


うまくいきません x_x 2016/03/26

先週からずっとトライアンドエラーが続いています。

ブレッドボードで動いていた回路をユニバーサル基板上に再現しているのですが、まともに動きません。

  こんな感じで組んでみました。
裏面には判別しずらいですが、チップ抵抗やチップコンデンサなどが電源付近やICの分圧などで随所についてます。

USBにBluetoothアダプタを挿していますので、5Vが必要です。 またマイコンは3.3Vで動作します。 そして車載品は12Vのバッテリーで動作しますが、走行中の電圧は最大で14.5V程度まで出ています。

以前からあまり考えずに12Vから5Vに変換する電圧降下リニアレギュレータを使用していて、今回も使用予定でした。 しかしなぜかBluetoothの通信が途絶えてしまいます。 実験の時は、5V のACアダプタでUSB部分はそのまま使い、マイコンへの接続部部分のみ3.3Vに降下させるレギュレータ、50mwのものを使用して正常に動作していま した。

今回ユニバーサル基板で回路作成時に12Vから電圧変換して使うべく回路を増やしています。 12Vから5V に降下させるレギュレータを設置、そこからさらに3.3Vに降下させるレギュレータをつけました。

しかしこれを12Vで動作させるとBluetoothの通信がすぐに途絶えてしまいます。
ためしに5VのACアダプタに接続すると途絶えずに通信できています。

マイコンのタイマーでLEDを点滅させるように修正し、もし不正な状態で例外割り込みが発生する場合に無限ループでLEDがつきっぱなしにな るようしてみましたが、マイコン側は5Vでも12Vでも動作しているようです。

ここで延々と試行錯誤と調査が続き、レギュレータICを触るととても熱いことから、放熱板をつけないでレギュレータICを使うこと自体に無理 があると気が付きました。

過去の回路では消費電力が多くなかったため放熱板なしでも大丈夫だったのですが、USBのBluetoothアダプタそのものが消費電力が多 いので問題がでているようです。

あらためてデータシートをみて、レギュレータICの特性グラフに目を通すと、ICの温度が上がると許容損失が減る=流せる電流が経るわけです が、安全マージンをみるといわゆるトランジスタみたいなTO-92パッケージの場合の許容損失ってせいぜい300mWが限界と思われます。
これを12Vから5Vに降下させる場合、300 / (12 - 5) = 44.44mA 程度しか流せないことになります。 12Vから3.3Vに下げるほうはもっと深刻です。車載時、再考15V程度まで上がってしまうと、電圧差がだいたい12Vだと30mAも流せ ないのです。 USBのBluetoothアダプタがPlanex製でスペックを調べると75mAってなっていました。まぁどちらにしても足りないのです。 このUSBアダプタ、マイコン2つ、他オペアンプ3つ、74IC1つを動かすための電源を考慮する必要ができました。。。

  キャンドゥで買ってきた、シガレットソケット用のUSB充電器から電源部分を流用します。
測定すると5.2Vだったので、5Vにするにはリファレンス電圧1.25Vになるよう、4.7Kと1.6Kで分圧するために100Ωの抵抗を直列に増やして1.5K+0.1Kで1.6Kとなるようにしました。

電源の問題は解決し、まともに動くかと思いきや動きません x_x。

もう一つのBluetoothアダプタを指すと、通信速度が著しくおそくなるも通信できるようになりました。
最初に実験していたPlanexのEDR2.xアダプタだと、少しだけ動いてすぐハングアップみたいな症状になります。

しかしブレッドボードにもどすと安定するようになり、違いから原因を推測すると、

・ブレッドボードの下には接続用の金属が張り巡らされていて、これがノイズを吸収する役割を担っている(仮定1)
・上記金属が熱を拡散することでUSBコネクタから適宜に廃熱できていたのがユニバーサル基板だと廃熱できない

の2つを疑っていますが、以前のマイコン工作の時も、基板のGNDは面じゃないと車載品としては安定しないんですよねぇ。
ユニバーサル基板じゃだめなのだろうって思ってます。特に無線はノイズに弱いですから。



  こんな感じで、実際に通信できているのですが。。。遅くて実用的速度になっていません。9600bpsにフォールダウンされているようです。

ブレッドボードの時は最高速がでています。

通信速度と0xffと 2016/04/9

延々と続くトライアンドエラーの中で、一つ二つわかったことがあります。
Bluetoothの通信部分は今回、ランニングエレクトロニクスさんのところからダウンロードしたものをPIC32MX250用に変更して使っています。

1・通信速度が遅くなるBluetoothアダプタを使用した場合は全部通信ができる
2・通信速度が速いアダプタの場合、0xffを連続で送信するとファームウェアが停止する

の、2の状態に気づくまでに1か月以上かかりました。
マップデータ2番だけ全部転送でき、3と9ができず、同じ処理なのになぜ?と思ってました。
ためしにすべて0を返すようにしたら動きます。

で、その部分のデータだけファイルダウンロード機能からダウンロードしてみると、0xffが含まれています。
初期化ルーチンのバグで、一部その部分が含まれている場合にBluetoothの機能そのものが停止します。
ただし通信速度が遅い場合は転送できます。

ファームウェア部分を修正して、無条件で0xffを返すようにしてみたところ、やはり停止してしまいます。
しかし、今度はブレッドボードの環境に移すと停止しません。

結果は、組んだ回路の組み合わせだと、通信速度が速い時に0xffの連続データを転送すると停止してしまうということです。

やはり、ベタグラウウドがあるプリント基板じゃないとこの手の装置はまともに動かないような気がしてきました。

しかし、0xffの問題点を除くとすべての機能が動作しているのも事実で、何が悪いのかさっぱりわかりません。

とりあえず、バイナリデータを直に送信しないようにすべての機能を変更しました。
もともとプログラム更新やファイルデータダウンロードは16進文字列変換して送受信していたので問題なくできていたわけです。

オシロスコープ機能、マップデータ取得機能、通常時のデータ受信機能はバイナリを直に扱っていたので問題があったようです。

  回路を左図の通りとしました。
変更点はノイズ対策を随所にいれ、電源レベルでのノイズ除去はほぼできていると思います。

12Vラインを自身のオシロスコープ機能でみても、スパイクノイズとかはないのですが。。。

7805とある部分は、キャンドゥで購入したシガレットソケットのUSB充電器のDC-DCコンバータに置き換えてあります。


今、スマホとの通信機能はすべて動いているように見えます。
不安ですが、次のステップに移ろうと思います。

今後、実際にジャイロキャノピーに接続して動作を制御できるようになったら、プリント基板でもっとましなものをつくろうと思います。

現時点でのプログラムもここに置いておきます。
Bluetoothコントローラは回路図右のCPU用です。
ブートローダとECU本体は2つで1セットになってます。先にブートローダをPIC書き込み機でCPUに書き込んでおきます。

Bluetoothコントローラ(PICKIT3で書き込む)
ブートローダ(PICKIT3で書き込む)
ECU本体(スマホで更新)


素人らしい勘違いが 2016/04/13

前回の回路図を書いた後で実験を繰り返し、回路が間違っていることに気が付きました。

温度センサーとかスロットルポジションセンサーとか、AD変換するためにバッファと信号増強の意味を兼ねて、オペアンプLM358Nを3つ組んでいますが、このオペアンプの出力って入力電圧に対して出力が1.3V程度降下するのをわかっていませんでした。

オペアンプの用途はボルテージフォロアで、入力が最大5Vで、出力を分圧して3.3Vにする予定でした。
一番最初の回路だと、12V電源にして、入力最大5Vで出力を分圧していましたが、入力をつながずオープンにしておくと、出力が電源電圧付近になってしまい、これのせいでマイコンを2つ破壊してしまったのです。

前回の回路でAD変換しても、3.7Vより出力が上がらないので、不正確になってしまうのです。

どうすればベストなのかわかっていません。電源12Vにして、出力分圧、かつツェナーダイオードと抵抗で最大電圧が3.3Vを越えたら抵抗で消費される保護回路を組めばベストな気がしますが、いまからそのように修正ができないので、オペアンプの前で分圧するように回路を修正しました。

回路の全体像です

自分自身のオシロスコープ機能から、回路中の5V部分を計測すると、どうもキャンドゥで買ったUSB充電器のDC-DCコンバータの出力波形がよくないので電源を交換しました。
ブレッドボードだとまともに動くのは、5VのDCアダプターが2A出力で、出力波形もきれいなものだから…なのかなって思いました。
電源も変更したところ、電源のノイズはほぼなくなり、一応通信もそこそこ安定するようになりました
(起動直後はオシロスコープが切断されるような症状もまだ残っていますが。。)
 
  100均でちょうどいいケースがみつからずしかなくアクリル板を加工してつくりました。
配線も外にだしたし、動作チェックをしてすべて計測、動作がスマホでできたのでいよいよジャイロに搭載できます。
さて、以前オークションで1000円で購入しておいた、ジャイロ用ハーネスを加工して搭載編に突入です。

 


FET駆動回路みなおし 2016/04/17

いざハーネスに接続する前に、FETの部分だけがちょっと気になりました。

マイコンから直接ゲートをドライブするようにしているのですが、過去のCDIと違って今回はフルトランジスタで直接イグナイターに12Vを送るのに使われるので、瞬時に大電流をながせるのだろうか・・・とちょっとした疑問です。

そもそもFETのデータシートを見て、ゲートのスレッショルド電圧が2Vってなっているので、3.3Vマイコンからダイレクト駆動できるって思って部品を選定しました(単に安かったというのもありますが。。)。
実際にデータシートをさらに見ていくと、ゲート電圧と流せる電流の関係をみると、3.3V時点で5Aくらいの電流がながせるのがグラフから読み取れます。
サービスるマニュアルで見るとインジェクタの抵抗値が10Ω程度なので、1.2Aくらいですね。停止状態の抵抗値なのでこれより大きな電力はかかりませんね。イグニッションコイルもそんなに大電流流す性質のものではないので、マイコンからの直信号でゲートを駆動しても問題ないとは思うのです。。。

以前のFIの時はマイコンが5Vだったので、直接ゲートを駆動しても十分電流を流せました。
ちょっと悩んで、後で作り直すことになるよりは今やっておこう・・・って回路を変更しました。

FET駆動部分がかわりました

基板にぎりぎり詰め込むことができました。
 
毎度、表と裏、チップ部品とリード線のある部品を組み合わせて詰め込むのを考えるのに時間かかります。

いままでとことなり、マイコンのポートONでFETがOFFになるので、プログラムも変更しました。
また現時点でのプログラムをいくつかおいておくことにします。

ECU本体4/17版
Android画面アプリ4/17版
Android画面ソース(AndroidStudioプロジェクト)4/17版


実機へ搭載実験。失敗と問題点 2016/04/23

さて、割り込ませハーネスも作ったし、いよいよ実機で実験です。



はい、アクセルは反応しましたが・・・エンジンかけてもうんともすんとも動きませんでした。

現在は出力は未接続で、各種センサーおよびインジェクターの出力とイグナイターの出力にすべてセンサーを接続して計測できる状態になっています。
しかし、クランクパルスとインジェクターの出力を拾ってくれません。オシロスコープ機能もまともに動きません。Bluetoothの接続がすぐ止まってしまっています。一度室内で点検します。

点検したところ、そもそもマイコン側でクランクパルスの信号にアサインしていたB4ポートとインジェクターの信号にアサインしていたA4ポートが入力として動作していませんでした。
マイコンのプログラム上に指定ていないコンフィグレーションビットがデフォルトでそのポートをセカンダリクロックとして予約しているためにプログラムから使えない状態でした。 こちらはすぐに気が付きましたがこの点を修正して装置単体でテストしたところ、今度はイグナイターの信号が読み取れなくなくなってました。

回路図に記載し忘れてましたが、インジェクターとイグナイターの線から74HC4050への接続は1KΩの抵抗をつけてましたが、抵抗が焼ききれてました。また、74HC4050のIC自体の入力端子に10Vの電圧をかけても3.7Vになっています。どうも内部が破壊されているようです。
イグナイターの駆動装置がオフになると、高圧の逆起電流が流れますので保護回路をもうけておかないとほぼ破壊されてしまうのですよね。。トホホ。
回路の抵抗を2Kに変更して、0.01uFのコンデンサを並列にいれました。サージ対策だとスナバ回路にしないとダメかな・・・とおもいましたが、この構成で様子をみることにしました。そして再び実機で実験をすることにしました。。



はい、なんとか回転数が表示できるようになりました。ただ、4000回転を越えると誤動作しまくりです。
なんかプログラムが間違っているのか回路がノイズで誤動作しています。
回転は表示されるのですが、オシロスコープ機能でインジェクターの値が変動しません。イグナイターの値はとれているので何か問題があるようです。

実機での実験を中止して、ソフト側をいろいろ見直すことにしました。

PICマイコンの機能で、インプットキャプチャという機能を使ってクランクパルス、インジェクター、イグナイター線から割り込みで状態を読み出す時、インジェクターとイグナイターはオフになった場合に逆起電流で誤カウントしてしまう対策として、一度キャプチャをストップして、タイマーで復帰させる処理をいれたのが逆にうまく動かないようです。
ハードウェアである程度対策されていないとインプットキャプチャは期待した動作は難しいということがわかりました。
サージ対策のクランプダイオードを入れて、インプットキャプチャはソフト制御しないようにすることにしました。


動き出すサブコン 2016/04/30

更新がとどこおるほど見えない部分でトライアンドエラーが続いています。
処理が増えればECUとしての動作に支障がでる可能性があるので、限界まで頭で最適化してからプログラムを変えていくのも時間がかかります。

とりあえず、誤動作している原因をつかむべく、オシロスコープ機能が動くようにだけいろいろプログラムを修正しました。



クランクパルスが上段、インジェクターとイグナイターのパルスの関係です。
どうも、クランクパルスが想定していたものと違っていました。

そもそも、参考にしたのがモンキーのECUをオシロスコープで波形を拾った方のウェブサイトおよび、HONDAの技術関連の文書を見てクランクパルスは1周9回で、30度均等間隔で120度のブランクがあって、ブランクの部分が下死点という判定をしていました。
しかし、実際に計測してみると、上記画像の通りでクランクパルスは6回で、変則的な間隔の部分を判定に使用しなければならないことがわかりました。
1周1回だと拾うのは楽なのですが、インジェクターとイグナイターの起動タイミングを計るのが難しいので、まぁなんとかしようと思いました。

しかし、あまりに特徴がない波形ですよねぇx_x。結局、信号間の間隔が前回より2倍以上大きい時にトリガーとするようにプログラムを書き換えたら正しく回転を拾えるようになりました。

なので今回用意した2つの駆動FETのうち、インジェクターの駆動装置のみ接続して、もともとの信号をそのまま再現するようにしたところ普通に走れるところまで来ました ^ー^。

ここまでくれば、あとはもともとの信号間隔を書き換えて再現することでサブコンとして機能できるようになります。
フルトランジスタのイグナイター用のFETの駆動もできるはずなので、点火時期も変更自由自在になります。

しかし、あいかわらずBluetoothの通信は安定しません。しょっちゅう止まっちゃいます。こちらはDEBUG用にUARTに文字列出力できるようにしてみたところ、Bluetooth部分のライブラリ中、USBのエンドポイント処理でエラーが発生していることはわかりましたが、こちらではどうにもできないので困っています。
Bluetoothから無線LANに変更するか、Bluetoothモジュールを別途用意したほうがよさそうです。
とりあえず、ECU部分に問題はないので、このまま続行するようにします。

こんな感じで実験してます。茶色の線がインジェクターに割り込ませた部分です。ちゃんと自分の装置から駆動して走れます ^ー^。問題点は配線が多すぎることですね。

これから、オシロスコープ機能で拾った波形から、インジェクターとイグナイターの起動タイミングを割り出し、プログラムを修正します。 これが出来上がった時点でリミッターが発生する回転数から自分で駆動することでリミッターカットとなります。 もうひと月くらいはかかるかなって思います。
失敗の連続 2016/04/30

失敗の連続が続いています。
主な原因は信号の計測が正しくできていないのですが、今回のサブコンに含まれるオシロスコープ機能の最大分解能未満のオンオフが連続しているせいで、その後の処理計算がすべてくるってしまっています。

ハードウェアの問題だけでなく、今回はクランクパルスの計測にPICマイコンの機能のうちの、「インプットキャプチャ」という機能で信号から自動的にタイマ値をキャプチャする機能を使っていたのですが、通信処理をDMAをつかうようになってから、キャプチャしたタイマ値が過去の値になっているとか意味不明な動作をしていて、キャプチャした値が間違っているということに気付くのに2日以上かかったりしてと本当に難航しています。
何かの原因で発生しているのですが、4チャンネル目のみ問題発生していて、他のIC1とIC3は正常で、4チャンネル目でも割り込みタイミングでタイマ値を取得すれば正しい値なので本当になにがなんだか・・・です。

クランクパルスの信号線に抵抗とコンデンサはすでに入っているので、信号がうまく読み取れないのは別のノイズがひどいのかもしれません。
キャプチャ割り込みのログを取るようにして、割り込み直後のポートの状態と時間のログをみてみると、信号のエッジの同じサイドで複数回割り込んでいるので、割り込みまでの時間でエッジが反転してしまうほど短い期間のノイズが多いのだと思います。
現在の回路図です。



74HC4050でインジェクターとイグナイターの信号を処理しようとしたのが間違いだったのかもしれません。
ダイオード逆向きとプルアップ抵抗でやったほうがサージ対策にもなるのでよかったのかも。
また、74HC14、シュミットトリガーをいれないと、ソフトで除去できないほどFETがオフになったあとのノイズで複数回信号を拾ってしまいます。

というわけで、シュミットトリガを入れて回路を変更予定です。


 

できていること、いないこと 2016/05/15

そもそも考えが甘かった感じがします。以前にCDIとかFIをやっていたので、そんなに難しくないだろうとか思ってはじめてみたのですが、問題がでまくりなかなかすすみません。
フルトランジスタの点火方式の方が考慮しなければならないことが多いのを改めて実感しました。

問題があったけどクリアした課題
・クランクパアルス信号を正しくよみとること(シュミットトリガーとダイオードクランプによる回路に変更)
・イグナイター信号を正しくよみとること(最終的にイグナイターの信号線を12Vでプルアップし、51対15で分圧したものをシュミットトリガーを通す)
・ソフトのバグ全般(疑似パルス発生回路を使い、オシロスコープ機能の波形からバグ検索、対処)

できていること
・スマホとの通信部分
・各種信号の表示(タコメータや各種センサの値の表示機能)
・インジェクターの信号をそのままFETに伝えてインジェクターを制御すること

できていないこと
・インジェクターの信号に対して、増量や減量して噴射すること
イグナイターを点火させること


ソフトウェア全般できています、また疑似信号発生回路も作って、燃料を増やしたり減らしたり、点火時期を変えられることもテスト済みなのですが、実機でうまく動作しません。

まず、燃料の増減をした制御ですが、タイミングが間違っていることに気付きました。走れはするのですが、なんかぎくしゃくしてます。
アイドリング時のタイミングをもとにその位置から増減していたのが間違いでした。無効噴射時間を考慮し、噴射終了の時間から逆算して開始タイミングを計る必要があります。
こちらはソフトのバグなので、すぐになんとかできそうなのですがもう一つの問題にからんでまだハードの変更の必要があります。

フルトランジスタ制御でイグナイターを点火させるのに、、最初に組んだ部品では、エンジンがかからずだめでした。

このサブコンはもともとの噴射信号ともともとの点火信号を受け取ると同時にFETをオンにするトンネルモードというのをもうけていますので、何もしなくても動作するはずでした。
実際に燃料側のインジェクターはそれで動いているのですが、イグナイターの方が動きません。

そこでFETをオン抵抗がさらに低いものに変更したところ、エンジンがかかりアイドリングはするのですが走れません。

イグナイターを点火させるには、急激な電流の変化が必要で、単にFETをオンとオフできればいいわけではないということですね。

オンさせると同時に最大電流を流せるようにするには、ゲート電圧を10V以上にして、ゲートってコンデンサと同じなので大電流を急速に供給してはじめてFETがイグナイターを点火させる要件をみたせるのです。
実際にそう思ってFETまわりの回路をトランジスタをペアで使う回路に変えたのですが、まだ問題があるようです。
GNDが細いので、イグナイターからの大電流を流せないのかもしれません。

とりあえず、ゲートにつながるトランジスタが2SC1815での許容電流が150mAですから、2A流せる2SC2655に変更して実験してみようと思います。
それでもダメならFETにするか、ゲートドライバICに変更します。

というわけで、まだ先になります x_x。
 
ハードウェア問題クリア、燃調OK 2016/05/21

なんとか回路部品の若干の変更で動くようになりました。
イグニッションコイル駆動のFETの問題は、ゲートに供給する電流不足だったようです。ゲート抵抗を2.2Ω、トランジスタを2SC2655に変更しました。ちゃんとスパークして走行できるようになりました。

他の方のフルトラ自作さている方だと、2SC1815からゲート抵抗なしでイグニッションコイルから十分スパークしているので、ゲート抵抗の調整だけでよかったのかもしれません。

また、もともとのイグナイター信号が15度ほど遅延して読み取ってしまっていた問題は信号入力直後の抵抗の後ろのコンデンサの容量が大きすぎました。0.1uFから、0.001uFにしたところ、ほぼオシロスコープで読み取れる値になりました。

ソフトの間違いも修正し、燃料噴射タイミングを下死点を基準に噴射時間分前のクランクパルス信号に同期させることで完全に制御できるようになりました。
これでオリジナルの噴射時間に対して、回転数とアクセル開度に対してパーセンテージで増加・減量する制御ができるようになり、当初のサブコンとしての機能はみたせました。

しかし現在、点火時期を変更させる機能はまだ動かせません
理由は思っていたより角度の変動が大きかったのです。

CDIの場合は、サイリスタをオンにした瞬間にはスパークするのですが、フルトランジスタ方式だとFETをオンにしてもすぐに火花が飛ばないようです。
このデッドタイムの存在で、点火信号は上死点よりかなり前からONになっています。

モニタリングしてみると、アイドリング付近はBTDC 25度、しかしマニュアルの値だと12度となっていますので、デッドタイムで12度ほど遅延したわけです。
これで8000回転くらいまでまわした時(といっても40Km/hですが。。)BTDC115度くらいになってました。
実際のデッドタイムを差し引くと25度あるかないか程度のはずなので、ここからデッドタイムを計算しなおさなければなりません。

この問題をクリアして点火時期を変更できるようになったら今回のサブコンは完成となります。
回路図とデザイン図を載せておきます。回路の信号線のよみとり回路と、FET駆動回路、実際にこれで普通に走れますのでとりあえずOKとします。






勘違い、そして完成 2016/05/29

5/21のこと。。。
今回のサブコンにオシロスコープ機能をつけたおかげで、データを収集して保存できるようになっていたので解析が楽になりました。
特に走行中とか、本物のオシロスコープだと計測しながら走行、しかもログをとるなんて芸当できないですからね。

5063 53
5063 53
7017 43
7058 43

上の表は実際に取得したデータを加工して抜粋したもので、左が回転数、右が0.1ミリ秒単位の時間となっています。
その回転数の時に、イグナイター信号が実際にオンになっていた時間です。

進角している角度に若干の差異はあると思うのですが、イグナイターの無効時間は回転数があがっても変わりません(電圧に変化がないから)。
ここで、進角度が同じだとして、クランクパルス信号との比較から、イグナイターをオフにしている角度は固定であることはわかっていますので、逆算すると。。。



5000rpmの時、1周の時間は 12ms , 導通時間は 5.3ms

7000rpmの時、1周の時間は 8.57ms、導通時間は 4.3ms なので。。。


クランクパルスNo11⁼82度で信号オフは固定として、開始がBTDC30付近⁼No6 + 15度⁼No7 -15, 計 導通しているのべ角度=97度だとすると、

5.3 - 12 * 97 / 360 = 5.3 - 3.23 = 2.07
4.3 - 8.57 * 97 / 360 = 4.3 - 2.3 = 2.0

だいたい2msが無効時間であるとの結論になりました。
ここからプログラムを修正して、実際にあわせていきます

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

上記記事を書いた後、自分が重大な勘違いをしていることに気が付きました。
CDIの場合、点火信号ON=サイリスタ導通で火花が飛ぶわけですが、フルトランジスタでは導通=蓄電、オフにしたときに2次側コイルから放電されるわけですね。
オンのタイミングをいくら合わせても、オフのタイミングがあってないからノッキングしていることにやっと気が付きました。

それにやっと気が付いてソフトを変更し、ほぼあってるはずなのに、まだおかしい。。。。
ある特定の回転数で複数箇所で「バババババ」っとなってまともにまわりません。

これも何度も試行錯誤、仮定をふまえてやっと原因がわかりました。
燃料噴射と点火は交互の1回転単位でやってると思い込みがあったのです。
実際に情報画面をみていると、噴射時間が8000回転付近で8ミリ秒・・・これって、1回転以上にわたって噴射しているわけです。
点火は1回転以内でかならず終わるのですが、燃料噴射はインジェクターの能力の関係で1回転以上にわたって行われるため、タイマーで順番に噴射オン、オフ、点火オン、オフって4サイクルやってたのですが、実際には点火のオフの前に再び噴射がオンになることがあるのです!!!

これをクリアして、やっとまともに走れるようになりました。
とうとうリミッター部分も9000回転にあることが判明し、燃料がカットされ、0となるこTもわかりました。

であれば、0になったら一定数噴射すればいいわけ・・です。
そしてやっと完成となりました ^ー^。



資料 2016/05/30

・必要なソフトウェア
 スマホAndroid Studio ダウンロードページ
 マイコンMPLAB X IDE Microchip
 XC32コンパイラー Microchip XC32
 周辺機器ライブラリ PIC32 Peripheral Library
 プログラムBluetooth通信、CPU2用 BtctrlerS.X.160530.zip
 ブートローダ、CPU1用 Bootloader.X.160530.zip
 ECU本体、CPU1用 ECU.X.160530.zip
 スマホ用画面プログラム penecux.160530.zip


回路図と基板デザインはECU本体のZIPに含まれてます。
回路図エディタと、PCBEエディタ、すべてフリーの環境で作ってます。

配線
  ECUに接続されている向きにコネクタを見ていてます。
左上を1番として、右方向へ数えて参列
1〜7、8〜14、15〜21とします。


GND            
INJ            
IGN         12V  
12VとGNDは既存の配線にわりこませます。
INJ,IGNはもとの線を切断して、コネクタ側をIN、反対側をOUTとします。


灰色
    O2 ACCEL   CPlus  
    吸温 圧力      
    水温        


GND 青銀 12V 赤黒 IGN 黄黒 INJ茶黒
O2 黒赤 アクセル(ACCEL) 黄青
クランクパルス(CPlus) 青黄 水温 桃色
吸気温度 灰色 圧力 若葉

そして、今回の回路が大きくておさまらないので、リファインします。



WIFIモジュールを使ったもので、コンパクトにしあげます。

  ユニバーサル基板にGNDとVCCをはわせているところです。この段階での出来が最終的に問題となったります。



WIFIに苦戦中 2016/05/30

  裏面がほぼできあがってきました。
クリックで拡大します。
チップ抵抗とコンデンサが随所にみられますが、手作業でできる範疇で特に難しい作業ではありません。

ピンセットは必須ですけど。

  表面はこんな感じです。左下はダイソーのシガーソケット用USB充電から取り出した電源を3.3V用に改造したもので、電源になります。

右下はWIFIモジュールに、一番小さな変換基板を使ってスペース確保してます。

  基板デザインはこちら。
ほぼレイアウトどおりになってます。

デザインを先にして、はんだづけしてます。




WIFI版完成 2016/06/12


WIFI版がやっとできました。
思ったより時間がかかってしまったのは、WIFIモジュールのESP-WROOM-02の問題点多かったからです。


  こんな感じです。Bluetooth版に比べて60%程度の面積におさえました。

イグニッションコイル用のFETが大きいので立体にしました。これ、2SK3628で秋月電子で200円なのですけど、イグナイター用に使える(アバランシェ耐圧の関係で)ものだと思います。

その下に隠れてみえませんけど、FETドライバICを使って前回のトランジスタを重ねたものに比べてシンプルになってます。青い基板がWIFIモジュールですが。。。

WIFIモジュールってATコマンドで制御する、もしくはファームウェアを書き換えて制御します。
通信速度は今までのBluetoothとは違って500000bpsくらいは余裕なのですが、1つのレコードの
バイト数が多い転送は速いのですが、ATコマンドバージョンだと小さいサイズの転送が多いと遅くなります。
ファームウェアの書き換えはAruduinoのIDEからESP8266のライブラリを追加して、サンプルプログラムから簡単にサーバー通信とシリアル転送とかできるので難しくはありませんが、あくまでWIFIモジュールとして部品扱いしたいので、ファーム書き換えはしたくなかったのですが、転送速度が圧倒的にかわるんですよねぇ。

一番の問題は、WIFIモジュール起動時に通信速度が異なる状態でなにかログのようなものが出力されていて、それが原因でPICマイコン側が出力に失敗する状態があるというのに気づくのにまる1日以上かかりました。

結局はPICマイコンからリセット信号をだして、0.5秒待機してゴミデータをやり過ごしてからUART初期化すれば正しく動かせました。

あと、アンドロイド側のアプリをBluetoothからWIFIとTCPIP通信に変更したりしてて結構時間かかりました。  
サブコンまとめ 2016/06/19

先週から時間をかけて最後のチェックとか残った問題点の対処をしていました。

完成かと思って走ろうとしたら、まずまともにエンジンかかりませんでした
オシロスコープ機能を使ってみると、クランクパルスとイグナイターはOKだったのですが、インジェクター信号がとぎれとぎれです。
bluetooth版と比べてみると、あるべき位置にコンデンサーがない・・・インジェクターの信号線側に0.1μFのコンデンサーを追加しました。

しかし今度はエンジンがかかるのですが、タコメータの針が暴れています。クランクパルスがOKかと思ったら、なんか不均等な間隔になっていました。
またまた見比べてみると、クランクパルス部にもコンデンサーが抜けていました。。。公開していた回路図にもその位置にコンデンサーがなく、チップコンデンサをつけていたので見落としてしまっていたようです。
クランクパルスの信号線が10Kの抵抗を通った位置に470pFのコンデンサをつけました。

今回のサブコンの要って、クランクパルス・インジェクター信号・イグナイター信号がしっかりとれているかどうかなのです。
そこさえ押さえておけば、後は計算があってるか否かなのですね。

最初のプランだと、12vの普通の信号線として、74HC4050をバッファにして読み込もうとして、イグニッションコイルの逆起電流でいくつも壊しつつ、抵抗値を上げても最後は信号線のノイズで正しくとれませんでした。

それで74HC14のシュミットトリガーICを使うことでノイズ部分を吸収しきれていたと思ったのですが、実際にはコンデンサが重要だったのですねぇ。
このノイズさえ越えてしまえば、本当に不思議なほど安定して動くようになりました。

そしていろいろわかりました。このジャイロの純正ECU、本当によく制御されてます。
アクセルを大きくあければ噴射量も進角も大きくなり、アクセルを戻せば燃料がカットされてます。O2センサはおよそ1秒程度の周期で燃料が増量と減量を繰り返して平均値が中央になるようにちゃんと制御されてます。
これに対してセッティングを変更しても、大した効果があるとも思えないのです。ただ、排気効率があがったりすれば、もっと燃料を増量したいとかでサブコンの効果もあるかも・・・しれませんけど。
ノーマルのインジェクターに対しての信号は、9000回転直前で8msです。1万回転で1周の時間は6ms。計算のオーバーヘッドもあるので、1万回転では最大10ms程度しか噴射できません。さらに回転があがればもっと少なくなります。
インジェクターを変えないと、これ以上の増量は難しいですね。ノーマルの進角は最大でもBTDC30度未満でした。

結局、現在の効果はリミッターカット程度です。


本日の最後の作業は、始動性の向上でプログラムを書き換えました。

ECUの動作をモニタリングすると、始動時って毎回転点火してるのですねぇ。そして1500回転を堺に2回転に1回点火に切り替わります。
なので自分でも、1500回転未満の場合、クランクパルス番号10番でイグニッションコイルの充電開始、および吸気タイミングなら同時にインジェクターの噴射開始をするようにし、3.3ms後に点火、4ms後に噴射ストップするようにしたらすんなりエンジンもかかるようになりました。

サブコン装着で変わったことといえば、高回転時のレスポンスがいい感じがします。
FETのオン抵抗が少ないからかもしれません。点火エネルギー効率が上がった分よくなったのかもしれません。

そしてWIFIですが、これ、ECUには向かないかもしれません。
なんか、よく切断されて、復旧しないのです。
しかたないので、一定時間応答がない場合にWIFIモジュールをリセットするようにプログラムを変えました。

WIFIモジュールをサーバにするタイプより、スマホ側をサーバにして、WIFIモジュールからスマホ側に接続させる方式の方が安定しているように感じました。
プログラムは両タイプ、1つの定数で切り替えられるので、ダウンロードした方もどちらも試せると思います。

回路図とパターン図を登録しておきます。


回路図ダウンロード


パターンダウンロード

inserted by FC2 system