あし

バイクの馬力が測りたい!

ってことで


加速度センサを使ってバイクのパワーチェックをする機械を作ったので
ここで公開しておきます。

ネットで同じようなことをしている人が不思議と見つからなかったので


 
11cm×8cm×2cmぐらい


電源投入直後は、現在の加速度を表示しています。
この加速度センサADXL202は重力加速度も計測されるので
1度未満の傾斜も計ることができます。
Gセンサーと呼ばれることも多いです。

このADXL202は

2軸加速度センサ
分解能 0.005G以下
1msアクィジション時間のデューティサイクル出力

などの特徴があります。
電子工作としてはちょっと高い2000円の小指の爪ほどのチップです。
(本体のみならもっと小さいですが)

このセンサの特徴は、ディーティサイクル出力であるということです。

複雑な電子工作をしなくても、このセンサに電源と抵抗一個をつなげば
テスターで電圧を測るだけで現在の加速度がわかります。
電圧ロガーがあれば実装するものはほとんどありません。

電源に5Vをつないだ場合は、テスターで2.5Vであれば0Gということです。
(微妙な誤差についてはアナログでは補正しにくいので後述する説明を読んで下さい)



加速度を積分すれば速度になりますし、
速度変化がわかれば馬力が算出できます。

2軸を計測することによって、計算式に代入することで
傾斜している角度と、進行方向の加速度を分離することができます。


テープで貼ってる黄色のものはただの水平計です。
(作られる方、あると便利ですよ)

ログボタンを押すことによって3秒のカウントダウンが始まり
以降16秒間の加速度のログを取ります。

保存はPICチップ16F84内臓のEEPROM64バイトです。
1秒間に4回ログを取っています。
ログ1回につき内部では128平均を行っています。



保存したデータをPCに入力すると




このような結果が得られます。
このソフトは自作のものです。
正直ここまで作らなくてもエクセルでもつかって
グラフ書かせればよかったと後悔ぎみ。

加速度ライン 赤
速度ライン 紫
馬力ライン 青緑
空気抵抗補正ライン 黒


横軸が時間で黄色のラインが1秒です。

1000回転ごとのラインを引くこともできます。


真ん中の表には1秒毎の加速度、速度、馬力、回転数、トルクが表示されます。







回路図です。
岡田 仁史さん製作のフリーソフトBSchを使用しています。
パスコンは省いています。
16F84Aのピンをすべて使っています。かなり複雑です。







機械の内部はこんな感じになっています。

写真を右下から左上に走ってる黒、赤、青のコードはほとんど液晶のせい(10本近い)
右上でぐるっとなってる青いコード(8本)は加速度センサの垂直配置のせい
あとはシリアル接続用のせい(5本ぐらい)

何かとトラブルになったはほぼ液晶です。
内部に保存したログはシリアル接続で移すか、
液晶画面にでたデータをPCに手作業で入力するかで
ソフトで利用します。

延々とシリアルで出力しつづけることもできるので
PDAなどがあればいくらでもログを取ることができます。


底には気休めで硬めのスポンジ貼ってます。

16F84Aに20MHzクロック
加速度センサにADXL202
液晶はメジャーなSC1602BS
RC232CインターフェースICにADM3202AN

加速度センサは垂直に配置して、
ソケットをホットボンドで固定しています。
シリアル用の端子も外部でホットボンドでつけています。
(厚みがシリアルのコネクタより薄いのでねじ止めができなかったんです)

このセンサはデューティー比で出力をするのですが、
個体差が大きいようで、0Gでもデューティー比50%にはなりません。
簡単な連立方程式でT1とT2への補正値を加える必要があります。

T1 = onサイクル時間
T2 = 全ディーティサイクル時間

0Gのときでも

T2 ≠ T1 × 2


のことのほうが多いと思うので気をつけてください。

僕の場合はX軸が1Gで0.89Gでした。
Y軸は1.01Gだったので、計測には補正値を足してY軸側を使っています。
(X軸は地球に向けてます)

加速度は (T1/T2 -0.5)×8 で算出できます。
単位はGです。

ADXL202は1msで動作させています。
抵抗値によって、T2を1〜10msまでセットできます。
125KΩで1msです。(120KΩでいいようです)

このセンサは-2Gから2Gまで計測できます。
デューティー比が50%で0Gなら
0%で-2G、25%で-1Gの気もしますが、
実際は
25%で-2G、37.5%で-1Gとなります。
12.5%のディーティ比の変化が1Gに相当します。


T1_COUNTING

INCF T1_LOW
BTFSC STATUZ,Z
INCF T1_HIGH


BTFSC PORTB,0
GOTO T1_COUNTING


T1のカウントはこんな感じで

ただしT1をカウントする前に

onサイクルとoffサイクルを一度読み飛ばす処理を忘れないようにして下さい。
PICが読み取りを始めた位置が加速度センサのT1の開始ではないので
絶対に必要な処理です。

1カウントだけノイズでLowになるのを許容するとかいう
処理は書いていませんが、不具合がでていません。
128平均で吸収されてるだけかもしれませんが。


アセンブラで書いているときはテストしませんでしたが、
Cで書いているときはクロック20MHzで-1Gのときは
offサイクルの間に液晶表示などを入れても次のonサイクルの開始までには
計測に復帰できましたが、(確か)0.5Gあたりの角度になると、onサイクルの途中から計測が始まるために
onサイクルを飛ばさなくてはいけません。最大1ms近くロスが起こります。
割り込み処理でやる場合にも多少は考慮する必要があると思います。

またバイクや車の最高馬力を計算することがメインであるなら
バイクが加速するとセンサーがマイナス側の加速度として判断するような
向きに設置すると有利です。
1Gのときに、1ms動作で0.25msの差が出ます。
普通の乗り物なら減速Gのほうが最大値が高く、急なので
総合的にも有利になると思います。




A/D変換で作る場合と、High、Lowのカウントで作る場合の精度の考察

AD変換のついていないPICを使用して作っているので計算が面倒になりますが、
AD変換してログを取るだけでも問題はないと思います。
10ビットA/D変換の機能があるとして、5Vを入力した場合
0.005Vぐらいの精度がとれます。

このセンサがきっかり5mGの分解能として-2Gから2Gの間を800分割で表現します。
電圧としては1.25Vから3.75Vの2.5Vの範囲を分割することになります。
10ビットA/Dであれば上限電圧をVDD、下限電圧をGNDにした場合
この範囲を512分割できます。

つまり10ビットのA/Dを持っていたとしても、
センサの性能をフルに使うことができません。

800 ÷ 512 × 0.005G = 0.0078125

0.016Gぐらいの精度になります。
上限、下限電圧をきっちりあわせても、その倍です。

フルに使うとなれば12ビットA/Dが必要です。


次に今回僕がやっているようなHigh,Lowのカウントによる精度ですが

上のほうのアセンブラのコードでHigh、Lowを判定して
カウントするのに6サイクルが必要です。

20MHzクロックを外付けすれば、実際は5MHzで動作します。
(PICがそういう仕様になっています)

1msの中で5000000÷1000 = 5000サイクル
よって
5000÷6 = 833.3・・・・

この方法では833分割できるということになりますが、
実際には加速度センサは25〜75%の間を800分割するので、その半分になり

800 ÷ (5000 ÷ 6 ÷ 2) × 0.005 = 0.0096

読み取り側なのでさらに2倍(サンプリングの定理より)
0.0192Gということになります。

大きく5mgの精度には届きません。
10ビットA/Dよりも精度が低いということになります。

1ms動作ではなく2ms、3msにすればもっと有利になりますが、
当然、サンプリング回数は減ります。

A/Dはたいして使ったことないので、A/Dがそんなに理想的な動作をするのか
知りませんが・・・

しかし一秒間に1000回サンプリングするとなると、
アナログ出力では難しいと思われます。

アナログ出力は周波数応答に劣るので、1秒間に1000回のサンプリングがどのような
計測値になるのかわかりません。


(分割という表現は不適かもしれませんが、無視して下さい
1デューティーサイクルの中の読み取りを分割、
1ディーティーサイクルごとの読み取りをサンプリングと
変に使い分けています)



今回の仕様では128平均を取っています。
ログを開始した場合は液晶表示をやめるので

128ms + 平均処理 + EEPROM書き込み + その他ちょっと

のみとなります。

2ms動作にすると128平均では一秒に4回の記録が難しくなります。

2msでは64平均あたり。
4msで32平均あたり。

が最適だと思いました。

2の乗数になってるのは計算処理を減らすためです。
ここまでやるとプログラム容量の限界がきてるので。



追記

仕様を変更したため内部の精度が上がりました。

まずHighとLowのカウントで上位バイトへのインクリメントをなくしました。
0〜255までしかカウントできなくなることになります。

これでカウントにかかるサイクルが6サイクルから4サイクルに減少します。
以前のように計算をすると

800 ÷ (5000 ÷ 4 ÷ 2) × 0.005 = 0.0064

よって0.0128Gの精度になりました。

この仕様での実装ではT2カウントが1144ぐらいです。

0〜255までのカウントで計算ができる理由は急激にGが変化することがないため
あえて上位バイトまで計算しなくても予測することができるためです。


T2が1144として、T1が128カウンド以上の変化が1msで起こった場合
測定ミスが起こる可能性があります。

143カウントが1G分に相当します。
つまり128カウントは0.895・・・Gです。

1msに0.895Gの変化が起こるということは、1sでは895G変化する傾きということになります。
9.8 × 895 × 3.6 ≒ 30000km/h

音速の20倍以上です。

音速の20倍でこの機械が振動するとも思えないので、
実際は問題ないはずです。


カウント上限が増えたために、128回足すと、2バイトでオーバーフローするように
なってしまったので、64平均に変更しました。
またx,yの2軸を計測するようにしたので、実際ちょうどよかったですが。


あと、
X軸とY軸のT1の開始タイミングは違います!

同じであれば同じサイクルでYを先に図って、Xはまだ続いているハズだから
Xの残りをカウントして〜
というのができるのですが、無理だということがわかりました。
製作の際は気をつけてください。



バイクに積む場合は精度を上げるためにできるだけ水平に設置します。
傾いて設置した場合でも計算で考慮すればいいのですが、
分解能が有限なので、水平のほうが有利です。
水平と30度傾いている場合を比べると13%ほど精度が落ちます。


ログボタンを押してカウントダウン後
2〜3速程度でレッドまでアクセル全開で回します。



総コスト(あいまいな記憶込み)


PIC 16F84A 350円
加速度センサADXL202 2000円
液晶SC1602BS-B 750円
RS232C IC ADM3202AN 200円
金属ケース 500円(ぐらい)

あとはレギュレーター、抵抗、コンデンサ、線材などです。




全部で4000円ちょいです。

加速度センサはすぐに取り外しできるので、
次に製作予定の警報機に移植するかも。






追記

RS232Cロガーを作りました。
PDAは持っているんですけど、シリアルケーブルがないんで。
バイクにノートパソコン積むのは大変ですし。

ケーブル3000円とかしてますし。








外 ちょうどタバコの箱ぐらい。けっこう小さい。



RS232Cのオスとメスの端子2つとLED、電源スイッチのみ。
操作スイッチはありません。
クロスケーブルや変換コネクタが地元で売ってないので
仕方なく機器用のオスとPC用のメスをつけることにしました。
おかげですべて一種類のケーブルで済ませることができます。

データのダウンロードなどは、すべて接続してからのコマンドで行います。
EEPROMに24LC256を使っているので32Kバイトの保存ができます。

この時点で加速度センサの機械のほうは
秒間15回X軸とY軸とT2をそれぞれ2バイト値の16進数で出力するので
1データは改行コード込みで16バイトになります。
これで30分程度の時間を記録することができます。

汎用に使えるように作ったつもりなので、
ポータブルGPSのログ保存に使えるかも。

こっちの総コストは2000円ぐらいです。
あと半日潰れました。






評価

CRM250Rでの実験では、
最高馬力発生回転数、最高トルク発生回転数の誤差が±100rpm程度に収まっていました
他車種でのテストでも信頼できそうなデータがでています。
(内臓EEPROMに秒間4回保存したデータによる補完なしの計算で)
しかし、設置する際に非常に気を使う必要があります。
2軸を計測しているため、縦方向(ウイリーの方向)の角度については
緩和できますが、横方向にズレた場合は対処しようがありません。


バイクだけじゃなくて車でも使えます。
その場合は限定されたメモリに保存する意味はあんまりないですけど。
シリアル接続のみにして液晶とっぱらったほうが楽かと。



シャーシダイナモ1回で回収できそうなコストなので
ヒマな方は試してみては?


今後は3軸の計測をする新機種の製作にかかります。




くさ

もどる?



いちおうですが注意事項:製作などは自己責任でおこなってください。
このページに記載されている情報をもとに製作された結果、
何らかの事故により損害をうけたとしても、"やまもっち”は一切関知しません。