[dsPIC MotorDriver] QEI 테스트
dsPIC33은 PPS기능을 제공해 Pin map을 PRx 핀에 원하는 형태로 설정할 수 있다.
입력과 출력에따라 설정 방법은 다른데 UART의 경우 RPINR18에 입력 RP를 설정하면 된다.
//U1RX를 RP20에 입력으로 연결
RPINR18bits.U1RXR = 20;
//RP19를 U1TX에 연결
RPOR9bits.RP19R = 3;
PPS제어를 위해서는 UNLOCK_PPS() 해서 설정하고, 설정후에는 LOCK_PPS() 를 해 주어야 한다.
이 설정은 런타임시 한번만 가능한것 같다. <- 좀더 알아볼 필요가 있음.
그래서 config.h 에 핀맵 정의을 한번에 할수 있도록 했다.
dsPIC33 QEI블록도
16비트라 약간의 아쉬움은 있지만 나름 편리하고 상당히 간단하게 제어 가능하다
dsPIC QEI 타이밍도
QEI 엔코더 구조
dsPIC QEI 타이밍도
QEI 엔코더 구조
//QEI모듈 초기화 함수
void initQEI(void)
{
QEI1CONbits.QEIM = 5; // QEI_MODE_x2_MATCH
QEI1CONbits.SWPAB = 0; // QEI_INPUTS_SWAP
QEI1CONbits.QEISIDL = 1; // QEI_IDLE_STOP
QEI1CONbits.POSRES = 0; // QEI_INDEX_RESET_DISABLE
QEI1CONbits.PCDOUT = 0; // QEI_NORMAL_IO
QEI1CONbits.POSRES = 0; // POS_CNT_ERR_INT_DISABLE
QEI1CONbits.TQCS = 0;
QEI1CONbits.UPDN_SRC = 1;
DFLT1CONbits.QECK = 6; // QEI_QE_CLK_DIVIDE_1_128
DFLT1CONbits.QEOUT = 0; // QEI_QE_OUT_ENABLE
MAX1CNT = 0xFFFF;
POS1CNT = 0;
}
void initQEI(void)
{
QEI1CONbits.QEIM = 5; // QEI_MODE_x2_MATCH
QEI1CONbits.SWPAB = 0; // QEI_INPUTS_SWAP
QEI1CONbits.QEISIDL = 1; // QEI_IDLE_STOP
QEI1CONbits.POSRES = 0; // QEI_INDEX_RESET_DISABLE
QEI1CONbits.PCDOUT = 0; // QEI_NORMAL_IO
QEI1CONbits.POSRES = 0; // POS_CNT_ERR_INT_DISABLE
QEI1CONbits.TQCS = 0;
QEI1CONbits.UPDN_SRC = 1;
DFLT1CONbits.QECK = 6; // QEI_QE_CLK_DIVIDE_1_128
DFLT1CONbits.QEOUT = 0; // QEI_QE_OUT_ENABLE
MAX1CNT = 0xFFFF;
POS1CNT = 0;
}
dsPIC QEI테스트 결과 시리얼 출력
dsPIC33 EVM test Program.
QEI=0
QEI=2
QEI=4
QEI=6
QEI=6
QEI=8
QEI=10
QEI=14
QEI=20
QEI=22
QEI=26
diPIC33 QEI 테스트 동영상
QEI=0
QEI=2
QEI=4
QEI=6
QEI=6
QEI=8
QEI=10
QEI=14
QEI=20
QEI=22
QEI=26
diPIC33 QEI 테스트 동영상
반응형