본문 바로가기
Embedded SW/Embedded SW Introduction

13. MCU에서 PLL(Phase-Locked Loop)란 무엇인가?

by 방구석 임베디드 2021. 7. 24.
반응형

우리는 clock과 오실레이터을 이전 포스팅 글에서 알아보았습니다.

이제 20MHz의 오실레이터에서 제공되는 Clock을

어떻게 200MHz 수준의 고주파수로 만들어 줄수 있는지에 대해 알아 보도록 하겠씁니다.

 

20MHz의 Clock을 200MHz의 Clock으로 발진하기 위해서는 PLL회로가 필요합니다.

PLL은 Phase-Locked Loop의 약자로, 위키에서 찾은 내용은 아래와 같습니다.

https://ko.wikipedia.org/wiki/%EC%9C%84%EC%83%81%EB%8F%99%EA%B8%B0%ED%9A%8C%EB%A1%9C

위상동기회로(영어: Phase-Locked Loop, PLL)은 입력 신호와 출력신호에서 되먹임된 신호와의 위상차를 이용해 출력신호를 제어하는 시스템을 말한다. 입력된 신호에 맞추어 출력 신호의 주파수 조절이 목적이다. 되먹임 루프 인 현재 출력 신호의 주파수 디바이더 결과와 입력된 신호와의 위상차를 검출하고, 검출된 위상차를 오차로 판단하여 오차가 줄도록 VCO의 입력전압을 조절함으로써 출력 주파수를 변경하도록 조절한다. 입력과 출력의 되먹임 위상차가 동기되면 위상 잠금이 되고, 잠금 상태가 유지되도록 입력에 대한 출력의 주파수를 조절한다.

입력과 출력의 주파수 차이는 결국 주파수 디바이더 N에 따라 달라진다. N의 배수에 따라, 출력신호의 주파수는 입력신호의 주파수의 N배가 된다. 대부분의 PLL에서 입력에 비해 출력의 주파수가 높게 발진한다.

위의 내용을 조금 쉽게 설명해 보도록 할게요.

FI는 Input 주파수 입니다. 예를 들어 20MHz라고 예를 들어 볼게요.

Fo는 목표 주파수 입니다. 200MHz라고 할께요.

Fo를 목표 주파수로 200MHz를 맞추기 위해서는 N을 10이라고 하면 될것 같습니다.

그렇다면 200MHz / 10 = 20MHz가 나오게 됩니다.

이것을 Fd라고 하죠!

위의 PLL Feedback 제어기는 FI의 값과 Fd의 값의 차이가 0이되도록 VCO서 계산하여 Fo를 발생시킬 것입니다.

그렇기 위해서는 Fo의 값을 200MHz로 만들것입니다.

 

그렇다면 실제 아래와 같이 인피니언 Aurix MCU안에 들어가 있는 PLL 회로를 확인해 보도록 해요!

위의 그림을 보면 20MHz의 외부 오실레이터를 input으로 받아서 200MHz의 주파수를 만들어 내는 것을 볼수 있습니다.

수식은 아래와 같습니다.

결국 위의 회로는 피드백 회로 입니다.

위의 레지스터설정값을 보고 계산을 해면

200MHz = 60/(2*3)*20 = 200MHz가 됩니다.

N = NDIV + 1

P = PDIV + 1

K2 = K2DIV + 1

위에서 1씩 더하는 이유는 아래 내용에 근거합니다.

드디어 PLL 회로를 통하여 우리는 200MHz의 주파수를 만들어 낼수 있습니다.

Clock이 200MHz로 빠르니,

Clock에 맞추어 코드를 CPU가 가지고 오고, 해석하여 실행하는 속도가 더 빠를 것입니다.

 

그런데 왜 하필 200MHz로 맞추냐?

이유는 MCU안의 CPU마다 최고로 낼수 있는 Clock Spec이 존재합니다.

현재  위의 MCU의 경우에는 200MHz가 최대 Clock으로 Spec이 정해져 있습니다.

그렇다면 이제 PLL로 만든 200MHz의 Clock을 CPU와 각각의 모듈에 연결하는 과정이 필요합니다.

이렇게 PLL로 만들게 되면, 

이 200MHz를 적절히 나누고 주변기기로 분배하여 각각의 주변기기들이 Clock을 사용할수 있도록 합니다.

예를 들어 Clock들이 아래와 같이 나와 있네요.

모듈(주변기기)에서 사용할수 있는 최대 Clock이 있으니, 200MHz를 잘 나누어서 사용해야 합니다.

 

결국 아래와 같은 흐름으로 Clock이 분배 됩니다.

 

20MHz(외부 OSC) -> PLL을 거쳐 200MHz -> 이것을 CPU에서 사용하도록 연결, 그리고 200MHz를 적절히 나누어 주변기기가 사용할수 있는 Clock으로 나누어 분배

 

이제 이 Clock을 기반으로 주변기기를 제어하고 동작도 시켜 보도록 해요!

반응형

댓글