MCU锁相环简述(一)

本文介绍了锁相环(PLL)的基本概念,它是一种通过反馈控制实现频率和相位同步的技术。锁相环电路由鉴频鉴相器、低通滤波器、压控振荡器和分频器组成。当参考时钟发生变化时,PLL能检测并调节输出频率以保持同步。
摘要由CSDN通过智能技术生成

    在使用K60的过程中发现自己pllinit()不清楚,才发觉自己锁相环的概念还不懂,so,赶紧补补……

    锁相环(PLL: Phase-locked loops)是一种利用反馈(Feedback)控制原理实现的频率相位的同步技术,其作用是将电路输出的时钟与其外部的参考时钟保持同步。当参考时钟的频率

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
(Phase Locked Loop, PLL)是一种广泛应用于通信、计算机和自动控制领域的电路。它可以将输入信号的定在参考信号的位,并输出与参考信号同频率的新信号。 下面是一个基于VHDL实现的简单的代码示例: ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity PLL is Port ( CLK_IN : in STD_LOGIC; CLK_OUT : out STD_LOGIC); end PLL; architecture Behavioral of PLL is signal phase : std_logic_vector(7 downto 0); signal counter : unsigned(7 downto 0) := (others => '0'); signal phase_diff : std_logic_vector(7 downto 0); signal phase_diff_reg : std_logic_vector(7 downto 0); signal phase_diff_delta : std_logic_vector(7 downto 0); signal phase_diff_delta_reg : std_logic_vector(7 downto 0); signal phase_diff_delta_delta : std_logic_vector(7 downto 0); signal phase_diff_delta_delta_reg : std_logic_vector(7 downto 0); signal phase_diff_delta_delta_delta : std_logic_vector(7 downto 0); signal phase_diff_delta_delta_delta_reg : std_logic_vector(7 downto 0); signal feedback : std_logic; begin -- Phase detector process(CLK_IN, counter) begin if rising_edge(CLK_IN) then phase <= phase + 1; if phase = 255 then phase <= (others => '0'); end if; if feedback = '1' then phase_diff <= std_logic_vector(unsigned(phase) - counter); else phase_diff <= std_logic_vector(counter - unsigned(phase)); end if; end if; end process; -- Charge pump process(CLK_IN) begin if rising_edge(CLK_IN) then if phase_diff /= phase_diff_reg then phase_diff_delta <= phase_diff - phase_diff_reg; else phase_diff_delta <= (others => '0'); end if; if phase_diff_delta /= phase_diff_delta_reg then phase_diff_delta_delta <= phase_diff_delta - phase_diff_delta_reg; else phase_diff_delta_delta <= (others => '0'); end if; if phase_diff_delta_delta /= phase_diff_delta_delta_reg then phase_diff_delta_delta_delta <= phase_diff_delta_delta - phase_diff_delta_delta_reg; else phase_diff_delta_delta_delta <= (others => '0'); end if; if phase_diff_delta_delta_delta /= phase_diff_delta_delta_delta_reg then CLK_OUT <= not CLK_OUT; end if; phase_diff_reg <= phase_diff; phase_diff_delta_reg <= phase_diff_delta; phase_diff_delta_delta_reg <= phase_diff_delta_delta; phase_diff_delta_delta_delta_reg <= phase_diff_delta_delta_delta; end if; end process; -- Divider process(CLK_OUT) begin if rising_edge(CLK_OUT) then counter <= counter + 1; if counter = "10000000" then counter <= (others => '0'); feedback <= not feedback; end if; end if; end process; end Behavioral; ``` 该代码实现了一个简单的,包括位检测器、电荷泵、分频器等模块。其中,位检测器用于比较输入信号和反馈信号之间的位差,电荷泵用于产生控制电压,分频器用于将输出信号分频。该代码的输入信号为`CLK_IN`,输出信号为`CLK_OUT`。在每个时钟周期内,输入信号的位会逐渐增加,如果输入信号的位落后于反馈信号,电荷泵会产生正电压,使分频器的计数器加速;如果输入信号的位领先于反馈信号,电荷泵会产生负电压,使分频器的计数器减速。当计数器达到设定值时,分频器输出一个时钟信号,作为的输出信号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值