[MODULE]/MOTOR2009. 3. 26. 12:26

[DC 모터 제어] RDK-BDC Kit 예제 분석

[DC 모터 제어] RDK-BDC Kit 예제 분석



[2009-03-26 11:56:56]
RDK-BDC 데모키트
LM3S2616을 이용한 모터 드라이버 보드이다.



전체 코드는 PWM2 Timer 인터럽트를 이용해서 1ms 로 전체 하드웨어를 제어하고 있다. <- 1ms로 CAN, Swith등을 제어한다. if, switch의 분가 좀 있는데 큰 무리가 없나보다.
ControllerIntHandler(void) 함수가 인터럽트 핸들러이다.
 
인터럽트 핸들러 안에
ControllerSpeedMode()
ControllerPositionMode()
등등 모터 제어를 하고 있다.
 
속도제어
우선 스피드 제어쪽을 보면...
ControllerSpeedMode()
{
        // 엔코더의 속도값을 읽어와서
        lTemp = EncoderVelocityGet();
 
        // 에러값을 구함 -> 목표 속도와 비교한다.
        lTemp = g_lSpeedTarget - lTemp;

        //PID제어기를 돌려 값을 설정한다.
        lTemp = PIDUpdate(&g_sSpeedPID, lTemp) / 256;

        // Limit 설정
        if(lTemp < -32768)
        {
            lTemp = -32768;
        }
        if(lTemp > 32767)
        {
            lTemp = 32767;
        }

        // 새로운 모터 출력값 설정
        g_lVoltage = lTemp;
    }
 
    // 모터 전압 설정 -> PWM출력
    HBridgeVoltageSet(g_lVoltage);
}
 
encoder.c 파일의 속도값 읽어오는 함수
long EncoderVelocityGet(void)
{
    return(MathDiv16x16(SYSCLK * 60, g_ulEncoderClocks * g_ulEncoderLines));
}
 
 
속도는 외부 인터럽트를 이용하여 펄스의 시간을 측정하도록 되어 있다.
 
startup.c 외부 인터럽트 핸들러 설정
    EncoderIntHandler,                      // GPIO Port C
 
EncoderIntHandler()
{
    // Save the time.
    ulNow = ROM_SysTickValueGet();

    // Clear the encoder interrupt.
    ROM_GPIOPinIntClear(QEI_PHA_PORT, QEI_PHA_PIN);

    //이전 타이머 값에서 형재의 타이머 값을 빼서 펄스의 시간을 측정한다.
    if(g_ulEncoderPrevious > ulNow)
    {
        g_ulEncoderClocks = g_ulEncoderPrevious - ulNow;
    }
    else
    {
        g_ulEncoderClocks = (16777216 - ulNow) + g_ulEncoderPrevious;
    }

    //이전값 저장
    g_ulEncoderPrevious = ulNow;
}

코드 자체는 별것 아닌데... 상당히 복잡하게 작성해놨다. 좀더 쉽고 간단하게 프로그램 짜면 쉽게 가져다 쓰기 편할텐데..
"가장 좋은 코드는 가장 쉽게 이해하는 코드다!"라는 말이 생각난다.
Posted by nexp

댓글을 달아 주세요

[DSP]/DSP280x2007. 4. 10. 22:45

[DSP280x EVM]DC Servo Motor제어

[DSP280x EVM]DC Servo Motor제어

사용자 삽입 이미지






확장 보드를 이용한 DC Motor EVM 보드 제어



엔코더


엔코더 핀맵
Posted by nexp

댓글을 달아 주세요

[MODULE]/MOTOR2006. 12. 22. 00:41

[BA6208] 초소형 DC모터 드라이버 모듈 제작

[BA6208] 초소형 DC모터 드라이버 모듈 제작

사용자 삽입 이미지



ROHM사의 소형 DC모터 드라이버 BA6208을 이용하여 초소형 DC모터 드라이버를 제작 했다.
BA6208은 600mA의 출력을 할수 있으며 양방향 제어 가능한 소형 모터 드라이버이다. 원래는 다른 로봇컨트롤러에 사용되었지만 소형모듈로 만들어 간단히 테스트 할용도로 PCB남는 공간에 만들어 보았다.



소형 Atmega8 EVM 보드나 dsPIC EVM보드에 연결하여 모터 제어 테스트를 해 볼 수 있다.






BA6208 관련 자료









사용자 삽입 이미지
Posted by nexp

댓글을 달아 주세요

[MODULE]/MOTOR2005. 11. 17. 16:12

8채널 DC모터 제어 보드 제작 - L293D 모터 드라이버

8채널 DC모터 제어 보드 제작 - L293B 모터 드라이버

간단히 DC모터 제어할 일이 있어 소형 모듈로 만들었다. L293D 모터 드라이버 2개를 이용하여 4채널 양방향 모터 제어 및 8채널 단방향 모터 제어 가능하도록 했다.



여러 용도로 사용할 수 있도록 하기 위해 다양한 커넥터를 두었는데 브레드보드 연결할 일이 많아 SIP타입도 두었다.



주로 사용할 목적은 실습용인데 NI DAQ의 DIO실습, PWM, TIMER실습 등을 모터 제어로 할수 있도록 하기 위해서 이다. NI ELVIS Proto보드에 연결하여 여러가지 실습을 할 수 있도록 했다.




데이터 시트



블럭도




핀맵




제어 로직



Aplication



Posted by nexp

댓글을 달아 주세요

[MODULE]/MOTOR2002. 2. 23. 19:50

[DC Motor EVM] 보드 제작

[DC Motor EVM] 보드 제작

사용자 삽입 이미지



DC Servo Motor Control System 프로젝트에 사용된 보드를 수정하여 DC 서보 모터 제어 할수 있는 보드를 제작 했다.
모터부, 엔코드, 엔코더 제어부, 모터 드라이버가 포함된 EVM이다.







모터 드라이버는 LMD18200을 사용하였다.






 
Posted by nexp

댓글을 달아 주세요

  1. DSP (TSM320F2808)를 이용한 테스트 예제
    http://nexp.tistory.com/319

    2008.05.11 20:01 신고 [ ADDR : EDIT/ DEL : REPLY ]