설계 Design/펌웨어 개발 Firmware

[펌웨어][F2837xx] ePWM Synchronization / ePWM 동기화

NewBeaver 2024. 1. 26. 00:28

 

TI TMS3220F2837xD Technical Reference Manual

 

 

 

ePWM 챕터

 

오늘은 ePWM Synchronization(동기화)에 대해 알아볼것이다. 그러기 위해 테크니컬 메뉴얼의 Chapter 15를 참조하였다.

 

 

테크니컬 메뉴얼은 아래 링크를 통해 다운로드 가능하다.

https://www.ti.com/lit/pdf/spruhm8

 

 

 

 

ePWM 모듈의 서브모듈 챕터

 

TI 사의 MCU를 사용하는 이유중 하나라고 볼수있을 정도로 TI의 MCU내 ePWM모듈에는 다양한 기능들이 많다.

ePWM 모듈은 내부의 서브모듈의 다양한 기능을 활용해 펄스신호를 만들어내고 출력할수있다.

 

ePWM의 서브모듈은 8개로 구성된다.

 

• Time-Base Submodule

• Counter Compare Submodule

• Action Qualifier Submodule

• Dead-Band Generator Submodule

• PWM Chopper (PC) Submodule

• Trip Zone Submodule

• Event Trigger Submodule

• Digital Compare Submodule

 

 

 

ePWM 모듈의 서브모듈과 신호 관계 블록도

 

서브모듈 중 Time-Base Submodule의 기능을 활용하여 PWM모듈간 동기화가 가능하다.

 

PWM모듈의 동기화 신호는 데이지 체인 구조로 ePWM 모듈들을 동기화한다.

 

각 모듈은 INPUTXBAR6을 통해 동기화 신호로 입력을 사용하거나 동기화 신호를 무시하도록 설정할 수 있다.

 

그림에는 나와있지 않지만 글로된 설명에는 "클럭 동기화 입력 및 출력 신호는 ePWM1에 대해서만 핀으로 출력된다." 라고 되어있다.

 

 

동기화 신호 입력

• Time-base synchronization input (EPWMxSYNCI)

ePWM 모듈은 동기화를 위해 3개가 하나의 그룹을 이루고있다. 외부 동기신호(EXTSYNCHIN1 또는 EXTSYNCHIN2)를 사용하여 각 체인의 첫번째 ePWM 모듈에 동기신호를 줄수있다. 아래 그림 Time-Base Counter 의 동기화 다이어그램 을 참조하면 이해할 수 있다.

 

동기화 신호 출력

Time-base synchronization output (EPWMxSYNCO)

ePWM 모듈에서 외부로 동기신호를 출력할수있다.

각 체인의 첫번째 ePWM 모듈은 EPWMxSYNCOUT 신호를 GPIO로 외부로 출력할수있다.

 

주변회로 동기화 신호 출력

peripheral (EPWMxSYNCPER) signals

각각의 ePWM 모듈은 EPWMxSYNPER이라고 불리는 또다른 PWMSYNC 신호를 생성한다.

말그대로 주변회로에 보낼수있는 동기화신호이다.

EPMxSYNCPER는 동기화 목적을 위해 GPDAC 및 CMPSS로 전달된다.
HRPCTL 레지스터를 사용하여 설정할수있지만 HRPWM(High Resolution PWM)과 관련은 없다.
EPMxSYNCPER가 GPDAC 및 CMPSS에서 어떻게 사용되는지에 대한 자세한 내용은 GPDAC와 CMPSS 장을 참조

 

 

Time-Base Counter 의 동기화 다이어그램

 

다이어그램을 보면 외부동기입력신호1/2(EXTSYNCHIN1/2)는 ePWM1모듈과 각 그룹으로 이동한다. ePWM1이 속한 그룹을 제외한 그룹에서는 SYNCSELEPWMSYNCIN 레지스터를 설정하여 어떤 동기화 신호를 입력받을지 선택해야한다.

각 ePWM 모듈은 동기화 입력을 사용할지? 무시할지? 설정이 가능하다.

 

하지만 이 다이어그램은 외부동기신호를 활용한 동기화 다이어그램처럼 보이고 이방법 밖에 없는것처럼 보이지만, 아래 글을 읽어보면 다양한 방법이 있다.

 

PWM모듈의 동기화를 위해 TBCTL레지스터의 PHSEN비트를 SET으로 설정하면 ePWM의 카운터 (TBCTR)는 아래 나오는 조건중 하나가 발생했을 때 자동적으로 TBPHS레지스터의 위상 값을 불러온다. 이 위상값을 동일하게 설정하면 모두 동일하게 TBCTR값을 같게되어 동기화가 되고 TBPHS값을 모듈별로 차이를 주면 PWM 위상차이를 가지면서 동기화가 된다.  이때 TBPHS 값과 PHSDIR값(0:down,1:up)을 잘 설정해줘야 원하는 대로 동기화와 위상차이를 구현할 수 있다.

 

1. EPWMxSYNCI : Synchronization Input Pulse

입력 동기화 펄스가 검출되면 TBPHS의 값을 TBCTR로 복사한다. 이 작업은 다음 유효한 time-base clok edge에서  발생한다.

쉽게말해 동기화 입력 펄스를 검출하면 다음클럭에 반영한다는 내용이다.

 

또한 내부 마스터 모듈에서 슬레이브 모듈까지 딜레이는 아래와 같다.

 

     – if ( TBCLK = EPWMCLK): 2 x EPWMCLK

     Time-Base 클럭과 EPWM클럭이 같다면 : 2 x EPWMCLK 즉 TBCLK 2클럭이 딜레이 된다.

 

     – if ( TBCLK < EPWMCLK): 1 x TBCLK

     Time-Base 클럭보다 EPWM클럭이 크다면 : 1 x TBCLK, 1클럭 딜레이 된다.

 

마스터모듈(ex. ePWM1)에서 슬레이브 모듈(ex. ePWM2/3/4.../12)로 동기신호를 전달하면 딜레이가 존재하니 슬레이브 모듈에서 PHSEN SET 했을 때 딜레이를 고려해 TBPHS값과 PHSDIR을 설정해야한다.

 

 

2. Software Forced Synchronization Pulse:

타임베이스 컨트롤레지스터(TBCTL)의 SWFSYNC 컨트롤 비트를 1로 쓰면 동기화가 이뤄진다. 이 펄스는 synchronization input 신호와 ORed 되어있기 때문에 EPWMxSYNCI 펄스를 준것이나 다름없는 효과가 나타난다.

 

3. Digital Compare Event Synchronization Pulse:

DCAEVT1 과 DCBEVT1 디지털 컴페어 이벤트들로 EPWMxSYNCI와 같은 효과를 내는 동기화 펄스를 생성하도록 설정할수있다.

 

이 기능은 아직 사용해보지 못해 그대로 적어두었다.

 

이 기능을 통해 ePWM 모듈을 다른 ePWM 모듈의 시간 기준에 자동으로 동기화할 수 있다.
리드/래그 위상 제어를 서로 다른 ePWM에 의해 생성된 파형에 추가할 수 있고 모듈을 동기화할 수 있다.
업-다운-카운트 모드에서 TBCTL[PSHDIR] 비트는 동기화 이벤트 직후 타임-베이스 카운터의 방향을 설정한다. 이 때 새 방향은 동기화 이벤트 이전 방향과 무관하다. 카운트업 또는 카운트다운 모드에서는 PHSDIR 비트는 무시된다.(카운트 방향이 고정되어있으므로) 예시는 그림 15-8~그림 15-11을 참조

 


TBCTL[PHSEN] 비트를 CLEAR하면 ePWM이 동기화 입력 펄스를 무시하도록 설정할 수 있다. 입력받은 동기화 펄스는 EPWMxSYNCO로 흐르게 하고 다른 ePWM 모듈을 동기화하는 데 사용할 수 있습니다. 이렇게 하면 마스터 타임베이스(예: ePWM1)를 설정할 수 있고 다운스트림 모듈(ePWM2 - ePWMx)이 마스터와 동기화되어 실행되도록 선택할 수 있습니다. 동기화 전략에 대한 자세한 내용은 섹션 15.13을 참조

 

ePWM1을 TBCTL[PHSEN] 0으로 클리어 하도록 설정하면 ePWM1이 마스터 모듈이되고 입력받은 동기화 펄스는 EPWMxSYNCO로 흐르게한다. 다른 모듈들이 이걸 입력받으면 동기화가 된다.

 

 


15.4.4 Phase Locking the Time-Base Clocks of Multiple ePWM Modules

이 설정 중요하다.

 

TBCLKSYNC 비트를 사용하여 장치에서 활성화된 모든 ePWM 모듈의 타임-베이스 클럭(TBCTR)을 전역적으로 동기화할 수 있다. 이 비트는 장치의 클럭 활성화 레지스터의 일부(CpuSys레지스터에 속함, Write Protection 되어있음)이며 이 매뉴얼의 시스템 제어 및 인터럽트 섹션에 설명되어 있다.

 

TBCLKSYNC = 0일 때 모든 ePWM 모듈의 타임베이스 클럭이 중지된다(기본값).

TBCLKSYNC = 1일 때 모든 ePWM 타임베이스 클럭은 TBCLK의 상승 에지가 정렬된 상태에서 시작된다.


완벽하게 동기화된 TBCLK의 경우 각 ePWM 모듈의 TBCTL 레지스터의 프리스케일러 비트를 동일하게 설정해야 합니다. ePWM 클럭을 활성화하기 위한 적절한 절차는 다음과 같다:

 

1. 각 ePWM 모듈 클럭을 활성화한다. (System Control, Interrupts chapter 참조)

2. TBCLKSYNC = 0 설정하면 활성화된 ePWM모듈의 타임-베이스 클럭이 정지될것이다.

3. prescaler 값과 원하는 ePWM 설정을 한다.

4. 다시 TBCLKSYNC = 1로 설정한다.

 

 

이 포스팅은 오늘  반나절동안 설정하고 시험하며 얻어낸 결과이다.

 

중요하기 때문에 추후 까먹을 경우 다시보기 위해 정리하였다. 

 

이상으로 PWM동기화에 대해 설명을 마치겠다.