デジタル回転計の製作
ちょっとだけ凝ってみました!
次の開発(ブラシレスモータの制御)に必要になり、急遽製作しなければならなくなり、作くることになりました。どうせ作るなら今後も使えそうな機能を入れてみようと、ちょっとだけ凝ってみました。
色々やるにつ入れて欲が出てきて、結局は右写真の様なものになりました。 結構使い勝手がいいもので、性能も恐らく市販品と引けを取らないくらいになったと思っているのですが
ヽ(~〜~ )ノ ハテ? 駆動電源はバッテリーで、消費期限が近いものが格安(300円)で(型番:2CR、
電圧6V、リチウム電池)売られていたので、これを使おうと思ったのだが、電池ソケットがありません。
手持ちの材料を探したところ、CR2のリチウム電池ホルダーがあったので、これを使うことにしました。長さが少しだけ短いですが、
電池を抑えている
板バネを少し曲げてやれば、結構しっくり入ります。
最初に思いついた動作は「1秒間に入力されるパルスを数え、それをrpsとして、
60倍してやればrpmが求められる」と単純な構想でプログラムを作り、動作させてみました。
確かにそれらしい動作をしましたが、いまいち目標から外れています。(特に200rpm以下の精度が悪い!)
掲載した回路図と違いますが、この時回転信号はマイコンICのT1CKI
(11Pin)に入力し、1秒はTMR0とプリスケーラ値と
変数バッファ値とで作りだし、1秒検知後、TMR1に入力されるパル数を計測していました。当然、CCP機能は使用していません。
色々調べた結果、「周波数カウンターの応用」であることが分かり、演算方法にも主に2種類あることが分かりました。
その一つが先ほど紹介した「1秒間に入力されるパルスを計測する」方法で、もうひとつは「1周期のパルス時間を計測する」方法がありました。
両者はそれぞれ長所と短所があり、主に低い回転数は後者の方法が良いとされています。
また高い回転数の場合は前者の方が良いみたいです。現に最初の製作したものは 10MHzのパルスを入力でき、
それをrpm表示させると、とんでもない数値になりますが、精度はGoodでした!今回の目標回転数は比較的低い方なので、
後者の方法で製作することにしました。
さて、1周期をどの様にして計測するかはWebサイトや書籍を見ると、大半はCCP機能にある「キャプチャーモード
」か「コンペアモード」を使っているようです。今回は「キャプチャ-モード」を使います。原理はCCP1
(13Pin)と言う入力端子に立ちあがりまたは立ち下がり(設定による)のエッジを見つけると同時に、
CCPR1LとCCPR1Hと言う8ビット×2=16ビットのレジスターにTMR1(16ビット)
の内容がコピーされます。これと同時に割り込みがかかります。今回はこの機能を使います。
TMR1の内容を0にセットしておき、TMR1をストップしておきます。CCP1の入力端子に回転センサーの信号を入れます。
この信号のエッジにより、最初の割り込みでCCPR1LとCCPR1Hの内容は0になります。それと同時にTMR1をスタートさせます。
次の割り込みで、TMR1をストップさせます。あとは、TMR1のオーバーフロー回数を変数より読み取り、
下記の計算をさせます。
65536 × TMR1のオーバーフロー回数 + CCPR1HとCCPR1L(16ビット)の内容
この値が、入力されたパルス数です。あとは1パルスの時間を掛けて、その逆数を求めれば、rpsが求まります。
ちなみにTMR1の入力は外部入力(同期)にしておき、T1CKI(11Pin)より、
16MHzのクロック発信器の信号を直接入れています(回路図参照)。
この信号をプリスケーラー値「4」を入れています。TMR1のプリスケーラ値は
×1、×2、×4、×8、が設定できますが、この値が小さいほど精度が上がります。しかし、
(1/16MHz)×2=125ns(
TMR1) < (1/16MHz)×4=250ns(メインClock)
となり、
メインクロックより小さくなると同期がとれなくなり、計測不能になります。またTMR1を非同期に設定すると今度はキャプチャーがうまく取れないとされています。
(やったことがありませんが・・・)
↑ センサーコネクタ ↑ センサー部
↑ 計測と編集スイッチ ↑ パワースイッチ
↑ 計測部全体外観
全体の大きさは、93mm×64mm、厚さ22mmで透明のポリカボネートに入っています。ちょっと変わったこととして、
パラメータを設定するためのスイッチを、通常であれば5つのタクトスイッチを用意するのですが、上下左右+
PUSHスイッチが一体になったジョグスイッチを使いました。LinKman社製で
マルツパーツ館で189円で売っていました。面実装タイプのものですが、操作する部分が短く、専用のカバーらしきものものありません。
仕方ないので5mm角のアクリル棒を加工して、ちょっときつめにはまる穴を開けて作り、上下左右の操作に
使い、真ん中にφ2.1mmの穴をあけ、φ2のメッキ線を通し、PUSH操作として操作します。
実はこの部分が一番難しく、今でもちょっとぶつけると外れます。また逆さまにするとφ2のメッキ線が落下します。めんどくさいのそのまま使っていますが、いつかは直したいと思います。
操作する上では特に問題なく行なえ、5つのスイッチよりはるかに便利です。今後はこの操作ノブを改良したいと思います。以下は、POWERスイッチをONにし、ジョグスイッチのセンターPUSHを押すたびに変わる操作画面です。
@起動時 [PUSH] Aゲート時間選択 B単位選択
C比較機能ON/OFF D 1回転当たりのパルス数設定
E 運転待機画面
G F
C Compare Function のモードで'ONを選択すると 次に表示する画面はFの画面が出てきます。←矢印を押すごとに Under設定値の桁が左方向にブリンクしていきます。最上位桁まで行き、さらに←矢印を押すと今度はOver設定値の最小桁がブリンクします。Over設定値 の最上桁まで行き、さらに←矢印をクリックすると、Under設定値の最小桁がブリンクします。逆に→矢印を押すと、逆方向にブリンク桁が移動していきます。変更したい桁を部リンクした状態で、 ↑矢印で+1、↓矢印で−1されます。設定できる範囲はそれぞれ99999までです。UnderとOverの設定値は必ず、 Under値 < Over値で設定して下さい。この監視は手抜き (゚-゚;)ヾ(-_-;) オイオイ... してソフトに入れていません。万一、この条件が成り立たない場合は、黄色と緑色の 警報LEDは両方ONになります。回転数[rpm]<Under値の場合、緑色のLEDが点灯します。また回転数[rpm]>Over値 の場合、黄色のLEDが点灯します。Unde値<回転数<Over値の場合は、両方のLEDは消灯しています。r設定完了後に、センターPUSHを押すと、 Dの画面になります。
その他それぞれの設定内容は電源をOFFにすると初期値に戻ります。今回使ったマイコンにはEEP-ROMがあるので保存すれば良いのですが、事情が変われば再設定するのは同じなので、あえて保存機能を省きました。
D H
[rpm」の表示の時は、Dの様に小数点第2位まで表示します。また「rps」の時はHの様に小数点第3位まで表示します。
また計測は必ずDまたはHの画面状態でないと行えません。計測可能状態の画面で「MEASURE」スイッチを押すと、計測が開始されます。
運転は「MEASURE」スイッチを押している間だけ行われます。このスイッチを押している間、画面の右横にある青のLEDが
サンプル時間に合わせて点滅を行います。スイッチから手を離すと、最後に計測した内容のまま表示は保持します。
性能を比較するのに用いた計測器は下記のものです。もう20年以上前のもので、「日本電産シンポ工業(旧:シンポ工業梶j」社製の計測器で、
当時にしては画期的で、幅広い計測が行なえ、精度も±0.008%±1digitと言う高性能のなものです。
入力:AC100-AC200V
測定範囲:0.2〜99999rpm
計測可能パルス入力:1Hz〜10kHz
パルス幅:30uS(min)
信号電圧:0.2V〜30Vp-p
センサー:光系、磁気系OK
その他:アナログ出力付
センサー用電源内蔵
↑本器と回転計DT-5FV ↑ 回転計DT-5FV
←左側が本器センサーピックアップ部で右側がDT-5FVのセンサー部です。そして、下にあるのがescap社製のDCコアレスモータ
です。
左図のように同時に計測しようとしたところ、本器のピックアップがDT-5FVのセンサーから出る光に影響され、正確な測定ができませんでしたので個別に性能を確認しました。
● 360rpm付近の計測
↑ 366.44rpm
● 500rpm付近の計測
↑ 506.30prm
● 1,000rpm付近の計測
↑ 1,012.64rpm
● 1,500rpm付近の計測
↑ 1,532.77
● 2,000rpm付近の計測
↑ 2,077.86
● 3,000rpm付近の計測
↑ 3,054.56
● 4,000rpm付近の計測
↑ 4,084.33
● 5,000rpm付近の計測
↑ 5,029.65
● 7,000rpm付近の計測
↑ 7,041.84
総 評
性能チェックでお分かりと思いますが、結構良い値が計測されています。十分実用になります。これを使って次はブラシレスモータの回転制御を作成する予定です。
仕様検討しているモータにはエンコーダが内蔵されているので、実際の出力軸とエンコーダ側の両方を検証しようと思っており、この回転計が威力を発揮すると思っています。
プログラムについてはあまり、
きれいとは言えませんが、今回はハード面で色々と勉強になりました。またジョグスイッチにも出会えて、改良次第で結構使えそうです。センサーピックアップ部は取り外しができるため、
他のセンサーなどを接続することができます。ここにPG(パルスジェネレータ)からの信号を入れて検証したところ、50,000prm付近で
約1%の誤差がありました。これは、クロック発振源の16MHzの誤差ではないかと思っています。もう少し良いものを使用して、
機会があれば検証報告したいと思います。