跳至主要内容

【转】晶振电路的原理

晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会有很大的变化。
  晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。
  一般的晶振振荡电路都是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于负载电容,请注意一般IC的引脚都有等效输入电容,这个不能忽略。
  一般的晶振的负载电容为15p或12.5p ,如果再考虑元件引脚的等效输入电容,则两个22p的电容构成晶振的振荡电路就是比较好的选择。

  晶体振荡器也分为无源晶振和有源晶振两种类型。无源晶振与有源晶振(谐振)的英文名称不同,无源晶振为crystal(晶体),而有源晶振则叫做oscillator(振荡器)。无源晶振需要借助于时钟电路才能产生振荡信号,自身无法振荡起来,所以"无源晶振"这个说法并不准确;有源晶振是一个完整的谐振振荡器。

  谐振振荡器包括石英(或其晶体材料)晶体谐振器,陶瓷谐振器,LC谐振器等。

  晶振与谐振振荡器有其共同的交集有源晶体谐振振荡器。

  石英晶片所以能做振荡电路(谐振)是基于它的压电效应,从物理学中知道,若在晶片的两个极板间加一电场,会使晶体产生机械变形;反之,若在极板间施加机械力,又会在相应的方向上产生电场,这种现象称为压电效应。如在极板间所加的是交变电压,就会产生机械变形振动,同时机械变形振动又会产生交变电场。一般来说,这种机械振动的振幅是比较小的,其振动频率则是很稳定的。但当外加交变电压的频率与晶片的固有频率(决定于晶片的尺寸)相等时,机械振动的幅度将急剧增加,这种现象称为压电谐振,因此石英晶体又称为石英晶体谐振器。 其特点是频率稳定度很高。

  石英晶体振荡器与石英晶体谐振器都是提供稳定电路频率的一种电子器件。石英晶体振荡器是利用石英晶体的压电效应来起振,而石英晶体谐振器是利用石英晶体和内置IC来共同作用来工作的。振荡器直接应用于电路中,谐振器工作时一般需要提供3.3V电压来维持工作。振荡器比谐振器多了一个重要技术参数为:谐振电阻(RR),谐振器没有电阻要求。RR的大小直接影响电路的性能,也是各商家竞争的一个重要参数。

概述

  微控制器的时钟源可以分为两类:基于机械谐振器件的时钟源,如晶振、陶瓷谐振槽路;基于相移电路的时钟源,如:RC (电阻、电容)振荡器。硅振荡器通常是完全集成的RC振荡器,为了提高稳定性,包含有时钟源、匹配电阻和电容、温度补偿等。图1给出了两种时钟源。图1给出了两个分立的振荡器电路,其中图1a为皮尔斯振荡器配置,用于机械式谐振器件,如晶振和陶瓷谐振槽路。图1b为简单的RC反馈振荡器。

 

机械式谐振器与RC振荡器的主要区别

  基于晶振与陶瓷谐振槽路(机械式)的振荡器通常能提供非常高的初始精度和较低的温度系数。相对而言,RC振荡器能够快速启动,成本也比较低,但通常在整个温度和工作电源电压范围内精度较差,会在标称输出频率的5%至50%范围内变化。图1所示的电路能产生可靠的时钟信号,但其性能受环境条件和电路元件选择以及振荡器电路布局的影响。需认真对待振荡器电路的元件选择和线路板布局。在使用时,陶瓷谐振槽路和相应的负载电容必须根据特定的逻辑系列进行优化。具有高Q值的晶振对放大器的选择并不敏感,但在过驱动时很容易产生频率漂移(甚至可能损坏)。影响振荡器工作的环境因素有:电磁干扰(EMI)、机械震动与冲击、湿度和温度。这些因素会增大输出频率的变化,增加不稳定性,并且在有些情况下,还会造成振荡器停振。

振荡器模块

  上述大部分问题都可以通过使用振荡器模块避免。这些模块自带振荡器、提供低阻方波输出,并且能够在一定条件下保证运行。最常用的两种类型是晶振模块和集成硅振荡器。晶振模块提供与分立晶振相同的精度。硅振荡器的精度要比分立RC振荡器高,多数情况下能够提供与陶瓷谐振槽路相当的精度。

功耗

  选择振荡器时还需要考虑功耗。分立振荡器的功耗主要由反馈放大器的电源电流以及电路内部的电容值所决定。CMOS放大器功耗与工作频率成正比,可以表示为功率耗散电容值。比如,HC04反相器门电路的功率耗散电容值是90pF。在4MHz、5V电源下工作时,相当于1.8mA的电源电流。再加上20pF的晶振负载电容,整个电源电流为2.2mA。

  陶瓷谐振槽路一般具有较大的负载电容,相应地也需要更多的电流。

  相比之下,晶振模块一般需要电源电流为10mA至60mA。

  硅振荡器的电源电流取决于其类型与功能,范围可以从低频(固定)器件的几个微安到可编程器件的几个毫安。一种低功率的硅振荡器,如MAX7375,工作在4MHz时只需不到2mA的电流。


结论

  在特定的微控制器应用中,选择最佳的时钟源需要综合考虑以下一些因素:精度、成本、功耗以及环境需求。下表给出了几种常用的振荡器类型,并分析了各自的优缺点。
      

点击看大图

 

thinkker转帖注:表格翻译如下。

时钟源

精度

优点

缺点

晶体振荡器

/

低成本

EMI敏感,怕震动,怕潮湿,阻抗匹配电路复杂

有源晶体振荡器

/

EMI和湿度不敏感,无附加元件,无匹配问题

成本高;功耗大;怕震动;体积大

陶瓷振荡器

低成本

EMI敏感,怕震动,怕潮湿

集成硅振荡器

/

EMI、湿度和震动不敏感。快速启动,小尺寸,无附加元件,无匹配问题

温度敏感度通常高于晶体振荡器和陶瓷振荡器;某些类型需要较高供电电流

RC阻容振荡

很低

成本最低

通常对EMI和湿度敏感。对于温度和供电电压很敏感。

评论

此博客中的热门博文

【转】VxWorks中的地址映射

在运用嵌入式系统VxWorks和MPC860进行通信系统设计开发时,会遇到一个映射地址不能访问的问题。 缺省情况下,VxWorks系统已经进行了如下地址的映射:   memory地址、bcsr(Board Control and Status)地址、PC_BASE_ADRS(PCMCIA)地址、Internal Memory地址、rom(Flach memory)地址等,但是当你的硬件开发中要加上别的外设时,如(falsh、dsp、FPGA等),对这些外设的访问也是通过地址形式进行读写,如果你没有加相应的地址映射,那么是无法访问这些外设的。   和VxWorks缺省地址映射类似,你也可以进行相应的地址映射。   如下是地址映射原理及实现:   1、 地址映射结构 在Tornado\target\h\vmLib.h文件中 typedef struct phys_mem_desc { void *virtualAddr; void *physicalAddr; UINT len; UINT initialStateMask; /* mask parameter to vmStateSet */ UINT initialState; /* state parameter to vmStateSet */ } PHYS_MEM_DESC; virtualAddr:你要映射的虚拟地址 physicalAddr:硬件设计时定义的实际物理地址 len;要进行映射的地址长度 initialStateMask:可以初始化的地址状态: 有如下状态: #define VM_STATE_MASK_VALID 0x03 #define VM_STATE_MASK_WRITABLE 0x0c #define VM_STATE_MASK_CACHEABLE 0x30 #define VM_STATE_MASK_MEM_COHERENCY 0x40 #define VM_STATE_MASK_GUARDED 0x80 不同的CPU芯片类型还有其特殊状态 initialState:实际初始化的地址状态: 有如下状态: #define VM_STATE_VALID 0x01 #define VM_STATE_VALID_NOT 0x00 #define VM_STATE_WRITA

【转】cs8900网卡的移植至基于linux2.6内核的s3c2410平台

cs8900网卡的移植至基于linux2.6内核的s3c2410平台(转) 2008-03-11 20:58 硬件环境:SBC-2410X开发板(CPU:S3C2410X) 内核版本:2.6.11.1 运行环境:Debian2.6.8 交叉编译环境:gcc-3.3.4-glibc-2.3.3 第一部分 网卡CS8900A驱动程序的移植 一、从网上将Linux内核源代码下载到本机上,并将其解压: #tar jxf linux-2.6.11.1.tar.bz2 二、打开内核顶层目录中的Makefile文件,这个文件中需要修改的内容包括以下两个方面。 (1)指定目标平台。 移植前:         ARCH?= $(SUBARCH) 移植后: ARCH            :=arm (2)指定交叉编译器。 移植前: CROSS_COMPILE ?= 移植后: CROSS_COMPILE   :=/opt/crosstool/arm-s3c2410-linux-gnu/gcc-3.3.4-glibc-2.3.3/bin/arm-s3c2410-linux-gnu- 注:这里假设编译器就放在本机的那个目录下。 三、添加驱动程序源代码,这涉及到以下几个方面。(1)、从网上下载了cs8900.c和cs8900.h两个针对2.6.7的内核的驱动程序源代码,将其放在drivers/net/arm/目录下面。 #cp cs8900.c ./drivers/net/arm/ #cp cs8900.h ./drivers/net/arm/ 并在cs8900_probe()函数中,memset (&priv,0,sizeof (cs8900_t));函数之后添加如下两条语句: __raw_writel(0x2211d110,S3C2410_BWSCON); __raw_writel(0x1f7c,S3C2410_BANKCON3); 注:其原因在"第二部分"解释。 (2)、修改drivers/net/arm/目录下的Kconfig文件,在最后添加如下内容: Config ARM_CS8900    tristate "CS8900 support" depends on NET_ETHERNET && A

【转】多迷人Gtkmm啊

前边已经说过用glade设计界面然后动态装载,接下来再来看看怎么改变程序的皮肤(主题)     首先从 http://art.gnome.org/themes/gtk2 下载喜欢的主题,从压缩包里提取gtk-2.0文件夹让它和我们下边代码生成的可执行文件放在同一个目录下,这里我下载的的 http://art.gnome.org/download/themes/gtk2/1317/GTK2-CillopMidnite.tar.gz     然后用glade设计界面,命名为main.glade,一会让它和我们下边代码生成的可执行程序放在同一个目录下边     然后开始写代码如下: //main.cc #include <gtkmm.h> #include <libglademm/xml.h> int main(int argc, char *argv[]) {     Gtk::Main kit(argc,argv);         Gtk::Window *pWnd;        gtk_rc_parse("E:\\theme-viewer\\themes\\gtk-2.0\\gtkrc");       Glib::RefPtr<Gnome::Glade::Xml> refXml;     try     {         refXml = Gnome::Glade::Xml::create("main.glade");     }     catch(const Gnome::Glade::XmlError& ex)     {         Gtk::MessageDialog dialog("Load glade file failed!", false,       \                                   Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK);         dialog.run();               return 1;     }         refXml->get_widget("main", pWnd);     if(pW