[DSP]/DSP280x2006. 8. 10. 21:25

[DSP280x EVM] HRPWM제어 실험

[DSP280x EVM] HRPWM제어 실험
TMS320F280x의 ePWM은 이전 C24x, C281x 와 다르게 각 모듈이 독립적인 모듈로 만들어 타이머와 분리 되었고 결과적으로 기존 보다 속도및 성능이 훨씬더 향상 되었다고 한다.
EPWMxA 채널의 HR-PWM은 최고 150psec단위의 고분해능 PWM이 출력 가능해 100Mhz로 돌릴때 10ns의 분해능을 가진다. 고전압 출력 프로젝트 진행을위해 선정을 했는데 역시 탁월한것 같다.

TMS320F2808 PWM관련 함수 작성




//PWM Resolution and Period Set(0~100%)
void SetPwm1(unsigned int Frequency, unsigned int Period)
{
    EPwm1Regs.TBPRD = Frequency;
    EPwm1Regs.CMPA.half.CMPA = Frequency-(Frequency*Period/100);
}

//High Resolution PWM SET
void SetHWPwm1(unsigned int Period)
{
 if(Period>255)return;
    EPwm1Regs.CMPA.half.CMPAHR = (Period << 8);
}



PWM을 이용하여 1Mhz의 주파수의 파형 주기를 변경하는 실험

실험하면서 계속 느끼는 점이지만 DSP320F280x시리즈는 정말 대단하것 같다. 이제는 정말 기술의 한계가 아니라 소프트웨어의 한계를 실감하게 된다.

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP280x2006. 7. 22. 21:07

[DSP280x EVM] 그래픽 LCD 모듈 달기

[DSP280x EVM] - 그래픽 LCD 모듈 달기

사용자 삽입 이미지

TMS320F2808을 이용하여 간단하게 그래픽 LCD를 테스트 해 보았는데...
역시 속도에 매력을 느낀다. 물론 그 용도는 아니지만...

보드 적층

DSP280x EVM -  그래픽 LCD를 이용한 사인파 AD값 출력

DSP280x EVM -  그래픽 LCD를 이용한 한글 출력


 

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP280x2006. 7. 19. 12:46

[DSP280x EVM]USB연결 예제 프로그램 - TMS320F2808 + TUSB3410

[DSP280x EVM]USB연결 예제 프로그램 - TMS320F2808 + TUSB3410
사용자 삽입 이미지
예제 소스코드



Serial2USB 기능을 가진 [TUSB3410 EVM]보드를 이용하여 USB테스트를 했다.
TUSB3410은 8051 Core와 USB2Serial 엔진을 가진 Chip으로 USB나 I2C EEPROM을 통해 사용자가 펌웨어를 변경할 수 있다.
펌웨어는 RAM에서 실행되므로 DSP MCU(TMS320F2808)의 I2C 포트로 다운로드 하고 시리얼 포트로 USB데이터르 송수신 할 수 있는 예제 이다.




Posted by nexp

댓글을 달아 주세요

[DSP]/DSP280x2006. 7. 16. 13:49

[DSP28x EVM] Timer Interrupt Test - TMS320F2808 타이머 1초 만들기

[DSP28x EVM] Timer Interrupt Test - TMS320F2808 타이머 1초 만들기

사용자 삽입 이미지
TMS320F2808, TMS320F2812호환  EVM - 타이머 인터럽트 테스트

[DSP280x EVM]의 LED를 이용하여 1초 주기로 타이머를 구동하여 LED를 깜박이는 프로그램을 작성해 보았다.

초기화
main()
{

    :

   InitCpuTimers();   // For this example, only initialize the Cpu Timers

// Configure CPU-Timer 0 to interrupt every second:
// 100MHz CPU Freq, 1 second Period (in uSeconds)
   ConfigCpuTimer(&CpuTimer0, 100, 1000000);
   StartCpuTimer0();


// Enable CPU INT1 which is connected to CPU-Timer 0:
   IER |= M_INT1;

// Enable TINT0 in the PIE: Group 1 interrupt 7
   PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

// Enable global Interrupts and higher priority real-time debug events:
   EINT;   // Enable Global interrupt INTM
   ERTM;   // Enable Global realtime interrupt DBGM

   while(1);

     :

}


//인터럽트 핸들러
//------------------------------------------------------------------
interrupt void cpu_timer0_isr(void)
{

   CpuTimer0.InterruptCount++;

   //Toggle LED
   GpioDataRegs.GPADAT.bit.GPIO6 ^= 1;

   // Acknowledge this interrupt to receive more interrupts from group 1
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
//------------------------------------------------------------------

void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
{
 Uint32  temp;
 
 // Initialize timer period:
 Timer->CPUFreqInMHz = Freq;
 Timer->PeriodInUSec = Period;
 temp = (long) (Freq * Period);
 Timer->RegsAddr->PRD.all = temp;

 // Set pre-scale counter to divide by 1 (SYSCLKOUT):
 Timer->RegsAddr->TPR.all  = 0;
 Timer->RegsAddr->TPRH.all  = 0;
 
 // Initialize timer control register:
 Timer->RegsAddr->TCR.bit.TSS = 1;      // 1 = Stop timer, 0 = Start/Restart Timer
 Timer->RegsAddr->TCR.bit.TRB = 1;      // 1 = reload timer
 Timer->RegsAddr->TCR.bit.SOFT = 1;
 Timer->RegsAddr->TCR.bit.FREE = 1;     // Timer Free Run
 Timer->RegsAddr->TCR.bit.TIE = 1;      // 0 = Disable/ 1 = Enable Timer Interrupt
 
 // Reset interrupt counter:
 Timer->InterruptCount = 0;
}

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP280x2006. 7. 15. 21:07

[DSP280x EVM] LCD 모듈 이용한 ADC테스트

[DSP280x EVM] LCD 모듈 이용한 ADC테스트

사용자 삽입 이미지

TMS320F2808을 이용하여 ADC한 값을 [LCD모듈]에 출력하는 예제 작성

Posted by nexp

댓글을 달아 주세요