Darkside(https対応しました)

2006年11月25日(土) 17:26

液晶READY

 弾速測定器の基板は、液晶ディスプレイと接続するために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)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4