2020年10月30日金曜日

グロム スピードメーター補正 完了

グロム スピードメーター補正の続き.

数分に 1回位の頻度でスピードメータ表示が一瞬 1km/h になるので,原因を調べてみた.といってもデバッグに使用できるのは LED 1灯だけw
メーター表示が 1km/h になるということは,メーターに対して出力するパルスが盛大に抜けていることになる.まずスピードセンサー → arduino のパルスが抜けているか調べたところ,それは抜けていなかった.

そうするとメーターへのパルス出力を行っているタイマ制御で何かおかしなことになっているはず.ここからはもう現象から原因を推定するしか無いのだが,パルス出力タイマは,

1. 出力パルス 1個分の時間をタイマで計測
2. その時間に達したら割込み発生,割込みハンドラ内でパルス幅の補正計算を行う
  タイマは並行して 0 に自動的にカウントが戻り,カウントアップを継続する
3. パルス幅の補正計算結果をタイマのカウント最大値として設定,タイマがその値に達したらまた 2. の処理が走る

となっている.ここで 3. でカウント最大値を設定した時,タイマのカウンタがその値をすでに超えていたら,カウンタはその値で止まらずに 0xFFFF まで回ってしまう.その時のパルス幅は時速換算で 0.3km/h なので,メーターとしては 1km/h を表示する.
と辻褄はあっているが,2. の補正計算 (32bit 乗算) は 8bit の AVR にはそんなに重い処理なんだろうか? 100km/h のパルス幅であっても 14414 サイクル@16MHz の処理時間が使えるから,余裕あると思うんだけどなぁ.

まぁ悩んでも仕方ないので以下のように変更.

・補正計算は loop() 内で実施 ( = いつでも割込み可能)
・タイマの割込みルーチンでは,補正計算値をタイマレジスタに設定するだけにする.そうすると,割込み発生からすぐにカウント最大値を設定するので,カウンタがすでに過ぎている可能性は低くなる.

でやってみたら直ったヽ(´ー`)ノ
これでソフトは fix したので,3D プリンタでケースを作った.

車体への取り付けは,バッテリー上とシート下に隙間があったので,ここに設置 (テープ止めwww)
というわけでめでたく完成ヽ(´ー`)ノ これでやっと正確なスピード表示ができる.あとつけようと思ってた USB の口もつけられたんで満足.

ていうか,デジタルメーターなんだから,裏設定かなんかでスピード補正表示とかさせてほしいんだが.スプロケットの歯数変更とか割とみんなやるでしょ.

0 件のコメント:

コメントを投稿