[实战] 用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×1012 ,
但短期抖动较大(σx≈20nsrms\sigma_x \approx 20\ \mathrm{ns}\ rmsσx20 ns rms)。
本地 OCXO(恒温晶振) 的短期 Allan 方差优良:
σy(τ=1s)≈2×10−12,\sigma_y(\tau=1\ \mathrm{s}) \approx 2 \times 10^{-12}\ , σy(τ=1 s)2×1012 ,
却存在缓慢漂移(≈2×10−10/day\approx 2 \times 10^{-10}/\mathrm{day}2×1010/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=fOCXOfGPS.

状态方程
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=[10T1], 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=[10].

过程噪声协方差
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=[σt200σ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^kk1Pkk1Kkx^kkPkk=Fx^k1∣k1,=FPk1∣k1FT+Q,=Pkk1HT(HPkk1HT+σv2)1,=x^kk1+Kk(zkHx^kk1),=(IKkH)Pkk1.

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,ζ=21.

离散化 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ζω0T,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(k1)+Kp[e(k)e(k1)]+Kie(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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…