PENS
Fernando Ardilla
Iwan Kurnianto Wibowo
Tujuan
Setelah menyelesaikan modul ini, peserta mampu:
Menjelaskan bagaimana cara menghasilkan PWM berdasarkan hardware timer
Menjelaskan bagaimana cara menggunakan mode PWM dan fitur yang tersedia
Dasar Teori
Pada praktikum ini akan ditunjukkan bagaimana cara mengonfigurasi hardware timer STM32
agar menghasilkan sinyal output berupa PWM dengan lebar pulsa yang dapat diatur. PWM biasa
digunakan untuk mengontrol kecepatan motor dan kecerahan lampu. Hardware timer STM32 adalah
blok hardware terpisah yang dapat menghitung dari 0 hingga nilai yang diberikan dan memicu beberapa
event diantara nilai hitungan tersebut. Ketika nilai counter mencapai 0, maksimum atau sebuah nilai
pembanding (compare value) yang didefinisikan setiap channel, nilai output channel dapat berubah.
Berbagai pilihan konfigurasi menentukan event mana yang mengubah nilai dan bagaimana hal itu
berubah.
Timer 4 STM32F4 Discovery mempunyai empat channel yang dapat digunakan sebagai PWM
output yaitu TIM4_CH1-4. Pada board STM32F4 Discovery terdapat user LED yang terhubung pada port
yang sama dengan alternate function TIM4_CH1-4 seperti ditunjukkan pada tabel 1 dan gambar 1.
Skematik LED menunjukkan bahwa LED dirangkai active high. Jika diberikan kondisi high maka LED
menyala. Dengan demikian kecerahan LED dapat dikontrol menggunakan PWM mode 1 up-counting.
Value
Period (TIMx_ARR)
TIMx_CCR TIM_CNT
Time
High TIM_CH
PWM output
Low
Dalam membangkitkan sinyal PWM, ada dua besaran yang harus diperhatikan, yaitu frekuensi dan duty
cycle PWM. Mengacu pada dasar pembangkitan PWM, yaitu operasi timer, maka frekuensi PWM dapat
dihitung dengan rumus :
Frekuensi PWM = TIM_CLK/((PSC+1)*(ARR+1))
Dimana :
TIM_CLK = timer clock input
PSC = register prescaler 16-bit
ARR = register autoreload 16/32
Catatan:
1. Jika prescaler APB = 1, maka frekuensi clock timer(TIM_CLK) di-set sama dengan frekuensi APB
bersangkutan dimana timer terhubung.
2. Jika prescaler APB tidak sama dengan 1, maka frekuensi clock timer (TIM_CLK) bernilai 2x
frekuensi APB bersangkutan dimana timer terhubung.
Percobaan
Peralatan
1. Board STM32F407VG Discovery
2. USB to Serial TTL
void TIM4_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_PCLK1Config(RCC_HCLK_Div16);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource12, GPIO_AF_TIM4); //pwm ch1
GPIO_PinAFConfig(GPIOD,GPIO_PinSource13, GPIO_AF_TIM4); //pwm ch2
GPIO_PinAFConfig(GPIOD,GPIO_PinSource14, GPIO_AF_TIM4); //pwm ch3
GPIO_PinAFConfig(GPIOD,GPIO_PinSource15, GPIO_AF_TIM4); //pwm ch4
//fpwm=(10.5MHz*2)/(210*100)=1000Hz
TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_Prescaler = 210-1;
TIM_TimeBaseInitStruct.TIM_Period = 100-1;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);
TIM_Cmd(TIM4,ENABLE);
TIM_OCStructInit(&TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //mode non inverting
TIM_OCInitStruct.TIM_Pulse = 0;
TIM_OC1Init(TIM4,&TIM_OCInitStruct);
TIM_OC2Init(TIM4,&TIM_OCInitStruct);
TIM_OC3Init(TIM4,&TIM_OCInitStruct);
TIM_OC4Init(TIM4,&TIM_OCInitStruct);
TIM_Cmd(TIM4,ENABLE);
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_CCxCmd(TIM4,TIM_Channel_1,TIM_CCx_Enable);
TIM_CCxCmd(TIM4,TIM_Channel_2,TIM_CCx_Enable);
TIM_CCxCmd(TIM4,TIM_Channel_3,TIM_CCx_Enable);
TIM_CCxCmd(TIM4,TIM_Channel_4,TIM_CCx_Enable);
}
TIM_SetCompare1(TIM4,80);
TIM_SetCompare2(TIM4,80);
TIM_SetCompare3(TIM4,80);
TIM_SetCompare4(TIM4,80);
delay_ms(1000);
}
}
5. Amati kedip LED pada board. LED blinking dengan nyala yang redup(10%) dan terang(80%). Nilai
PWM berkisar antara 0 hingga nilai period.
Mengakhiri praktikum