Pocket SDRハードウェア製作(第3報)
Pocket SDRハードウェア完成
私のPocket SDRハードウェアが動作しました。Pocket SDRは、ボードマイコンRaspberry Pi Zero WHよりも小さく、ソフトウェア無線機USRP B205mini-IやNuand BladeRFよりもずっと小さいのに、とても安定してGNSS信号を受信できます。
動作不良の原因と修正
私のEEPROM動作不良はデータラインのプルアップ抵抗の接続不良が原因でした。また、2つの白色LEDの一方しか点灯しなかったのは、片側のMAX2771の電源ピンのハンダ付け不良が原因でした。製作直後は正しく動作していたようです。しかし、基板汚れに隠れたはんだ付け不良箇所が、のちに接続不良になったようです。
無水エタノールをつけたキムワイプ、工業用綿棒、またハブラシにてフラックスの汚れを拭き取り、顕微鏡で観察して、はんだ付け不良箇所を見つけました。また、フラックス除去剤も活用しました。
接続不良を疑うチップ部品をつけ直すために、その部品全体をはんだごてにて温めながらゆっくりとずらして取りはずし、プリント基板の不要ハンダを吸収線(solder wick)にて除去し、汚れたフラックス(ハンダ付け促進剤)を拭き取って、フラックスを塗りなおします。一方、部品を無水エタノールをつけたキムワイプで拭き取り、ピンセットでつまんで、根性で基板にハンダ付けします。一箇所の修正が1分程度でできたこともあれば、はんだごてに部品が吸い付いたために基板洗浄からやり直すことになり、修正に30分以上を要すこともありました。
チップ部品をピンセットでつまんだとき、勢いよくピンセットから飛び出し、それを紛失したこともありました。そのときは、作成失敗した方のプリント基板についている同じ部品をはずして、再利用しました。ハードウェアを2セット同時に作り、その一方の作成に失敗しましたが、結局は2セット同時に作ってよかったです。
何度もPocket SDRハードウェア製作を諦めかけましたが、自ら手を動かす過程でノウハウがたまり、ついに完成させることができました。嬉しいです。
デバッグ用ファームウェア
中部大学の海老沼拓史先生に、EEPROMへのファームウェア書き込みを要しない、Pocket SDR動作検証方法を教えていただきました(ありがとうございます!)。PocketSDRのRebuildの手順にて作成したpocket_fw_debug.hexをCypress USB Control CenterにてFX2LPのRAM領域に転送する方法です。
このファームウェアをPocket SDRのFX2LPに転送すると、このFX2LPは転送後に自らUSBから切り離して、USBに再接続し、新しいファームウェアで動作します。
このおかげで、私のPocket SDRハードウェアのUSB機能が使えるようになり、片側のMAX2771が動作していなかったことを見つけました。Pocket SDRの回路図から、MAX2771のデータバスは共用されていることがわかります。それにもかかわらず、一方のMAX2771が動作することから、他方の電源接続不良とチャージポンプ(昇圧回路)の外部部品接続不良の確認に集中して、MAX2771の電源ピンのはんだ付け不良を見つけました。
現在、このHEXファイルと作成過程で一緒にできた、pocket_fw_debug.iicをEEPROMに書き込んで使用しています。これを高須先生のファームウェアpocket_fw.iicに置き換える予定です。
Pocket SDRによるみちびきMADOCA-PPP配信の受信
本日2022-09-30より、みちびきの高精度測位補強サービスMADOCA-PPP(multi-GNSS advanced orbit and clock augmentation - precise point positioning、マドカ・ピーピーピー)の試行運用がはじまりました。MADOCA-PPPは、みちびきのL6E信号にて放送されます。私のPocket SDRハードウェアにて、このMADOCA-PPPを受信してみます。
今回、使用する設定ファイルは、Pocket SDRのconf
ディレクトリにあるpocket_L1L6_12MHz.conf
です。このL6信号は、標本化周波数12 MHzのダイレクトコンバージョン(IQ信号)にて記録されます。この設定を用いて、L1帯信号とL6帯信号を1分間、同時受信します。
pocket_conf.exe ..\conf\pocket_L1L6_12MHz.conf
pocket_dump.exe -t 60
このようにして記録したL6帯の受信信号ファイルch2_20220930_115617.bin(1.4 GBあります!)からPocket SDR AP(application)にてL6E信号上のメッセージを抽出し、QZS L6 Toolにてその内容を解析します。
はじめに、Pocket SDR APのpocket_acq.py
にて、受信できるみちびきL6E信号を調べます。
pocket_acq.py -sig L6E -prn 203-209 -f 12 ch2_20220930_115617.bin
この結果から、みちびき2号機(PRN 204)、みちびき4号機(PRN 205)、みちびき初号機後継機(PRN 206)、みちびき3号機(PRN 209)のすべてから放送されるL6E信号が受信できそうです。ここでは、最も強度が高いPRN 204のL6E信号を採用し、信号追尾しながらメッセージを観測します。
pocket_trk.py -sig L6E -prn 204 -f 12 -p ch2_20220930_115617.bin
ここで復号されたメッセージはNAV DATA
欄に表示されます。多くの受信メッセージに多くのゼロが含まれているようでした。このメッセージを-log
オプションにてファイルmdc.logに保存し、それをQZS L6 Toolのpksdr2l6.py
にてL6生データに変換した上で、その内容をqzsl62rtcm.py
にて読み出します。
pocket_trk.py -sig L6E -prn 204 -f 12 ch2_20220930_115617.bin -log mdc.log
pksdr2l6.py < mdc.log | qzsl62rtcm.py
204 Hitachi-Ota:0 MADOCA-PPP
204 Hitachi-Ota:0 QZNMA
204 Hitachi-Ota:0 QZNMA
204 Hitachi-Ota:0 MADOCA-PPP
...snip...
204 Hitachi-Ota:0 MADOCA-PPP
204 Hitachi-Ota:0 MADOCA-PPP SF1 DP1 (Clk/Eph LNAV) ST1 ST2...
204 Hitachi-Ota:0 MADOCA-PPP SF1 DP2 (Clk/Eph LNAV) ST2...
204 Hitachi-Ota:0 MADOCA-PPP SF1 DP3 (Clk/Eph LNAV) ST2 ST3
204 Hitachi-Ota:0 MADOCA-PPP SF1 DP4 (Clk/Eph LNAV) (null)
204 Hitachi-Ota:0 MADOCA-PPP SF1 DP5 (Clk/Eph LNAV) (null)
204 Hitachi-Ota:0 QZNMA
204 Hitachi-Ota:0 QZNMA
204 Hitachi-Ota:0 MADOCA-PPP SF2 DP1 (Clk/Eph LNAV) ST7 ST3
qzsl62rtcm.py
は、サブタイプ1(ST1)データを見つけると、CSSR(compact state space representation)情報の復号をはじめます。qzsl62rtcm.py
に、サブタイプデータを表示する-t 1
オプションと、統計情報を表示する-s
オプションを付加して、再実行します。
pksdr2l6.py < mdc.log | qzsl62rtcm.py -t 1 -s
...snip...
ST1 G01 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G02 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G03 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G04 L1 C/A L1 Z-tracking L1 L1C(D+P) L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G06 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G07 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G08 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G09 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G10 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G11 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G12 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G13 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G14 L1 C/A L1 Z-tracking L1 L1C(D+P) L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G15 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G16 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G18 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G20 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G21 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G22 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G23 L1 C/A L1 Z-tracking L1 L1C(D+P) L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G24 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G25 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G26 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G27 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G29 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G30 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 G31 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking
ST1 G32 L1 C/A L1 Z-tracking L2 L2C(M+L) L2 Z-tracking L5 I+Q
ST1 R01 G1 C/A G1 P G2 C/A G2 P
ST1 R02 G1 C/A G1 P G2 C/A G2 P
ST1 R03 G1 C/A G1 P G2 C/A G2 P
ST1 R04 G1 C/A G1 P G2 C/A G2 P
ST1 R05 G1 C/A G1 P G2 C/A G2 P
ST1 R08 G1 C/A G1 P G2 C/A G2 P
ST1 R09 G1 C/A G1 P G2 C/A G2 P
ST1 R11 G1 C/A G1 P G2 C/A G2 P
ST1 R12 G1 C/A G1 P G2 C/A G2 P
ST1 R13 G1 C/A G1 P G2 C/A G2 P
ST1 R14 G1 C/A G1 P G2 C/A G2 P
ST1 R15 G1 C/A G1 P G2 C/A G2 P
ST1 R17 G1 C/A G1 P G2 C/A G2 P
ST1 R18 G1 C/A G1 P G2 C/A G2 P
ST1 R19 G1 C/A G1 P G2 C/A G2 P
ST1 R21 G1 C/A G1 P G2 C/A G2 P
ST1 R24 G1 C/A G1 P G2 C/A G2 P
ST1 E02 E1 B+C E5a I+Q
ST1 E03 E1 B+C E5a I+Q
ST1 E04 E1 B+C E5a I+Q
ST1 E07 E1 B+C E5a I+Q
ST1 E08 E1 B+C E5a I+Q
ST1 E11 E1 B+C E5a I+Q
ST1 E12 E1 B+C E5a I+Q
ST1 E13 E1 B+C E5a I+Q
ST1 E15 E1 B+C E5a I+Q
ST1 E19 E1 B+C E5a I+Q
ST1 E21 E1 B+C E5a I+Q
ST1 E24 E1 B+C E5a I+Q
ST1 E25 E1 B+C E5a I+Q
ST1 E26 E1 B+C E5a I+Q
ST1 E27 E1 B+C E5a I+Q
ST1 E30 E1 B+C E5a I+Q
ST1 E31 E1 B+C E5a I+Q
ST1 E33 E1 B+C E5a I+Q
ST1 E36 E1 B+C E5a I+Q
ST1 J02 L1 C/A L1 L1C(D+P) L2 L2C(M+L) L5 I+Q
ST1 J03 L1 C/A L1 L1C(D+P) L2 L2C(M+L) L5 I+Q
stat n_sat 66 n_sig 246 bit_sat 9608 bit_sig 6888 bit_other 831 bit_null 23353 bit_total 40680
...snip...
みちびきのMADOCA-PPPから、全部で66衛星の246信号の補強情報が放送されていることがわかりました。また、統計情報stat
欄から、1フレーム30秒間に放送される全40,680ビットのうち、現在のところ、その半分を超える23,353ビットが無情報(ヌル)でした。
まとめ
不良箇所切り分けのために、ファームウェア改変方法を知ることや、回路図から不良箇所を想像することは大切です。この完成したPocket SDRハードウェアにて、本日、配信開始したみちびき補強情報MADOCA-PPPのメッセージを解読できました。このハードウェアにシールドケースを取り付けて、いろいろなGNSS信号の受信を楽しみます。
関連記事
- Pocket SDRを用いたGalileo E6B信号の受信 27th January 2023
- リフローでやらかしました 19th January 2023
- Pocket SDRハードウェア製作(第2報) 14th September 2022
- Pocket SDRハードウェア製作(第1報) 4th September 2022
- PocketSDRすごい(パーツ購入編) 9th April 2022
- PocketSDR APにてbladeRFを使いたい(その2) 16th March 2022
- PocketSDR APにてbladeRFを使いたい 5th March 2022
- PocketSDRすごい(スナップショット測位編) 23rd February 2022
- PocketSDRすごい(FFTWによる高速化) 19th February 2022
- PocketSDRすごい(L6信号デコード編) 19th January 2022
- PocketSDRすごい(pocket_trk編) 28th December 2021
- PocketSDRすごい(pocket_acq編) 4th December 2021