サブコン制作 | 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となるようにしました。 |
こんな感じで、実際に通信できているのですが。。。遅くて実用的速度になっていません。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均でちょうどいいケースがみつからずしかなくアクリル板を加工してつくりました。 配線も外にだしたし、動作チェックをしてすべて計測、動作がスマホでできたのでいよいよジャイロに搭載できます。 |
FET駆動回路みなおし | 2016/04/17 |
いざハーネスに接続する前に、FETの部分だけがちょっと気になりました。
マイコンから直接ゲートをドライブするようにしているのですが、過去のCDIと違って今回はフルトランジスタで直接イグナイターに12Vを送るのに使われるので、瞬時に大電流をながせるのだろうか・・・とちょっとした疑問です。
そもそもFETのデータシートを見て、ゲートのスレッショルド電圧が2Vってなっているので、3.3Vマイコンからダイレクト駆動できるって思って部品を選定しました(単に安かったというのもありますが。。)。
実際にデータシートをさらに見ていくと、ゲート電圧と流せる電流の関係をみると、3.3V時点で5Aくらいの電流がながせるのがグラフから読み取れます。
サービスるマニュアルで見るとインジェクタの抵抗値が10Ω程度なので、1.2Aくらいですね。停止状態の抵抗値なのでこれより大きな電力はかかりませんね。イグニッションコイルもそんなに大電流流す性質のものではないので、マイコンからの直信号でゲートを駆動しても問題ないとは思うのです。。。
以前のFIの時はマイコンが5Vだったので、直接ゲートを駆動しても十分電流を流せました。
ちょっと悩んで、後で作り直すことになるよりは今やっておこう・・・って回路を変更しました。
FET駆動部分がかわりました |
基板にぎりぎり詰め込むことができました。
毎度、表と裏、チップ部品とリード線のある部品を組み合わせて詰め込むのを考えるのに時間かかります。 |
実機へ搭載実験。失敗と問題点 | 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 |
できていること、いないこと | 2016/05/15 |
ハードウェア問題クリア、燃調OK | 2016/05/21 |
勘違い、そして完成 | 2016/05/29 |
5063 | 53 |
5063 | 53 |
7017 | 43 |
7058 | 43 |
資料 | 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エディタ、すべてフリーの環境で作ってます。
配線
ユニバーサル基板に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モジュールですが。。。 |
サブコンまとめ | 2016/06/19 |