본문 바로가기

[TI]/MSP0M

[MSPM0G3107 SSM] PWM 테스트 - RC Servo Motor 제어

 

MSPM0G3107 PWM 테스트를 해 보자. 

확장테스트 보드에는 RC Servo 모터를 연결 할수 있는 커넥터가 3채널이 있기 때문에 PWM을 이용해 서보 모터를 제어 할 수 있다.

 

 

 

서보 보터는 20ms 주기에 0.5ms ~ 2.5ms로 펄스폭을 제어 하면 된다.

 

 

TIMER-PWM을 추가 하고 PWM 출력 주기를 20ms(50hz) 로 설정하고 invert 설정으로 출력을 반전시켜 출력 할수 있도록 설정해 준다.

 

 

인터럽트 입력예제를 이용해 스위치 입력에 따라 서보 모터의 위치를 변경하는 예제를 작성할수 있다.

#include "ti/driverlib/m0p/dl_interrupt.h"
#include "ti_msp_dl_config.h"

extern volatile uint32_t interruptVectors[];

#define DELAY (32000000/100)
#define SEOVO_POS_0             (500-1)         //0.5ms
#define SEOVO_POS_90            (750-1)
#define SEOVO_POS_180           (1250-1)        //2.5ms

unsigned int pwm_value = SEOVO_POS_0;


void GROUP1_IRQHandler(void)
{
    switch (DL_Interrupt_getPendingGroup(DL_INTERRUPT_GROUP_1)) {
        case GPIO_GRP_0_INT_IIDX:
            /* If SW is high, turn the LED off */
            if (DL_GPIO_readPins(GPIO_GRP_0_PORT, GPIO_GRP_0_SW_PIN1_PIN))
            {
                DL_TimerG_setCaptureCompareValue(PWM_0_INST, SEOVO_POS_180, DL_TIMER_CC_0_INDEX);  
                DL_GPIO_clearPins(GPIO_GRP_1_PORT, GPIO_GRP_1_LED1_PIN_PIN);              
            }
            else
            {
                 DL_TimerG_setCaptureCompareValue(PWM_0_INST, SEOVO_POS_0, DL_TIMER_CC_0_INDEX);      
                 DL_GPIO_setPins(GPIO_GRP_1_PORT, GPIO_GRP_1_LED1_PIN_PIN);
            }
            break;
    }
}

 

 

PWM출력 main 프로그램 소스

int main(void)
{
    SYSCFG_DL_init();
    
    NVIC_EnableIRQ(GPIO_GRP_0_INT_IRQN);
	
    DL_TimerG_setCaptureCompareValue(PWM_0_INST, SEOVO_POS_0, DL_TIMER_CC_0_INDEX);
    DL_TimerG_startCounter(PWM_0_INST);

    while (1) {
         __WFE();
    }
}
반응형