본문 바로가기

[ROBOT]/Robot

[RobotController] 스텝모터 가감속 제어 테스트 (AVR Robot Controller)

[RobotController] 스텝모터 가감속 제어 테스트 (AVR Robot Controller)

StepMotor Body(http://nexp.tistory.com/171) 조립후 스텝모터 가감속 제어 테스트를 했다.
스텝모터 가감속 테이블은 [스텝모터 가감속 테이블 생성기]를 이용했다.







스텝모터의 회전 속도는 스위칭 펄스의 주파수에 따라 결정되며 그림과 같은 특성을 가진다. 기동시 탈출 토크이상의 주파수로 구동하면 탈조가 된다. 따라서 기동시 낮은 주파수로 기동하여 점점 가속하여 정속 운전하고 정지시 점점 낮은 주파수로 기동하여 부드럽게 정지하는 가감속 구동법을 사용해야 한다. 로봇의 스텝모터는 기본적으로 가감속 구동을 하며 StmSetAcc()함수를 이용하여 기본 가감속, 등속, 사용자 정의 가감속을 설정할 수 있다. StmRun()함수는 스텝모터를 가감속 구동 방법으로 구동 하도록 한다.

엑셀을 이용하여 작성한 스텝모터 저속가감속 테이블 및 고속가감속 테이블의 그래프



소스코드



 

//=============================================================================

// Ez-RoboMaster Test Program - Step Test

//

// by nexp76@naver.com
// [.c]

//=============================================================================

/*

 - 사용자 정의 가감속 테이블 이용

 - 스위치1을 누르면 스텝모터를

 - 저속의 가감속 테이블을 이용하여 1000펄스동안 전진/후진 하고

 - 고속의 가감속 테이블을 이용하여 1000펄스동안 전진/후진 하고

*/

//Lib file head 추가

#include "c:\winavr\ezrobomaster\ezrmlib.h"

#include "step_table1.h"

#include "step_table2.h"

//이동할 거리 설정

#define DIST_MOVE                 3000

#define ROBOT_FORWARD           1

#define ROBOT_BACKWARD          2

void RobotMoveTo(unsigned char Status, unsigned int Distance);

void main(void)

{

        char flag = 0;

       

        //로보마스터 초기화

        SysInit();

        //스텝모터 초기화

        StmInit();

        //스텝모터의 최고 값 설정

        StmSetSpd(STEP_LEFT+STEP_RIGHT, 1160);

        StmSetAcc(STEP_LEFT+STEP_RIGHT, ACC_USER);

       

        LcdDspStr(0,0, "StepTest");

        LcdDspStr(0,1, "Press-SW1");

        while(1)

        {

                //스위치1이 눌러 지면..

                if(Sw1GetStat())

                {

                        //로봇 구동

                        flag = TRUE;

               

                        Delay(300);

                }

                if(flag)

                {                      

                        //저속 가감속 테이블 설정

                        StmSetAccTbl(m_TimeTable1, 500);

                        //로봇 구동 - 전진

                        RobotMoveTo(ROBOT_FORWARD, DIST_MOVE);

                        RobotMoveTo(ROBOT_BACKWARD, DIST_MOVE);

                        BzrTemp(100);

                       

                        //고속 가감속 테이블 설정

                        StmSetAccTbl(m_TimeTable2, 500);

                        //로봇 구동 - 후진

                        RobotMoveTo(ROBOT_FORWARD, DIST_MOVE);

                        RobotMoveTo(ROBOT_BACKWARD, DIST_MOVE);

                        BzrTemp(100);

                       

                        flag = FALSE;                    

                }       

        }

       

        return 0;

}

void RobotMoveTo(unsigned char Status, unsigned int Distance)

{

        switch(Status)

        {

                case ROBOT_FORWARD:

                        //스텝모터 방향 설정 -> 로봇 전진

                        StmSetDir(STEP_LEFT, DIR_CCW);

                        StmSetDir(STEP_RIGHT, DIR_CW);                    

                        break;

               

                case ROBOT_BACKWARD:

                        //스텝모터 방향 설정 -> 로봇 후진                    

                        StmSetDir(STEP_LEFT, DIR_CW);

                        StmSetDir(STEP_RIGHT, DIR_CCW);

                        break;

        }

        StmRunOutVol(STEP_LEFT+STEP_RIGHT, Distance );                      

}


 
반응형