[Microchip]/dsPIC33-SM2009. 6. 11. 18:41

[dsPIC MotorDriver] QEI 테스트

[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 엔코더 구조





//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;
}
 
 
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 테스트 동영상

Posted by nexp

댓글을 달아 주세요

[TI]/LM3S2xxx2009. 4. 13. 08:00

[LM3S2965] QEI 테스트

[LM3S2965] QEI 테스트


Lunminary Micro QEI특징
Position integrator that tracks the encoder position
Velocity capture using built-in timer
QEISPEED, QEIPOS레지스터가 각각 독립적으로 구동할 수 있다. (QEIPOS는 QEISPEED보다 먼저 Enable해야 함)

인터럽트 소스
- Index pulse
- Velocity-timer expiration
- Direction change
- Quadrature error detection





QEI모듈은   quadrature phase 모드와 clock/direction 모드를 지원한다.
quadrature phase모드
엔코더는 90도 위상을 가진 두개의 2개의 클럭을 생성한다. 각 에지를 이용해 회전 방향을 결정한다.

clock/direction 모드

엔코더는 클럭신호를 생성한다. direction 신호가 엔코더의 방향을 결정한다.
 
QEI Control (QEICTL) 레지스터의 SigMode bit비트로 모드를 설정할 수 있다.
Luminary 제공함수 QEIConfigure 함수로 설정 가능하다.
 
QEIConfigure(QEI0_BASE, QEI_CONFIG_QUADRATURE |QEI_CONFIG_CAPTURE_A, 1000);

QEI Control (QEICTL)
#define QEI_CONFIG_CAPTURE_A    0x00000000  // Count on ChA edges only
#define QEI_CONFIG_CAPTURE_A_B  0x00000008  // Count on ChA and ChB edges
#define QEI_CONFIG_NO_RESET     0x00000000  // Do not reset on index pulse
#define QEI_CONFIG_RESET_IDX    0x00000010  // Reset position on index pulse
#define QEI_CONFIG_QUADRATURE    0x00000000  // ChA and ChB are quadrature
#define QEI_CONFIG_CLOCK_DIR    0x00000004  // ChA and ChB are clock and dir
#define QEI_CONFIG_NO_SWAP      0x00000000  // Do not swap ChA and ChB
#define QEI_CONFIG_SWAP         0x00000002  // Swap ChA and ChB
 
PhA의 에지(혹은 PhA, PhB두 에지)에서 QEIPOS레지스터 값을 업데이트 한다.
PhA후 PhB가 오는 정방향일 경우 QEIPOS값은 증가되고 PhB후 PhA가 오는 역방향일 경우 QEIPOS값은 감소된다.

QEI 타이밍도



QEI 초기화 함수
static void InitQEI(void)
{
   //Set Clock
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI);
   
    // Configure the QEI pins.
    GPIOPinTypeQEI(QEI_PHA_PORT, QEI_PHA_PIN);
    GPIOPinTypeQEI(QEI_PHB_PORT, QEI_PHB_PIN);
    GPIOPinTypeQEI(QEI_IDX_PORT, QEI_IDX_PIN);
 
    // Configure the QEI module.
    QEIConfigure(QEI0_BASE, QEI_CONFIG_QUADRATURE|QEI_CONFIG_CAPTURE_A, 1000);
   
    // Initialize the QEI position to zero.
    QEIPositionSet(QEI0_BASE, 0);
    // Enable the QEI module.
    QEIEnable(QEI0_BASE);
}

QEI POS값 출력
각 Edge마다 1씩 증가 하므로 엔코더 1클릭당 2펄스씩 증가한다.
   pos = QEIPositionGet(QEI0_BASE);
   dir = QEIDirectionGet(QEI0_BASE);
   DebugPrint("pos=%d %ld\r\n", dir, pos);

출력결과
pos=-1 262
pos=-1 266
pos=-1 265
pos=-1 264
pos=-1 264
pos=-1 262


Motor Driver 보드의 LM3S2965 QEI핀맵



QEI1 모듈 사용할때 주의 사항
QEI SysCtlPeripheralEnable() 함수를 호출하지 않으면 홀딩되는 현상이 발생한다. <- QEI인자 확인할것
    //----------------------------------------------------------------------------- 
    //QEI 1 Config

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI1); 
 
    // Configure the QEI pins.
    GPIOPinTypeQEI(QEI1_PHA_PORT, QEI1_PHA_PIN);
    GPIOPinTypeQEI(QEI1_PHB_PORT, QEI1_PHB_PIN);
    GPIOPinTypeQEI(QEI1_IDX_PORT, QEI1_IDX_PIN);
 
    // Configure the QEI module.
    QEIConfigure(QEI1_BASE, QEI_CONFIG_QUADRATURE | QEI_CONFIG_CAPTURE_A, 0xffffffff);//ENCODER_MAX_POS); 
    // Initialize the QEI position to zero.
    QEIPositionSet(QEI1_BASE, 0);
    // Enable the QEI module.
    QEIEnable(QEI1_BASE);
    //----------------------------------------------------------------------------- 
Posted by nexp

댓글을 달아 주세요

[MyProject]/20082008. 3. 13. 16:54

USB Encoder Reader 개발

USB Encoder Reader 개발





USB를 이용한 로터리 엔코더 데이터 수집 장치 개발

- USB HID 이용

- 2채널 엔코더 입력












USB 엔코더 리더용 PC프로그램

설정 값에 따라 거리 측정 











Posted by nexp
TAG Encoder, QEI, QEP

댓글을 달아 주세요

[MyProject]/20072007. 9. 5. 06:22

[DisptVelMeter] 리니어 엔코더를 이용한 변위 및 속도 측정 장치 개발

[DisptVelMeter] 리니어 엔코더를 이용한 변위 및 속도 측정 장치 개발



정밀 리이어 엔코더를 이용하여 고속의 낙하 물체에 대한 변위와 속도를 측정하는 시스템을 개발 했다.



시스템의 요구 사항

 - 고속의 엔코더 입력 (15m/s -> 8Mhz)

 - 고속 DAC 출력 (변위를 DAC로 출력) +/- 10V

 - 순간 속도 및 가속도 위치 데이터 출력

 - 광파이버 센서 입력 (두개의 센서를 이용하여 특정 위에서의 속도 측정)



시도 해 보지 않은 일이라 보드는 테스트 하면서 수정 사항이 많이 발생할 것으로 예상하고 모두 모듈 형태로 제작 했다.

가장 큰 관건은 엔코더의 속도와 DAC의 출력 속도 였고 이를 위해 MCU도 바꾸고 엔코더 입력 칩셋도 추가 하였다.

DAC는 고속의 AD5791을 모듈보드로 제작해 테스트 하였다. 



트리거 입력용 광파이버 센서 2채널, 리니어엔코더 입력, 변위 출력, 센서 출력




리니어 엔코더의 위치 및 속도 출력

측정 장치가 외부에 설치 되므로 가독성이 높은 디스플레이로 VFD LCD를 이용 했다.




Posted by nexp

댓글을 달아 주세요

[MyProject]/20042004. 2. 11. 21:08

거리측정 장치 개발

거리측정 장치 개발

사용자 삽입 이미지

지하의 거리(깊이)를 측정하는 장치를 개발의뢰 해서 엔코더를 이용하여 측정장치를 개발 했다.
MCU는 AVR AT90S2313을 이용하였고 상당히 저렴한 가격으로 제작할 수 있었다.


테스트용 프로그램 작성
엔코드 값을 읽어 PC에 표시하고 실제 이동한 거리값을 표시할 수 있도록  간단한 프로그램을 작성하여 테스트 했다.
Posted by nexp

댓글을 달아 주세요

  1. hi

    need a project. i am a student. i have a autonic e50 series 3600 puls encoder.
    but not create project. please hepl me

    2009.09.18 18:37 [ ADDR : EDIT/ DEL : REPLY ]
  2. Use google translate.

    Hi Nexp

    In 2004, you have made the project's PCB and SCH file to me re performance. I want to use for my university assignments. Not be used commercially. Waiting for suggestions and answer.Please....

    안녕하세요 Nexp

    2004 년, 당신은 프로젝트의 PCB 및 모델명 : SCH 내게 다시 성능이 파일을 만들었습니다. 제가 대학 과제를 사용하고 싶습니다. 상업적으로 사용되지 않습니다. 제안과 답변을 기다 리면서. 제발

    2009.09.18 20:01 [ ADDR : EDIT/ DEL : REPLY ]