특정 주파수, 듀티사이클의 PWM신호를 생성하고 eCAP으로 PWM신호 측정
PWM 설정
ePWM의 TBCLK(Time Base Clock)은 아래 공식으로 설정하는데 prescale 값은 둘 다 1로 한다.
TBCLK = EPWMCLK/(HSPCLKDIV * CLKDIV)
Period를 25000으로 설정하고, Counter Mode는 up-down으로 한다.
카운터가 up-dwon 모드일 때 PWM 파형의 주파수는 TBCLK/(2*period)인데 EPWMCLK는 따로 클락설정이 없으면 디폴트가 SYSCLK/2여서 100MHz니까 100,000,000 / 50,000 = 2kHz가 된다.
Counter Compare 값은 18750으로 설정.
카운터 업 시 COMPA와 일치할 때 output pin High 출력, 카운터 다운 시 COMPA와 일치할 때 output pin Low 출력으로 설정
출력핀 GPIO0 설정
이렇게하면 GPIO0 핀으로 25% duty cycle의 2kHz PWM 파형이 출력된다.
eCAP & INPUTXBAR 설정
GPIO0핀의 출력파형을 INPUTXBAR 설정을 통해 eCAP으로 측정한다.
#include "driverlib.h"
#include "device.h"
#include "board.h"
uint32_t ePwm_TimeBase;
uint32_t ePwm_curDuty;
int32_t eCapPwmDuty;
int32_t eCapPwmPeriod;
__interrupt void ecap1ISR(void)
{
Interrupt_clearACKGroup(INT_myECAP0_INTERRUPT_ACK_GROUP);
ECAP_clearGlobalInterrupt(myECAP0_BASE);
ECAP_clearInterrupt(myECAP0_BASE, ECAP_ISR_SOURCE_CAPTURE_EVENT_3);
eCapPwmDuty = (int32_t)ECAP_getEventTimeStamp(myECAP0_BASE, ECAP_EVENT_2) -
(int32_t)ECAP_getEventTimeStamp(myECAP0_BASE, ECAP_EVENT_1);
eCapPwmPeriod = (int32_t)ECAP_getEventTimeStamp(myECAP0_BASE, ECAP_EVENT_3) -
(int32_t)ECAP_getEventTimeStamp(myECAP0_BASE, ECAP_EVENT_1);
}
void main(void)
{
Device_init();
Interrupt_initModule();
Interrupt_initVectorTable();
Board_init();
ePwm_TimeBase = EPWM_getTimeBasePeriod(myEPWM0_BASE);
ePwm_curDuty = EPWM_getCounterCompareValue(myEPWM0_BASE, EPWM_COUNTER_COMPARE_A);
EINT;
ERTM;
for (;;) {
}
}
eCAP의 base 클락은 EPWMCLK와 달리 200MHz이니 아래의 공식으로 측정한 PWM 파형의 Frequency와 DutyCycle을 구할 수 있다.
Frequency = DEVICE_SYSCLK_FREQ/eCapPwmPeriod = 200,000,000 / 100,000 = 2kHz
Duty Percent = (eCapPwmDuty/eCapPwmPeriod)*100 = 25,000 / 100,000 * 100 = 25%
'임베디드 개발 > TMS320F2838x (C28x)' 카테고리의 다른 글
TMS320F28388D ] Reset Sources (0) | 2023.08.14 |
---|---|
TMS320F28388D ] SPI Clocking Schemes / CPOL, CPHA 설정 (0) | 2023.08.14 |
TMS320F28388D ] ECAP (0) | 2023.08.14 |
W25Q64JV, SPI Interface NOR 플래시 메모리 데이터시트 분석 (2) | 2023.07.24 |
TMS320F28388D ] CM, C28x 코어 진입점으로 점프 (0) | 2023.05.07 |