今日はマニアックなPICプログラムネタ。
とは言ってもプログラムそのものはネタに出来るほどスキルはありませんが。。。
ビビリ症の私は走行中でのキャブセッティング時のMJ領域空燃比をA/F計にて確認する事ができない・・・
そこで思い立ったのがデーターロガー。当初はセンサーからの入力値をAD変換してロムに記録するだけだから簡単??って思ってました。
ところがそのプログラムが大変で、今年の夏はプログラムだけで終わってしまった・・・
(暑かったので丁度よかったけど)
ハードはすぐに出来て、仕上がったのがこれ↓
もっとケース加工をちゃんと出来ればいいのですが、私の作る物はいつもこんな感じ(^^)
では、詳細説明です。
・分解能:10ビット
・入力:4CH(内3CHアナログ)
①A/F値
②バキュームセンサー値
③加速度センサー値
④回転信号(16ビット)
・記録容量:1Mビット(512ビット×2CH)
・サンプリング周期:約50m秒+エンジン1サイクル
・最大記録時間:約7分×2CH
・入力:4CH(内3CHアナログ)
①A/F値
②バキュームセンサー値
③加速度センサー値
④回転信号(16ビット)
・記録容量:1Mビット(512ビット×2CH)
・サンプリング周期:約50m秒+エンジン1サイクル
・最大記録時間:約7分×2CH
ざっとこんな感じです。
サンプリング周期がエンジン回転に左右されるのは、EEPROMへの書込み時に割込みが作動すると
誤作動を起こすとの噂を聞いたので、メインルーチン内で回転数をカウントさせてます。
この仕様でロギングしたデーターがこれ↓
(エンジン回転はハンドで修正してます。)
使用して感じた事。
1.10ビットはオーバースペック。
2.サンプリング周期50m秒もオーバースペック。
3. 〃 〃 は固定が良い。
4.加速度センサーの値が不安定で使い物にならない。
1.10ビットはオーバースペック。
2.サンプリング周期50m秒もオーバースペック。
3. 〃 〃 は固定が良い。
4.加速度センサーの値が不安定で使い物にならない。
と言うことで対策プログラムを作り、以下のスペックとなりました。
・分解能:8ビット
・入力:4CH(内3CHアナログ)
①A/F値
②バキュームセンサー値
③なし(今後必要ならスロポジ)
④回転信号(8ビット)
・記録容量:1Mビット(512ビット×2CH)
・サンプリング周期:約100m秒固定
・最大記録時間:約27分×2CH
・入力:4CH(内3CHアナログ)
①A/F値
②バキュームセンサー値
③なし(今後必要ならスロポジ)
④回転信号(8ビット)
・記録容量:1Mビット(512ビット×2CH)
・サンプリング周期:約100m秒固定
・最大記録時間:約27分×2CH
EEPROM書込み時の割込みの対策も出来て、エンジン回転は割込みでカウントに変更したのでサンプリング周期も固定できました。
また機能追加として、以前はエンジンを切ってしまうとメモリーの最初から書込みをしていたのを、EEPROM内に書込みアドレスを記録してエンジンを切っても継続したロギングも可能としました。
この仕様でのデーターがこれ ↓
10ビット⇒8ビット、サンプリング周期が1/2になったけど変更前と遜色なく仕上がっているでしょ!
ただ、エンジン回転数のカウント時にノイズ?か何かで変なデーターを記録しているので、再度プログラム変更をしました。
プログラムって面白いもので、考え方を少し変えるて順序なんかを変えるだけで結果がまったく違ったものになるんですよね。
っで、プログラム変更後のデーターがこれです ↓
ねっ! 綺麗な回転グラフになっているでしょ(^^)
さて、記憶したデーターをPCへの送信はロガー側面にシリアルケーブルを接続 ↓
USB接続やSDカード記録をすればもっとカンタンになると思うけど・・・
OS付属ソフト・ハイパーターミナルを経由、これまたOS付属ソフト・メモ帳へ記録させます。 記録中 ↓
メモ帳からエクセルへインポートさせると、こんな感じの全体のグラフが出来ます。 ↓
この中からクローズアップしたいデーターを、別のシートの左上の黄色シェルに番号を入力表示すると ↓
こんな感じに表示されます。
一連の流れをVBAで組んで、とも思ったけどやめました。
なぜって!
データーロガーって、一度セッティングが出れば中々使う事がないもので・・・
しかし、PICって何でも出来ちゃうんですね~~