[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. 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

댓글을 달아 주세요

[DSP]/PICCOLO2011. 5. 5. 11:52

[TMS320F28096 EVM] eQEP 엔코더 테스트

[TMS320F28096 EVM] eQEP 엔코더 테스트


TMS320F28069 에는 eQEP (QEI)는 여러가지 기능이 많이 있다. 간딘히  엔코더 카운터 테스트를 해 보았다.
eQEP의 핀맵은 아래와 같다.
GPIO20/EQEP1A  :  EQEP Phase A
GPIO21/EQEP1B   : EQEP Phase
BGPIO23/EQEP1I  : EQEP Index



[EXP-DSP EVM] 보드에는 엔코더가 장착되어 있는데 처음에 제작시에 TMS320F2808을 타겟으로 제작했기 때문에 점퍼가 필요하다. 확장성을 고려하여 핀을 뽑아 두었기 때문에 점퍼선으로 연결가능하다.



TMS320F28069 eQEP 블록도



TMS320F28069 eQEP 초기화 코드
void QEP_Init(void)
{
    EQep1Regs.QUPRD=800000;         // Unit Timer for 100Hz at 80 MHz SYSCLKOUT

    EQep1Regs.QDECCTL.bit.QSRC=00;      // QEP quadrature count mode

    EQep1Regs.QEPCTL.bit.FREE_SOFT=2;
    EQep1Regs.QEPCTL.bit.PCRM=00;       // PCRM=00 mode - QPOSCNT reset on index event
    EQep1Regs.QEPCTL.bit.UTE=1;         // Unit Timeout Enable
    EQep1Regs.QEPCTL.bit.QCLM=1;        // Latch on unit time out
    EQep1Regs.QPOSMAX=0xffffffff;
    EQep1Regs.QEPCTL.bit.QPEN=1;        // QEP enable

    EQep1Regs.QCAPCTL.bit.UPPS=5;       // 1/32 for unit position
    EQep1Regs.QCAPCTL.bit.CCPS=6;       // 1/64 for CAP clock
    EQep1Regs.QCAPCTL.bit.CEN=1;        // QEP Capture Enable
}


초기화 하고 QPOSLAT레지스터에서 값을 읽으면 아주 쉽게 엔코더값을 읽을 수 있다.
count = EQep1Regs.QPOSLAT;

[TMS320F28069 EVM] eQEP 엔코더 테스트 동영상
엔코더 카운트 값을 FND로 출력하는 예제



[TMS320F28069 EVM] eQEP 엔코더 테스트 소스코드
void main(void)
{
 unsigned int cnt = 0;

 //DSP System Initialize
 SystemInit();

 DebugInit(BAUD_115200);
 DebugPrint("TMS320F28069 eQEP Test(%d)Mhz\r\n", _SYS_CLK);

 Led1Init();
 Led2Init();
 Led1On();

 //eQEP 초기화
 InitEQep1Gpio();
 QEP_Init();

 //FND 초기
 FndInit();

 while(1)
 {
  //QEP 데이터 카운트값 읽어와서 
  cnt = EQep1Regs.QPOSLAT;

  DisplayFnd(cnt);
  Delay(1);
}
Posted by nexp

댓글을 달아 주세요

  1. 백대성

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

    2012.08.20 22:24 [ ADDR : EDIT/ DEL : REPLY ]