PICを使ったお手軽DCファン回転数計

Last-modified: 2015-12-25 (金) 00:48:33
初出 2006-10-1
最終更新 2007-7-18
製作時期 2006-9
DCファン回転数計は1回転あたり2パルスに対応した(つまりごく普通の)エンジン回転数計(タコメータ)と実質的に同じものです。ということでデジタルスピードメータの自作のページもご覧下さい。←パルス計測・変換に関する様々な情報を載せています。

(2011-12-7)本ページの回転数計用の新しいプログラム(ファームウェア)を非接触式回転数計のページに公開しました(本ページの回転数計は非接触式回転数計とハード・ソフト共に共通になっています)。
(2015-12-1)非接触式回転数計のページは最近新装なっていまして新板が追加されています。ますます↓このページは必要性が薄れています。


dcfan-cntr_1_s.jpg
使い方:ファンとマザーボードの中間に計測用の分岐ケーブルを接続して計測をおこないます。

 

別ページのPICを使ったお手軽回転数計{非接触式(光検出式)}を改造し、DCファンのセンス線を使って回転数を計測する機能を追加しました。
切替スイッチで光検出モードとセンス線モードを切替えて使用します。
他のスペックはPICを使ったお手軽回転数計と同じです。

(2007-7-18追加) 計測するだけじゃなくてファンコンを自作するなら、
このページ→PICマイコンを使ったファンの速度制御がいいと思います。
 

センス線の仕様

実は仕様書などは何も調べていません。
適切にプルアップすれば計測できるのは常識的にわかっていましたので、工作したまでです。
実際に工作し、試しに計測をおこなって初めて、1回転につき2回のエッジ(立上り、立下りそれぞれ)があることがわかりました。(もしかするとファンによって異なるのかもしれません。)

 

現状、光検出モードもDCファン(羽根の枚数は7枚)に特化した仕様となっています。計測した値を光検出モードでは7、センス線モードでは2で割って最終結果を得ています。

回転数の検出方式について

本機の場合は、単純に一定時間あたりのパルス数を計測しているだけです。

 

自動車のスピードワーニング装置の「回転数(パルス数)の検出法について」に、このあたりのことを少し載せています。

 

本機の方式は超低速回転の計測を苦手としています。精度が落ちてしまいます。

どの割り込み機能を使うか

本機(本ページの製作物)は外部割込みを使用しているのですが、実は本章の趣旨は「変化割り込みによる回転数計測のすすめ」といったものです。

 

外部割り込みは立ち下りエッジ、立ち上がりエッジを識別することができますが、変化割り込みはそれができません。変化割り込みでパルス波を検出する方法は邪道です。
波形の立ち上がり部、立ち下がり部が点対称とは限りません。またスレッショルド電圧は通常、中間の電圧とは異なります。立ち上がり、立ち下がりの両エッジの平均を採用でもしない限り、変化割り込みでのパルス波検出は外部割り込みを使用する場合に比べて精度が劣ります。この短所は、一つのエッジともう一つのエッジの間の時間を計るという計測法を採用した場合等に特に大きく影響します。

 

しかし、たとえば2桁の有効桁を確保したい場合の計測時間中に200個くらいの割り込み数を確保できる計測法を採用したなら充分実用になります。アマチュア電子工作的には全く問題ない仕様を確保できます。

 

また変化割り込みには、「(同時に複数チャンネルを扱うことはできないが、)複数の入力チャンネルの切替がソフトウェアでおこなえる」という、外部割込みにはない長所があります。本ページで紹介しているPIC12F683に限らず(私が知っている範囲では)、一般的に1個のPICには外部割り込みが1ポートだけしか備わっていません。その為、外部割込みで複数の入力チャンネルを確保したければ、物理的な切替手段等を用意する必要があります。これに対して変化割り込みは複数ポート備わっている上に、それをソフトウェアで切り替えることができます。

 

アマチュア電子工作的にはパルス波検出ポートを複数確保する為に変化割り込みを活用する手法は”あり”だと思います。

 

本機についても最初から非接触式とセンス線式両対応の回転数計を作るつもりであれば、たとえば非接触の入力は外部割り込み、センス線の入力は変化割り込みに(別々に)接続したと思います。そうすればDPDTのスイッチ(実際にはSPDTを2個を使ってますが)は必要なく、何らかの(SPDTとかタクトスイッチ等)1系統のスイッチだけがあれば済むことになります。ソフトウェアで入力チャンネルを切り替えることも可能となります。改造当時、ファームウェアの修正が面倒だと思ったので現在の仕様を採用したのですが、今から思えばやはり外部割り込み、変化割り込みの双方を利用する(もしくは変化割り込みのみで複数チャンネルを確保する)方式を採用すれば良かったと思います。

 

2007-4-23 変化割り込みで回転数を検出するファームウェアを動作検証してみました。回転数検出に使用できることを確認しました。その際のソースです。filedcfan-cntr_interrupt-on-change.asm(※ieの場合、直接開けないことがあるようです。ページ下部に以前から掲載している外部割り込みを用いたソースとの差異は僅かです。)プログラミング上の注意点を添えておきます。割り込みルーチン内でbcf INTCON,GPIF(RBIF)の前にmovf GPIO(PORTB),W等を実行する必要があります。
↑このソースがこのページとこのページを合わせた中で、最も価値のある(他ではあまり見られない)ものです。複数ポートの割込みを実現しています。PIC12F683にはCCP機能(割込み間の時間を測ってくれる機能)があるのですが、その機能を利用していてはこのようなことは実現できません。(CCPを使う場合より精度は低いですが…)

回路図

dcfan-cntr_circt_s.png
PICを使ったお手軽回転数計の回路図に僅かに追加しただけです。
プルアップ抵抗を切り離すスイッチを取り付けた方が好ましいかもしれません。

 

BSch3V形式(zip圧縮)


分岐ケーブルの基板

dcfan-cntr_2_s.jpg
抜差し易くしたかったので、専用のコネクタは使わずピンヘッダを使いました。上段の真中のピンは電気的には必要ないものですが、逆刺し防止用に残してあります。

基板

dcfan-cntr_3_s.jpg
特段掲載の価値はないと思います。DPDTトグルを表に1個取り付ければ済むところですが、好みでSPDTを2個、裏に取り付けています。

ソース

PICを使ったお手軽回転数計のソースと十数行異なるだけです。
MPASM形式

※ieの場合、直接開けないことがあるようです。

 

(以降は、PICを使ったお手軽回転数計と同じ文言です。)

 

webから入手したサブルーチンを利用して簡単に作成しました。

 

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

 

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

 

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

 

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