晶振是如何起振的?

2023-11-10

01 


皮尔斯晶体振荡器


目前工作中用得最多的就是皮尔斯晶体振荡器,也就是下面这个结构。

00d2f29770826a8ed140b31ed280a50c.png

CL1,CL2为匹配电容,Rext通常为串联的几百欧姆电阻(有时也不加)。上面这个结构可能看着不是很熟悉,我们把它转换一下,变成下面这个就熟悉些。

33717665f39745de17f0da256a6dd0da.png

上图中把RF忽略掉了,如果用过无源晶振的话,应该知道这个RF的阻值一般是很大的,兆欧姆级别,其作用主要是为了给反相放大器一个合适偏置。就像我们模电里面的三极管电路,其工作时都需要合适的直流偏置,这里我们先忽略掉。

晶振的等效电路:

61f24920e759d8aea1f0c729dfa282ba.png

我估计有人看到这里就跑了,这一坨是什么东西,搞这么复杂?其实没那么难,这里面所有的器件,除了反相放大器外,都是基本元器件,反而是更容易分析的。

不过在这之前呢?我们还是插播一个知识点,那就是起振条件。因为只有搞懂了起振条件,我们才能知其然并且知其所以然,先理论分析,然后用仿真去验证,如此更爽。

02 


起振条件


起振条件有两个:相位和环路增益

6d61973621b694a9160f983f92797585.png

上图中将反相放大器的传递函数用A(s)表示,晶振及其匹配电路打包一起,其传递函数看作F(s)。

当环路增益大于1时,说明输入信号在环路中逛一圈后又送到输入端,信号幅度比原来更大

相位为2nπ,说输入信号在电路中逛一圈后,相位与原本的输入信号完全相同,因此输入信号被完美的加强了。

两者结合,就形成了这样的情况:信号经过反复放大后,不断增大,最终就是我们看到那样。

当环路中的信号幅度增大到一定程度后,振荡器中的有源器件(晶振电路中的反相器)存在的非线性会限制幅度的继续增加,使得振荡器的输出达到稳定。通俗说就是振荡的幅值肯定超不过电源电压。

97afe188615461d5c99f39c36ed8f3c4.png

也就是说,只要满足那两个条件,再小的信号,经过环路的无限循环(输入信号Vin逛一圈变成更大的Vin,然后再逛一圈变成更更大的Vin,然后再逛一圈。。。),最终输出幅度总会起来。

尽管我们没有专门提供对应频率的输入信号Vin,但是电路中总会有噪声,比如白噪声就是全频段的,虽然信号很小,但是因为电路的这个不断加强的特性,所以最终一定有输出信号。也就是说,起振是必然的。

总之,起振要满足这两个条件:

29aee08188ca5e0a88d9617e605bb27c.png

关于晶振起振,有一个准则叫巴克毫森稳定性准则,想深入去看的同学可以去查查。

03 


起振电路分析

上节说完了起振条件,那我们继续分析前面的电路,先看相位。

相位

相位需要满足2nπ,显然,n不可能等于0,等于零意外着完全没有相移,电路中有反相放大器,已经相移了π,也就是180°。所以最可能的就是晶振那一坨电路也让信号相移180度,整体凑够360°,也就是2π。

900968168dc51116722de85a73c3ff11.png

Rext和匹配电容CL1构成一个低通滤波器,带来的相移是小于90°的,这应该很容易知道,下图是Rext=100Ω,CL1=10p的低通滤波器的幅频曲线,可以看到,输入与输出的相位差是:0°~90°,输出滞后输入。

b504bdb6c960d1557eb868e7e4066721.png

Rext和匹配电容CL1带来的相移是小于90°,那么晶振与CL2带来的相移必须大于90°,如此才能凑够180°。

那么什么时候晶振与CL2带来的相移是大于90°的呢?答案是必须晶振等效电路整体呈电感性才有可能。

5f19ef31ea1d25852d1650e02786d54e.png

晶振等效电路有三种元器件构成,电阻,电感,电容,其总的等效阻抗可能有三种情况:呈阻性,呈容性,呈感性。

如果从数学角度来看,晶振总阻抗公式化简之后总能写成一个复数的形式,包含实数和虚数的表达式:Z=R+jX。其中R是电阻分量,X为电抗分量。

当X=0:Z=R,整体呈阻性
当X>0:Z=R+jX,整体呈感性
当X<0:Z=R+jX,整体呈容性。

下面分别看下三种情况下,晶振与匹配电容CL2的相位情况。

阻抗公式算出来肯定是一大坨的,就不列了,我们直接看仿真,这样更为直观(电阻100只是象征性取值,可以取其它的,不影响结果,电容值也是)

535dc7bfe4846f34fe8f88f6319ece56.png

可以看到,只有晶振在呈感性的时候,相移才能大于90°,其相移范围是:0~180°。

综上所述,晶振工作时呈感性。那么,晶振呈感性的频率范围是多少呢?

04 


晶振呈感性频率范围


阻抗呈感性的频率范围,列出晶振的总阻抗公式就好了。

8c5c0abc67557889f042427f3904ecb8.png

理论上说,总阻抗是个复数,我们可以把它化简成实部和虚部,虚部大于0时,即表示晶振呈感性。不过这也太费劲,还是直接搞一个实际的晶振参数看看。

大多数晶振都是没有给出Lm,Rm,Cm参数的,不过我查到爱普生的晶振有写出来,比如下面这款25Mhz的晶振。

31186a80fa68d0bbab35056c064bd322.png

可以看到,Rm最大为80Ω,动态电容Cm=1.94fF,动态电感Lm=20.91mH,静态电容C0=0.6pF。

我们直接用这些参数,采用LTspice仿真的方式画出阻抗曲线吧。

24446c3b0b0c7dc8c199fc551e3dd632.png

仿真的原理很简单,给一个1A的电流源,那么Vz的电压就是阻抗乘以电流,电流为1A,那么Vz的值就是阻抗值,因此,图中左边的dB幅度值就是阻抗值。相位表示电压超前电流的相角,因此,如果相位大于0,表示整体阻抗是感性,若小于0,表示整体阻抗是容性的。

从图中可以看出,两个尖之间的区域,相角大于0,就是呈感性的区域,晶体振荡频率25Mhz正好处于这一区域。

a1e60e422ef7dea88ff64c8f2a4d07d5.png

从图上看,两个冒尖的频率分别是24.988623Mhz,25.028984Mhz,很容易猜到,两个冒尖的频点这么特殊,应该是串联谐振点和并联谐振点。

我们可以验证下,分别计算下串联谐振和并联谐振。

7b18c4b24de114d3dcc82d9108abb2ab.png

计算值fs=24.988619Mhz,仿真图读值fs=24.988623Mhz
计算值fa=25.0289844Mhz,仿真图读值fa=25.028984Mhz
可以看到,可以说完全一致。

因此,晶体工作频率范围为:

fef30a04902de84ea5d3e688a06657b2.png

当然,以上只是说晶振实际工作的频率处于这个之间,并不是说实际工作时频率变化范围有这么大,衡量稳定度是有个参数叫频偏,注意不要误解。

05 


小结

本节就写到这里了,暂时只说明了相位关系,其实还有些问题没搞清楚。

比如这个:我们都知道实际应用中,改变匹配电容,可以微调晶振工作频率,所以实际工作频率跟匹配电容肯定有关系,应该是有关系式的。具体关系式我在一些资料中已经看到了,不过只知道个结果吧,还没搞清楚咋来的,暂时就先放着吧。

以上就是本期内容了,如果有问题,欢迎留言指出。

-END-


往期推荐:点击图片即可跳转阅读

12687f1b4cb48432a36972b2372576e5.jpeg

拆一辆十万元的比亚迪“元”,快来看看里面的有哪些元器件。

bde40ed62d82c9a9626c96681227df15.jpeg

什么是光耦电路,实际使用中应该注意些什么?

7e11bec3e4dcd4e6150a98baa0afa202.jpeg

PCB懂王,你是吗?我不是

d7929721d08c594f23c07be40aaf9c79.jpeg

做一个墨水屏电子钟,炫酷!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

晶振是如何起振的? 的相关文章

  • 使用 java.nio.file.Paths 接口时缺少方案(IllegalArgumentException)

    这是一个非常简单的java问题 我在 Linux 系统上使用 Java 8 和 eclipse kepler 我一直在尝试尝试NIO 2 我的代码是 package lucasTest import java io IOException
  • 在 Windows 上将 NumPy 与 BLAS 链接

    我正在尝试在 Windows 系统上安装 Theano 并且需要安装 BLAS 和 LAPACK 我的 System32 文件夹中有这些的 dll 文件 当我运行 numpy config来自 Anaconda 的 show 库的路径正确显
  • 字母表中的加密和解密 - Python GCSE

    我目前正在尝试为学校编写一个程序 以便加密和解密输入的消息 我需要加密或解密的消息仅在字母表中 没有其他符号或密钥 例如 使用消息车加密输入的偏移量为 5 我希望它输出 afs 有人可以帮忙吗 这是我目前的代码 def find offse
  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • PyPI 项目页面中的“Py 版本”是什么意思?这有关系吗?

    我注意到 大多数在 PyPI 上发布的项目在其项目页面中都包含 Py 版本 元数据 但它们的值各不相同 如果包不是通用包或不是纯 python 包 那么它们的值是不同的 这是可以理解的 以便表示它们的目标平台 例如鼻页 https pypi
  • 为什么 Libgdx 的 Table 不接受缩放操作?

    我在 libgdx 库中使用 scene2d 在游戏中创建一些 UI 我使用了一个表格 我想在用户触摸时采取一些缩放操作以使按钮触摸有意义 当我使用任何其他 Actor 类型 例如 Group 并为其提供缩放操作时 它可以工作 但不能工作表
  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • 如何根据服务器/环境动态加载服务器配置?

    目前 我设置了 Maven 配置文件 以便能够为不同的环境 开发 演示 暂存 生产等 部署我的项目 并且它工作得很好 但问题是 对于我拥有的每个模块 Web 应用程序 我需要复制 粘贴此配置文件 它们都是属性文件 当我需要更改环境 服务器配
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • 我可以从同一个 jar 文件执行两个不同的类吗?

    我有一个项目 在一个包中我制作了服务器 在第二个包中我制作了客户端 它运行良好 我想创建一个 Jar 文件 是否可以使用同一个 jar 文件分别运行客户端和服务器 我使用了只有一个 main 的 jar 文件 当我运行 jar 文件时 它会
  • bean 中的 Spring JavaConfig 属性未设置?

    我正在考虑将 Spring JavaConfig 与一些属性文件一起使用 但 bean 中的属性未设置 bean 中的属性未设置 这是我的网络配置 Configuration EnableWebMvc PropertySource valu
  • Tornado websocket handler , self.close() 正在关闭连接而不触发 on_close() 方法

    我是 python stackoverflow tornado 的新手 所以请耐心等待 纠正我 我正在使用龙卷风开发实时应用程序 当我在 Websocket 处理程序类中调用 self close 时 on close 方法不会启动 这次我
  • Python 类方法的示例用例是什么?

    我读了Python 中的类方法有什么用 https stackoverflow com questions 38238 what are class methods in python for但那篇文章中的例子很复杂 我正在寻找 Pytho
  • 如何使用SAXReader解析GPX文件?

    我正在尝试解析GPX file http en wikipedia org wiki GPS eXchange Format 我用 JDOM 尝试过 但效果不太好 SAXBuilder builder new SAXBuilder Docu
  • Networkx 中 Louvain 分区的可视化

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写
  • 在 python 中使用递归替代 len()

    作为 CS1301 问题的一部分 我正在尝试使用递归编写一个函数 该函数将执行与 len 完全相同的操作 但是 我有两个问题 我正在使用全局变量 但我在课程中还没有学到这一点 cs1301 自动评分器告诉我 我的函数返回 26 而不是 13
  • 连接运算符 + 或 ,

    var1 abc var2 xyz print literal var1 var2 literalabcxyz print literal var1 var2 literal abc xyz 除了带有 的自动空格之外 两者有什么区别 哪个通
  • 使用反射 API 填充 Proto 中的地图字段

    我正在尝试编写一个模块 该模块将获取 Message Builder 和从字段名称到值的映射 并将用值填充构建器 一切正常 直到我遇到地图字段 使用 Proto3 我收到一条特定消息 我知道我可以执行该消息的字段 builder b put
  • 在私有 guice 模块中公开 Map

    我在 guice 中有一个 PrivateModule 我想从该模块公开一个 Map public class TestInjectionModule extends PrivateModule expose Map class annoa
  • 如何获取 EC2 实例的 CloudWatch 指标数据

    我想获取我的 EC2 实例的 Cloudmetrics 数据 以便我可以使用这些数据绘制图表并将其显示在我的 Android 设备上 我怎么做 有相同的示例程序或教程吗 提前致谢 这就是我正在做的 private static void f

随机推荐

  • 【bnlearn in Python】Python下载bnlearn包的一些问题

    贝叶斯网络小萌新 请大家多多指教多多关注 文章目录 bnlearn document 下载超时问题 下载指令 证明下载成功 bnlearn document bnlearn包的指南文件见链接 bnlearn document 下载超时问题
  • kmp(看毛片)算法

    别人的两篇博客 传送门1 传送门2 摘录 其中T为主串 P为模式串 其实就是在T中找P 其中next数组存的是 部分匹配值 部分匹配值 就是 前缀 和 后缀 的最长的共有元素的长度 以 ABCDABD 为例 A 的前缀和后缀都为空集 共有元
  • 如何安装使用IP广播?

    步骤一 连接设备到同个局域网 设备连接网络 所有的设备与服务器处于同个局域网内 测试时放在同个交换机内 步骤二 在服务器上安装广播软件 再服务器上安装 数字网络广播系统软件 运行目录下的 Setup exe 文件 一直下一步直到完成 再服务
  • TortoiseSVN使用方法

    安装和配置 TortoiseSVN的下载地址为 http tortoisesvn net downloads html 有32位和64位的版本 一定要根据自己的操作系统下载对应的版本 最好安装一个简体中文的Language packs 可以
  • C++opencv进行图像处理(三)图像的基本操作

    1 图像像素的加法 主要包含了图像的像素加法 当像素增加 会使得图像变亮 当像素减少会使得图像变暗 除法操作会变暗 结果如下所示 左边是原图 右边是像素相加后的 在前面的代码模块中增加的代码为 void QuickDemo pixel op
  • STM32学习笔记—独立看门狗

    1 独立看门狗的介绍 2 独立看门狗的使用 3 代码段 1 独立看门狗的介绍 独立看门狗利用系统内部的低速时钟提供机械周期 这个低速时钟与系统的工作时钟不是一个时钟 所以看门狗的运行和系统的运行是互不干扰的 独立看门狗由内部专门的 40Kh
  • 计算机视觉---常见的颜色空间

    RGB 最常见的面向硬件设备的彩色模型 它是人的视觉系统密切相连的模型 根据人眼结构 所有的颜色都可以看做是3种基本颜色 红r 绿g 蓝b的不同比例的组合 HSV HSV颜色空间是孟塞尔彩色空间的简化形式 是一种基于感知的颜色模型 它将彩色
  • ShardingSphere水平、垂直分库、分表和公共表

    目录 一 ShardingSphere简介 二 ShardingSphere 分库分表 1 垂直拆分 1 垂直分库 2 垂直分表 2 水平拆分 1 水平分库 2 水平分表 三 水平分库操作 1 创建数据库和表 2 配置分片的规则 3 测试类
  • Java内存分配介绍

    Java的内存分配主要有三个位置 方法区 就是字节文件 存储未运行的代码 栈内存 当方法运行的时候 则在栈内存中存储 堆内存 当方法新生成对象的时候 或者新产生出局的时候将在堆内存中存储 方法区 字节文件加载时进入的内存 存储的就是编写成功
  • 常用服务器指令

    查看docker 容器占用进程 docker top 容器id 容器名 查看进程占用内存 top p PID 查看服务器所有进程 pid ef 查看内存 free 查看占用CUP最多 ps aux sort k4nr head n 10 查
  • 【Mariadb数据库用户及权限管理】

    一 用户管理 1 创建用户 方法一 直接创建用户 create user 用户名 来源 identified by 密码 来源地址 localhost 本机 192 168 150 网段 所有 方法二 在授权同时就创建用户 grant 权限
  • VTK笔记-图形相关-判断空间上的点是否在图元内-vtkSelectEnclosedPoints

    判断空间上的点是否在几何图元内 使用vtkSelectEnclosedPoints类 vtkSelectEnclosedPoints vtkSelectEnclosedPoints类可以判断标记点是否在封闭表面内 vtkSelectEncl
  • 【CVPR2021】文章、代码和数据链接

    Awesome CVPR2021 Low Level Vision 整理汇总下今年CVPR图像重建 Image Reconstruction 底层视觉 Low Level Vision 相关的论文和代码 括超分辨率 图像去雨 图像去雾 去模
  • 解决 ANSJ分词 自定义词典文件无效

    注意 1 指定配置文件的路径时 建议配置为绝对路径 这种方式最简单 否则需自行解决路径的问题 2 配置文件的内容 词典各字段之间使用tab t 分割 一般发现自定义字典无效 就是因为使用的不是tab t 而是4个空格等 所以 一定要记住 t
  • Bootstrap 3导航栏

    Today we continue Bootstrap 3 lessons and review Bootstrap 3 Navbar In our new lesson we will try to disassemble the nav
  • 关于复位的一些总结

    同步reset synchronous reset 是说 当reset信号为active的时候 寄存器在下一个时钟沿到来之后被复位 时钟沿到来之前寄存器还是保持其之前的值 异步reset asynchronous reset 是说 当res
  • bash: /opt/ros/kinetic/setup.bash: 没有那个文件或目录

    我安的是ROS melodic版本 但是使用的是kinetic版本的安装教程 这就导致了在有一步 添加环境变量时 使用echo指令 忘了将教程中的kinetic改成melodic 所以出现了以下的现象 当我source bashrc的时候
  • Java学习笔记 -- 包 (package)

    Java 面向对象篇 笔记首页 序号 内容 链接地址 1 面向对象概述 https blog csdn net weixin 44141495 article details 107999131 2 类与对象 https blog csdn
  • 2022蓝桥杯JAVA研究生组--我写了几个

    试题 A 排列字母 本题总分 5 分 问题描述 小蓝要把一个字符串中的字母按其在字母表中的顺序排列 例如 LANQIAO 排列后为 AAILNOQ 又如 GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPST
  • 晶振是如何起振的?

    01 皮尔斯晶体振荡器 目前工作中用得最多的就是皮尔斯晶体振荡器 也就是下面这个结构 CL1 CL2为匹配电容 Rext通常为串联的几百欧姆电阻 有时也不加 上面这个结构可能看着不是很熟悉 我们把它转换一下 变成下面这个就熟悉些 上图中把R