久しぶりで、光電計測器の記事の続きを書きますー(^-^) 現在、1/10000秒光電計測器を、頒布用にプリント基板で試作しています(^^) 1/1000秒光電計測器のパターンデザインを基にして、十秒台の桁と、1万分の1秒台の桁を追加しました(^^) これによって、計測範囲は、00.0000秒〜99.9999秒までとなりました(^^) (”その1”の記事の最初で紹介した1/10000秒計測器と同様の表示になりました) さらに、こちらの新1/10000秒計測器では、内部回路で1/100000秒(=10万分の1秒)単位で、 時間の計測をするようにしています(^^) これによって、表示した計測タイムと、真のタイムとの計測誤差も、 ±0.00001秒以内と、さらに高精度になりました(^o^) まあ、使用する光電センサが1/1000秒以下程度の応答時間なので、計測回路のほうでこのように精度を 上げても、全体的な精度向上にはあまり意味のないことかも知れませんが、せっかくですから、 使用しているICの性能を最大限に活かした設計にしました(^^) 下の画像は、現像→エッチングが終了した直後のプリント基板です(^^) 200×150mmの感光基板を使用しています(^^) 上の画像の一部分を拡大したものです(^^) ピン間1本のパターンを通すようにしてパターン設計しています(^^) 部品を実装した基板です(^^) 表示用7セグLEDの桁数が、1/1000秒計測器に比べて増えています(^^) こちらの画像は、ハンダ付け面の様子です(^^) ハンダ付け面の一部を拡大すると、このようになっています(^^) 最近主流の鉛フリーハンダを使用しています(^^) ちなみに、ぼくは、下のように電子工作専用の作業台を自作して、ここで作業をやっています(^^) インバーター蛍光灯で手元は明るいし、必要な工具は全て目の前の壁にかかっていますので、 効率良く作業を進めることができます(^o^) やっぱり、専用の場所があると、集中できますのでお勧めですよー(^o^)/ |
以前、”その2”の記事で、ブレッドボードを使って実験していた、自作光電センサをプリント基板で製作してみました(^^) (動作原理や回路図は、”その2”の記事を見てみてくださいね(^^)) 下はそのプリント基板のパターン面の画像です(^^) 左は受光側の基板で、右は発光側の基板です(^^) 2つ合わせて、幅が100mmになるように設計しました(^^) おかげで、100×100mmの感光基板に、発光側基板2枚と受光側基板2枚を焼き付けることができるので、 スタート側センサと、ゴール側センサを、1枚の感光基板のみで製作することができます(^o^)/ これは、発光側基板に部品を実装して動作させているところです(^^) 75×50×20mmの大きさの樹脂ケースの中に基板を収納しています(^^) 緑色に光っているのは、動作確認用のLEDです(^^) その左横に、赤外線LEDを2個実装しています(^^) ここから、波長945nmの赤外線が、38KHzで点滅して(さらに1KHzで点滅して)出ています(^^) なお、発光側の電源は、単三乾電池6本(9V)を使用しています(^^) (計測器本体から電源を供給するためには、計測コースをケーブルが横切ることになってしまうため、 発光側は、乾電池で電源を供給しています(^^)) こちらは、受光用基板です(^^) やはり緑色LEDを動作確認用に点灯させています(^^) 発光基板からの赤外線を受光すると、この動作確認用LEDが 光るようになっています(^^) この赤外線をバイクなどが遮ったことを検出して、スタートやゴールのタイミング検出を 行います(^^) この受光側基板の電源は、計測器本体からケーブルで供給しています(^^) 1/1000秒光電計測器に接続して、動作確認を行ってみました(^^) 左が受光側、右が発光側です(^^) 1枚の画像のフレームに収めるために、発光側と受光側をこんなに近くで相対させていますが、 実際には、距離5m程度までは安定して動作しました(^^) 発光側と受光側の間に、遮光のために板を入れていくと・・・ 遮光されると、左の受光側の緑色LEDが消灯して、動作していることがわかります(^^) このように、自作の光電センサでも、充分に役立つことが分かりました(^^) この樹脂ケースを三脚の上に乗せて、0−50mタイム計測コースに設置すれば、 安価な計測システムで、タイム計測を行うことができますね(^o^)/ |
上の記事に載っている、新1/10000秒光電計測器のプリント基板を、アルミケースの中に入れました(^-^) これで、やっと新1/10000秒光電計測器の完成です(^o^) 表示桁数が多いと、やっぱり見栄えが良いですねー(#^^#) 左の画像は、リセット後の00.0000秒を表示し、右の画像は03.2571秒を表示しています。 |
今回の記事は、文字ばっかりです〜〜〜(-^^-);ゞ ごめんなさい(-^^-);ゞ これまで、1/1000秒タイム計測器や、1/10000秒タイム計測器に使用してきた、エプソンのプログラマブル水晶発振器 SPG8651Bが、メーカのWebサイト掲載の情報で、販売終了予定機種になっちゃっていました〜(^^; 周波数精度は±5ppm、経時変化が±3ppm/年という、高性能な発振器だったのに、たいへん残念です(v_v); (※1ppmは、百万分の1を表します。 ±5ppmだと、100KHzの周波数に対して、精度が±0.5Hzとなります。 例えば、この発振器を使ったタイム計測器で、5秒の時間を測定すると、誤差は、±0.000025秒となります。) まだ、正式な販売終了予定は、よく分からないのですが、そのうちに入手できないことになってしまいそうです(v_v); 買いだめをしておこうとも思ったんですが、1個が1500円くらいするので、あまりたくさんの数は、買うことができません(v_v); そこで、同程度以上の水晶発振器で、安価に入手できるものを探してみたところ、 KTXO−18S(京セラ)という水晶発振器が、一番手軽にネット通販で入手できそうでした(^^) 秋月電子さんで、1個200円で販売されていますので、価格の安さも魅力です(^^) 発振周波数は、12.8MHzですので、このままではうちのタイム計測器には使用できないのですが、 これを分周していって、12.8MHz→6.4MHz→3.2MHz→1.6MHz→800KHz→400KHz→ 200KHz→100KHzというように、128分周すれば、100KHzを得ることができます(^^) これによって、1/10000秒タイム計測器の基準クロックとして、使用することができます(^o^) 気になる周波数精度は、ネット上でデータシートが見つからないため、SPG8651Bと同じ項目で比較できないのですが、 温度特性が±3ppm/℃(-20〜60℃) 、経時変化が±1ppm/年ということで、どうやらSPG8651Bと同等か、 それよりも高精度であるようです(^^) 74HC4024(7-Stage Binary Counter)などを使って、クロックを128分周してやれば、今までの回路をあまり変える ことなく、小変更で使用できるので助かります(^o^)/ 今後は、1/10000秒タイム計測器には、 この水晶発振器を使っていこうかと思います(^^) ところで、水晶発振器や、その精度の話が出たついでに、タイム計測器の測定精度について 考察をまとめておこうかなと思います(^^) 時間計測の基準となる水晶発振器には、いろいろな精度のものがあります。 通常、一般の電子機器に用いられる水晶発振器では、周波数精度は±10ppm〜±100ppm程度の、 比較的安価なものが多いようです。 時計用のものだと、比較的高精度な月差±15秒程度のものでは、1日の誤差は±0.5秒程度となるので、 3600秒×24時間=86400秒で±0.5秒の誤差ということは、±5.8ppm程度の周波数精度ということになり、 それなりに高精度なものが用いられていることになります。 前出のSPG8651Bは、この市販の高精度タイプの時計と同等以上の周波数精度を持っており、 KTXO−18Sでは、さらに高精度ということになり、0−50mタイム計測器に使用するには 充分な精度であると言えます。 ±100ppm程度の比較的低精度(と言っても、パソコンなどに用いられている普通のグレードのものなのですが)な 水晶発振器を基準クロックとして使用した場合について考察してみると、 5秒の時間を測定した場合、誤差は、±0.0005秒ということになります。 1/1000秒タイプのタイム計測器では、おまけをして、まあぎりぎり許容できる誤差と言えますが、 1/10000秒タイプ以上のタイム計測器では、最小表示桁と誤差の桁が同じなため、許容できない誤差となります。 TTLや、1チップマイコンなどを使って、1/1000秒クラスのタイム計測器を製作する場合には、(0−50mタイム 計測のように、数秒間でタイム計測が完了する場合)基準となるクロックは、±100ppm程度のものよりも、 出来る限り良い精度のものを使う必要があるようです。 また、パソコン上のソフトウェアによって、タイム計測を行なう場合には、パソコンのクロックの周波数安定度だけ ではなく、OSの割り込み処理による処理の遅れを考慮する必要があります。 例えば、一般的に、OSがWindowsの場合において、C言語でタイム計測プログラムを作成する場合には、 API関数のtimeGetTime ()を使用するのが簡便で高精度な方法だと思われます。 このtimeGetTime() 関数は、Windows起動からのシステム時間を 1msec単位で返します。(精度も1msec程度となっているようです。よって、タイム計測値の誤差は±1msecほどは 出てしまう可能性があります。まぁ、ソフトウェアでの計測ですから、その程度は考え方としては 許容範囲だと思うのですが(^^)) タイム計測がスタートした時点で、この関数を呼び出して、そのときの時間を取得しておき、 タイム計測が終了した時点で、同じくこの関数を呼び出して、そのときの時間から、 先ほどのスタート時の時間を差し引くと、タイム計測の値となります。 しかし、Windowsでは、散発するOSの割り込み処理により、場合によっては、数msecから数十msecの間、 タイム計測のプログラム処理が停止することがあります。(OSは、その間に割り込んで別の処理を行なっています) タイム計測の途中での割り込み処理の場合は、タイム計測値に影響は出ませんが、スタートの瞬間や、ゴールの瞬間に このOSの割り込み処理が発生していた場合には、その時間の分だけ計測値に影響が出る場合があります。 このように、パソコンでのタイム計測値は、数十msecの誤差があることをあらかじめ念頭においておく必要があります。 話をまとめると、数秒間でタイム計測が完了する、0−50mタイム計測の場合、 パソコン上でのソフトウェア計測では、1/10秒の桁までが真の値が保証されていると考えられ、(少し辛口かも しれませんが、可能性としては、OS割り込みは無視できないはずなので(-^^-);ゞ それに対して、TTLや1チップマイコンでの回路を使ったタイム計測器では、周波数精度100ppm程度の 通常精度の水晶発振器を使用している場合でも、1/1000秒の桁までは、 真の値が保証されていると考えられます。(もちろん、プログラムや、回路に瑕疵が無ければですが(^^)) また、周波数精度が±3ppm程の高精度水晶発振器を使用すれば、 TTL回路を使ったタイム計測器においては、1万分の1秒程度までの精度は出せます(^^) (現在、完成している1/10000秒タイム計測器は、そのようになっています(^^)) 1チップマイコンのPICを使用して製作したタイム計測器では、内部のプログラム処理に必要な時間と 動作クロック(最大20MHz)とから、1万分の1秒程度までの精度は、 出せるのではないかと思います(^^)(ざっと検討してみただけで、詳細には未確認です(-^^-);ゞ) このごろ、PICに本格的に興味が出てきています(^o^) そのうち時間ができたら、PICでタイム計測器を作ってみようかなぁ〜(^o^) |