あむちょです。
またバイクネタです。
前回ファンネル交換をした際に後々必要な回転信号をとっておいたので、回転数を計測してみる。
エンジンを何らかしら制御してやろうって時に回転数は必須なのでその取り方。タコメーターはついでです。
完成品はこちら。
目次
回転数の取り出し方
車だとCAN通信で簡単に取り出せれるけど、バイクでCAN通信はまだあまり一部でしか採用されてません。
方法としては
- イグニッションコイルの信号を拾う
- クランクパルスセンサーから拾う
- インジェクター信号から拾う
- メーター信号から拾う
- ECUから拾う
- スピードとギヤポジションから計算(あまり実用的ではない)
っといた方法があります。
1,3の方法は車種によらず4サイクルエンジンなら2回転で1パルスが生じるので計算しやすいが、マイコンなどで扱いやすい波形になるように回路を組む必要があります(原付などはイグニッション信号が1回転1パルスの車種もある)。
2は車種によってパルスの数が違ったりしますし、回路が必要です。
3、4のメーターまたはECUからの信号は処理しやすく加工されている場合がほとんどなので、今回はメーターに繋がるECUからとりだしました。
配線図
配線図を見ると、メーターからでもECUからでも繋がってるのでどちらから取ってもいいです。
取り出しやすいのでECUから。
フルパワー化した際につけたRiseの制御ユニットはECUの回転数信号を取り出してたのでそこから分岐。
フルパワー化についてはこちら。CBR1000RRのフルパワー化
灰色カプラーの黄色い線が回転数信号で、もともとの配線の色は黄/緑です。
オシロスコープで計測
小型のオシロスコープで計測してみた時の写真がこちら。
綺麗な波形が出ているので、マイコンで処理しやすそうです。
使ったオシロスコープは。ちょっとした信号の解析には十分に役に立ちます。
アイドリング約1500回転でパルス間隔が20ms、電圧が12vでした。
周波数にすると50Hzとなるので1分あたり50×60=3000パルスとなり、1回転あたり3000/1500で2パルス。これは4気筒エンジンの点火感覚と同じですね(4サイクルは2回転で1回点火なので720度/4気筒で180度、1回転360度換算で2回)。
信号の電圧が12vもあるので、フォトカプラでマイコン側とは絶縁して接続してやります。
プルアップにして入力しているので信号がHIGHの時、マイコン側はLOWになります。Arduinoではプログラムでプルアップにできるのでプルアップ抵抗は必要ありません。
回転数の求め方は、決まった時間内のパルスをカウントするか、パルスの周期を計測して求められます。
回数をカウントする方法は低い回転の時に誤差がでやすく、精度をだすには入力待ち時間が必要なので周期計測でやります。
rpm = 1000[ms]/(周期[ms]*2[1回転当たりのパルス数])*60
Arduinoで計測する場合、パルスの変化で割り込みさせて次の割り込みまでにかかる時間を計測すれば周期が求まりす。
割り込み中はシリアル通信のデータが破棄される可能性があるとのことなので、今回は割り込みは使わず簡単にパルスを計測できるpulseInをつかいます。
pulseIn(pin, value, timeout)
pulseInは第2引数に指定した状態(HIGHもしくはLOW)に変化した時から計測がはじまり、また変化したら計測完了です。
また第3引数でタイムアウトするマイクロ秒を指定しておかないと最大で1秒間処理が止まってしまいます。
回転数信号のような常にパルスが発生していて、HIGHとLOWの間隔が同じような信号はこっちの方が簡単です。50kHzまでは割と正確にはかれたが、1MHzあたりから誤差がでました。
BLEでスマホに表示
元々バイクにArduino megaを積んでいて計測データ(タイヤ温度、空燃比、電圧、アクセル開度)をBluetoothでスマホに送信していたので回転数も送信してタコメーターを追加。
タイヤ温度は以前フリスク温度計で紹介したものと同じセンサーです。Arduinoとフリスクで赤外線温度計を自作してみた
あとのデータは全部A/D変換で読み取ってます。Bleモジュールは浅草技研のをつかっています。ペアリングなしでシリアル通信を簡単に無線化できます。
せっかくアプリを作ったので、タコメーターではなく汎用的なスピードメーターにでも変えてリリースしようかな
未定
[ad][ad]