Darkside(https対応しました) |
2006年11月25日(土) 17:26
弾速測定器の基板は、液晶ディスプレイと接続するために14ピンのコネクターが付いている。当然ながら、ここに別のモノを取り付けることが可能だ。
5VとGNDが出ていてボリューム装備、そして汎用入出力として7本使用可能。本体側のPICにはプッシュスイッチ2つとLED2つとフォトトランジスター2つが装備。高精度の水晶クリックと5V安定化電源装備。PIC汎用実験基板としても結構使いでがあろう。
ただし、ゼロプレッシャーソケットではないため試験基板としては操作性が悪い。水晶発信機のクロックは2センチ以上引き回さない方が良いとされるため、ゼロプレッシャーは採用し辛い。
この回路で、PICプログラムの先頭部分はこんな感じになる。
include 16f84.h
.osc hs ; オシレータ
.wdt off ; ウォッチドッグ
.pwrt on ; パワーアップタイマ
.protect off ; プロテクト
lcd_rw equ ra.1
lcd_rs equ ra.2
lcd_stb equ ra.0
photo0 equ rb.3 ; 受光0
photo1 equ rb.2 ; 受光1
led_red equ ra.4 ; 赤LED
led_green equ ra.3 ; 緑LED
sw_start equ rb.1 ; スタートスイッチ
sw_reset equ rb.0 ; リセットスイッチ
org 0ch
count ds 3 ; 測定時間カウント
DPDT ds 1 ; LCD display data
org 0
goto start
org 4
goto start
; ****************************************************************************
; 開始
; ****************************************************************************
start
mov intcon,#00000000b ; 割り込み禁止
setb rp0 ; ページ1選択
mov ra,#00000000b ; ポートA
mov rb,#00001111b ; ポートB
clrb rp0 ; ページ0選択
mov option,#00000000b ; pullup
順次ハードの動作確認が進んだが、一応は動作しているTPS601Aの感度が足りているか確信が持てない。実際に光ファイバー使って試してみて、感度が不足だとなればQ1とQ2に独自に500KΩ程度の外付けプルアップ抵抗を付けることになるだろう。その場合、PIC内蔵のプルアップ抵抗は無効にせねばならず、2つのプッシュスイッチにもまた外付けプルアップ抵抗が必要になってしまう。
果たしてこれ以上基板にハンダゴテを入れずに済むかどうか?
TPS601Aの暗電流は典型値0.01μAだが、最悪値は0.2μAである。プルアップ抵抗に1MΩを使用すれば最悪値で0.2Vのノイズが発生する。これはPICのLow電圧スペックからして無視出来ず、検出の安定性に不安がある。プルアップ抵抗値を大きくすれば感度は上がるがノイズも増えるので、外付けするとすれば500KΩあたりがバランス良好と思われる。
液晶ディスプレイには数字だけでなく英字も表示可能。小文字OKだし日本産ならでは?のカタカナまで対応しているため、コイルガンと表示させることも出来るだろう。
PIC用としてはかなり豪勢な表示装置であり、PICで製作可能なレベルの機能なら表示情報量で悩むことは無くなる★
液晶のコントラスト調整は有効範囲が狭い。ボリューム位置のほとんどにおいて何も表示されなくなる。ほんの僅かな範囲だけ液晶が表示され、コントラストは急激に変化する。
このため、写真のように多回転型のボリューム使った方が実は遙かに調整の操作性が良くなる。
液晶との接続ピン対応は精密時計製作記事に合わせてあるため、制御コードは付属のプログラムがそのまま使えるはずだった。ところが、付属プログラムはI/O出力が連続するのにnopを挿入していなかったりする(同じ本の別の場所では入れるよう注意が喚起されているのに!)。
特に、液晶側のコマンド処理待ちルーチンが全く動かず、自前で修正するのにかなりの時間を要してしまった。幸いにして、本の印刷記事には明白な間違いが無かったために何とかなった。
弾速を測定するにあたり、有効数字3桁は確保したい。そうなると、通過時間を最低でも1000等分して計測出来ねばならない。
255までしかカウントできない1バイトカウンターは当然不可だ。2バイト使うと65535までOKだが、その場合は最高速の約65倍の時間、すなわち約65分の1の速度までしか計測出来ない。
では、どの範囲の速度を計測するか?
コイルガン専用なら当面は秒速100メートルまでで足りるだろう。この場合、遅い側は秒速2メートル以下まで測定可能となり、十分OKである。
カウンターを3バイトにすれば秒速1センチでも対応可能となる。
光センサーをポーリングしつつカウントアップする具体的なコードはこんな感じとなる。
wait_photo1a
incf count[0],1 ; カウンター1アップ
btfsc z
incf count[1],1
btfsc z
incf count[2],1
; 光が遮られるのを待つ
btfss photo1
goto wait_photo1a
カウンターが3バイトであれば、ループ1回に8クロックを要する。カウンターを2バイトにすれば2命令削減出来て、6クロックだ。
20MHz駆動のPICは内部5MHzで動作するため、時間計測の分解能=1カウンターの時間は、カウンター3バイトで1.6μ秒、2バイトなら1.2μ秒となる。
有効数字3桁を確保する1000カウントを行うには、計測時間はそれぞれ1.6ミリ秒以上、1.2ミリ秒以上必要となる。
秒速100メートルの測定対象でそれだけの時間差を作り出すには、センサーの間隔をそれぞれ16センチ以上、12センチ以上・・・確保すれば良いと分かる。
いずれであっても現実的な数字であり、この弾速測定器は有効数字3桁を十分に狙えると分かる。
written by higashino [コイルガン] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4