[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 초기화 코드
초기화 하고 QPOSLAT레지스터에서 값을 읽으면 아주 쉽게 엔코더값을 읽을 수 있다.
count = EQep1Regs.QPOSLAT;
[TMS320F28069 EVM] eQEP 엔코더 테스트 동영상
엔코더 카운트 값을 FND로 출력하는 예제
[TMS320F28069 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
}
{
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);
}
{
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);
}
반응형