본문 바로가기

[DSP]/PICCOLO

[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);
}
반응형