はじめに
重力加速度計では、重力 g の算出に 落下時間を使用している。
落下時間は、PIC16F1705の Capture Mode を使って取得する。
落下時間計測の処理
PIC16F1705の Capture 機能は下記の構成となってる。
(マニュアルより引用)
CCP1の状態をチェックして
このままだたと二つの計算式を組み込む必要がある。
トリガー検出ならばTimer1のレジスター値を
CC Pのレジスターへコピーする。
落下時間は、この仕組みを利用して
センサーS1 と S2 をtリガーとして加えて
CCPレジスターにそれぞれの値を得る。
落下時間Tは、
T = timeS2 - timeS1 で求められる。
ただ、実際に使用する場合は、もう少し考慮する必要がある。
Capture 機能を使う上で考慮すること
時間計測の処理は、通常、次の式でできるが
センサー検出回路のタイミングによっては別の式が必要となる。
パターンA
落下時間T= timeS2 - timeS1
パターンB
落下時間T= 65536 - timeS2 + timeS1
パターンA、パターンBの説明図を次に示す。
このままだたと二つの計算式を組み込む必要がある。
計算式は一つの方が良い
落下時間を計算するのに二つの計算式を用意すると
どちらかにバグがあったとしても簡単には特定できない
ことが発生する。
そこで、常にパターンAとなるように工夫することにした。
やり方は、timeS1の値を読み取ったタイミングで
Time1のレジスターをクリヤーするというものです。
これによって、timeS1 = 0 <== ほぼゼロ
落下時間T = timeS2 で求めることができる。
落下時間の計測精度を上げる
落下時間は、Timer1のカウント値で計測される。
Timer1のレジスター構成は、2バイトとなっていて
カウントできる数値は、 0 〜 65535 となている。
実際の落下時間 約280ms なので
この値ができるだけ大きな数値として Timner1のレジスターに
入ることが望ましい。
280ms / 65536 = 約 4.3 μsec 約233kHz
PIC16F1705のクロック選択範囲で233Khzに
近い値を調べてみると
500kHz
250k Hz <= 残念、少し超えている
125k Hz <== この値を使う
fosc/4 = 125Khz (8μ sec)
落下時間 T = 280 msec として
Timer1のカウント値 = 280 X 10^3 / 8 = 35000
Timer1の最大カウント値 65535より小さいので
良しとする。
まとめ
落下時間の計測は、 Timer1の capture mode を使う。
計算式を一つで済ますため、timeS1の入力で
Timer1のレジスターをクリヤーする。
CPUのクロックは、
CPU clock = 500Khz
Timer1のクロック入力は、fosc/4 として
T1 clock = fosc/4 = 125Khz
とする。


0 件のコメント:
コメントを投稿