[TI]/LM3S2xxx2009.10.21 17:53

[ LM3S2965 EXP ] CAN통신을 이용한 모터 PID 제어 테스트

[ LM3S2965 EXP ] CAN통신을 이용한 모터 PID 제어 테스트




PC프로그램 - PID값 설정에 따른 위치 추의값을 실시간으로출력






Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2010.02.09 13:49 [ ADDR : EDIT/ DEL : REPLY ]
  2. 혹시~ CAN 통신 테스트 관련하여 자료좀 받을 수 있을까요?
    FIFO 예제를 보고 수정을 하여 통신을 해보니 통신이 안되네요
    도움좀 부탁드립니다.

    2010.06.24 16:43 신고 [ ADDR : EDIT/ DEL : REPLY ]

[MODULE]/MOTOR2009.08.14 14:19

DC MotorDriver Module 보드 제작 - dsPIC33FJ128MC802 (VNH2SP30 Motor Driver)

DC MotorDriver Module 보드 제작 - dsPIC33FJ128MC802 (VNH2SP30 Motor Driver)



가격 저렴하고 소형의 dsPIC33FJ128MC802 를 이용하여 200W급 DC모터 드라이버 모듈을 제작했다.



인터페이스로 CAN, UART가 가능하고 QEI가 있어 엔코더를 연결할 수 있다.

Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC33-SM2009.06.12 18:52

[dsPIC MotorDriver] PID제어 PC프로그램 작성

[dsPIC MotorDriver] PID제어 PC프로그램 작성



PC에서 PID값을 설정 및 위치를 제어하고 엔코더 값을 읽어올 수 있는 프로그램 작성



dsPIC33 PID 제어 테스트 동영상
Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC33-SM2009.06.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

댓글을 달아 주세요

[Microchip]/dsPIC33-SM2009.06.10 17:09

[dsPIC33 MotorDriver] 타이머 인터럽트 테스트

[dsPIC33 MotorDriver] 타이머 인터럽트 테스트
모터 제어기가 수행될 타이머 인터럽트는 가장 기본 사항이 될것같다. 일반적으로 사용되는 제어 주기인 1ms로 설정해 테스트

dsPIC의 타이머 인터럽트는 상당히 간단하다. 먼저 인터럽트 초기화 하고 클럭 소스의 설정을 위해 TCS비트를 설정하는데 0이면 내부 Tcy를 선택한다. Tcy는 Fosc/2 이므로 80Mhz/2 인 40Mhz가 된다. 그리고 이 클럭소스를 TCKPS비트 설정으로 1/8/64/256 으로 분주 할 수 있다.
타이머 인터럽트 PR1 레지스터 값과 일치할때 발생한다.

dsPIC Timer 블록도



1ms 주기로 인터럽트 생성하기 하기 위한 PR1값 설정은 625이다. 계산법은 아래와 같다.
40Mhz / 64 = 625000Hz -> 1.6us
1ms = 1000us => 1000us/1.6us = 625


dsPIC Timer1 초기화 함수
void Init_Timer1( void )
{
 //타이머1 인터럽트 세팅
 IFS0bits.T1IF = 0;  //타이머1 인터럽트 플래그 초기화
 IPC0bits.T1IP = 4;  //타이머1 인터럽트 우선순위 레벨4로 설정(디폴트값임)
 IEC0bits.T1IE = 1;  //타이머1 인터럽트 동작 모드로 설정
 
 //타이머1 설정
 T1CONbits.TCS = 0;  //내부 클럭 소스 사용( Fosc / 2 = Tcy)

 T1CONbits.TCKPS1 = 1; //프리스케일러 분주비 64:1,TCKPS<1:0> = 10
 T1CONbits.TCKPS0 = 0;  

 T1CONbits.TSYNC = 0; //외부 클럭 소스와 동기화 금지
 
 // 256:1 , 1m 카운팅 값 설정
 PR1 = 625;  

 //타이머1 동작 스타트(T1CONbits.TON = 1)
 T1CONbits.TON = 1;
}

인터럽트 핸들러
void __attribute__((__interrupt__)) _T1Interrupt(void)
{
  // reset Timer 1 interrupt flag
  IFS0bits.T1IF = 0;
 
   m_TimerTick1++;
   return;
}

Posted by nexp

댓글을 달아 주세요