历史上的今天
返回首页

历史上的今天

今天是:2025年03月22日(星期六)

2021年03月22日 | 飞思卡尔16位单片机(六)——锁相环测试

2021-03-22 来源:eefocus

一、锁相环介绍

        在前面的几个实验中,我们没有涉及到单片机的总线时钟的设置。这是因为飞思卡尔16位单片机在不进行总线时钟设置的情况下默认的总线时钟为外部输入晶振频率的1/2。我们的实验电路中用的外部晶振的频率为16MHz,所以在不设置总线时钟的情况下,总线时钟频率为8MHz。在工程应用中,8MHz的总线频率比较低,XEP100单片机允许总线频率为40MHz,实际测试最高可以运行在80MHz的总线频率下。但不建议设置过高的总线频率,原因之一是频率越高稳定性越差;另外过高的总线频率会影响芯片的寿命。为了获得比较高的总线频率,就需要使用锁相环,通过锁相环(PLL)可以对晶振频率进行倍频,从而形成比较高的总线频率。锁相环模块的功能框图如下图所示

        这里只介绍两个比较重要的参数SYNDIV和REFDIV,总线时钟通过这两个参数计算得到,计算公式如下:

f_{PLLCLK}=2times f_{OSCCLK}times left ( SYNDIV +1right )/left ( REFDIV+1 right )

其中,是晶振的频率


SYNDIV和REFDIV这两个参数通过设置REFDV和SYNR这两个寄存器中的SYNDIV和REFDIV位进行修改。


二、实例测试

        我们通过一个简单的实验来了解锁相环的用法,在本文的资源中,可以下载例程的代码。


代码的主要部分是对锁相环的初始化,代码如下:


#define  BUS_CLOCK    80000000    //总线频率

#define  OSC_CLOCK    16000000    //晶振频率

 

/*************************************************************/

/*                      初始化锁相环                         */

/*************************************************************/

void INIT_PLL(void) 

{

    CLKSEL &= 0x7f;       //设置OSCCLK作为系统时钟

    PLLCTL &= 0x8F;       //禁止锁相环

 

    //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1), fbus=PLLCLK/2

    #if(BUS_CLOCK == 120000000) 

        SYNR = 0xcd;

    #elif(BUS_CLOCK == 104000000) 

      SYNR = 0xcc;

    #elif(BUS_CLOCK == 96000000) 

      SYNR = 0xcb;

    #elif(BUS_CLOCK == 88000000) 

      SYNR = 0xca;

    #elif(BUS_CLOCK == 80000000) 

      SYNR = 0xc9;

    #elif(BUS_CLOCK == 72000000) 

      SYNR = 0xc8;

    #elif(BUS_CLOCK == 64000000) 

      SYNR = 0xc7;

    #elif(BUS_CLOCK == 56000000) 

      SYNR = 0xc6;

    #elif(BUS_CLOCK == 48000000) 

      SYNR = 0xc5;

    #elif(BUS_CLOCK == 40000000) 

      SYNR = 0x44;

    #elif(BUS_CLOCK == 32000000)

      SYNR = 0x43;     

    #elif(BUS_CLOCK == 24000000)

      SYNR = 0x42;

    #elif(BUS_CLOCK == 16000000)

      SYNR = 0x01;

   #endif 

 

    REFDV = 0x81;

    PLLCTL |=0x70;  //使能锁相环

    asm NOP;

    asm NOP;

    while(!(CRGFLG&0x08)); //PLLCLK锁定

    CLKSEL |= 0x80;        //设置PLLCLK为系统时钟

}

这段代码比较简单,主要是根据期望的总线频率BUS_CLOCK,对SYNR和REFDV寄存器进行设置,然后通过PLLCTL寄存器使能锁相环,然后等待锁相环工作稳定,最后把单片机的总线时钟源设置为锁相环时钟。


       在上面的代码中,我们看到条件判断语句前边都带有“#”,这与不带“#”的条件有什么区别呢?


       带“#”的代码称为预处理部分。所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。通俗一些说:预处理命令是由编程软件完成的,而不是有单片机完成的。例如:本实验的代码中定义了BUS_CLOCK为80000000,所以经过编程软件处理之后,最后这段代码等效于SYNR=0xc9;,而不是将这段代码都下载到单片机中。


       预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。


       在程序的主函数中,也比较简单,就是一段闪灯的代码。


       将程序下载到单片机中运行,可以看到LED灯快速闪烁。


       将程序的主函数中的设置锁相环的语句打双斜线//INIT_PLL();,使此句隐去,即不对锁相环进行设置,此时总线频率为8MHz。然后将程序再次烧写到单片机中运行,可以看到LED灯的闪烁频率明显降低。   

推荐阅读

史海拾趣

FORMOSA公司的发展小趣事

在台湾,一家名为“FORMOSA电子元件制造厂”的公司,起初是一家小型电阻器生产商,专注于为本地电子制造商提供基础元件。随着个人电脑和消费电子市场的蓬勃发展,该公司敏锐地捕捉到市场需求,开始投资研发高精度、低成本的电子元件。通过不断的技术创新和质量控制,FORMOSA电子元件逐渐在国际市场上获得认可,成为多家知名电子产品制造商的供应商。公司还积极拓展海外市场,在欧洲和北美设立分支机构,进一步巩固了其在全球电子元件市场的地位。

洲光源(Chau Light)公司的发展小趣事

在洲光源公司的发展历程中,品质一直是其核心竞争力之一。公司始终坚持严格的质量控制标准,从原材料采购到产品生产、检测的每一个环节都严格把关。同时,洲光源还注重品牌塑造和市场推广,通过参加各种行业展会、举办技术交流会等方式,不断提升品牌知名度和影响力。这些努力使得洲光源的红外LED产品逐渐在市场上脱颖而出,成为众多客户的首选品牌。

Beck IPC GmbH公司的发展小趣事

为了进一步增强公司的竞争力,Beck IPC积极寻求与其他优秀企业的收购与合作机会。在某一时期,公司成功收购了一家在边缘网关系列产品领域具有领先地位的企业。通过这次收购,Beck IPC不仅获得了更多先进的技术和产品,还进一步巩固了其在工业物联网领域的地位。此外,公司还与多家知名企业建立了战略合作关系,共同推动行业发展。

Global Communications公司的发展小趣事
温度传感器的输出与温度之间的线性关系也很重要,因为这直接影响到补偿电路的准确性和稳定性。
ConnectBlue公司的发展小趣事

随着无线通信技术的不断演进,ConnectBlue公司意识到,要想在市场中保持领先地位,必须不断进行产品创新和升级。因此,公司加大了研发投入,引进了一批高端人才,积极研发新型无线模块和解决方案。经过多年的努力,公司成功推出了一系列具有创新性的产品,如蓝牙低功耗模块、Wi-Fi模块等,这些产品不仅满足了市场需求,还为公司带来了可观的收益。

Digitron公司的发展小趣事

Digitron公司非常重视产品的品质和售后服务。公司建立了严格的质量控制体系,确保每一台出厂的设备都符合高标准的质量要求。同时,Digitron公司还提供全方位的售后服务,包括技术支持、维修保养等,确保客户在使用过程中得到及时、有效的帮助。这种对品质的坚持和对客户的关怀使Digitron公司在客户中树立了良好的口碑。

问答坊 | AI 解惑

求助:请帮忙分析一下这个电路

请帮忙分析一下这个电路,IC2用哪个芯片比较合适。…

查看全部问答>

欧洲半导体原厂招聘高级FAE-上海.深圳,详情请进

Senior FAE Scope  Responsible for providing advanced product and system level knowledge relevant for the applications ams are targeting. Working closely with the business units, sales teams, distributors and customers the ro ...…

查看全部问答>

运算放大器应用设计的几个技巧

运算放大器在电路中发挥重要的作用,其应用已经延伸到汽车电子、通信、消费等各个领域,并将在支持未来技术方面扮演重要角色。在运算放大器的实际应用中,设计工程师经常遇到诸如选型、供电电路设计、偏置电路设计、PCB设计等方面的问题。在电子工 ...…

查看全部问答>

evc 的exe 文件掉电后为什么不能运行

我把evc 的exe copy到nand 里面,再上电就不能运行了是真么回事呢?谢谢…

查看全部问答>

EVC4.0\wince5下CEdit控件按回退键删除时,CEdit的内容没有更新

就是光标移过来了,但是字符串还有显示在那里,只有删到行头才更新一次,再输入就会和先前的字重叠在一起。 而且是设置多行模式才出现这个问题,单选模式删除显示正常。 我的程序里面有一部分控件是动态创建的,但是我在另外一个程序里面写又正常 ...…

查看全部问答>

求好心的高手帮我解决下程序问题:!

第一个程序是:单片机与PC进行通信,用MAX232实现电平转换,所实现功能是下载的功能,即从PC机上传递数据给单片机.这个程序应该怎么写啊? 第二个程序是:DAC0832的程序,所实现功能就是,输出电压..就OK. 我程序实在是 ...…

查看全部问答>

STM8中TIM2,3,4同时开启定时,第一次中断时间不准

void TIM2_INIT(void) { TIM2_PSCR = 2;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/ TIM2_ARRH = 0x27; /*50ms中断一次*/ TIM2_ARRL = 0x10; TIM2_IER = 0x01; /*更新中断使能*/ TIM2_CR1 = 0x81; /*使能计数器*/ } ...…

查看全部问答>

虚心请教大家一个问题

本帖最后由 dontium 于 2015-1-23 13:39 编辑 我在用TMS320F206这个芯片做电机控制,它要与PCI9054芯片相连接,但是F206没有HPI接口,这样互连怎样实现,希望得到大家的指点`~谢谢` …

查看全部问答>