前回の記事では、エクセル VBA で周波数カウンタを制御して、10 MHz クロックの性能を測定するマクロを作成しました。
同じ周波数カウンタで、アラン偏差も取得できますので、マクロで自動測定してグラフ描画します。
アラン分散/アラン偏差は、クロックやジャイロの安定性を測るよい分析方法とされている、らしいです。
私は詳しくないのですが、グラフで比較できると、品質の優劣が掴みやすくなります。
1. はじめに
前回の記事と同じく、ヤフオクで購入した GPSDO 10 MHz マスタークロックの性能を、
具体的に数字で比較したい、というのが事の発端です。
今回の記事では、もっとわかりやすいアラン偏差のグラフを作成します。
周波数カウンタ 53230A で取得できるアラン偏差は、周波数から計算して得られる数値です。
周期モードでもアラン偏差が表示されるのですが、サンプル期間τを変更する方法がわかりません。
どうやってもアラン偏差が一定値になってしまい、有意なデータを得られませんでした。
周波数モードのアラン偏差は、単位が uHz/mHz になってしまうため、
巷の解説にあるグラフとそのまま比較する事ができません。
巷のグラフは、縦軸が 10^-15 とかの小さい数字になっていると思います。
とはいえ、グラフ形状はアラン偏差の特性そのものなので、それほど
間違ってはいないのではないかな?と考えています。
同じ測定器で取得したグラフを比較する分には、十分な指標になる筈です。
2. 使用する測定器および環境
2.1 測定器
周波数カウンタ 53230A (192.168.1.7 で LAN 接続)
https://www.keysight.com/zz/en/product/53230A/350-mhz-universal-frequency-counter-timer-12-digits-s-20-ps.html
2.2 測定器制御ライブラリ
Excel VBA から呼び出す VISA COM のライブラリをインストールしておく
Keysight IO Libraries Suite (IOLibSuite_18_2_27313.exe)
https://www.keysight.com/zz/en/lib/software-detail/computer-software/io-libraries-suite-downloads-2175637.html
2.3 参考資料
測定器の SCPI 制御コマンドのリファレンス
Keysight 53220A/53230A Frequency Universal Counter/Timer Programmer's Reference
https://www.keysight.com/gb/en/library/manuals/programming-and-syntax-guide/53220a53230a-frequency-universalcountertimer-programmers-reference-1971001.html
2.4 環境
- Windows10 Pro 64bit (20H2)
- Microsoft Excel 2013
- Keysight IO Libraries Suite 2022 (Build 18.2.27313.1) IOLibSuite_18_2_27313.exe
3. マクロ作成
エクセルのシートにデータ記入枠を用意しておきます。
53230A からデータを取り込んで、セルに記入するマクロを作成しました。
アラン偏差値を 5 回測定して、最大・最小・平均値を自動算出し、グラフに反映します。
サンプル期間τが長くなるほど、一回の測定に時間がかかります。
τ=2秒までなら、全体の測定が13分程度で完了できます。
τ=10秒まで測ると40分超かかりますが、結果は2秒までのグラフから想像できる通りでしたので、2秒までにしています。
作成した .xlsm ファイルを、下記で公開しています。
53230A_アラン偏差測定.xlsm
作成したマクロは下記になります。
Public gate_time As String
Public samp_count As String
Public write_colomn As Integer
Sub Main()
Call setup_counter
Range("C5:G36").Select '旧データの消去
Selection.ClearContents
Range("C5").Select
write_colomn = 5 '最初の書込み行 位置の指定
Dim i
For i = 0 To (Cells(5, 1).End(xlDown).Row - write_colomn) 'ループ回数 = 取得サンプル数の記入行数
samp_count = Cells(write_colomn, 1).Text '取得サンプル数 読み込み
gate_time = Cells(write_colomn, 2).Text 'τ[sec] 読み込み
Call read_allan_5times '測定部 呼び出し
Next i
End Sub
Sub setup_counter()
Dim RM As New VisaComLib.ResourceManager
Dim UFC As New VisaComLib.FormattedIO488 'UFC : Universal Frequency Counter
Set UFC.IO = RM.Open("TCPIP0::192.168.1.7::inst0::INSTR") 'VISA Address
UFC.WriteString "*RST" 'カウンタのリセット
UFC.WriteString "DISP:DIG:MASK 10" '表示桁数 = 10桁
UFC.WriteString "CONF:FREQ (@1)" '測定モード = 周波数
UFC.WriteString "TRIG:COUN 1" 'トリガカウント = 1
UFC.WriteString "SENS:FREQ:MODE CONT" '切れ目なし連続測定モード
UFC.WriteString "INP:COUP DC" '入力カップリング = DC
UFC.WriteString "INP:IMP 50" '入力インピーダンス = 50Ω
UFC.WriteString "INP:LEV:AUTO OFF" '入力レベル自動設定 = OFF
UFC.WriteString "INP:LEV1 0" 'CH1 入力レベル = 0V
UFC.WriteString "CALC:STAT ON" '統計モード = オン
UFC.WriteString "CALC:AVER:STAT ON" '平均値計算 = オン
UFC.WriteString "DISPLAY:MODE NUM" '表示モード = 数値
UFC.WriteString "INIT" '設定開始
UFC.WriteString "*WAI" '設定完了待ち
UFC.IO.Close
Set UFC = Nothing
Set RM = Nothing
End Sub
Sub read_allan_5times()
Dim RM As New VisaComLib.ResourceManager
Dim UFC As New VisaComLib.FormattedIO488 'UFC : Universal Frequency Counter
Set UFC.IO = RM.Open("TCPIP0::192.168.1.7::inst0::INSTR") 'VISA Address
UFC.IO.Timeout = 120000 'TIMEOUT = 120秒
Dim strReady As String
UFC.WriteString "SENS:FREQ:GATE:TIME " & gate_time 'τの設定
UFC.WriteString "SAMP:COUN " & samp_count '取得サンプル数の設定
UFC.WriteString "INIT" '設定開始
UFC.WriteString "*OPC?" '処理完了待ち
strReady = UFC.ReadString() '結果読み出し (処理完了 = 1)
UFC.WriteString "CALC:AVER:ADEV?" 'アラン偏差 読み出し
Cells(write_colomn, "C") = Replace(UFC.ReadString(), vbLf, "") '改行コードを取り除いてC_セルへ書込む
UFC.WriteString "INIT"
UFC.WriteString "*OPC?"
strReady = UFC.ReadString()
UFC.WriteString "CALC:AVER:ADEV?"
Cells(write_colomn, "D") = Replace(UFC.ReadString(), vbLf, "") '改行コードを取り除いてD_セルへ書込む
UFC.WriteString "INIT"
UFC.WriteString "*OPC?"
strReady = UFC.ReadString()
UFC.WriteString "CALC:AVER:ADEV?"
Cells(write_colomn, "E") = Replace(UFC.ReadString(), vbLf, "") '改行コードを取り除いてE_セルへ書込む
UFC.WriteString "INIT"
UFC.WriteString "*OPC?"
strReady = UFC.ReadString()
UFC.WriteString "CALC:AVER:ADEV?"
Cells(write_colomn, "F") = Replace(UFC.ReadString(), vbLf, "") '改行コードを取り除いてF_セルへ書込む
UFC.WriteString "INIT"
UFC.WriteString "*OPC?"
strReady = UFC.ReadString()
UFC.WriteString "CALC:AVER:ADEV?"
Cells(write_colomn, "G") = Replace(UFC.ReadString(), vbLf, "") '改行コードを取り除いてG3セルへ書込む
UFC.IO.Close
Set UFC = Nothing
Set RM = Nothing
write_colomn = write_colomn + 1 '書込み行 +1
End Sub
4. 測定方法
「測定開始」ボタンを押すと、自動測定を開始します。
5. 測定
前回の記事と同じ水晶発振器を測定しています。
グラフの曲線が下にあるほど、性能が良いことを示します。
5.1 GPSDO1 10MHz (GPSDO-SOV V1.2)
中古のシングルオーブン VC-OCXO が入っています。
GPS 同期させれば確度は良い数字ですが、ジッタが非常に大きいです。
VC-OCXO が中古でくたびれているせいなのか、元からなのかはわかりません。
グラフを見ると、安定性もちょっと不安があります。
5.2 GPSDO2 10MHz (GPSDO-DOV V1.1)
ダブルオーブンの VC-OCXO が入っています。
グラフを見る限り、シングルオーブンより性能が悪いようです。
ジッターも安定性も×。
回路追加して正弦波出力 → 矩形波出力に改造していますが、ジッタは改善しませんでした。
5.3 VC-OCXO 10MHz
もう一台ある周波数カウンタ 53220A に Abracon AOCJY3A-10M(±5ppb, 0~+50℃) を入れてあります。(実売 1.6万円ぐらい)
GPSDO 校正後にフリーランしています。
AOCJY3A-10M は矩形波出力の発振器なのですが、53220A 内部でフィルタして正弦波で出力しています。
機器内でフィルタされて正弦波出力になるので、ジッターが大きめですが、安定性は今回測った中では一番良いです。
5.4 VC-TCXO 10MHz
村田 XTCLH10M000CHJA1P0(±0.28ppm, -40~+85℃) です。
(旭化成問題でディスコン?)
温度安定用にカバーと収縮チューブで覆っています。
ジッター性能は良い感じですが、恒温層が無いので、安定性は中庸です。
5.5 OCXO 10MHz
Abracon AOCJYR-10.000MHz-M5625LF(±25ppb, -40~+85℃) 廉価な OCXO です。(実売 6,000円ぐらい)
全体的に中庸ですが、一部に盛り上がりがあり、ゆっくりなジッター(ワンダー)がある感じです。
5.6 TCXO 10MHz
秋月で売っているセイコーエプソン TG-5021CE-10N(±2ppm, -30~+85℃) です。
クリップドサイン出力ですが、基板上で矩形波に変換しています。
息をかけるだけで周波数が変わるので、カバーが必須。
τ = 0.01 sec 付近の盛り上がりが気になるのと、温度安定性が OCXO に劣ります。
5.7 SPXO 10MHz
京セラ KC3225K10.0000C1GE00(±50ppm, -40~+85℃) です。
民生/工業向けに普通に使われているグレードです。
温度補償が無いので確度と安定性がいまいちです。
6. まとめ
Excel の VBA から測定器を制御して、自動測定を行い、アラン偏差のグラフを描画しました。
やはり、中古の VC-OCXO は、ジッター性能はよくないようです。
全種類を平均値でグラフ比較すると、こうなります。
新品購入した VC-OCXO である AOCJY3A-10.000MHz が最も安定しています。
正弦波変換のため、τ<0.001 のジッター領域で数字が悪くなるようです。
AOCJY3A 自体は矩形波出力ですので、単体で測ればもっと良いグラフになると思います。
自作基板に搭載した4種類の発振器のグラフだけ抜き出してみました。
全て矩形波出力で、波形の影響が出にくくなっています。
VC-TCXO: 村田 XTCLH10M000CHJA1P0(±0.28ppm, -40~+85℃)
OCXO: Abracon AOCJYR-10.000MHz-M5625LF(±25ppb, -40~+85℃)
TCXO: セイコーエプソン TG-5021CE-10N(±2ppm, -30~+85℃)
SPXO: KC3225K10.0000C1GE00(±50ppm, -40~+85℃)
① τ≦ 0.0001 sec : 高い周波数のジッター性能を示し、恒温槽や温度補償の有無によらず、ほぼ一定です。
② 0.0001<τ≦ 0.001 sec : 中間周波数のジッター性能を示し、温度補償の無い SPXO で数値が悪くなります。
③ 0.001<τ≦ 0.01 sec : 低い周波数のジッター性能を示し、SPXO と TCXO で数値が悪くなっています。
④ 0.01<τ≦ 0.1 sec : ゆっくりなジッター(ワンダー)性能を示し、物による差が大きいです。
⑤ 0.1<τ≦ 10 sec : 温度安定性の領域です。温度補償のない SPXO の数値が悪化しています。
高い周波数のジッター性能は、最近の水晶発振器であれば、VC-TCXO/OCXO/TCXO/SPXO で、ほぼ差が無いようです。
安定性は、温度補償の強さから、 OCXO > VC-TCXO ≧ TCXO > SPXO の順です。
τ≦ 2sec だと確実にそうなのですが、上のグラフだと 0.01<τ≦1 までの間で OCXO がいまいちなので、物によるのだと思います。
(AOCJYR-10.000MHz-M5625LF は、最廉価クラスの OCXO です)
コストと性能の観点で見ると、VC-TCXO が一番バランスが良さそうです。
村田 XTCLH シリーズはディスコンになってしまいましたが、ほぼ同性能の
ECS-VC-TXO32-S3
LFTVXO075802REEL
がありますので、いずれ調査してみたいと思います。