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

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

我学到的是

在尝试不同的OCXO并了解控制软件、GPS模块和整体性能的过程中,我注意到Bliley、Oscilloquartz和Trimble等带有厚外壳(双外壳?)的OCXO,对外壳内测量的环境温度变化以及我办公室的温度不太敏感。

为了进一步利用这些知识,我在 OCXO 的所有 6 个侧面周围创建了泡沫盒,以进一步将它们与外部温度影响隔离开来。我跟踪了 OCXO 的温度,发现它们的稳定性远低于您对具有专用烤箱以将 X-tal 部件加热到明显高于环境温度的温度的设备所预期的稳定性。我测量的 OCXO 温度在 40 到 55 摄氏度之间,外壳内的环境温度在 25 到 35 度之间,办公室的温度在 18 到 28 度之间。

下面是 Bliley 的照片,您可以在其中看到 PCB 和 Bliley 本身之间的 (10-15mm) 底部隔离。我延长了 Bliley 的引线,使其通过隔离层突出到 PCB。测量OCXO温度的LM35温度传感器在OCXO右侧清晰可见。它位于隔离盒内,我还在引线和 LM35 的 TO92 塑料之间填充了一些泡沫,以增加与 PCB 温度的隔离。在这个基础上,我添加了其余的绝缘墙和盖子。添加墙壁和顶盖时,请确保连接处没有热泄漏。我使用特殊的胶水和双面粘性泡沫来制作盒子,但没有留下顶盖,以便我可以在需要时拆卸。

在这里插入图片描述

在 Arduino Nano 的左侧,您可以看到环境 LM35 传感器的另一个 TO-92 封装。这个传感器实际上离 OCXO 太近了,特别是对于更大尺寸的 Oscilloquartz 和 Trimble,所以我把它拿出来,用 5-8 厘米长的电线延长了引线,用一些热缩管隔离了连接,让这个TO-92封装的传感器自由移动,并将传感器放置在 D1/C1/R1 电路的顶部,位于橙色滤波电容器的右侧。这些组件对温度变化最敏感,会影响固件的控制回路。

下面是 Bliley OCXO 在其已完成的隔离室中的图片。它的原始位置仍然有测量环境温度的 LM35,这说明了我为什么要将它移开。在图片的右下方,您可以看到三个串行监视器引脚:

在这里插入图片描述

温度效应

几个组件,特别是 R1、D1 和 C1 周围的 TIC 电路,将根据温度影响控制回路。其他组件是 DAC,控制 OCXO 的频率调整。DAC 阶跃之间的电压差可以在微伏量级,尤其是在增益较高的情况下。难怪温度有影响。最后一个显然是 OCXO 本身,烤箱将 X-tal 放入内部,温度高达 50-60 度或更高。该烤箱的唯一目的是与环境温度产生较大的差异,因此环境温度对 X-tal 本身的影响很小。理论上…

在我自己的观察中,我发现 OCXO 烤箱的温度对环境温度的影响远大于室温。这就是为什么我决定在 OCXO 周围添加一个绝缘盒的原因。即便如此,烘箱温度仍占环境温度的主导地位。室温只会稍微降低或升高这些“关联”的温度。

这就是我的意思。
在这里插入图片描述

这表明在 24 小时内,室温(红色)仅变化 0.5 摄氏度(最大值 - 最小值),否则相当平坦。

以下是 Oscilloquartz 烤箱和环境温度之后的图表。请注意,这些图表从午夜到午夜。
在这里插入图片描述

我认为这证明了外壳内的环境温度受 OCXO 烤箱温度的影响很大。这就是为什么我决定首先添加绝缘材料。请注意,这些图表是在绝缘层已经到位的情况下制作的!没有绝缘的影响要大得多。

这种效果与具有薄外壳的 OCXO 非常不同,例如 IsoTemp 和 CTI OCXO。它们受室温变化的影响更大,即使在隔离时也是如此,这使我无法在室温变化几度的环境中使用它们,尤其是在冬天。

DAC温度补偿

虽然一开始室温的影响可以忽略不计,但是当我们度假期间室温升高和随后的热浪时,我可以看到 DAC 曲线开始跟随环境和 OCXO 温度曲线。为了对抗这种影响,我对 Trimble 和 Oscilloquartz 实施了补偿。Oscilloquartz 的计算值已经足够,但 Trimble 需要手动进行一些调整才能使 DAC 曲线变平。

Bliley 不需要任何温度补偿。DAC 曲线没有显示温度影响的迹象。

在这里插入图片描述

请注意保持频率对齐所需的 DAC 调整是非常小的,这是902增益下!

然而,经过几天的监测,我注意到一个奇怪的现象开始出现在补偿的 OCXO、theTrimble 和 Oscilloquartz 上。(我找到了根本原因,如下所述)

这是设置温度补偿后 Trimble 的图表:
在这里插入图片描述

首先注意底部的环境和 OCXO 烤箱温度图,并将其与稍高一点的 Oscilloquartz OCXO 图进行比较。当温度在 30.000 秒左右稍微下降时,温度会突然急剧上升,直到大约 64.000 秒时突然急剧下降。这与室温无关!这些转换也可以在 ns 和 DAC 图中观察到。因此,尽管 DAC 图由于补偿而变得更加平坦,但仍有一些非常严重的副作用。Oscilloquartz 具有完全相同的行为。

作为第一步,为了解决这个问题,我再次禁用了温度补偿。

上述效果仅在我们当前的热浪中出现。然而,这种效果也让我重新考虑在 OCXO 中使用绝缘体进行封装。看起来 OCXO 似乎无法摆脱它们产生的热量,或者它们试图与环境温度保持一定的增量。不管是什么原因,0.5-2.0 度的升温都会影响环路调节,因此现在的DAC 设置是不好的,请参阅下一个主题。

我现在已经尽可能地去掉了三个 OCXO 的隔离,所以只剩下底部,或者在 Trimble 的情况下,我只能移除顶部。我正在运行一组新的测试,因为我必须在断电后重新启动系统。

在隔离箱中没有 OCXO 的情况下运行了几天后,我开始频繁地松开锁。这是我首先实施额外绝缘的主要原因。由于打嗝只在热浪期间出现,办公室温度约为 30 摄氏度,我决定回到绝缘的 OCXO 并认为打嗝是理所当然的。在一年中只有这几个星期温度挺高的。

从那以后,房间的温度下降了一点,我看到的打嗝也少了。

温度补偿结果

因此,我再次应用了温度补偿。以下是之前和之后的结果:
首先是之前,可以清楚地看到DAC跟随OCXO烤箱温度。

在这里插入图片描述在这里插入图片描述
补偿之后温度影响要小得多。

以下是 Oscilloquartz 结果,首先是在此之前,然后是之后:
在这里插入图片描述在这里插入图片描述

为什么 DAC 的温度补偿如此重要?

当您没有原子钟来测量(比较)您的 DIY GPSDO 的准确性和稳定性时,您可以使用 TimeLab 来表征您的工具。Lars 在他的文档中有几个示例,如果您不熟悉,请阅读它们。

使用 TimeLab 表征 GPSDO 的方法是收集 DAC 值并将其导入工具,同时将它们转换回 10 MHz 频率表示。但是,这仅在 DAC 值与针对来自 GPS 的 1PPS 测量的差异具有 1:1 关系时才有效。

当 DAC 值受到温度等因素的影响时,与TIC 关系就将扭曲和失真 ,因此 TimeLab 表示的价值较小,因为它不再显示真正规范的 OCXO 性能和稳定性。

Lars 的程序可以监控 OCXO 烤箱温度,以处理 DAC 上基于温度的偏差,他的固件可以通过考虑 OCXO 温度来补偿 DAC 设置。
这背后的想法是获得尽可能没有基于温度的偏差的 DAC 曲线。

下面是我的一个 GPSDO 的示例,带有 Trimble OCXO。图表显示了 24 小时内的 DAC 值、OCXO 温度、外壳内的环境温度以及来自 TIC 的 ns 值。所有温度都显示了几摄氏度的下降,您可以清楚地看到 DAC 遵循这条曲线,这会影响 TimeLab 测量。请注意,ns 图表不遵循温度曲线,这更好地表示了经过驯服的 OCXO 所做的事情,以及我们希望在 TimeLab 图表中看到的内容。

在这里插入图片描述这表明监控 OCXO 温度并找到偏差源以正确补偿 DAC 非常重要。

GPS锁定丢失时的温度效应

我注意到 GPSDO 控制回路的锁定和解锁状态之间存在相当奇怪的温度效应。当控制回路失锁时,我测量的接近 R1/D1/C1 和 Nano 的环境温度下降了几度。这可能有两个原因。一是锁定 LED 熄灭,需要较少的电流。为了尽量减少这种影响,我将 LED 替换为高效版本,并将串联电阻从 200 欧姆增加到 10K。另一个原因可能是 Nano 本身,因为当失锁时进行的过滤较少,因此 Nano 花费的时间更少,空闲时间更多。我在 EEVBlog 上使用了帖子 #466 来展示这种效果。 EEV 博客文章

Bliley OCXO DAC 跳跃

尽管 Bliley 只需要对 DAC 进行轻柔的触感即可使频率与 GPS 保持一致,但这并不完美。
在几个星期的过程中,我注意到非常奇怪的“跳跃”。起初我认为这是一个热机问题,但即使在两周后,这些事件仍然发生。虽然它们的性质不同。这是一个“热身”故障。DAC 值下降,然后保持平稳。

在这里插入图片描述 这是一个 DAC 值下降或上升,然后又回到原始值的事件。请注意,大约 70 DAC 点的像差仅略大于其他 OCXO 需要保持锁定的非常常见和日常的回转。另请注意,ns 值保持在锁定余量内。这一切都是相对的,但仍然如此。换句话说,性能出色,但并不完美。
在这里插入图片描述

下跌后 DAC 上的轻微异常稳定并在几天后消失。上电后监测 Bliley 两个月后,故障消失了,OCXO 非常稳定。不过,经过几天的冷启动后,这些来自 Bliley 的跳跃仍然可见。

我找到了 OCXO 温度跳变的根本原因!

几个月来,我一直在寻找我拥有的三个不同 OCXO 烤箱出现奇怪温度跳跃的原因。太久了,我怀疑温度跳跃来自房间或环境温度,或者 OCXO 烤箱,这会影响 ns/DAC 跳跃,所以我在那个方向寻找。

我终于找到了根本原因。
下面是我的 Oscilloquartz 版本的示例。它不再使用完整的 OCXO 隔离,以避免“过热”,但整个 GPSDO 单元现在位于一个带有隔离的额外外壳中,以避免突然的室温漂移。

在这里插入图片描述这些图表从午夜运行到午夜,并在来自 Lars 固件时每秒采样一次。我通过连接到 Arduino Nano 的 Txd/Rxd 引脚的 Raspberry Pi 收集输出。这些每日日志文件通过电子邮件发送给我。
为了查看白天发生了什么,我还使用了一根 USB-mini 电缆连接在 Arduino 和我的 PC 之间。我使用 Arduino 串行监视器在屏幕上逐秒显示 Lars 的报告。

温度跳跃的原因,从一秒钟到下一秒钟,是由于我的电脑从早上的睡眠中醒来或晚上睡觉。这进入睡眠或唤醒将激活或停用 PC 的 USB 端口上的电源,因此将通过 USB 串行链路向 Arduino 施加 5V,或者撤下5V。

这很有趣,因为我为 Arduino 的 VIN 电源输入提供了一个稳压的 8V DC,并且我没有任何其他逻辑连接到 Arduino 板的 5V 和 3V3 电源输出。我只有一个 100uF 的电容连接到 5V 输出,而没有连接到 3V3 输出。您会认为 8V 电源和板载稳压器足以为 Arduino 供电,无论是否存在来自 USB 连接的 5V。Arduino 电路使用肖特基二极管 (D1) 将板载稳压 5V 电源与来自 USB 输入的 5V 进行“或”操作。

(译者注:请注意作者的一句话:Arduino 电路使用肖特基二极管 (D1) 将板载稳压 5V 电源与来自 USB 输入的 5V 进行“或”操作。这里,arduino nano板的AREF是连接到VCC上的,USB口的电压并非标准的5V,有时候会比5V高一些,这也许会导致D1将电源切换到USB上来,虽然后续证明本次不是这里的问题,但请务必记住,永远不要使用可能浮动的电压作为ADC的参考源!)

出于某种我还无法解释的原因,当您使用带电源的 USB 电缆时,用于采样温度的 Arduino ADC1 和 ADC2 输入会受到影响。您还可以在图表中看到,用于 TIC 输入的 ADC0 得到相同的处理,这会影响 TIC 测量(ns 图表),从而影响 DAC。

由于 DAC 跳跃,我们在 TimeLab 报告中有一个“伪造”事件。

解决方案是使用移除 5V 电源的 USB 电缆,或移除 Arduino 板上的 D1。不幸的是,这个二极管位于 PCB 的底部,当您已经像我一样将 Arduino 焊接到主 PCB 上时,不容易拿到。我无法轻易修改 Arduino 板,因此我将一个公母 USB 连接器连接在一起,并且没有在它们之间连接电源引脚。

更新:
与我最初认为 OCXO 温度跳跃的根本原因相反,它不是由 USB 电源连接(+5、GND 或屏蔽)引起的,而是由数据线(D- 和 D+)引起的。在我之前隔离了 +5V 线之后,我通过使用分线板装置解决了这个问题。

如果其中一条或两条数据线都连接,Lars 报告中的两个 LM35 温度测量值在连接时上升约 0.5 度,不连接时下降约 0.5 度。

它可能与 Arduino Nano 内部参考有关,但我还不能解释,有人可以吗?:-//

(译者注:也许是因为板载的USB转串口正在工作,将VCC电压拉低了一点,正好对应了ADC读数上升,再次强调,永远不要使用可能浮动的电压作为ADC的参考源!可以使用一个精密电压基准单独给AREF引脚使用,就可以良好解决问题。)

使用额外的外壳来降低室温影响

为了减少 GPSDO 的室温影响,我将 Oscilloquartz GPSDO 放在坚固的塑料外壳内。为了提高绝缘性,我从 PCB 上拆焊了 BNC 连接器,并用短屏蔽线代替了它们,这些线连接到前面板安装的 BNC 连接器。GPSDO 的铝制外壳通过泡沫包装和泡沫进一步与塑料外壳绝缘。这个外壳还容纳了监控 Lars 程序状态输出的 Raspberry Pi。为了调节塑料外壳内的温度,我安装了一个小型 30 mm 5V DC 风扇。该风扇由 RPi 通过比例 PWM 信号控制,该信号是根据位于塑料外壳内的 DS18B20 温度传感器的值计算得出的。顶部正面有几个小通风孔,风扇位于后面的高处,在外壳顶部产生气流,而不是低于 GPSDO 所在的位置。调节的风扇速度将创建一个小而稳定的内部温度范围。现在,经过一些调整,内部温度在 32.5 到 33.1 摄氏度之间,比室温高几度,形成了一个小的缓冲。

在这里插入图片描述

这是第一个结果:
在这里插入图片描述

塑料外壳内的第一张温度图只是显示温度波动的快照。请注意,其他两个温度具有应用于 Lars 程序的低通滤波器。内部温度现在调节在 0.6 度以内,因此铝制 GPSDO 外壳内的温度也很稳定。塑料外壳内的温度波动来自于当温度低于设定点时风扇停止的事实。调节风扇速度以保持温度恒定太难了。这将需要 PID 类型的调节。目前,这种方法似乎已经足够了。GPSDO 外壳内的温度现在不再受室温影响,因此 DAC 最终将显示 GPSDO 的“真实”表示。

在这里插入图片描述

我调整了风扇控制器,使内部温度为 33 摄氏度,并保持在 0.2 度以内。GPSDO 环境温度在 52 度时非常稳定,OCXO 烤箱保持在 65 度,两者都在 0.5 度的窗口内。由于比例风扇调节,内部温度在 0.2 度的窗口内波动,室温几乎恒定。较高或波动的室温将无法很好地处理,这需要改进的控制器。

我需要更长时间地监控这种行为。下周我们将再次获得更高的室外温度,这将是一个很好的测试。下一个测试将在冬季,当我们不加热房间时,房间温度会在夜间显着下降。

我现在已经实现了一个 PID 算法来更好地控制风扇。这实际上是我第一次整理 PID,所以请注意。第一个结果实际上非常好。我现在正在进行一些长期测试,看看它在更大的室温波动下效果如何。幸运的是,目前我们的气温异常高。调整了 PID 参数的最新版本 (run_fanV2_0) 位于我的 Github 站点上。

我还订购了另外两个 30 毫米 5V 风扇,我将安装在 Bliley 和 Trimble GPSDO 的铝制外壳中。我寄予厚望,我可以更好地控制外壳内的环境温度,从而在很大程度上消除室温对 DAC 的影响。

更新:当室温变化更显着时,风扇无法使 Oscilloquartz OCXO 温度保持平稳。由于 OCXO 和风扇之间的双重分离,延迟太大。但是,它向我展示了前进的正确方式。

GPSDO 外壳的温度控制

作为合乎逻辑的下一步,我想看看我是否可以控制 GPSDO 外壳内的温度,而不必使用另一个更大的盒子来包围它。温度控制将更直接而不是间接,这也将有利于 GPSDO 本身的温度关键组件。

这种方法背后的整体思路如下。OCXO烤箱尽管安装在绝缘盒中,但仍会加热外壳内部。这些热量最终会通过金属外壳泄漏到房间里。这种转移在很大程度上取决于室温本身。如果这种情况发生变化,内部温度也会发生变化,OCXO温度也会发生变化。如果我们能够控制内部温度并保持恒定,OCXO将由en甚至“绝缘盒外”温度呈现,并且也保持恒定。因为OCXO总是会产生热量,我们可以简单地排出多余的热量,保持温度稳定。为了只吹出适量的余热,我们可以使用温控风扇。诀窍是设置最高室内温度水平,以便在室内温度和室温之间始终有一个温度缓冲区。如果在冬季房间不再加热时,房间温度下降,那么由于泄漏,将有更大的温度转移。诀窍是设置温度,使其在发生这种情况时仍能运行,或运行非常缓慢。在夏季,当室内温度很高时,最大风扇转速应足以保持室内温度恒定。这可能需要一些调整,这就是为什么我修改了固件,以便在运行时设置风扇的控制参数。

为了测试这种方法,我首先修改了我的 Trimble GPSDO。我编写了一个简单的风扇驱动电路,并修改了 Lars 的代码以仅包含风扇控制器。这是带有非常简单的风扇驱动电路的原理图的一部分:
在这里插入图片描述
一些东西我要说明。您不能使用 Arduino 的 D9 输出,它会干扰循环,结果是“无 PPS”消息流。我不知道这是为什么。我花了很长时间才弄清楚使用 D9 是原因。在任何情况下,D6 都能完美运行。我使用了一个小线圈和两个电容来尝试阻止来自风扇电路的 PWM 脉冲,以找到它返回 OCXO 电路的方式。出于同样的原因,我使用了一个简单的晶体管而不是 MOSFET。晶体管的开关转换更加平缓。

这是风扇和控制器板的图片。它只需要几个组件。
在这里插入图片描述
30mm 5VDC 风扇安装在背板上,我使用了两个安装螺钉来安装小孔。板上也有驱动组件。为了让新鲜空气进入,我在前面板上钻了六个 6 毫米的孔,试图迫使气流远离 OCXO。OCXO 本身仍然装在一个硬泡沫盒子里,盒子里有大约 6 个 10-15 毫米厚的边。请注意,输入孔的数量和大小取决于 OCXO 产生的温度。我的 Bliley 有,所以我可能需要更少或更小的孔。

用这个风扇驱动程序扩展 Lars 程序的代码非常简单。我使用环境温度传感器作为输入,使用低通滤波器消除 LM35 臭名昭著的抖动,并使用教科书 PID 控制器通过 PWM 信号驱动风扇。

第一个结果:
在这里插入图片描述

PWM 值在最大值 255 中的 120 左右。它移动的空气量对于我添加的进气口似乎足够了。这应该给我足够的空间来适应更高和更低的室温,在我们异常温暖的秋季温度下,现在的温度接近 30 度。

由于传热系统的惯性,环境温度在 0.6 摄氏度的窗口内上下移动。OCXO 加热内部(环境)温度,风扇试图通过吹掉多余的温度将其调节回 35 度。我选择这个温度是因为它比我的最高室温以及 GPSDO 旁边的周围设备高几度。调节需要一些时间,因此风扇总是有点落后,或者超调。我认为这是正常行为,可以预期是间接系统。由于现在非常稳定的内部环境温度,OCXO 温度也非常稳定。它仅变化 0.3 度。

因为我没有任何调整 PID 回路的经验,所以我尝试了一些增益值,在我有点满意之后,我试了一下上面的结果。我的结论是,它对于这个目的已经足够了,所以除非你们中的任何一个人能想出​​更好的增益值,否则我会留在那里。(我仍在继续了解有关 PID 控制器的更多信息)

可以安全地假设,通过这种环境温度控制,DAC 现在几乎没有室温变化,因此与基于 GPS 的时间差 (TIC) 与 OCXO 的时间差有直接关系。我将监测结果,看看它是否也适用于我们在冬季有较大的室温变化时。

当我们现在使用 DAC 设置分析 TimeLab 的性能时,我们可以真实地表示 GPSDO 的性能。

我的 Lars 程序版本(版本 3.52)在我的 Github 上,链接如下。

看了几天结果后,我决定现在也转换我的 Bliley GPSDO,尽管它几乎没有显示任何室温影响。我还将再次修改我的 Oscilloquartz 版本,并将 GPSDO 从塑料容器中取出。这个容器内部的调节更加间接,所以我认为我可以像现在使用 Trimble 那样调节内部温度来获得更好的性能。它还将消除需要 Raspberry Pi 和第三个传感器的要求,尽管我将继续使用 RPi 进行日志记录。

我用风扇和控制器修改了我的 Bliley 和 Trimble GPSDO。与此同时,我还将我的 Oscilloquartz GPSDO 卖给了一位感兴趣的用户。这使我能够收回我在这个项目中的一些自付费用投资。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值