PICを使ったお手軽回転数計

Last-modified: 2016-01-16 (土) 19:12:13
初出 2006-8-18
最終更新 2015-11-25
製作時期 2006-42015-11
実車(自動車やバイク)のエンジン回転数計なら、デジタルスピードメータの自作のページをご覧下さい。本ページのものはドローンのローターや扇風機やPCのケースファンの回転数を非接触で計測する目的に向いています。
(2015-11-25)課題(下記2014-8-9追記)のバージョンをブレッドボード上ですがさくっと作成してみました。
 

(2011-12-7)CCP計測を用いたバージョンを公開しました。 CCP計測はハードウェアによる計測です。
(2014-8-9追記)非接触式(光検出式)回転数計としてもっと実用性を上げるには、強力LEDのパルス発光と入力のスレッショルド調整、液晶、電池(or電源)を追加する必要があるでしょう。と思いながら7,8年経ちました。


 

新板

新板

(2015-11-25)
ブレッドボード上ですが、新板を作成しました。自分で(赤外線)LED発光し反射を受信して回転数を計測、CCP(ハードウェア)計測、計測可能最低回転数チェックあり、パルス(羽根の枚数)設定変更ボタンあり、ホールドボタンあり、LED発光強度変更機能あり、という仕様です。
rev-cntr_3_s.jpg
クリックすると大きな画像で表示されます
ほぼ同時に作成したあちらと異なり、回路が少し複雑でブレッドボードの写真だけでは回路を示せないので回路図を作成しました。

  • 赤外線LEDは余計な赤外線が関係ない方向に行かないように緑のテープで周囲を覆っています。
  • 本来なら(基板に作りこむなら)、赤外線LEDと赤外線リモコン受信モジュールは出来るだけ近い位置に設置すべきです。
  • 赤外線LEDの出力調整は5kΩの半固定抵抗でおこないます。出力はあまり強くなくて済む場合が多いので5kΩの可変抵抗で適切と言えます。
  • 赤外線リモコン受信モジュールの周辺にはデータシート推奨のノイズ除去回路を組んでいます。スイッチング電源の場合、通常、ノイズ除去回路は必須です。私の認識では、赤外線リモコン受信モジュールの周囲にノイズ除去回路が要らないのは、電池からの直接駆動かUSB電源の場合のみです。
  • PIC12F683を2個使います。
  • (今の目からは機能貧弱ですが、秋月ライタ等旧形式のライタで書き込めるという大きなメリットを持つ)10年選手のPIC12F683をもう一度見なおしてみようというのも今回の目的の一つです。
  • I2C機能のないPIC12F683ですが今回、秋月のI2C液晶をソフトウェアで操作するライブラリを作成しました。後閑さんのHI-TECH C用ソフトウェア・I2C液晶操作関数をXC8用に修正し、さらにそれとiwamotoさんのストロベリーリナックス用I2C液晶操作関数をマージし、さらに秋月のI2C液晶用に修正したものです。
  • I2C液晶に、現在設定されている、1回転あたりのパルス数(羽根の枚数)、回転数(rpm)を表示します。
  • 両チップとも同じ向きで、ピン1が左上でです。
  • 上側のチップは単に38kHzの方形波を発生するだけの役割です。
  • 下側のチップは8ピン全て使用しています。ピン3が赤外線リモコン受信モジュールからの入力ポートです。同モジュールを用いることで、環境光による誤反応を効果的に抑制することができます。
  • ピン4は1回転あたりのパルス数(羽根の枚数)設定ポートです。ボタンを押す度に2,5,7の順に設定パルス数が変更されます。
  • ピン2はホールドボタンです。トグル式ボタンです。ホールドモードに入った場合は、ボタンを押した際の計測値表示を保持し続けます。
  • ピン5はCCP1モジュールによる回転数計測ポートです。ピン6、ピン7は夫々I2CのSCL,SDAです。
  • ピン4はチップの仕様上、内部でプルアップできませんので10kΩの抵抗でプルアップしています。
  • I2C液晶は秋月のこれです。
  • 本来プッシュボタンは2個付くのですが、写真では1個しか付いていません。テストの際は必要が生じる度に必要なポートにスイッチを移動させてしのぎました。
  • 写真のブレッドボードでは電源アダプターから5Vを取得していますが、基板上に作りこむなら当然、電池駆動方式にするべきだと思います。電池1本か2本とこれなんかを組み合わせるといいと思います。
  • ファームウェアではメインループでソフトウェアI2C通信しているのに割り込みを多用しているので、液晶に時たま一瞬、化け文字が表示されます。
  • ファームウェアには回転数表示では通常おこなう、なめらか化処理を組み込んでいません。というのは、扇風機等、障害物(ガード等)越しに計測する場合等は頻繁に誤反応が生じます。そのような状況ではなめらか化処理はおこなえないからです。
  • 頻繁に誤反応が発生する場合でも人間の眼でどれが正しい測定値か識別できるように、測定間隔を0.4秒ほどと、かなり長くとっています。
  • 頻繁に誤反応が発生する場合でも、目安としては、3回続けて一定の値が表示されたなら、それが正しい測定値だと判断できます。
  • 照射光が38kHzのパルスなので高回転時の精度には弱点があります。高回転時の精度を求めるなら旧版のような受信回路に変更すればいいでしょう。

新版回路図

rev-cntr_circt_new_s.png
クリックすると大きな画像で表示されます

新版ソース

非接触式回転数系・ソース(XC8用&MPASM用)、MPLAB X IDE用プロジェクト、HEX一式
ダウンロード  file12f683_rev-counter.zip

 

↓2011年から掲載している、内部の計算に用いる数値を求める表計算シートです。実はこのシートはこちらのパラメータ算出シートの簡略版です。
ダウンロード  file回転数計・パラメータ算出シート.xls

 

今回の新板でもこの表計算シートで求めた値を(ほぼ)そのまま使用しています。ただし今回設けた「計測可能最低回転数チェック」の都合上、パルス(羽根の枚)数が2の場合については理想的なプリスケーラ1:2に設定できず、プリスケーラ1:1を採用しています。

新板部品表

非接触回転数計の部品表(秋月の該当ページへのリンク付き)

部品名備考数量
72x47mmユニバーサル基板1
PICマイコン PIC12F6838ピンDIP2
8ピン丸ピンICソケット2
I2C接続小型LCD(8x2行)ピッチ変換キット1
赤外線リモコン受信モジュールOSRB38C9AA2個入り1
5V出力コイル一体型昇圧DCDCコンバータ1
5mm赤外線LED5個入り1
緑色LED実際には好みで1
トランジスタ2SC1815GR1815で十分1
半固定ボリューム(5kΩ)制限抵抗用1
タクトスイッチ実際には好みで2
基板用スライドスイッチ(横型)実際には好みで1
カーボン抵抗 22kΩノイズ除去用1
カーボン抵抗 10kΩプルアップ用1
カーボン抵抗 4.7kΩ入力抵抗用1
カーボン抵抗 470Ω制限抵抗用1
カーボン抵抗 75Ωノイズ除去用1
電解コンデンサ 47μFノイズ除去用1
電池ボックス(単3x2本用)実際には好みで1

※ファームウェアを修正すれば3.3Vシステム化も問題なく可能です。


旧版

非接触式(光検出式)回転数計です。計測結果はシリアルに出力します。電源はシリアルから確保します。

 

本機を改造してセンス線を計測するDCファンの回転数計(非接触ではありません)を作りました。
PICを使ったお手軽DCファン回転数計のページへ実はこっちの方が内容があるつもりです。

 

PCの冷却ファンとかラジコン模型のプロペラの回転数等を計ることを目的として作った工作です。
私はもっぱら静穏化したPCのファンの動作確認で使用しています。
多分もっと高回転の物も計れると思いますが試すものを持っていません。
材料費数百円の格安でお手軽なPIC電子工作です。

 

PICダム端末のアタッチメントとしても使えます。

 

お手軽工作なのでプロペラ羽根の枚数は7に固定しています。
模型のプロペラの回転数を計るときは適宜、2とかに変更して下さい。
必要であれば羽根の枚数をセットするインターフェースを追加してみて下さい。

旧版外観

rev-cntr_1_s.jpg

旧回路図

rev-cntr_circt_s.png
LEDは反応しているか確認する為に付けています。これを省いてフォトトランジスタの出力を直接PICに入力することも出来ると思います。

 

BSch3V形式(zip圧縮)


フォトトランジスタ

TPS615のデータシートに、エミッタ-GND間の抵抗値(回路図では33KΩの抵抗)を小さくすると反応速度が上がるとあります。
現在の抵抗値は割と大きめなので、反応速度は低く、数万rpmが検出限界です。その代わり光量が少ない環境(室内)でも使用できます。

ケース

ダイソーの薬ケースです。間仕切りはニッパで切り取りました。
透明度は光を検知するには十分なようです。

基板

rev-cntr_2_s.jpg
他の用途で使ったものを転用しました。スカスカです。

ソース

MPASM形式
filerev-cntr.asm
ebから入手したサブルーチンを利用して簡単に作成しました。

 

書き込みには宜しければブレッドボード上に作る格安PICライタのページをご利用下さい。

 

ソフトウェアTXルーチンは、
コメを噛めで見つけたソースを使いました。
特にこのルーチンを使う必然性はありません。AppNotesのルーチンとか下のリンクから入手できるものを使っても良いです。
入手先で著作権の掲示はありませんでした。

 

その他のルーチン群はELECTRONICS SHELVESから入手しました。
入手先で著作権の掲示はありませんでした。

 

私自身の著作権も放棄します。

 

(2007-12-25追記) 1年2ヶ月ぶりに追記します。上記のとおり日頃私自身は本機をPCのファン(主に2線式の電源ファン)の回転数計測用途にしか使用していないので、現状の仕様(精度、回転数計測範囲)で問題は生じていません。しかし本機はここで説明するところの1の方式を用いた簡単なプログラム(作成時間30分以下)を使用しているので、回転速度が遅くなるほど精度が落ちる短所があります。

(同じく2007-12-25追記) せっかくの非接触式なので数rpmなどの非常に遅い回転速度でも精度を確保したい方もいるでしょう。その場合はここで説明するところの2の方式にプログラムを入れ替える必要があります。そのプログラム作成には私の力だと1時間はかかると思います。それをやるほどの動機がないので今のところやる予定はありません。でも、どなたかが前述の2の方式のプログラムを作成された場合は、私もそのプログラムに入れ替えたいので、是非公開して頂きたいです。(お手数ですが当方への連絡もお願いします。日頃あまりwebで検索しないので)

 


(2011-12-7追記)やっと上に書いた2の方式のプログラムを作りました。ただし「動くプログラミングサンプル」程度です。これ用のC言語のソースを元に、アセンブラ化すると同時に大幅な簡略化をおこないました。低速回転時用のINT割り込み計算モードを省略していますので最低表示回転数未満では出鱈目な数値を表示します。フィルター機能も省いています。ただし(もちろん最低表示回転数以上では)精度が高いという長所もあります。尚、こっちの機能も含んでいます。
MPASM形式
filerev-cntr-ccp.asm
HEX
filerev-cntr-ccp.hex

 

書き込みには宜しければブレッドボード上に作る格安PICライタのページをご利用下さい。

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)