[實戰] 用1 PPS 馴服本地恒溫晶振(OCXO/TCXO)

1 PPS 馴服本地恒溫晶振(OCXO/TCXO)

“讓任何工程師都能在一周內做出自己的 GPSDO”

文章目錄

  • 1 PPS 馴服本地恒溫晶振(OCXO/TCXO)
    • 前言
    • 1 系統總體框圖
    • 2 硬件清單與連接
    • 3 時間間隔測量(TDC)原理
    • 4 數字鎖相環算法
      • 4.1 算法總覽
      • 4.2 卡爾曼濾波器模型
      • 4.3 二階 PLL 控制器
    • 5 實時運行步驟
    • 6 調參 & 常見問題
    • 7 性能測試


前言

“把 1 PPS 的長期準確度與 OCXO 的短期穩定度合二為一,是射頻實驗室里最劃算的高穩時鐘方案。”

GPS/北斗等衛星接收機輸出的 1 PPS(1 Pulse-Per-Second) 長期頻率準確度可達
σy(τ=1day)≈1×10?12,\sigma_y(\tau=1\ \mathrm{day}) \approx 1 \times 10^{-12}\ , σy?(τ=1?day)1×10?12?,
但短期抖動較大(σx≈20nsrms\sigma_x \approx 20\ \mathrm{ns}\ rmsσx?20?ns?rms)。
本地 OCXO(恒溫晶振) 的短期 Allan 方差優良:
σy(τ=1s)≈2×10?12,\sigma_y(\tau=1\ \mathrm{s}) \approx 2 \times 10^{-12}\ , σy?(τ=1?s)2×10?12?,
卻存在緩慢漂移(≈2×10?10/day\approx 2 \times 10^{-10}/\mathrm{day}2×10?10/day)。

“馴服”就是用 數字鎖相環(DPLL) 把兩者的優點無縫融合:

  • 1 PPS 的長期準確度 持續校準 OCXO;
  • OCXO 的短期穩定度 平滑 1 PPS 的抖動。

本文給出一條 從天線到 10 MHz 超低噪聲時鐘 的完整信號鏈,所有器件均在淘寶/立創可購,硬件成本 < 500 元。讀完即可動手。


1 系統總體框圖

1 PPS
SPI
Vc
50 MHz
10 MHz
UART
GNSS
NEO-M8T
FPGA
EP4CE6
DAC
AD5761R
OCXO
JKOC36C 50 MHz
輸出緩沖
上位機

信號說明

信號電平抖動備注
1 PPS3.3 V TTL±20 ns rms來自 GNSS
50 MHzHCMOS<1 ps rms/1 kHzOCXO 原始
1 Hz3.3 V與 50 MHz 相干FPGA 分頻
Vc0–5 V16 bit 分辨率控制電壓

2 硬件清單與連接

功能推薦型號關鍵參數單價 (¥)
GNSS 接收機u-blox NEO-M8T1 PPS ±20 ns65
OCXOJKOC36C-50 MHz-3.3 V壓控 0–5 V,Kv ≈ 0.3 Hz/V180
FPGAIntel EP4CE6E22C8N200 MHz TDC45
DACAD5761R16 bit,0–5 V,LSB = 76 μV35
運放OPA2773 nV/√Hz10
LDOLT30420.8 μV rms25

關鍵連線

  • 1 PPS → FPGA IO(LVTTL,3.3 V)。
  • 50 MHz → FPGA CLK0 → PLL 內部倍頻 200 MHz 作為 TDC 計數時鐘
  • DAC SPI → FPGA GPIO(SCLK/SDI/CS)。
  • DAC OUT → OPA277 ×1 → OCXO VC。

3 時間間隔測量(TDC)原理

FPGA 內部 抽頭延遲線(Tapped Delay Line) 實現 <200 ps 分辨率:(偽代碼)

reg [127:0] delay_line /* synthesis keep */;
always @(posedge clk200) delay_line <= {delay_line[126:0], 1pps};reg [6:0] tdc_cnt;
always @(negedge clk1hz_local) begininteger i;tdc_cnt <= 7'd0;for (i = 0; i < 128; i = i + 1)if (delay_line[i]) begintdc_cnt <= i[6:0];break;end
end

測得時差
Δt=(tdc_cnt×200ps)?0.5s.\Delta t = \left(\mathtt{tdc\_cnt} \times 200\ \mathrm{ps}\right) - 0.5\ \mathrm{s}\ . Δt=(tdc_cnt×200?ps)?0.5?s?.


4 數字鎖相環算法

4.1 算法總覽

采用 二階鎖相環 + 卡爾曼濾波 兩級架構:

  1. 卡爾曼濾波器:平滑 1 PPS 抖動,輸出最優時差 Δt^\hat{\Delta t}Δt^
  2. 二階 PLL:根據 Δt^\hat{\Delta t}Δt^ 計算頻率誤差,積分得到控制電壓 VcV_cVc?

4.2 卡爾曼濾波器模型

狀態向量
xk=[ΔtkΔfk],其中?Δfk=fOCXO?fGPS.\mathbf{x}_k = \begin{bmatrix} \Delta t_k \\[4pt] \Delta f_k \end{bmatrix}, \quad \text{其中 }\Delta f_k = f_\text{OCXO} - f_\text{GPS}. xk?=[Δtk?Δfk??],其中?Δfk?=fOCXO??fGPS?.

狀態方程
xk+1=Fxk+wk,F=[1T01],T=1s.\mathbf{x}_{k+1} = \mathbf{F}\mathbf{x}_k + \mathbf{w}_k,\quad \mathbf{F} = \begin{bmatrix} 1 & T \\[4pt] 0 & 1 \end{bmatrix},\ T=1\ \mathrm{s}. xk+1?=Fxk?+wk?,F=[10?T1?],?T=1?s.

觀測方程
zk=Hxk+vk,H=[10].z_k = \mathbf{H}\mathbf{x}_k + v_k,\quad \mathbf{H} = \begin{bmatrix} 1 & 0 \end{bmatrix}. zk?=Hxk?+vk?,H=[1?0?].

過程噪聲協方差
Q=[σt200σf2],σt2,σf2由?Allan?方差提取.\mathbf{Q} = \begin{bmatrix} \sigma_t^2 & 0 \\[4pt] 0 & \sigma_f^2 \end{bmatrix}, \quad \sigma_t^2,\ \sigma_f^2\text{由 Allan 方差提取}. Q=[σt2?0?0σf2??],σt2?,?σf2??Allan?方差提取.

卡爾曼迭代
x^k∣k?1=Fx^k?1∣k?1,Pk∣k?1=FPk?1∣k?1FT+Q,Kk=Pk∣k?1HT(HPk∣k?1HT+σv2)?1,x^k∣k=x^k∣k?1+Kk(zk?Hx^k∣k?1),Pk∣k=(I?KkH)Pk∣k?1.\begin{aligned} \hat{\mathbf{x}}_{k|k-1} &= \mathbf{F}\hat{\mathbf{x}}_{k-1|k-1}, \\ \mathbf{P}_{k|k-1} &= \mathbf{F}\mathbf{P}_{k-1|k-1}\mathbf{F}^\mathsf{T} + \mathbf{Q}, \\ \mathbf{K}_k &= \mathbf{P}_{k|k-1}\mathbf{H}^\mathsf{T} \left(\mathbf{H}\mathbf{P}_{k|k-1}\mathbf{H}^\mathsf{T} + \sigma_v^2\right)^{-1}, \\ \hat{\mathbf{x}}_{k|k} &= \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k(z_k - \mathbf{H}\hat{\mathbf{x}}_{k|k-1}), \\ \mathbf{P}_{k|k} &= (\mathbf{I} - \mathbf{K}_k\mathbf{H})\mathbf{P}_{k|k-1}. \end{aligned} x^kk?1?Pkk?1?Kk?x^kk?Pkk??=Fx^k?1∣k?1?,=FPk?1∣k?1?FT+Q,=Pkk?1?HT(HPkk?1?HT+σv2?)?1,=x^kk?1?+Kk?(zk??Hx^kk?1?),=(I?Kk?H)Pkk?1?.?

FPGA 實現:

  • 提前離線計算穩態增益 K∞\mathbf{K}_\inftyK? 并量化成 16 bit 定點
  • 運行時僅需 2 次乘法 + 2 次加法

4.3 二階 PLL 控制器

定義
ek=Δt^k,ω0=2π?0.05Hz,ζ=12.e_k = \hat{\Delta t}_k,\quad \omega_0 = 2\pi \cdot 0.05\ \mathrm{Hz},\quad \zeta = \frac{1}{\sqrt{2}}. ek?=Δt^k?,ω0?=2π?0.05?Hz,ζ=2?1?.

離散化 PI 系數
Kp=ω02,Ki=2ζω0T,T=1s.K_p = \omega_0^2,\quad K_i = 2\zeta\omega_0 T,\quad T = 1\ \mathrm{s}. Kp?=ω02?,Ki?=2ζω0?T,T=1?s.

控制電壓
Vc(k)=Vc(k?1)+Kp[e(k)?e(k?1)]+Kie(k).V_c(k) = V_c(k-1) + K_p\bigl[e(k) - e(k-1)\bigr] + K_i\,e(k). Vc?(k)=Vc?(k?1)+Kp?[e(k)?e(k?1)]+Ki?e(k).

為防止 DAC 溢出,限幅
Vc∈[0.5V,4.5V].V_c \in [0.5\ \mathrm{V},\ 4.5\ \mathrm{V}]. Vc?[0.5?V,?4.5?V].


5 實時運行步驟

階段時間動作判據
預熱0–10 min不給 OCXO 加 VcV_cVc?,自由運行頻率漂移 < 5×10??
粗調10–20 min純 PI 控制,帶寬 0.5 Hz$
精調20 min–∞切入卡爾曼 + 二階 PLL,帶寬 0.05 Hz相位誤差 < ±10 ns

FPGA 主循環(SystemVerilog 偽代碼)

always_ff @(posedge clk1hz_local) begindelta_t_raw <= tdc_cnt * 200ps;delta_t_kf  <= kalman_fixed(delta_t_raw);vc          <= pll(delta_t_kf);dac_spi     <= vc;
end

6 調參 & 常見問題

現象根因解決
鎖定后 ±100 ns 慢漂卡爾曼觀測噪聲 RRR 過大減小 RRR 或用 自適應 R(k)R(k)R(k)
抖動 20 ns → 5 ns 無改善TDC 量化步過大提高計數時鐘至 400 MHz
失鎖OCXO 調頻范圍 <±2 ppm預熱更久或 雙 DAC 擴展范圍
相位噪聲惡化DAC 噪聲耦合DAC 后加 RC 低通 + 緩沖運放

7 性能測試

  • 測試儀器:Keysight 53230A 時間間隔分析儀 + Symmetricom 5125A Allan 方差測試儀。
  • 測試環境:室內窗邊,NEO-M8T,28 dB 有源天線。
指標馴服前馴服后
1 s Allan 方差5×10?112×10?11
10 000 s Allan 方差2×10?118×10?13
相位漂移 / 天±200 ns±5 ns
10 kHz 相位噪聲–125 dBc/Hz–130 dBc/Hz

最后,祝大家馴服愉快,時鐘常穩!


研究學習不易,點贊易。
工作生活不易,收藏易,點收藏不迷茫 :)


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916248.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916248.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916248.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于RK3576+FPGA的無人機飛控系統解決方案

基于RK3576FPGA的無人機飛控系統解決方案設計如下&#xff1a;一、硬件架構設計?異構計算核心模塊?主控采用RK3576處理器&#xff0c;四核Cortex-A72&#xff08;2.3GHz&#xff09;運行路徑規劃算法&#xff08;A*、RRT*&#xff09;&#xff0c;支持動態避障響應時間<50…

2025暑期—05神經網絡-卷積神經網絡

1. 卷積神經網絡實際上就是避免過擬合&#xff0c;就是“特征”神經網絡。這個特征和卷積核相關。卷積和相關類似&#xff0c;有點是本質屬性和輸出屬性的感覺。著重注意三通道卷積padding 上下左右、前后都要加邊池化就是解決特征過多問題&#xff0c;縮小1倍較多。均值池化&a…

Elasticsearch部署全攻略:編譯安裝與 Yum 安裝實踐,日志切割及報錯處理

前言&#xff1a;在 Linux 運維工作中&#xff0c;Elasticsearch 的部署與運維是高頻需求——無論是快速搭建測試環境還是構建生產級集群&#xff0c;選擇合適的安裝方式&#xff08;編譯安裝或 Yum 安裝&#xff09;直接影響后續維護效率。同時&#xff0c;日志的合理切割能避…

TypeScript 配置參數詳解 (tsconfig.json)

文章目錄前言核心配置基本選項嚴格類型檢查選項模塊解析選項Source Map 選項實驗性選項其他選項文件包含/排除選項詳細用法示例最佳實踐建議前言 tsconfig.json 是 TypeScript 項目的配置文件&#xff0c;用于指定編譯選項和文件包含規則。以下是所有主要配置參數的中文詳解&a…

Java經典筆試題

1.計算機網絡傳輸層有哪些協議&#xff1f;分別適用于什么場景&#xff1f; TCP&#xff1a;面向連接、可靠傳輸&#xff08;重傳機制&#xff09;&#xff0c;適用于對數據完整性要求高的場景&#xff0c;如文件傳輸 &#xff08;FTP&#xff09;、HTTP 通信、郵件發送&…

如何序列化和反序列化動態 XmlElement ?

有如下XML&#xff0c;Index_0-Index_N為動態的&#xff0c;N為可變數&#xff0c;如何將對象NoneXML序列化為XML&#xff0c;以及如何將XML內容反序列化為對象NoneXML&#xff1f;1、XML內容<NoneXML><Index_0><UseInSummary>0</UseInSummary><Beg…

分布式高可用ELK平臺搭建及使用保姆級教程指南 (附安裝包網盤免費下載)

1 ELK 簡介 1.1 ELK 是什么 ? ELK是一套開源免費且功能強大的日志分析管理系統,由 Elasticsearch、Logstash、Kibana 三部分組成,是三個軟件產品的首字母縮寫,簡稱ELK。這三款軟件都是開源軟件,通常是配合使用,且歸于 Elastic.co 公司名下,所以被簡稱為 ELK。 ? ELK…

MySQL索引背后的B+樹奧秘

MySQL 索引實現機制深度解析 MySQL 索引的核心數據結構是 B樹。這種設計是數據庫領域數十年優化的結果&#xff0c;完美平衡了磁盤 I/O 效率、范圍查詢性能和存儲利用率。以下是關鍵要點&#xff1a;一、為什么選擇 B樹而非其他結構&#xff1f;數據結構劣勢B樹優勢二叉搜索樹深…

k8s通過NUMA親和分配GPU和VF接口

問題 一般情況下&#xff0c;sriov插件和gpu分配插件是單獨工作的&#xff0c;網卡和GPU沒有根據連接關系分配 如果一個節點起了多個容器&#xff0c;會造成GPU和網卡的通信瓶頸 修改 如果一個點起兩個容器&#xff0c;可以按照NUMA親和來分配 修改kubelet配置文件/var/lib/kub…

qemu-img 擴容虛擬機磁盤后擴容文件系統

在給磁盤映像擴容前需要關閉虛擬機1. 關閉虛擬機 [rootkvm1 opt]# virsh shutdown centos7.9 [rootkvm1 opt]# virsh list --allId Name State ----------------------------- centos7.9 shut off[rootkvm1 opt]# qemu-img info /var/lib/libvirt/images/centos…

Winwos上編譯opencv的GPU版本推理yolov8

1.工具 VS2019 opencv4.7.0 opencv_contrib4.7.0 Cmake3.27.0 cudnn-windows-x86_64-8.5.0.96_cuda11-archive 2.具體流程 1.配置路徑和編譯器后點擊configure 2.提前下載相關的包&#xff0c;如下圖所示 3.第一次configure完成后&#xff0c;需要再配置編譯選項 在編譯…

C語言案例《猜拳游戲》

《猜拳游戲》 游戲說明 一、游戲簡介 本游戲為猜拳對戰類游戲&#xff0c;玩家可選擇不同對手進行石頭、剪刀、布的猜拳對決&#xff0c;支持重復游玩&#xff0c;直至玩家選擇退出。 二、游戲流程 選擇對手 游戲開始后&#xff0c;玩家需從 3 名對手中選擇 1 名進行對戰&#…

使用python的頭文件Matplotlib時plt.show()【標題字體過小】問題根源與解決方案

使用python的頭文件Matplotlib時plt.show【標題字體過小】問題根源與解決方案1. 問題復現2. 問題分析3. 解決方案方案一&#xff08;推薦&#xff09;&#xff1a;使用 fig.suptitle 結合 subplots_adjust方案二&#xff1a;以保存文件函數plt.savefig為準方案三&#xff1a;不…

全面解析MySQL(3)——CRUD進階與數據庫約束:構建健壯數據系統的基石

> 本文將帶你深入探索MySQL的進階CRUD操作與核心約束機制,用設計原則的視角揭示數據庫如何保障數據世界的秩序。 ### 一、進階CRUD:數據操作的精密工具 #### 1. 精準篩選:WHERE子句的深度運用 ```sql -- 基礎篩選:價格大于50的菜品 SELECT * FROM dishes WHERE pric…

使用Redis實現MySQL的數據緩存

使用Redis來實現/mySQL的數據緩存的架構1&#xff1a;目標數據從mySQL讀取數據或者從Redis讀取數據 2&#xff1a;使用cannal監控mySQL&#xff1a;canal-server可以對mysql的blog實行拉取&#xff0c;可以拉去blog里面的(增&#xff0c;刪&#xff0c;改等操作&#xff0c;查詢…

linux配置ntp時間同步

目錄 1.設置時區 2.安裝chrony時間同步工具 3.修改chrony配置文件,添加阿里云NTP服務器作為時鐘源 4.重啟chrony服務&#xff0c;并查看同步結果 1.設置時區 timedatectl set-timezone Asia/Shanghai 2.安裝chrony時間同步工具 apt install chrony -y&#xff08;dnf ins…

powershell 實現批量把文件夾下的bmp文件轉換為jpg

以下是一個使用PowerShell將BMP圖像批量轉換為JPG&#xff08;質量85&#xff09;的腳本&#xff1a; <# .SYNOPSIS批量將BMP圖像轉換為JPG格式&#xff08;質量85&#xff09; .DESCRIPTION此腳本會遍歷指定文件夾中的所有BMP文件&#xff0c;并將它們轉換為JPG格式&#x…

星圖云開發者平臺新功能速遞 | 頁面編輯器:全場景編輯器,提供系統全面的解決方案

在數字化轉型的浪潮下&#xff0c;高效的低代碼開發工具成為企業和開發者的剛需&#xff0c;其需要針對Web、APP、H5等不同終端快速構建應用。但不同場景的開發往往需要不同的工具和技術棧&#xff0c;導致開發效率低、協作成本高。星圖云開發者平臺創新推出多類型頁面專用編輯…

激活函數Focal Loss 詳解?

Focal Loss 詳解?1. 背景?Focal Loss 是由 Lin et al. (2017) 在論文 《Focal Loss for Dense Object Detection》 中提出的一種損失函數&#xff0c;主要用于解決 目標檢測&#xff08;Object Detection&#xff09; 中的 類別不平衡問題&#xff0c;特別是在 One-Stage 檢測…

Python 鏈接各種中間件[Mysql\redis\mssql\tdengine]

文章目錄鏈接參數設置logger 日志redis 鏈接mysql 鏈接emqx 鏈接mssql 鏈接tdengine 鏈接采集OPCUA的點表的配置信息設備點表OPCUA 采集 數據程序數據采集邏輯鏈接參數 import randomtdengine_connection_params {username: root,password: taosdata,host: 127.0.0.1,port: 6…