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테스트 동영상