スピードパルスコンバータ


2/11
YZF-R1の車速はエンジンの出力軸の回転をセンサーで拾った
パルスから計算して表示されています。パルスは0-5Vの出力です。

距離に対するパルス数はWebで調べてもはっきりとは分からない
ので ECUのダイアグモードでタイヤ1回転に対するパルス数を調べ
てみようと思います。パルス数を見るのはダイアグモードの07です。

リアをジャッキアップしてタイヤを回して測定すると出力1回転に対し
て24-26パルスになり16T/43Tのスプロケの場合リアタイヤ1回転に
対して70パルスくらいでした。

リアタイヤの外周は約2mなので 60km/hでは約580Hzとなります。
スピードメータは5km/h以上で速度を表示し300km/hをフルスケール
として考えた時の車速パルスの周波数は およそ
        5km/h     48Hz
    300km/h   2916Hz
余裕をみて40-3200Hzくらいを測定範囲に考えれば良さそうです。
1パルスの時間は およそ
       40Hz     21ms
    3200Hz    0.3ms
となります。
誤差を1km/hとすると 測定時間の誤差は およそ
       40Hz   2000μs
    3200Hz        3μs
となるので 最大21msまで測定できて誤差3μsにするように考えます。

動作クロック10MHzのとき 1クロックは0.1μs PICのタイマーを使って
1/4に分周されたとしても0.4μs単位で計数可能です。
1クロックをそのままカウントした場合 21ms測るのにカウンターは
18ビットで26msまで計測可能で 1/4分周された場合は16ビット必要です。

パルス出力にPWMモデュールを使った場合
最大のパルス周期は 256x4x0.1x4=409μsとなり6ビット足りません。
プリスケーラを4から16にしても1638μsで610Hzが下限となります。
40Hzを出力できるように動作クロックを下げると655kHz以下、すると
1クロックは1.5μs以上となり3200Hzに対する誤差はぎりぎりです。

クロックを切り替えて計測する事も出来ますが パルス出力も一緒に
処理しようとすると二重割り込みが発生するので 計測と出力を分け
て処理した方が良さそうです。

アナログICで周波数ー電圧変換をする場合 電圧ー周波数変換の精度は
ある程度確保できますが、周波数ー電圧変換では 出力のリップルを抑え
て精度を上げる為に出力の時定数を大きくすると反応が遅くなってしまいます。
又 アナログ回路を入れると温度や動作電圧によって出力が変動するので
補正も考えた方が良いです。

そこで考えたのは下の方法。

1. パルス間隔をPICで測ってアナログ電圧出力し その電圧をアナログV-F
変換をして出力する。停車時には別のPICで定数補正する。
2. パルス間隔をPICで測って その値をもう一つのPICに送ってそのPICが
パルス出力をする。
3. PIC 16Fxxではなく 16bit Timerが使えるdsPICを使って Input Capture
でPulse幅を計測して 16bit PWMで出力させる。

3だと残りのPinでギア比の入力をさせたり出来るので良いし作りこむ度合いが
少なくて済みます。面白みには欠けますが 3が良い方法なんでしょうね。

と言う事で 先ずはdsPICの書き込みについて調べると

1. microchip推奨 純正書き込み器 PICkit 3に書き込み用のアダプタで書き込む。
2. シリアルポートに自作の書き込み用のアダプタを付けて書き込む。
  2a. PicProg R5のタイプ JDM programmerとか RS232Cの信号を ICSPの
    信号に変換するだけで 書き込みコードの生成はパソコン側がする物。
  2b. PICerFTのタイプ パソコンから受け取ったデータから書き込みコードを
    作って書きこむ物
  どっちにしても1.より安価です。作って動くまでが楽しいといえば楽しい・・・。

今回は 書き込んだ後が楽しい所で 書き込みで悩むのもどうだか、肩慣らしに
作ってみると言うのもありなんですがね。

> 次