优秀网页翻译:高精度 10MHz GPS 驯服钟 (GPSDO) - Part3

原文地址:
https://www.paulvdiyblogs.net/2020/07/a-high-precision-10mhz-gps-disciplined.html

Lars 代码的新版本,V3.60。

在继续调整风扇控制器的同时,我需要在更改值时重新编译并重新启动单元。由于重新启动,这是一个非常烦人且极其冗长的过程,因此我扩展了 Lars 使用的现有方法,现在也在运行时设置风扇控制器参数。“信息和帮助”显示 (f1) 包含这些更改,变量显示 (f2) 也是如此。

您现在可以即时更改的是最小 PWM 设置 (u),其整数值介于 0 和 255 之间。
您还可以使用“v”命令设置最高环境温度(cool_baseline),并使用摄氏度的整数值。

PID 增益设置可以设置为:x 表示 Kp,加上一个整数,它是你想要的 10 倍,得到一位小数。所以使用 x6 得到 0.6。使用 y 表示 Ki,使用 z 表示 Kd,具有相同的 x10 值。

请注意,这些新值没有在 Nano EEPROM 中设置,没有剩余空间,我不想重新排列 Lars 想要的当前值的存储。因此,在重置或重新启动后,这些值将恢复为代码中编程的值。

下面是使用 3.6 版软件和标准 PID 参数、PWM 和温度设置的 Bliley 冷启动图。
在这里插入图片描述

PID 调节稳定后,外壳内的环境温度保持在 36.0 度,即使在接下来的 24 小时内也是如此。从 PWM 图中可以看出,这是室温调节的功能,也是 OCXO 温度稳定性的功能。调节稳定后,OCXO 现在最初仅变化 0.3 度,近 7 小时后,在该图表之后的接下来的 24 小时内,现在非常稳定在 50.2 +/- 0.1 度。顺便说一句,我的 Bliley 的 DAC 值仍然会时不时地下降几个 100 DAC 点,持续几天,同时热身。

以下是 Trimble 在冷启动后的结果:
在这里插入图片描述

请注意在大约 2 小时的初始启动后更详细的 PWM 温度调节的快照。由此产生的环境温度保持在 36 +/- 0.1 度。OCXO 温度稳定在 48.1 度 +/- 0.1 度。一天后,它以 48 +/- .2 度为中心。不如 Bliley,但仍然非常令人满意。

进入供暖季节几周后,我想发布以下结果,因为它显示了风扇调节工作的效果更好。这些数据是从我基于 Trimble 的 GPSDO 收集的。

在这里插入图片描述

以下数据来自我基于 Bliley 的 GPSDO。
在这里插入图片描述
通过查看 PWM 图表,您可以清楚地看到早上对房间供暖的反应,以及晚上逐渐下降的反应。在 R1、D1 和 C1 顶部测量的环境温度保持稳定在 35 度,这是外壳内部温度的近似值。如您所知,我的 OCXO 在隔离箱中,因此 OCXO 烤箱调节受隔离箱外部温度的影响不大。您在 OCXO 图表中看到的是 OCXO 烤箱本身的温度调节。看起来可能与室温有关,但即使是这样,影响也在 0.5 和 0.6 度之内。我怀疑这对 OCXO 频率输出有明显影响。最后,DAC 图表显示了对 GPS 1PPS 偏差的“真实”响应,现在可以使用该数据在 TimeLab 中绘制图表,而不会受到外部“污染”。Trimble 的 TC 为 1,000,Bliley 的 TC 为 1,500。

结论
通过USB线连接时温度跳跃的解释,以及风扇调节,我想我现在已经解决了所有与DAC温度相关的问题。

有了这个,我现在可以重新访问一些设置并进行更多测量。

寻找最佳 TC 设置

以下是运行两个 GPSDO 的 TC 为 4 的 TimeLab 结果,使用 Lars 的方法 #2 来确定最佳 TC(他的文档中的第 12 页)。
在这里插入图片描述 可以在 PPS 抖动(下降斜率)和振荡器漂移和噪声(斜率变平或上升的部分)的交叉斜率处找到最佳或 Lars 所说的“合理”TC。

请注意,两条曲线的斜率在 200 秒内几乎相同。我怀疑这是因为 Trimble 从位于 Bliley GPSDO 中的同一个 NEO M8T 获得其 1PPS,因此 PPS 抖动是相同的。使用 4 秒的 TC,DAC 都精确地跟踪 GPS 和 OCXO 偏差,因为没有过滤。

在任何情况下,最佳 TC :Bliley 大约需要 4,000 秒,Trimble 为 2,500 秒。我为两者选择了 2,000 的 TC,这应该可以让我更好地比较它们。

在以 2,000 的 TC 运行 GPSDO 后,这是第二天的结果。获得锁定大约需要 6 个小时,即使在那之后,循环也需要更多时间才能再次真正稳定下来。

在这里插入图片描述

这似乎表明 Bliley 的 2,000 TC 只是有点太高了,因为您可以在 ns 图中看到小的漂移模式。否则它非常稳定,增益为 902!对于 Trimble,TC 肯定太高了。ns 数字开始振荡,DAC 需要跟随。

我现在要将两者的 TC 设置为 1,500。

更新,1500 的 TC 对于 Trimble 来说仍然太高,我逐渐将其降低到 800。
这是针对两个 GPSDO 优化 TC 的结果。

在这里插入图片描述

由于 OCXO 漂移,Trimble 的 ns 曲线不再“振荡”,因此 DAC 有更少的摆动来纠正它。
因此,尽管 TimeLab 图表中的最佳 TC 显示的值约为 2,500,但实际情况却有所不同。

基于 Bliley 的 GPSDO 现在调整为 1,500 的 TC,并且非常稳定,除了一些异常(异常值),如图中间所示。在 Trimble 的 TC 达到 800 后,我再次将其提高到 1,000。

设置 ADC 线性化参数

Lars 在他的 pdf 文档的第 12 页上描述了一种设置 TIC 读数的 ADC 线性化的方法。不幸的是,对于普通人来说,如何推导出最小值-最大值,他不是很清楚或不够具体。在论坛上,我们集体努力解决这个问题。这个过程在 EEVblog 上描述,从 724 后的问题开始。

在试图弄清楚时,我已经找到了一个可以为您提供数字的程序。

将时间常数设置为 4(使用 t4),然后等待锁定。可能需要几分钟。当您再次获得锁定时,将 TIC_offset 设置为 1,000(使用 o1000)并等待 ns 列中的数字再次稳定在零附近。当您将偏移量从默认值 500 设置为 1,000 时,ns 值将跳出额外的 500,并且循环将尝试将其恢复为零。这将只需要一分钟左右,但这次不会有锁定指示。在我的软件中,这在下面的示例中显示为“****”。

此设置将在 filtx10 列中生成一组数字,这些数字大约均匀分布到 10,000 以上和以下的数字(请参见下面的示例)。但是,在将它们添加到系统之前,您需要对它们做什么是问题所在。在博客用户的提示下,我修改了监控程序以记录“原始”TIC_ADC 值。它们位于下面示例的第二列,Eureka!,它们显示了您可以添加到系统中的最小和最大数字。

剩下的大问题是如何弄清楚如何处理 filtx10 值以得出适当的最小值和最大值,就像 Lars 想要你做的那样?在他的文件中,他写道: “filtx10 值将为您提供最小值和最大值。” 好吧,也许吧,但是什么是最大值,什么是最小值,无论哪种方式,您都无法将它们按原样输入系统。根据软件和 f1 信息,可接受的值为 1-500(最小值),即 0.1-50 和 800-1023(最大值)。

揭开谜底

请记住,当没有锁时,filtx10 列中的数据显示数据乘以 10。所以 filtx10 列中的新偏移量 1,000 变为 10,000。

如果您现在查看 filtx10 列中的数据,以及 ADC 列中的数据,很容易看到所有 高于 10,000 的值“代表” 最小ADC 值。要获得该值以便将其输入系统,您需要从 filtx10 数据中减去 10,000。例如,如果值为 10,120,则减去 10,000 得到 120。当您将该值输入系统时,它会自动除以 10 变为 12,即预期值。

全部 低于 10,000的值是 最大值,除以 10。例如,如果值为 9,950,则需要输入的最大值为 995。

我会在电子表格中捕获至少一页左右的数据,然后计算< 10,000 和 > 10,000 的值的平均值,以获得您可以输入的最小值和最大值。

现在可以将这些值添加到系统中,最小值为 l 120,最大值为 l 995,然后与 s1 一起保存在 EEPROM 中。

ADC TIC 值的添加列中的数字与上面计算的数字一致,所以一定是这样!
这是我在 Bliley 上修改后的日志的一个简短示例:

Timestamp ADC pwm time ns dac temp status diff_ns filtx10
15:31:20.015 -> 995 134 4283 -6 35478 50.4 **** 10 9950
15:31:20.994 -> 997 135 4284 -3 35873 50.4 **** 2 9970
15:31:21.977 -> 995 138 4285 -6 35328 50.4 **** -2 9950
15:31:23.007 -> 994 141 4286 -7 34990 50.4 **** -1 9940
15:31:23.989 -> 12 132 4287 14 39274 50.4 **** 21 10120
15:31:25.018 -> 992 138 4288 -9 34614 50.4 **** -23 9920
15:31:26.006 -> 989 141 4289 -13 33731 50.4 **** -3 9890
15:31:26.987 -> 32 132 4290 31 44028 50.4 **** 44 10320
15:31:27.973 -> 16 142 4291 17 40721 50.4 **** -14 10160
15:31:29.002 -> 10 139 4292 12 39556 50.3 **** -5 10100
15:31:29.984 -> 991 130 4293 -10 35102 50.3 **** -23 9910

谜团已揭开 !

新的 MDEV 和频率图

这是两个 GPSDO 的最新 TimeLab 图。TC 为 1,500 的 Bliley 和 TC 为 1,000 的 Trimble。
在这里插入图片描述

Trimble 很好,但 Bliley 非常好。
在这里插入图片描述

该图更清楚地显示了 Bliley 相对于 Trimble 的优势。

GPSDO 的隔离输出

在我将某些东西连接到 10MHz 输出 BNC 连接器后,又看到 GPSDO 因故障而失去锁定的另一种情况后,我决定通过添加隔离输出来一劳永逸地解决这个问题。我的 GPSDO 漂浮在地面上,我的大多数仪器也是如此。唯一的例外是我的范围。由于这种浮动行为,您可能会产生数十伏的接地电压电位差,最多为电源电压的一半,当您将这些浮动接地连接在一起时,这可能会导致毛刺。我计划有两台仪器,它们将由我的 GPSDO、我的 FY6600 函数发生器和我的快速上升频率发生器馈电。两者都从大地漂浮。这意味着我需要两个独立的隔离输出。最明智的方法是将这些输出添加到 GPSDO 的背板上,因为其他两种乐器的输入也在背面。我的快速上升频率发生器已经为 10MHz GPSDO 时钟输入做好了准备,它的背面有一个 BNC。FY6600 需要修改以进行时钟生成和分配。该项目描述在我的 FY6600 博客文章中。
我设计了一个基于广为人知的 TADD-1 6 通道射频分配放大器的电路。
可在此处找到 pdf 文档: TADD-1
因为电路在 GPSDO 内部,所以不需要输入隔离变压器,只需要 2 个输出。我还添加了风扇控制器电路。这是我的电路:
在这里插入图片描述

我决定用自己的专用电源为运算放大器供电。我使用 LM78L08 为运算放大器生成 VCC。我发现8V就足够了。如果您不想这样做,您可以桥接 78L08 插座,并使用主板上已有的可用 8V。
我还使用了前段时间订购的廉价变压器。我添加了组件,通过一个 10nF 电容器和一个 1M 欧姆电阻器将隔离接地连接连接到连接仪器的接地连接。他们将确保输出接地不浮动。在我的情况下,输出总是连接到仪器上,这样就不会产生接地电位,这就是为什么我认为我可以摆脱我所做的事情的原因。官方规定,电容应该是500VAC类型的,你应该串联两个1M Ohm的电阻来产生火花隙,避免其中一个电阻熔断时短路。
下面是PCB的俯视图。
在这里插入图片描述

这就是安装板的方式。该板将滑入外壳的顶盖,因此组件“下垂”。SMA 连接器安装在背板上。为了使它们与主板的接地隔离,我进行了一些工作以确保主接地与金属外壳之间没有连接。增益微调器也可以通过背板上的一个孔访问,尽管我决定不需要它。
使用 DipTrace 的 3D 渲染工具,PCB 看起来像这样:
在这里插入图片描述

这是电路板底部的 3D 渲染。我没有我使用的部件的所有 3D 模型,但你明白了。显示的修剪器是错误的,我使用的是简单的一圈修剪器,前面有调整。
当电路板到达时,我为一个通道建立了一个并开始了一些测量。很快就发现不需要增益部分。影响(对于方波输入信号)非常小,由于输入信号来自 GPSDO 外壳内,我将能够馈入 5V pp 方波。显而易见的是,我不需要第二个放大器级。很好,因为这样可以节省两个运算放大器。不需要增益调整也可以在后面板上节省一个额外的孔。
为这些更改修改 PCB 非常容易。我取出 R8 和微调器并用 0R 电阻器替换 R7,将运算放大器置于单位增益缓冲器配置中。我使用一根细(绕线)线将 R1 的顶部连接到 R9 的顶部,并使用一个焊点来缩短第二级运算放大器之一的引脚 2 和 3。两个隔离变压器现在都连接到第一个运算放大器,但我将 100R 串联电阻 R1 和 R9 更改为 50 欧姆,以保持输出阻抗相同。
下面是两个隔离通道的两个输出,使用 SMA 到 BNC 连接器并将通道连接到我的示波器,由 1M 欧姆示波器输入端接。在这里,我使用我的台式电源为电路板提供 12V 直流电,并使用我的函数发生器和浮动 10 MHz 5V pp 方波输入。信号的保真度至少达到 4V pp,低于该水平,波形开始恶化。
在这里插入图片描述

在我看来很好。
我已将电路板添加到我的 Bliley GPSDO 中,现在我正在用它来喂养我的 DIY 频率发生器仪器。通过这最后一步,我想我已经完成了这个项目。可能需要对软件进行一些调整,但我认为不需要向硬件添加任何内容。我的两个 GPSDO 都很稳定,性能非常非常好。
我还设计了一个小型 PCB,它将进入 FY6600 函数发生器,它将使用 GPSDO 10 MHz 作为时钟生成电路,以提供所需的 50 MHz 主时钟。该部分的描述在我的 FY6600 博客文章中。

其他发展

为了保持这个博客的干净并尽可能关注 GPSDO,我创建了另一篇博客文章,讨论 GPSDO 的监控、测量和记录。
可以在此处找到该博客及其自己的 Github 项目。
(译者注:Part 4 为 GPSDO 的监控、测量和记录)

使用我的 PCB

如果您有兴趣获得此 PCB,我在我的 Github 站点上添加了所需的文件,以及我的 Arduino 控制固件版本。请注意,我在 PCB 布局上犯了一些错误,在设计 PCB 时本可以做得更好。Github 站点上的自述文件中描述了这些陷阱。

将固件更新至版本 3.7.0

在夏季,我注意到外壳内的温度调节不再正常工作。PWM 过于频繁地撞击 255“轨道”,并且不再调节。我正忙于另一个项目,所以我就离开了。

我知道我必须花更多时间学习调整 PID 调节回路,而我从来没有做得很好。
我开始阅读它并实现了一些其他 PID 库,只是为了看看它们的作用与我自己编写的不同。最后,它们比我想要或需要的更复杂或更麻烦。我确实进行了更新并改进了一些东西,然后按照推荐的程序开始调整 PID 参数,从 Kp 开始,然后是 Ki,然后是 Kd。

仔细观察效果,​​我发现由于系统的惯性,小风扇对机箱内温度的反应,很明显我的Kp增益太低了,几乎不需要Ki增益。系统本身已经提供了很多阻尼。我也没有突然跳跃,所以也几乎不需要 Kd 增益。

与此同时,我仍然对表演不满意。我使用的simpel小风扇(30x30mm)无法覆盖更宽的环境温度范围。我决定用更大的风扇替换它,这次是 40x40mm Noctua NF-A4x10 5V 版本,带有 PWM 输入。这意味着我不再需要基于晶体管的风扇负引线开关,因为信号是反相的。我现在直接从 Arduino 的 D6 驱动风扇的 PWM 输入。Noctua 的粉丝喜欢 25KHz 左右的 PWM 频率,不幸的是,标准的 Arduino PWM 频率只有 976Hz。我应用了寄存器更改以使其达到 7.8KHz,但仅此而已。

我现在不使用环境温度传感器作为 PID 调节器的输入,而是使用连接到 OCXO 的传感器。为了更有效,我取下了 OCXO 的绝缘盖。这也将确保更多的热量进入外壳,这将为我提供更多控制温度的空间。调节值设置为大约 OCXO 自身产生的温度,47.5 摄氏度,所以我只去除多余的量。

我还改进了代码中的一些注释,现在到了 Github 上的 3.7.1 版本。

以下是 24 小时更新规则的结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PWM 活动是白天(加热)和夜间室内温度变化的结果,这反映在外壳内部测量的环境温度上。OCXO 烤箱现在保持在一个稳定的温度,这导致更好的频率稳定性,这里由 DAC 表示。风扇始终以 25 的最小 PWM 运行,以保持恒定的气流。

所有这些都表明了温度调节的重要性,因为我可以看到 OCXO 对它的反应是负面的。我坚信温度调节是稳定 GPSDO 系统的关键。

这个项目的 Github 可以在这里找到:
https 😕/github.com/paulvee/Lars-GPSDO

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
登录业余无线电的联系记录时需要一个UTC时,并可以选择设置PC时。 该PCB板设计为以紧凑的形式将NEO-7M GPS和Arduino Nano连接至1602 LCD显示器,该面板可装入1602 LCD显示器的透明丙烯酸LCD外壳内。 时间和日期由GPS设置,并在1602显示屏上显示UTC时间,也可以编程为通过USB发送数据。 可以轻松更改Arduino Nano的代码以显示本地时间和GPS可用的其他数据,例如位置或网格正方形,在互联网上快速搜索将找到许多编程选项和合适的代码,只需更改LCD和GPS代码中的针脚以适合董事会。 1602显示器通过引脚RS-D8,E-D9,D4-D10,D5-D11,D6-D12,D7-D13连接到Arduino Nano,GPS通过RX连接到D3和TX连接到D4,LCD 16针接头插座,安装在板的底部 我为GPSPPS添加了引脚(J3)的选项,除非使用GPSPPS输出,否则不需要引脚。 应该可以将其他GPS模块连接到此板上,但是接口引脚和模块尺寸必须匹配或通过电线连接,并且GPS安装在其他位置。 该项目可以通过USB电缆连接到Arduino Nano或通过可选的7至20VDC外部电源(我在板上标有6.5至12VDC,但LM7805可以达到25VDC,在1.1版中进行了更改)来供电。一条USB电缆,然后J2的内部和内部引脚(与J1相对的一端)通过跳线或插头引脚跳线短接。仅当使用外部直流电源时才需要以下组件:C1-2,U1,J1, 也可以使用5V外部电源并绕过稳压器电路,只需在正确的位置插入几个跳线即可。 RV1用于更改LCD上的对比度。 RV2用于更改显示器的亮度,并且可以小于10kΩ,方便使用2个相同的电阻,可以使用大约220Ω的固定电阻代替,但是能够调节背光LED的亮度很好。 如果将透明亚克力LCD外壳用于1602 LCD显示屏,那么如果将GPS天线安装到GPS模块,则需要在外壳的侧面开一个孔,还要检查J2的位置,它刚好碰到外壳的后部,可能需要在有机玻璃上留一个小凹口以留出一定的间隙,然后移动跳线会更容易。版本1.1已稍微移动了J2,并添加了为备用Arduino Nano引脚添加额外接头的选项 可以使用2004 LCD显示器或/和其他外壳。 请记住,该板是为将LCD 1602接头连接器放置在板的背面而设计的。LCD和面板可以用合适的垫片和螺栓支撑,如果在现场使用时建议在底座的对面至少2个,以减少对连接底座的损坏。 注意:对于1毫米3毫米的螺栓,版本1上的安装孔略小。该孔为2.7毫米。(在1.1版中更改) 可以将该板用于其他项目,我将通过使用GPS插座将键和放大器板连接到扬声器,将该板用于摩尔斯电码振荡器和解码器,将考虑添加一些额外的选件。 Arduino Nano为将来的项目提供的连接(第1.1版完成)可能会为2004 LCD设计一块新板,从而为多余的引脚留出更多空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值