본문 바로가기

[DSP]/DSP280x-M

[DSP280x-M EVM] 보드 테스트 - ADC, PWM 테스트(eCAP PWM)

[DSP280x-M EVM] 보드 테스트 - ADC, PWM 테스트(eCAP PWM)

TMS320F2808의 ADC값을 읽어 PWM으로 출력하는 테스트.


[DSP280x-M EVM]에는 PWM0~PWM3의 PWM을 할당해 두었다. 확장보드의 PWM3은 TMS320F2808의 P11에 연결되어 있고 가각 PWM6B/eCAP4/RXDB 기능을 가지고 있다.
그중에서 확장보드의 LED2에 연결되어 있는 PWM3을 이용하여 ADC값에 따라 PWM출력을 제어 하고 이 출력이 고휘도 LED의 밝기를 설정하는 예제를 작성하기 위해 32bit 분해능의 eCAP4로 PWM을 출력해 보았다.


확장 테스트 보드에서 PWM3은 CN40, LED2에 연결되어 있다.



TMS210F2808 PWM테스트 동영상
- 가변 저항값에 따라 PWM출력을 변경하고 이에 따라 PWM을 이용한 고휘도 LED출력



TMS320F2808 eCAP을 이용한 PWM테스트 예제소스
P11(eCAP4) 초기화 설정
#if _ENABLE_ECAP4
#define PwmSetEcap4(Period)     ECap4Regs.CAP2 = (ECap4Regs.CAP1-(ECap4Regs.CAP1*Period/100))
#define PwmSetPeriodEcap4(Freq, Period)  ECap4Regs.CAP1 = 100000000/(Freq);PwmSetEcap4(Period)

void Ecap4_Config(unsigned long Freq)
{
   EALLOW;
// P11 풀업 설정
   GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0;   // Enable pull-up on GPIO11 (CAP4)

// SYSCLKOUT와 동기화된 입력으로 설정
   GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 0; // Synch to SYSCLKOUT GPIO11 (CAP4)
// P11을 eCAP-4으로 설정
   GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 3;  // Configure GPIO11 as CAP4
   EDIS;
    :
}

pwm.c 함수
void InitPwm(void)
{
 Ecap4_Config(50);   //50Hz, duty 50%
}

void PwmSet3(unsigned int Period)
{
 PwmSetEcap4(Period);
}

main 함수

void main(void)
{
 unsigned int pwm_period = 50;
 unsigned int temp = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_57600);
 DebugPrint("ePWM Test Program\r\n");

 //Init PWM
 InitPwm();

 //ADC Init
 AdcInit();

 while(1)
 {
  temp = ((float)AdcRead(8)/4095.0*100.0);

  PwmSet3(temp);
  U0_PutInt(temp);
  Delay(50);
 }
}

반응형