晶振、时钟信号、锁相环、分频器

本文深入探讨了数字电路中的时钟信号原理,包括晶振的工作机制、锁相环电路的倍频作用,以及分频器在系统时钟管理中的应用。详细介绍了晶振如何产生稳定时钟信号,PLL如何实现频率提升,以及设备如何通过分频器匹配所需频率。

驱动数字电路运转是的时钟信号,时序电路都需要一个外部时钟信号来驱动,完成计时,同步,计数,时序控制等各种功能。象CPU也是用时序信号驱动来完成各种运算的,而且象ARM带的模块绝大部分与时序都有关,因此理解时钟信号对于底层编程非常重要。

一.时钟信号的源头---------晶振
----------------------------------------------------------------------------

   数字电路的时钟信号的来源是哪里呢?主流的设计方案是使用晶振这种外部器件来产生稳定的电流波形。这是性效比最高一个方案,晶振是一块水晶加一些电路的小器材,但是它只需要输入很小的电流就是持续稳定出时钟波形。

  这是因为水晶有一个奇特的特性,如果给他通电,他就会产生机械振荡,反之,如果给他机械力,他又会产生电,这种特性叫机电效,。这称为压电效应。

  更奇妙的是如在极板间所加的是交变电压,就会产生机械变形振动,同时机械变形振动又会产生交变电场。一般来说,这种机械振动的振幅是比较小的,其振动频率则是很稳定的。但当外加交变电压的频率与晶片的固有频率(决定于晶片的尺寸)相等时,机械振动的幅度将急剧增加,这种现象称为压电谐振,因此石英晶体又称为石英晶体谐振器。 其特点是频率稳定度很高。石英表就是使用这个原理制而成.


  晶片会产一个稳定的波形,只要持续的供电,这种电能->机械能->电能转换会让波形不断生成. 在要求得到高稳定频率的电路中,必须使用石英晶体振荡电路。石英晶体具有高品质因数,振荡电路采用了恒温、 稳压等方式以后,振荡频率稳定度可以达到 10^(-9)至 10^(-11)。广泛应用在通讯、时钟、手表、计算机……需要高稳定信号的场合 .

    数字电路中重要器件晶振就是使用这一原理制作而成. 晶振是石英晶体谐振器和石英体时钟振荡器的统称。不过由于在消费类电子产品中,谐振器用的更多,所以一般的概念把晶振就等同于谐振器理解了。后者就是通常所指钟振。

它是一种机电器件,是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。

  晶振在数字电路的作用就是供一个基准时间.数字电路都是按时序的进行工作的,  在某个时刻专门完成特定的任务,因此几乎每个电路都有会接收外部时钟信号的管脚.如果这个时钟信号发生混乱.整个电路就工作不正常了.    在一个整体设备里,如开发板,或 PC 主板.所有电路通常共享一个晶振. 便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。

二.系统主频--------内部时钟频率
--------------------------------------------------------------
  一般晶振称为外部时钟频率,它需要把信号引入数字电路给CPU和其它模块使用,局限于材料的物理特性一般的晶振的频率并不是太高,如S3C2440/S3C6410上的晶振的频率一般是12MHz/20MHz,而对的应的CPU的需要使用时钟信号高达400MHz/600MHz,或者更高.这个时候,需要把较低外部时钟信号增加频率到CPU可以接受的频率。这称为倍频. S3C6410 的主频 最高可到667Mhz.

锁相环电路

   倍频的功能是由一种特殊电路---锁相环电路来完成的。 锁相环电路(Phase-Locked Loop,缩写 PLL)  , PLL基本上是一个闭环的反馈控制系统,它可以使 PLL 的输出可以与一个参考信号保持固定的相位关系。PLL 在电路的作用之一是起到倍频的作用.即可以输出系统时钟的固定倍数频率.

   因为在ARM CPU启动后,最开始必须做的事情是配置倍频的比率。这样当输入外部时钟频率一定的情况下,按照倍频的比例,就可以得到CPU的频率,用不同频率运行,这在嵌入式CPU的,一个系统出于不同目的可能会以不同频率运行,低频运算速度慢但是省电,高频速度快但能耗大。

  但是CPU本身是有一个设计最高频率的,如果强行配置成高于设计频率的速度运行,就是人们称的超频。有可能带加速CPU老化,运行时散热增加的问题。

   一般为了保险,软件开发都都会配成产商给几种标准频率。

三.设备频率
----------------------------------------   

   在SOC的CPU上,除了CPU内核以外,在一个物理芯片上,还有一些其它模块,以S3C6410为例,它带了I2C,UART,USB HOST等多个模块,这一些模块通过AHB总线与CPU内核相连.这一些模块同样需要时钟信号来驱动。

   但是ARM的主频信号相对这一些模块来说,频率显得过高。这个时候象S3C2440中内核会提供两种较低频率的时钟信号。 HCLK和PCLK两种时钟信号给设备使用。

divider 分频器

   但是对一些低频模块,PCLK的频率仍然显得过高,这时需要模块自己使用分频器(divider)来把频率进一步降低。降到多少值一般取决于软件的需求,因此各个模块的分频参数一般都是可以调整的。因此初始化相关模块时,软件做一件重要事件就是设置分频参数。

Prescaler 预分频因子

  在有一些模块,如果需要编程来设定分频的比率,通常是用Prescaler即预分频因子这个参数来设定分频后的值,假设输入频率是Fin,分频后输出的频率是Fout,而三者有如下关系

     Fout = Fin /(Prescaler + 1 )

在某一些模块里,分频后的频率仍然是太高,可能需要再次分频,这时分频的参数一般称为divider value.这样公式变成

     Fout = Fin /(Prescaler + 1 )/divider

晶振、时钟信号、锁相环、分频器_第1张图片





作者:涛吴
链接:https://www.zhihu.com/question/20392042/answer/14999333
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

一小块石英晶体加电后产生压电反应,在固定频率振动,产生出电压按照固定周期变化的脉冲信号。这个高频率的信号通向分频器(frequency divider),转化为比较低频的信号。

<img src="https://i-blog.csdnimg.cn/blog_migrate/12497b0d4cc59dcfabf6b59ed6a37cec.jpeg" data-rawwidth="568" data-rawheight="437" class="origin_image zh-lightbox-thumb" width="568" data-original="https://pic3.zhimg.com/303c5efb4815d2adde60c45452112946_r.jpg">( electronics-tutorials.ws

以上图为例,分频器分出来的信号有四个频率。题目中所说 CPU周期信号、节拍周期信号、节拍脉冲信号本质上都是时钟脉冲的不同分频,主要区别在于用途上。

通常来说,CPU 周期信号最“慢”,它决定 CPU 所处的状态。CPU 执行一条指令的周期叫做指令周期(instruction cycle),指令周期可以划分为 fetch、decode、和 execute 三个部分,所以也叫 fetch-decode-execute cycle。假设上图与 QD 频率相同的信号有三个,QD1、QD2、QD3,它们分别依次处于高电位,那么就可以用它们来控制 CPU 处于 fetch、decode、还是 execute 状态,这就是 CPU 周期信号。

节拍周期信号是控制信号,调整电路的功能。比如,现在 CPU 处于 fetch 状态,仍旧以上图为例,假设 QC 这个比 QD “快”的信号有 QC1、QC2、QC3……QCi 个,分别对应电路的不同功能(比如,应该将从内存中取来的数字作为指令解释,还是送给寄存器存起来),谁处于高电位,CPU 就能执行谁决定的功能。

节拍脉冲信号则是触发信号,决定电路的实际工作起点。以上图的 QB 为例,假设 QD1 决定 CPU 处于 fetch 阶段,QC1 决定 CPU 的功能是去内存取一个数字,那么 QB 的上升沿会触发整个电路切实地执行这个功能。



from: http://www.cnblogs.com/xd-elegant/p/4125853.html


由于提供的引用内容中未涉及PLLXTPRE分频器的相关信息,下面为基于一般知识的介绍。 ### 原理 PLLXTPRE分频器是用于对输入时钟信号进行分频操作的电路。其核心原理基于数字逻辑电路,通过计数器对输入时钟信号的脉冲进行计数。当计数器达到预设的计数值时,输出信号产生跳变,从而实现对输入时钟信号的分频。例如,若预设计数值为N,则输出信号的频率为输入信号频率的1/N。在STM32等微控制器中,PLLXTPRE分频器通常位于时钟树中,用于对外部时钟源(如HSE)进行分频,以满足PLL(锁相环)输入频率的要求。 ### 应用 - **频率适配**:在一些系统中,外部时钟源的频率可能过高,而PLL对输入频率有一定的范围要求。此时,PLLXTPRE分频器可以将外部时钟信号分频到合适的频率,以确保PLL正常工作。例如,当外部晶振频率为8MHz,而PLL要求输入频率为4MHz时,可使用PLLXTPRE分频器进行2分频操作。 - **功耗优化**:通过调整分频系数,可以降低系统某些部分的时钟频率,从而减少功耗。在对时钟频率要求不高的模块中,使用较低的时钟频率可以有效降低功耗。 ### 使用方法 以下是在STM32中使用PLLXTPRE分频器的一般步骤,以HAL库为例: ```c #include "stm32xxxx_hal.h" void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** 初始化RCC振荡器 */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 设置PLLXTPRE分频系数 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // 假设设置PLLXTPRE为2分频 RCC_OscInitStruct.PLL.PLLXTPRE = RCC_PLLXTPRE_DIV2; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** 初始化RCC时钟 */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } ``` ### 相关问题 1. PLLXTPRE分频器的分频系数有哪些可选值? 2. PLLXTPRE分频器的分频精度如何保证? 3. 在不同的STM32系列中,PLLXTPRE分频器的使用有什么差异? 4. PLLXTPRE分频器对系统稳定性有什么影响? 5. 如何测试PLLXTPRE分频器的实际分频效果?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值