본문 바로가기

[ST_MICRO]/STM8

STM8S - PWM테스트 (DC모터 속도 제어)

STM8S - PWM테스트 (DC모터 속도 제어)



16비트 타이머 TIM1, TIM2를 이용하여 PWM출력을 각각 4, 3채널씩 출력 가능하다. 

그리고 특이사항으로 PD4는 BEEP 핀이고 1, 2 , 4 kHz 로 사운드 출력을 할수 있다. (이 기능을 사용하려면 옵션비트 AFR7 을 리맵해야 한다고 한다.)

PC6(HS)/SPI_MOSI [TIM1_CH1]

PC7(HS)/SPI_MISO[TIM1_CH2]

PC3(HS)/TIM1_CH3/[TIM1_CH1N]

PC4(HS)/TIM1_CH4/CLK_CCO/AIN2/[TIM1_CH2N]


PD4(HS)/TIM2_CH1/UART1_CK/BEEP

PD3(HS)/TIM2_CH2/AIN4/ADC_ETR

PA3(HS)/TIM2_CH3/[SPI_NSS]

PC5(HS)/SPI_SCK [TIM2_CH1]



STM8S PWM출력 블록도





STM8S PWM을 테스트 하기 위해 PWM출력을 간단한 모터 드라이버 모듈 BA608 을 이용하였다. ADC로 입력되는 가변저항의 전압값에 따른 모터 속도 제어를 테스트 해보았다. 


STM8-SS EVM보드에는 PD4/TIM2_CH1 에 PWM출력이 된다.



모터 드라이버 BA608 모듈 연결은 GND와 PWM신호만 연결하면 된다.




STM8S PWM초기화 함수

STM8 PWM 출력은 15Khz로 설정하고 10bit로 제어 하도록 설정했다.

//STM8 PWM출력 함수

#define SetPwm21(Value)              TIM2->CCR1H = (Value >> 8);\

                                    TIM2->CCR1L = (Value);


//STM8 PWM초기화 함수

void InitPwm2(void)

{

    TIM2_TimeBaseInit(TIM2_PRESCALER_1, 1024); //16000000/1024->15625


    // PWM1 Mode configuration

    TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 0, TIM2_OCPOLARITY_HIGH);

    TIM2_OC1PreloadConfig(ENABLE);

    TIM2_ARRPreloadConfig(ENABLE);


    TIM2_Cmd(ENABLE);

}




STM8S PWM 출력 테스트 예제코드

int main( void )

{

    unsigned int cnt = 0;

    unsigned int adc = 0;

    SystemInit();

    

    DebugInit(BAUD_115200);

    DebugPrint("STM8S PWM Test\r\n"); 

    

    Led1Init();

    Led1On();    

    

//ADC초기화

    AdcInit(0);

//PWM초기화

    InitPwm2();


enable();



    while(1)

    {

        adc = AdcRead(ADC1_CHANNEL_3);

        SetPwm21(adc);

    }

    

    return 0;

}



STM8S PWM테스트 동영상


반응형