2024年3月21日木曜日

落下時間計測処理の設計

 はじめに

重力加速度計では、重力 g  の算出に 落下時間を使用している。

落下時間は、PIC16F1705の Capture Mode を使って取得する。



落下時間計測の処理

PIC16F1705の Capture 機能は下記の構成となってる。
(マニュアルより引用)

Captureの動作は、System Clockのタイミングで

 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 件のコメント:

コメントを投稿

手作り電磁石の力をゼムクリップで計ってみた

手作りした電磁石があるので どのくらいの錘を吊り下げられるか 計ってみることにした 調べると、 バネ計りを使う方法などが紹介されているが 家にはないので、身近なもので試す。 大きなおもりの下にゼムクリップを ぶら下げていき、クリップが落ちた前が 限界とすると...