锁相环是什么,为什么可以用来放大时钟频率,怎么做到的,还有预分频起,为什么可以进行分频和倍频?

一、锁相环(PLL)是什么?

锁相环(Phase-Locked Loop,PLL) 是一种反馈控制电路,它的核心功能是:

  • 使输出信号的相位与参考信号的相位保持同步

  • 从而间接使频率也同步,并且可以按设定比例放大频率

PLL 的基本组成(4个部分):

外部时钟(如8MHz晶振)

  1. 鉴相器(Phase Detector, PD) ← 比较参考时钟和反馈时钟的相位差

  1. 低通滤波器(Low-Pass Filter, LPF) ← 将相位差转换为电压信号(平滑)

  1. 压控振荡器(Voltage-Controlled Oscillator, VCO) ← 电压控制输出频率

  1. 分频器(/N) ← 将输出分频后反馈给鉴相器

└─────────────┘

这是一个闭环负反馈系统


二、PLL 如何"放大"频率?

关键在分频器(/N)

工作过程:

  1. 参考频率 = 外部晶振频率(如 8 MHz)

  2. 反馈回路 中有一个 ÷N 分频器

  3. 系统稳定时,鉴相器检测到的相位差为0,这意味着:

    参考频率=VCO输出频率N参考频率=NVCO输出频率

  4. 因此:

    VCO输出频率=参考频率×NVCO输出频率=参考频率×N

举例(STM32F103 常见配置):

外部晶振 = 8 MHz

PLL倍频系数 N = 9

则 PLL输出 = 8 MHz × 9 = 72 MHz

实际上PLL内部还有预分频器(M)后分频器(P、Q等),更完整的公式是:

fout=fin×N(M×P)fout​=fin​×(M×P)N​

在STM32F103中,常见的配置是输入8MHz,经过PLL后输出72MHz。


三、分频器为什么能分频?

数字分频原理(以预分频器为例):

分频器本质是一个计数器

  • 每输入 N 个时钟脉冲,输出 1 个脉冲

  • 例如 ÷2 分频器

输入时钟: (周期 T)

输出时钟: ▁▁▁▁▁▁_▁▁ (周期 2T)

频率减半,周期加倍。

实现方式:
  1. D触发器级联:每个D触发器实现÷2

    输入 → D1(Q) → D2(Q) → ... → 输出

    每个触发器在时钟上升沿翻转一次

  2. 计数器+比较器:可编程任意分频比

    计数器从0计数到N-1,然后复位并输出一个脉冲


四、为什么STM32F103C8T6要采用PLL作为系统时钟?

STM32F103C8T6的核心需求:

  • CPU需要高速运行(最高72 MHz)

  • 但外部晶振不能太高(通常4-16 MHz)

原因分析:

1. 高频晶振的缺点
  • 成本高

  • 体积大

  • 功耗大

  • 稳定性差(高频下更易受干扰)

2. PLL的优点
  • 使用低频晶振产生高频时钟(如8MHz晶振→72MHz系统时钟)

  • 频率灵活可调(通过配置倍频系数N)

  • 时钟质量好:PLL有滤波功能,输出时钟抖动小

  • 低功耗:外部晶振低频工作,内部PLL按需提供高频

3. STM32F103的时钟树结构

外部晶振 (HSE, 8MHz)

PLL倍频 (×9)

系统时钟 (SYSCLK, 72MHz)

分发给:CPU、AHB总线、APB总线等

4. 性能需求
  • 72 MHz 时钟使CPU能快速执行指令

  • 高速外设(如SPI、定时器)需要高时钟频率

  • 但又要保持外部电路的简洁和低成本


五、PLL的实际配置(STM32F103代码示例)

cs 复制代码
// 典型配置:8MHz晶振 -> 72MHz系统时钟
void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    
    // 1. 使能HSE(外部8MHz晶振)
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    
    // 2. 配置PLL:输入8MHz,输出72MHz
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 倍频系数 N=9
    
    // 3. 设置AHB/APB分频
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;  // 系统时钟源选择PLL
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;        // AHB不分频 = 72MHz
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;         // APB1 = 36MHz(最大)
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;         // APB2 = 72MHz
}

六、总结对比表

特性 直接使用高频晶振 使用PLL(低频晶振+倍频)
外部晶振频率 高(如72MHz) 低(如8MHz)
成本
功耗 低(晶振部分)
频率灵活性 固定 可编程调节
时钟质量 一般 好(抖动小)
启动时间 稍长(PLL锁定时间)

核心要点记忆

  1. PLL不是"放大"能量 ,而是通过反馈控制生成高频时钟信号

  2. 分频器本质是计数器,数到N就输出一个脉冲

  3. STM32用PLL 是为了:低成本晶振 + 高性能运行的完美平衡

  4. 锁相是关键:通过比较相位差来调整频率,直到相位锁定

这就是为什么现代MCU几乎都使用PLL技术来生成系统时钟------它实现了成本、性能和灵活性的最佳平衡。

相关推荐
week_泽20 小时前
6、OpenCV SURF特征检测笔记
人工智能·笔记·opencv
Lv117700820 小时前
Visual Studio中的try -- catch
ide·笔记·c#·visual studio
m0_6380796220 小时前
电气工程及其自动化导论(课程论文/报告)
学习·学习方法
四谎真好看20 小时前
MySQL 学习笔记(进阶篇3)
笔记·学习·mysql·学习笔记
小龙20 小时前
【学习笔记】模型的权重数据到底是干嘛的
人工智能·笔记·学习·权重
代码游侠20 小时前
应用——Linux FIFO(命名管道)与I/O多路复用
linux·运维·服务器·网络·笔记·学习
好奇龙猫20 小时前
大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(1)
学习·大学院
studyForMokey20 小时前
【跨端技术】React Native学习记录一
javascript·学习·react native·react.js
代码游侠20 小时前
复习——网络编程基础
linux·服务器·网络·笔记·网络协议
d111111111d20 小时前
逻辑最清晰的STM32F1/F4标准库工程创建
stm32·单片机·嵌入式硬件