请选择 进入手机版 | 继续访问电脑版
查看: 40|回复: 0

通过PLL实现时钟信号倍频

[复制链接]
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    656

    主题

    1635

    帖子

    0

    金豆

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    5913
    最后登录
    2019-12-11
    发表于 2019-8-13 08:11:19 | 显示全部楼层 |阅读模式
    一、LPC54102简介

    LPC54102是基于ARM Cortex-M4的嵌入式应用微控制器,包括以下配置:

    一个可选的ARM Cortex-M0+协处理器

    104KB的片上SRAM,512KB的片上Flash

    五个通用定时器,一个SCTimer/PWM,一个RTC /alarm定时器,一个24位MRT,一个看门狗定时器(WWDT)

    四个USART,两个SPI,三个高速模式I2C总线接口

    一个12位ADC。

    用户可以通过恩智浦官网下载UM10850,可以更加细致地了解LPC54102的设计参数。

    本文主要阐述如何使用LPC54102的PLL模块,将低频率输入进行倍频以产生高频率输出。

    文中将对下述内容进行详细说明:LPC54102的时钟选择及控制,采用“MCUXpresso Config Tools v4.1”进行PLL倍频配置并生成代码,PLL相关的寄存器介绍,硬件实验平台和倍频精度验证等。


    二、LPC54102的系统时钟




    时钟配置简介

    通过配置LPC54102的系统控制块(SYSCON),能够输出不同频率的时钟信号(注意:LPC54102的最大时钟频率是100 MHz),下图表示时钟配置选项概述图。
    1.png
    图1. LPC54102时钟配置选项概述

    使用者可以通过下述步骤完成主时钟及系统时钟的配置:

    选择主时钟
    用户可以通过配置寄存器‘MAINCLKSELA’ 和 ‘MAINCLKSELB’为主时钟选择时钟源,以下选项均可作为时钟源:
          1.IRC: 12 MHz internal oscillator (默认选项)

          2.CLKIN

          3.Watchdog oscillator

          4.The output of the system PLL

          5.The RTC 32 kHz oscillator

    为系统时钟设置分频值。

    选择需要运行的内存和外设,并使能对应的时钟选项。

    PLL

    锁相环路是一种反馈控制电路,简称锁相环(PLL, Phase-Locked Loop)。锁相环通常由鉴相器(PD, Phase Detector)、环路滤波器(LF, Loop Filter)和压控振荡器(VCO, Voltage Controlled Oscillator)三部分组成。

    LPC54102的PLL可以实现对输入时钟的倍频,从而产生高频输出。例如,如果所需要的主时钟高于12MHz IRC时钟,可以利用PLL来提高输出频率,并通过分频为片上外设提供时钟信号。(注意:可以通过CLKOUT引脚测量PLL输出频率)
    2.png
    图2. LPC54102的PLL结构介绍

    上图表示,一个典型的PLL配置包含一个用于PLL_input的可选的分频’N’(pre-divide),一个倍频’M’,一个用于PLL_output的可选的分频’P’(post -divide),下文对PLL的特点及配置步骤进行介绍。

    PLL特点

    ◆ 输入频率:包含 32 kHz RTC clock,12 MHz IRC或来自’CLKIN’引脚的最大为24 MHz的时钟输入信号;

    ◆ CCO频率: 75 MHz ~ 150 MHz;

    ◆ 输出频率范围:1.2 MHz ~ 150 MHz. (注意:PLL的最大输出频率大于LPC54102的最大输出频率100MHz)

    ◆ 可编程分频:

    Pre-divider. 采用参数N进行分频(N取值1 ~ 256)

    Feedback-divider. 采用参数M或2*M进行分频(M取值1 ~ 32768)

    Post-divider. 采用参数1或2*P进行分频(P取值1 ~ 32)

    ◆ 锁检测

    ◆ 掉电模式

    ◆ 小数分频器模式

    ◆ 扩频模式

    PLL 操作模式

    本节主要对PLL的正常模式进行叙述,使用者可以查阅UM10850了解其它模式。

    在正常模式的所有变量中,必须满足以下要求:

    75 MHz ≤ Fcco ≤ 150 MHz

    4 kHz ≤ Fin / N ≤ 24 MHz

    考虑到PLL中的相位频率检测器(Phase Frequency Detector)的两个输入端相等,且在正常模式下使用可选择的pre-divide,所以可以得到如下表达式:

    当PLL图示中的BYPASSCCODIV2 = 0,表示:使用‘/2‘分频器:
    Fout = Fcco = 2 x M x Fin / N

    当PLL图示中的BYPASSCCODIV2 = 0,表示:未使用‘/2‘分频器:
    Fout = Fcco = M x Fin / N
    (注意:在上述表达式中,如果可选择的pre-divide未被使用,则N = 1)

    三、配置时钟

    本节介绍使用者如何使用MCUXpresso Config Tools,通过PLL将32.768KHz外部晶振倍频至96MHz。

    LPC54102开发板上的RTC振荡器,可提供1Hz-32kHz的RTC时钟输出,可用作PLL的时钟源。
    3.png
    图3. LPC54102的RTC

    开发板上的‘Y2‘即为32.768KHz的无源晶体,它连接至RTC振荡器,在室温下(+25°C)精度典型值为±20ppm,根据上述换算关系得到的频率偏为:

    32768Hz x (1/1000000) x 20PPM = 0.65536Hz

    即每1000ms仅存在约0.65536ms的误差,精度明显高于使用FRO作为PLL输入得到的倍频精度。

    下图表示使用者需要配置的相关寄存器及功能。
    4.png
    图4. 采用PLL倍频步骤示意图

    上图中的蓝色方框表示相关寄存器的配置参数,红色虚线表示32.768KHz是如何被选择并实现倍频的。

    使用者可以根据实际的产品设计需求,通过‘MCUXpresso Config Tools’进行对应的时钟配置,并生成可执行代码。

    下面是使用MCUXpresso Config Tools配置PLL的步骤:

    ▲ 步骤1. 芯片选型
    5.png
    图5.开始选项选择
    6.png
    图6.芯片选型

    ▲ 步骤2. 使能RTC振荡器输出32 kHz频率
    7.png
    图7. RTC振荡器使能

    ▲ 步骤3. 为PLL选择输入时钟源 (通过寄存器SYSPLLCLKSEL)
    8.png
    图8. PLL输入选择


    ▲ 步骤4. 选择PLL操作模式
    9.png
    图9. PLL模式选择

    ▲ 步骤5. 输入使用者需要倍频的输出值
    10.png
    图10. 手动输入PLL倍频输出频率

    例如:想获取96MHz的输出频率,可以双击’PLL’,在弹出来的’PLL(SYSCON.PLL)_Value’处输入96MHz,然后系统会提示能否接收96MHz的近似值,点击‘Try find near value’即可获取近似96MHz的实际倍频结果。

    经过上述步骤,通过PLL分频'N'和倍频'M'操作后,已经可以实现75MHz~150MHz的频率输出。但是,考虑到LPC54102的CPU最高支持100MHz,还有ADC、定时器、I2C等外设的频率要求不同,因此PLL还提供了可选择的分频'P',以满足不同的频率需求。

    未使用PLL输出分频(P divide)
    11.png
    图11. 未使能分频’P’

    使用PLL输出分频(P divide)
    12.png
    图12. 使能分频’P’

    使用者应选择‘PLL CCO’去生成PLL输出,否则PLL功能将会被屏蔽,从而不能完成倍频输出的目的。
    13.png
    图13. PLL功能使能
    为主时钟(main clock)选择时钟源 (通过寄存器MAINCLKSELB)
    14.png
    图14. 选择主时钟的时钟源

    通过上述步骤,使用者已经可以将32.768KHz外部晶振倍频至近似96MHz,下面一幅图中展示了使用‘MCUXpresso Config Tools v4.1’配置的最终时钟生成示意图。
    15.png
    图15. ‘MCUXpresso Config Tools v4.1’配置示意图

    ‘MCUXpresso Config Tools v4.1’在完成时钟配置的同时,可以生成参考代码及寄存器状态参考,使用者可以参考生成的代码进行实际工程设计。
    16.png
    图16. ‘MCUXpresso Config Tools v4.1’工具生成的时钟配置代码
    17.png
    图17. ‘MCUXpresso Config Tools v4.1’工具生成的寄存器状态


    四、PLL软件配置

    PLL相关寄存器介绍

    本节对配置PLL使用到的主要寄存器进行简要介绍,以便于读者更清晰地了解PLL工作的底层驱动。

    ∆ 电源配置寄存器:PDRUNCFG
    18.png
    采用PDRUNCFG实现片上模拟模块电源管理。

    (注意:从安全的角度出发,使用者不能直接操作该寄存器,而是通过PDRUNCFGSET实现“置1”掉电,或PDRUNCFGCLR完成“清0”供电操作。)

    ∆ 系统PLL控制寄存器:SYSPLLCTRL
    19.png
    采用SYSPLLCTRL实现PLL的基本模式选择。

    例如如果bit15写'1',表示PLL将不能实现倍频操作,经过PLL的输出频率等于输入频率; 如果bit20写'1',表示PLL的输出分频(P)将不能使用。

    ∆ 系统PLL N分频寄存器:SYSPLLNDEC
    20.png
    ∆ 系统PLL扩频控制寄存器:SYSPLLSSCTRL0
    21.png
    API函数

    下面列出时钟配置所用到的部分API函数:
    22.png
    下面是所有API函数的调用以通过PLL实现倍频操作:
    23.png
    五、倍频时钟精度验证

    采用LPCXpresso54102开发板作为硬件实验平台,为了更精准的分析实验结果,建议使用者借助逻辑分析仪、示波器或串口打印助手进行时钟精度验证实验。

    实验方法

    采用CTimer进行1000ms的计数,并在对应的中断回调函数ctimer_match0_callback中,对P0_30引脚(J2_14)进行高低电平翻转并输出Log,硬件的连接图示如下所示:
    24.png
    图5.1. LPC54102硬件连接示意图
    逻辑分析仪验证

    将逻辑分析仪的Channel_0与P0_30引脚(J2_14)连接,采样频率如下所示,
    25.png
    图5.2. 逻辑分析仪输出结果

    为了直观的时钟精度对比,分别采用12MHz FRO及32KHz RTC OUT作为PLL的输入,并在相同实验条件下完成96MHz的倍频:
    26.png
    图5.3 FRO作为输入的CTimer计数值
    27.png
    图5.4 32KHz作为输入的CTimer计数值

    从上图可见,FRO作为PLL输入时,每1000ms约存在4ms左右的误差,而采用32KHz RTC OUT作为PLL输入时的误差明显小于1ms。

    利用串口助手输出验证

    值得注意的地方是,PC端的上位机(串口助手等)通过USB模拟的Virtual COM (VCOM)与MCU进行通信,其本身存在一定的时延。如果想根据串口的Log数据作为参考,则应该关掉PC端的其它任务,以避免对上位机时间戳的影响。因此,建议采用示波器或逻辑分析仪完成PLL倍频的时钟精度验证工作。

    当然,考虑到串口助手受PC系统的影响较为明显(时间戳偏差约为0.1~0.2s),建议采用示波器,或逻辑分析仪去验证PLL倍频后的时钟精度。

    最后给个提示,可以用LPC的Clkout功能将内部时钟信号从引脚输出,再用示波器直接测量频率,有兴趣的朋友可以自己试试看。
    六、结论

    本文的验证结论为:使用者可以使用LPC54102的PLL模块,将RTC振荡器的32KHz 信号进行倍频,以产生约96MHz的高频率输出,且倍频后外部晶振的PPM基本不会增大。

    文中给出基于恩智浦配置工具“MCUXpresso Config Tools”的使用及配置结果介绍,便于使用者快速入门PLL倍频设计。






    作者:张启鹏                   文章出处:恩智浦MCU加油站



    今天天气不错!签到!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    小黑屋|手机版|Archiver|恩智浦技术社区

    GMT+8, 2019-12-16 07:05 , Processed in 0.119791 second(s), 15 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表