トランジスタ技術2016年2月号 「GPS&OCXO搭載!USB-FPGAアナログ計測ボードの製作」




「GPS&OCXO搭載!USB-FPGAアナログ計測ボードの製作」のWEBサイトにサイトにアクセスいただき、
有難うございます。誌面には書ききれなかった情報を紹介させていただきます。



■続編とキット化について

・2016年7月20日
ケースを付属、24.576MHzと10MHzの2周波数を選べる構成、ロック高速化のための学習機能搭載して、キット化予定!
鋭意開発・検証中です。
続編には、雷の観測例を掲載予定です!


■試作機の回路図とソースコードを公開いたします

回路図 FPGAソースコード  PCソフトのソースコード
※公開の回路図やソースコードを参考にされたことによる、損失・損害は保証いたしかねます。


■誌面には書ききれなかった動作について補足の解説をいたします

PCとFPGAボードのデータやり取りの説明
FPGAボードにはUSBインターフェースICのFT2232Hが搭載されています。FT2232Hを用いてFPGAとPCが
8ビットのデータのやり取りを行うことができます。
データの構造をできるだけシンプルにして、FPGAファームとPCソフトが簡単に開発できるようにしました。
信頼性を高めるにチェックサムなどの伝送エラーを自己診断できる仕組みを追加していくとよいでしょう。


FPGA→PCのデータは、5種類あります。
1.計測開始の宣言
計測開始を宣言して、計測開始の瞬間のUTCをPCに報告します。
計測開始は平均済1PPSの立ち上がり(秒の切り替わりの瞬間)なので、UTCをPCに報告する際は、
秒よりも小さい桁は送りません。
送る8ビットのデータ列は、4個です。

0xFB
UTCの時(例、21時のときは0x15)
UTCの分(例、16分のときは0x10)
UTCの時(例、41秒のときは0x29)

2.FPGA内のバッファあふれ
PCの処理が重いなどの理由でUSB転送量が確保できない場合に備えてFPGA内部にバッファ(FIFO)
をもっています。もしFPGA内部のバッファがあふれた場合は、PCにバッファがあふれた旨を報告します。
もしバッファあふれが起きるとADCのデータが欠落します。また、「ADCデータPCがひとつ受け取るごと
にタイムスタンプを40nSインクリメントさせる」というルールが崩れて、タイムスタンプが間違ったも
のになります。
送る8ビットのデータ列は、1個です。

0xFC


3.OCXOのアンロック
OCXOがGPSに同期しないまま計測を開始た、もしくは計測中に同期がはずれた場合はPCにその
旨を報告します。もし、アンロックの場合は250mSに1回の割合でPCに報告します。アンロックの
状態ではOCXOが正確な10MHzではない状態です。つまり、ADCの駆動クロックが40nS周期でなくなります。
「ADCデータPCがひとつ受け取るごとにタイムスタンプを40nSインクリメントさせる」というルールが
崩れて、タイムスタンプが間違ったものになります。
送る8ビットのデータ列は、1個です。

0xFA


4.ADCの圧縮データを送る
ADCのデータを送る際に前のデータとの差分が、±120以内のときは、差分だけを送ります。
送るデータの計算式は、120+(今のADCデータ ? 前のADCデータ) です。
送る8ビットのデータ列は、1個です。

120+(今のADCデータ ? 前のADCデータ)  (例、前が8000 今が8001のときは、0x79)

5.ADCの非圧縮データを送る
ADCのデータを送る際に前のデータとの差分が、±120を超えるときは、前のデータとの差分
ではなくADCおデータをそのまま送ります。3.圧縮データと見分けがつくように、前置データ
を送ります。
送る8ビットのデータ列は、3個です。
0xFF
ADCデータの上位7ビット
ADCデータの下位7ビット

6.(番外)計測終了
計測終了については、特にPCに報告しません。転送を中止するだけです。
PC側ではFPGAからUSBデータの転送が止まったことを検知して、計測終了を知ります。


FPGA→PCの使用するコード値をまとめて一覧にします。
0x00〜0x3B  ADC圧縮データ、非圧縮ADCデータの上位7ビット
       非圧縮ADCデータの下位7ビット、UTC時刻
0x3C〜0x7F  ADC圧縮データ、非圧縮ADCデータの上位7ビット
       非圧縮ADCデータの下位7ビット
0x80〜0xF0  ADC圧縮データ
0xF1〜0xF9  未使用
0xFA     OCXOアンロックの報告
0xFB     測定開始と時刻報告の際の先頭データ
0xFC     FIFOあふれ報告
0xFD、0xFE  未使用
0xFF     非圧縮ADCデータを送る際の先頭データ




PC→FPGAへのデータ転送は2種類のみでシンプルです。

1. 計測開始&ADCデータ転送開始の指令
FPGAに計測開始&ADCデータ転送開始の指令を出します。FPGAは計測開始&ADCデータ転送開始の指令
を受けると計測開始を待機します。待機中に、平均済1PPSの立ち上がり(秒の切り替わりの瞬間)によって
計測を開始します。
送る8ビットのデータ列は、1個です。

0xAA

2.計測終了&ADCデータ転送終了の指令
FPGAに計測開始&ADCデータ転送開始計測終了&ADCデータ転送終了の指令を出します。FPGAは
計測終了&ADCデータ転送終了の指令を受けると計測終了を待機します。待機中に、平均済1PPSの立ち
上がり(秒の切り替わりの瞬間)によって、計測を終了します。
送る8ビットのデータ列は、1個です。

Ox55

PC→FPGAの使用するコード値をまとめて一覧にします。
0x00〜0x54 未使用
0x55 計測終了&ADCデータ転送終了の指令
0x56〜0xA9 未使用
0xAA 計測開始&ADCデータ転送開始の指令
0xAB〜0xFF 未使用



トラ技での続編の掲載、本ボードのキット化の予定もあります。
お楽しみに!


ご質問がありましたら、info∞morisaka-lab.jp までお問い合わせください。∞をアットマークに変えてください。
なお、ご質問の内容によっては回答できない場合もございますので、あらかじめご了承ください。



戻る