Timer ile PWM sinyali nasıl üretilir? Frekans ve duty cycle nasıl hesaplanır?
Cevap
Bir donanım timer'ı, giriş saatini prescaler ile böler ve bir sayacı auto-reload (ARR / period) değerine kadar sayar. PWM modunda çıkış pini, sayaç compare (CCR) değerinin altındayken HIGH, üstündeyken LOW olur.
Formüller
f_timer = f_clk / (PSC + 1)
f_pwm = f_clk / ((PSC + 1) * (ARR + 1))
duty = CCR / (ARR + 1)Örnek
72 MHz saat, 20 kHz PWM (motor sürücü için duyulabilir aralığın üstü):
PSC = 0→ timer 72 MHz sayarARR = 72 000 000 / 20 000 − 1 = 3599- %25 duty:
CCR = 3600 * 0.25 = 900 - Çözünürlük: 3600 adım, yaklaşık 11.8 bit
Burada frekans ile çözünürlük arasındaki dengeye dikkat: PWM frekansı arttıkça ARR küçülür, duty adımları kabalaşır.
/* STM32 register seviyesi, TIM2 CH1 */
TIM2->PSC = 0;
TIM2->ARR = 3599;
TIM2->CCR1 = 900;
TIM2->CCMR1 = (6U << TIM_CCMR1_OC1M_Pos) | TIM_CCMR1_OC1PE; /* PWM mode 1 + preload */
TIM2->CCER |= TIM_CCER_CC1E;
TIM2->CR1 |= TIM_CR1_ARPE | TIM_CR1_CEN;Preload açıkken yeni CCR değeri periyot sonunda geçerli olur; böylece duty değişiminde glitch oluşmaz.
Timer'ın diğer kullanımları
- Periyodik interrupt: Kontrol döngüsü, RTOS tick.
- Input capture: Harici sinyalin frekans/darbe genişliğini ölçme (enkoder, ultrasonik sensör).
- Output compare: Belirli zamanda pin değiştirme.
- Center-aligned PWM ve dead-time insertion: H-köprü ve üç fazlı motor sürücülerde üst ve alt transistörün aynı anda iletime geçmesini (shoot-through) önler.
- ADC tetikleme: Örneklemeyi PWM ile senkronlamak.
İlgili Mikrodenetleyiciler soruları
- Kesme (interrupt) nedir? ISR yazarken nelere dikkat edilir?
- Watchdog timer nedir, ne işe yarar?
- Bir bootloader nasıl çalışır? Uygulamaya atlama ve güvenli firmware güncellemesi nasıl tasarlanır?
- Mekanik bir butonun debounce işlemi neden gereklidir ve yazılımda nasıl yapılır?
- DMA nedir, ne zaman kullanılır? DMA kullanırken cache coherency ve double buffering gibi konularda nelere dikkat edilmelidir?
- ADC çözünürlüğü, referans voltajı ve örnekleme hızı nedir? ADC okumasında doğruluğu etkileyen faktörler nelerdir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.