[DSP]/PICCOLO2012. 1. 20. 00:53

[TMS320F280xx-SS EVM] Picoolo 시리즈 TMS320F28027 초소형 보드 제작

[TMS320F280xx-SS EVM] Picoolo 시리즈 TMS320F28027 초소형 보드 제작



TMS320F2802x 예제 소스코드

C2000_LaunchPad.zip



TI사의 저가형 DSP인 Piccolo 시리즈중 크기가 가장 작은 TSSOP타입의 TMS28027을  s-Type 형태로 제작하여 표준화 해서 제작 하였다. 저렴하고 소형이며 기능이 뛰어 나기 때문에 적용해 볼곳이 많을 것 같다.






표준형태로 제작되어 기존 확장 테스트 보드에 쉽게 연결하여 테스트 가능하다.





[DSP-EXP] 확장 테스트 보드 연결






TMS320F28027 EVM보드 회로도

TMS320F28027-SS_SCH.pdf








Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 11. 25. 23:00

[TMS320F28027 EVM] eCAP 테스트 - 펄스폭 측정

[TMS320F28027 EVM] eCAP 테스트 - 펄스폭 측정



C28xx 시리즈(TMS320F2808, TMS320F28027, TMS320F28335.. 등)는 eCAP(Enhanced Capture) 모듈이 있어 입력 신호의 펄스폭을 정밀하게, 그리고 쉽게 측정 할수 있다.

TMS210F28027에는 한포트의 eCAP핀이 있고 아래와 같다. GPIO5, GPIO19 중 하나를 선택해서 설정가능하다.)
GPIO5/EPWM3B/ECAP1
GPIO19/XCLKIN/ /SCIRXDA/ECAP1SPISTEA


eCAP의 Capture모드 구조는 아래와 같고 4개의 32비트 캡쳐 레지스터로 이벤트(폴링, 라이징 에지)의 시간을 캡쳐 할 수 있다.





좀더 자세하게 들여다 보면 아래 구조와 같고 입력신호의 분주도 가능하다.








eCAP Delta Mode 예제 - 펄스폭 측정



초기화 코드
// Code snippet for CAP mode Delta Time, Rising and Falling edge triggers
//=======================
// ECAP 초기화
 ECap1Regs.ECEINT.all = 0x0000;             // Disable all capture interrupts
 ECap1Regs.ECCLR.all = 0xFFFF;              // Clear all CAP interrupt flags
 ECap1Regs.ECCTL1.bit.CAPLDEN = 0;          // Disable CAP1-CAP4 register loads
 ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;        // Make sure the counter is stopped

ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP4POL = EC_FALLING;

ECap1Regs.ECCTL1.bit.CTRRST1 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST2 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST3 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST4 = EC_DELTA_MODE;

ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
 ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; // Allow TSCTR to run 



// Run Time ( e.g. CEVT1 triggered ISR call)
//==========================================
// Note: here Time-stamp directly represents the Duty cycle values.
DutyOnTime1 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at T2
DutyOffTime1= ECap1Regs.CAP3; // Fetch Time-Stamp captured at T3
DutyOnTime2 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at T4
DutyOffTime2 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at T1

Period1 =DutyOnTime1 + DutyOffTime1;
Period2 = DutyOnTime2 + DutyOffTime2;





절대 시간 측정 예제




// Code snippet for CAP mode Absolute Time, Rising edge trigger
// Initialization Time
//=======================
// ECAP module 1 config
ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP4POL = EC_FALLING;

ECap1Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;

ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; // Allow TSCTR to run



// Run Time ( e.g. CEVT4 triggered ISR call)
//==========================================
TSt1 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at t1
TSt2 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at t2
TSt3 = ECap1Regs.CAP3; // Fetch Time-Stamp captured at t3
TSt4 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at t4

Period1 = TSt2-TSt1; // Calculate 1st period
Period2 = TSt3-TSt2; // Calculate 2nd period
Period3 = TSt4-TSt3; // Calculate 3rd period



TMS320F28027 eCAP 테스트 결과
TMS320F28027의 eCAP 모듈을 테스트 하기 위해 LED2(GPIO1)을 타이머를 이용하여 일정 주기로 펄스를 출력하고 그 주기를 측정하여 LCD에 출력하는 예제로 작성해 보았다. 출력은  [Serial LCD Module] 를 이용하여 시리얼  출력으로 표시 할 수 있도록 했다.





TMS320F28027 eCAP테스트 예제 소스 코드
void main(void)
{
 unsigned int cnt = 0;

 //DSP System Initialize
 SystemInit();

 DebugInit(BAUD_9600);
 DebugPrint("280x eCAP Test\r");

 //LED Initialize
 Led1Init();
 Led1Off();

 Led2Init();
 Led2Off();

 //eCAP초기화
 InitECapture();

 //타이 인터럽트 초기화
 Timer0Init();

 // Enable global Interrupts
 enalbe()

 while(1)
 {
  DebugPrint("D=%ldus\r", DutyOnTime1/TIME_TICK_PERIOD); 
  Delay(30);
 }
}  


//eCAP Interrupt handler
interrupt void ecap1_isr(void)
{
 Led1Toggle();

 DutyOnTime1 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at T2
 DutyOffTime1= ECap1Regs.CAP3; // Fetch Time-Stamp captured at T3
 DutyOnTime2 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at T4
 DutyOffTime2 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at T1 

 Period1 =DutyOnTime1 + DutyOffTime1;
 Period2 = DutyOnTime2 + DutyOffTime2;

 ECap1Regs.ECCLR.bit.CEVT4 = 1;
 ECap1Regs.ECCLR.bit.INT = 1;
 ECap1Regs.ECCTL2.bit.REARM = 1;

 // Acknowledge this interrupt to receive more interrupts from group 4
 PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}


UART출력
280x eCAP Test
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us


Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 9. 8. 23:32

[TMS320F28027] Piccolo 시리즈 PWM테스트

[TMS320F28027] Piccolo 시리즈 PWM테스트


TI의 Piccolo 시리즈중 저렴한 TMS320F28027은 8채널의 ePWM(enhanced PWM Modules)이 있다.
GPIO0/EPWM1A
GPIO1/EPWM1B/COMP1OUT
GPIO2/EPWM2A
GPIO3/EPWM2B/COMP2OUT
GPIO4/EPWM3A
GPIO5/EPWM3B/ECAP1
GPIO6/EPWM4A/EPWMSYNCI/EPWMSYNCO
GPIO7/EPWM4B/SCIRXDA


테스트를 위해 EPWM1에 연결하여 간단히 LED램프제어 하는 예제를 테스트 해 보았다.






TMS320F28027 ePWM테스트 동영상





TMS320F28027 ePWM 제어 드라이버 코드


void SetPwm1Period(unsigned int Frequency, unsigned int Period)
{
    EPwm1Regs.TBPRD = Frequency;
    EPwm1Regs.CMPA.half.CMPA = Frequency-(Frequency*(Period/100.0));
}

void HRPWM1_Config(unsigned int period)
{
   EPwm1Regs.TBPRD = period;                        // Set timer period
   EPwm1Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
   EPwm1Regs.TBCTR = 0x0000;                      // Clear counter

   // Setup TBCLK
   EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
   EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading
   EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT
   EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

   EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;    // Load registers every ZERO
   EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
   EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;   

   // Setup compare
   EPwm1Regs.CMPA.half.CMPA = period / 2;
  
   // Set actions
   EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;             // Set PWM1A on Zero
   EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
  
   EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;          // Set PWM1A on Zero
   EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;
  
   // Active Low PWMs - Setup Deadband
   EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
   EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;
   EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
   EPwm1Regs.DBRED = 10;
   EPwm1Regs.DBFED = 10;
  
  
   EALLOW;
  
    GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;    // Enable pull-up on GPIO0 (EPWM1A)
    GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;    // Enable pull-up on GPIO1 (EPWM1B)  
  
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;   // Configure GPIO0 as EPWM1A
    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;   // Configure GPIO1 as EPWM1B
  
    EDIS;
}




TMS320F28027 ePWM 예제 소스코드

void main(void)
{
 unsigned int cnt = 0;
 int flag = 0;

//DSP System Initialize
 SystemInit();

 DebugInit(BAUD_115200);
 DebugPrint("LED Test\r\n");

 //LED Initialize
 Led1Init();
 Led1On();

 InitPwm();
 SetPwm1Period(PWM_10KHZ, 50);

 while(1)
 {
  if(flag)cnt--;
  else cnt++;

  if(cnt==100)flag = 1;
  else if(cnt == 0)flag=0;

  SetPwm1Period(PWM_100HZ, cnt);
  Delay(cnt/2);
 }
}  




Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 5. 14. 17:36

[TMS320F20827 EVM] TI DSP CCS4 Debug 환경 설정

[TMS320F20827 EVM] TI DSP CCS4 Debug 환경 설정

먼저 "Target Configurations"메뉴를 활성화 해서 해당 JTAG 설정이 필요하다.



"Target Configurations"메뉴가 활성화 되면 새로운 설정을 생성한다. 물론 기존 환경 설정을 이용해도 된다.



사용할 JTAG툴과 칩을 선택한다. 여기서는 간단히 F28027 을 선택 했다.
Advenced 탭에서 GEL파일이나 좀더 세세한 설정을 할 수 있지만 최신 CCS4라면 그냥 기본으로 설정해도 문제 없다.



설정이 완료 되었다면 Launch 하면 기본 환경이 셋업 되고 디버깅 모드로 전환된다.



Connection 하면 실제 보드와 연결이 된다



기본 메모리가 잡히고, 리셋번지로 브레크 포인터가 지시되는것을 확인 할 수 있다.


이후 디버깅이나 out파일을 로드해서 테스트 하면 쉽게 디버깅 가능하다.
Posted by nexp

댓글을 달아 주세요

  1. Logo Design

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.07.13 20:46 [ ADDR : EDIT/ DEL : REPLY ]

[DSP]/PICCOLO2011. 5. 14. 17:22

[TMS320F28027 EVM] PICCOLO시리즈 CC4를 이용한 개발환경 설정

[TMS320F28027 EVM] PICCOLO시리즈 CC4를 이용한 개발환경 설정


TI에서 제공하는 통합 개발환경 CCS4를 이용하면 TI DSP개발이 편리하다. 물론 이클립스 기반이라 좀 무거운 느낌은 있지만 앞으로 제공되는 예제는 CC4를 기반으로 한다고 하니 테스트 해 볼 필요가 있다. 지난번에 TI에서 제공 되는 프로젝트 파일을 수정 해서 테스트 했었는데... 아무래도 입맛데로 바꾸려고하니 확실하게 알 필요가 있을것 같아 다시한번 정리해 보았다.

당춰가 잘 이해가 안되는데 좀 만지작 거리니 눈에 들어오는것 같다. 익숙해 지면 편해지는 건가...


먼저 CCS4를 실행하면 Workspace를 설정하라고 하는데.. 기존에 만들어 둔것이 없으면 새롭게 만든다. dsp2802x_evm폴더에 새롭게 만들었다. 버그인지 모르지만 첨생성하면 프로그램이 죽는데 다시 실행하면 된다.



실행하면 아래와 같은 환경이 생성되고 새로운 프로젝트 파일을 생성할 수 있다.



새로운 프로젝트를 생성한다. ex01_led 예제 폴더를 만들었다.



C2000 프로젝트를 선택한다.


CMD파일 설정




환경 설정
- C Compiler PATH설정



Linker PATH설정




환경 설정이 끝나면 관련파일을 Link Files하고 컴파일 하면 된다.


참고로 Add Files.. 메뉴로 프로젝트 파일에 넣으면 프로젝트 폴더에 복사를 하도록 되어 있다. (이부분이 다른 IDE환경과 좀 다른 의미여서 주의가 필요하다.)


이렇게 해서 환경 설정이 끝나고 컴파일하면 에러 없이 컴파일 되는것을 확인할 수 있다.





하나의 프로젝트를 생성 하였으니 이제 새로운 예제를 테스트 할 때는 어떻게 할까? CCS3.x 와 같이 프로젝파일을 복사 해서 쓰면 인식을 못한다. 새로운 예제 마다 환경 설정을 다시 하기도 귀찮은 일이다.

생성된 프로젝트 파일을 들여다 보니 쉽게 가능할 것 같다. 프로젝트 폴더에 ".project"파일이 생성되어 있는데.. 이 파일을 수정하면된다. 아래와 같이 <name> 테그에서 프로젝트 명만 수정하면 된다.
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
 <name>ex10_pwm</name>
 <comment></comment>
 <projects>
 </projects>
 <buildSpec>
  :


"Project->Import Existing CCS Project" 메뉴로 새 프로젝트를 추가하면 된다.






이때 [C/C++] 탭이 활성화 되어 있어야 한다. [Debug]탭이 활성화 되어 있으면 Import Existing CCS Project 메뉴가 나타나지 않는다.



새로운 툴을 익히는건 쉬운일이 안닌것 같다. 아무튼 새롭게 프로젝트 생성해서 컴파일 해 보니 잘 동작하는것 같다.

Posted by nexp

댓글을 달아 주세요