32 kHz 晶体未按预期工作

电器工程 图片 振荡器 水晶
2022-01-12 09:33:34

几天来我一直试图解决这个问题,阅读典型的晶体操作/配置,我很茫然。我尝试在这里搜索,但没有遇到与我的问题类似的问题,所以如果我在某个地方错过了我的解决方案,我很抱歉。

我正在尝试使用 PIC 从外部晶体运行 RTC,但晶体在我期望的时候没有振荡,并且在其他情况下正在振荡,我无法理解它。不过我不是EE,所以我可能只是超级无知。

晶体:LFXTAL016178我相当肯定,因为没有列出任何内容,所以它是一个平行谐振晶体。它的负载电容是 6 pF,我发现这有点不常见?我不知道。

图片:PIC24FJ128GB204我已经按照数据表的建议连接了晶体,但它在选择负载电容器方面没有提供太多明确的帮助,所以我做了一些搜索,并在网上找到了其他资源来帮助我。

设置:我从几个来源看到负载电容器的一个好的经验法则是 \$C_L = \frac{C_1 × C_2}{C_1+C_2}\$,将杂散电容添加到 \$C_1\$ 和 \$ C_2\$ 介于 2 和 5 pF 之间。我为两个电容器选择了我认为是 6pF 的中间值,但我仍然不确定这个选择有多糟糕。

这是我的原理图的图片: 示意图 布局: 布局

不起作用的情况:

  • 正如原理图所示,两个引脚上都有 6pF 负载电容,它不会振荡。除非它每 10 分钟振荡一次。
  • 移除电容器后,它的振荡非常缓慢,可能比应有的慢约 2.5 倍。我没有测量这个速度。
  • 在顶部焊接额外的 6pF 电容器以制成 12pF 电容器,它不会振荡。
  • 引脚上有 3 pF 电容器和 10 MOhm 电阻器。(RTCC 时钟不稳定。)

确实有效的情况:

  • 当我用示波器探测 SOSCI 引脚时。在上面的前三种情况下,只要我将探头接触到 SOSCI 引脚,它就会启动并给我一个干净的正弦波。当我触摸 SOSCO 引脚时,它没有这样做,或者当我使用 3pF 电容器时。我知道它没有事先工作,因为一些 LED 应该每秒闪烁一次,只有在连接探头时才会闪烁。(我对示波器一无所知,我只知道如何操作它们。探头说 6MHz/1MOhm/95pF,示波器说 60 MHz/1 GS/s 和探头连接的 300V CAT II。这是泰克TDS 2002 如果这对任何人都意味着什么。)
  • 当我在 SOSCI 和地之间连接一个 330 欧姆的电阻时。这是我手头的两个电阻器之一;10k 看起来使它以正确频率的一半左右运行。
  • 使用 3 pF 电容器,但频率为 14 kHz。

以下是我测量的一些频率:

  • (12 pF 电容)接触式探头到 SOSCI 的频率:32.7674 kHz
  • (12 pF 电容) PIC 输出的频率与 SOSCI 上的 330 欧姆下拉:32.764 kHz
  • (12 pF 电容)PIC 使用 LPRC 输出的频率:32.68 kHz
  • (3 pF Caps) PIC 输出频率:14.08 kHz

基本上,我想知道的是为什么当我使用示波器探头时它有时会完美振荡,以及正确的解决方案应该是什么才能使其按我的意愿工作。

编辑:我刚刚找到这个应用笔记,上面说我应该为我的微控制器选择一个 12.5 pF \$C_L\$ 晶体。但是,Mouser/Digikey 上具有我所需的最低工作温度 (-55\$^{\circ}\$C) 的任何晶体都缺货。我会得到一个现在就足够了,但我认为我的问题仍然存在。

EDIT2:使用一个花哨的新晶体(\$C_L\$=12.5 pF) 和一些标准的 22 pF 电容,它的工作频率为 32.7676 kHz。这意味着旧晶体 (\$C_L\$=6 pF) 出了什么问题?

4个回答

有两个主要的事情发生:

  1. 你没有足够的负载电容。

  2. 你不了解负载电容。

想象一下晶体的一侧被正弦波以晶体频率驱动。这个信号是低阻抗的。负载电容是放置在晶体另一侧的电容,以引起 180° 相移。

这种晶体的相移作为晶体工作频率下频率的函数而迅速变化。由于作为频率函数的相位在工作频率下非常陡峭,因此对于驱动电路来说,这是一件好事,可用于确保晶体在预期频率下工作。当晶体将输入相位偏移 180° 时,这些类型的电路会以最佳方式振荡。由于只有一点点频率变化就会搞砸,因此产生的振荡非常接近晶体的预期频率。

现在回到你的电路。最大的线索是,当您将示波器探头放在振荡器输入引脚上时,一切正常。这样做是在晶体的输出侧增加电容。显然,通过您的设置,额外的示波器探头电容会导致晶体将相位移动适当的量以使系统振荡。如果您仅在晶体输出中添加更多电容,则可以复制示波器探头的效果,并且一切正常。尝试另一个 10 pF 左右的初始值。

不要使用你在互联网另一端找到的公式而不理解它们。你展示的方程做了一堆假设,其中一些是无效的。不幸的是,有很多关于水晶的传统愚蠢做法。

晶体本身只是一个两端设备,对您的电路接地一无所知。最终,负载电容是其两端的电容。因此,传统的愚蠢做法是在晶体的每一侧使用两个相等的电容器接地。由于它们是串联的,因此每个都需要是所需电容的两倍。但是,您认为晶体每一侧的任何对地杂散电容都需要从这些电容中减去。

传统愚蠢的问题在于它忽略了晶体驱动器输出的阻抗。考虑 0 的极端情况。在这种情况下,添加在晶体输入侧的电容完全无关紧要,因为它与驱动器的 0 阻抗并联。晶体上的负载只是其输出上的电容。

做一些数学。32.8 kHz 时 6 pF 的阻抗为 810 kΩ。现在晶体驱动器的阻抗肯定不为零,但相对于 810 kΩ 很可能是显着的。

考虑每个帽子的真正作用。输入端的一个加载晶体驱动器。这样做的主要目的是衰减来自驱动器的一些谐波。这减少了晶体的跳动,并且使得整个系统不太可能以谐波振荡。晶体具有复杂的转移特性。它们在谐波上的某些特性与在预期工作频率下的特性相同。一些晶体被切割,以便故意在谐波上使用,在行业中称为泛音模式

输出电容是真正的“负载”电容。它的电抗与晶体的电抗相反,以在正确的频率下使结果相移正确的量。

在您的情况下,晶体的额定负载为 6 pF,这就是您对其输出的要求。那应该行得通。我猜正在发生的事情是晶体输入上的电容,实际上是晶体驱动器输出上的电容,也导致了与负载电容相抵消的相移。作为测试,尝试移除晶体输入上的电容,并在其输出上保留 6 pF。很高兴看到晶体输入上的波形,但即使是 10 倍示波器探头也可能会改变它。无论如何都要试一试,但要确保示波器探头设置为最高阻抗,因此尽可能设置最低电容。

MCU 制造商可能有过错。绝对没有理由不设计现代 MCU RTC 振荡器以可靠地与任何典型的商用 32kHz 晶体一起工作。

不幸的是,相反的情况更为常见,正如您已经发现的那样 - 在您的情况下,MCU 数据表没有提到 6pF 负载电容不起作用。

根本问题是您正在处理由两个不同制造商制造的两个组件的系统。其中一个说硅,另一个说石英,他们从来没有正确地同意如何告诉设计师他们的产品如何可靠地协同工作。

因此,正如您所发现的,晶体振荡器可能是不疲倦的人的陷阱。我见过一条主要的汽车生产线因为晶振启动问题而陷入停顿!

无论如何,要解决您的WHY问题,有四个重要参数:

  1. MCU 振荡器的输出阻抗这会随频率而变化,并且通常会因“驱动电平”或“功率电平”等配置位而变得复杂。我从未见过任何 MCU 制造商指定/保证这些值。

  2. 外部电容-晶体-电容“pi”网络的输入阻抗这主要由输入侧的电容器决定,而输入侧的电容器又由晶体制造商指定的负载电容决定。

  3. (加载的)MCU 振荡器在谐振时的电压增益振荡器增益必须弥补 ESR 引起的外部 Pi 网络损失。该增益随温度、电源电压和制造批次而显着变化。从未见过任何 CPU 制造商正确指定/测试/保证的增益(和驱动器输出阻抗)。一些制造商指定跨导 \$G_m\$ 而不是电压增益。

  4. 谐振时外部 Cap-Xtal-Cap“Pi”电路的电压增益(实际上是损耗)。这主要由晶体的内部等效串联电阻(ESR) 决定。您提到的晶体指定ESR = 50k。电阻也会随着时间的推移而增加(因为水分/杂质泄漏到晶体外壳中)并且还受焊接温度/时间的影响。(晶体外壳中的杂质蒸发并沉淀在石英上) ESR 也可能在制造批次之间有很大差异。50k 是 32kHz 晶体的一个相当典型的 ESR——我见过的在 32kHz 时为小型晶体指定的最低值是 30k。

对于任何振荡器工作,总电压增益,即(3) 和 (4)的乘积必须 >1。此外,增益的相位(是的,增益是复数)必须是 360 度。大约一半的相位,180 度,由反相放大器提供,“第二次反相”由 cap-xtal-cap 网络提供。

这是一个简单的在线模拟,可以帮助您了解增益、输出阻抗和电容值如何相互作用并影响启动。右键单击任何组件以更改其值。(注意 - 此模拟使用 1mV 剩余电容电压来假装启动,但在现实生活中放大器中的噪声是启动的来源,就像这个一样)

那么在你的情况下发生了什么?最有可能的是,MCU 振荡器设计人员将他的输出级设计为使用 12.5pF 负载晶体可靠地运行,结果证明在 6pF 负载下,电压增益或相位要求根本无法满足。由于数据表中没有说明任何关于设计假设的内容,瞧,您的问题 - 以及许多其他问题。

哇,嵌入式设计师应该做什么?

首先,请始终注意边际晶体振荡器可能会使您的企业花费很多钱。

其次,鉴于上述情况,特别是如果您缺乏经验,或者如果您的 MCU 供应商没有在数据表中指定晶体参数,您最好的投资可能是外部低功耗 32kHz 振荡器。

第三,确保使用 MCU 制造商指定的具有 ESR 和电容的晶体。如果您在数据表中没有看到任何内容,请向您的供应商索取推荐的晶体部件号列表,或者选择有此功能的 MCU。

四、测试、测试、测试!所有电压和温度下如果可能的话,通过使用 RC 时钟在固件中对其进行计时,注意启动需要多长时间,如果生产单元超过标准,例如 2 倍,让您的测试固件设置一个标志,以便在生产测试中注意到它。这样一来,生产单位就无法在没有警钟响起的情况下,带着边缘振荡器走出大门。

经验丰富的生产验证工程师是做什么的?

他们通过要求“有效”和“有效有效”之间的 10 倍安全裕度来解决普遍缺乏适当信息的问题 - 他们测量实际 ESR,然后将额外的 10 倍额外“障碍阻力”与晶体串联到cap-xtal-cap 网络。如果“残障 ESR”系统适用于所有电压和温度组合,则假定 10 倍安全裕度足以覆盖 ESR 和 MCU 增益的未知变化。本应用笔记的图 3 对此进行了部分解释。

你该怎么办?

如果您出于任何原因无法执行上述测试并希望以数千美元的价格出售产品,那么您最好从已经完成所有测试的振荡器供应商那里购买现成的 32kHz 振荡器,这肯定会更好。,或者通过切换到在器件数据表中指定特定晶振(或晶振要求)的 MCU。

虽然您可以通过选择具有较低内阻的晶体和/或通过使用不同/不对称的电容器值来“解决”这种情况,但由于上述原因,您的解决方案仍然可能是微不足道的。

TL;博士:

晶体振荡器可能会花费您的业务大量时间和金钱。如果可以,请使用外部振荡器,或在所有电压和温度范围内执行上述“残障 ESR”测试。

最后,一定要使用 NPO 电容器来保持温度稳定性。

两个电容和晶体以 180 度相移方式运行。两个电容的大小(比率)将定义电压传输比率。6Pf听起来有点小,问题是晶振并联负载设计点是什么?你不想远离这个值。我通常每边都有 27pf。

如果晶体直接连接到处理器输出,我也会看到一个 sode。该输出可能是低 Z,这可能会过度驱动晶体。请记住,这些手表晶体的驱动规格很小,很容易超速驱动。可以使用 100K 的 R 系列来减少晶体驱动。

确保处理器在从输出到输入的内部有 1 - 10 Meg 偏置电阻。您提到它在用示波器探针触摸时开始振荡。这可能是 DC 偏置问题(我猜是 10Meg 示波器探头)或者可能是探头帽调整了调谐电路传输比。

非常干净(没有杂散通量)和非常短的电线。这是一个真正的 Hi Z 电路。

鲍勃·K。

另外:我使用的“标准”探头是 x 100,因为它们提供的电容最小,我记得大约 1.5pf。在这个电路上使用 x 10 很困难, x 1 没用。使用 x 100 并提高示波器垂直增益,使示波器前端发挥作用。X 1 探头对于高 Z 或高速几乎没有用处。您会喜欢 x 100 进行数字工作,因为 GND 剪辑电流下降了 10 倍。试试吧。

在 32KHz 时,这些不是典型的 XT/AT 切割晶体,而是数字手表晶体,即几毫米长的微小“音叉”。

由于它响应触摸,因此 PIC 提供的 DC 偏置可能是错误的。尝试在振荡器引脚之间添加大值电阻(10Meg,甚至 22Meg。)

您的水晶可能会因过载而损坏。(一个参考建议在 SOSC 引脚和晶体之间包含超过 100K 的电阻。)

有关大量信息,请阅读带有使用这些低频音叉晶体的振荡器的旧芯片的规格表……

第 10 页:http ://www.abracon.com/Support/Tuning-Fork-Crystals-and-Oscillator.pdf

http://www.ti.com/lit/an/slaa322d/slaa322d.pdf

PS 我注意到电子金矿目前有廉价的“手表晶体”音叉,频率不寻常,不是 32KHz