STM32 Timer One Pulse kullanımı hakkında

Başlatan argelojik, 05 Nisan 2020, 12:48:10

argelojik

Hocam STM32F415 kullanıyorum bu MCU'da TIM15 yok o yüzden TIM8 master yaptım.
Alıntı yapılan: muhittin_kaplan - 06 Nisan 2020, 13:15:50TIM5 ile alaklı olsaydı evet olacaktı.
GRID de TIM15 olunca herhangi bir kod a ihtiyacınız olmayacak.

JKramer


argelojik

Alıntı yapılan: JKramer - 06 Nisan 2020, 13:31:06Koyduğunuz ekran görüntüsünde ref. manual için rev5 yazıyor. Güncel olanı rev18: https://www.st.com/en/microcontrollers-microprocessors/stm32f405-415.html#resource
Haklısınız.Acemilik işte. İnternetten hemen gördüğümüz şeye inanıyoruz. Fazla araştırmaya uğraşmıyoruz. 5 günüm gitti ama Timer hakkında çok şeyler öğrendim. Şimdi yeni revizyon Application note ve datasheet indirdim.

argelojik

#33
Bugün yine uğraştım olmuyor. >:(
HAL_TIM_OnePulse_Start(&htim2, TIM_CHANNEL_2);
Bu fonksiyon ile çalışmıyor. HAL kütüphanesinden baktım.
HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim)       HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim)
fonksiyonlarının içi boş oluşuyor. Oysa internetten yapan birkaç kişiye baktığımda bu fonksiyonların içinde Timer giriş tanımlamaları var.
Timer girişine kablo ile de tetikleme pulse'ı veriyorum yine olmuyor.
Bana yardım edecek bir Usta yok mu? Şu One Pulse Modu rafa kaldırsak. ;)

Mucit23


argelojik

#35
One Pulse Mode nasıl çalışıyor sonunda anladım. Belki bir gün başkasına da lazım olabilir diye sonucu paylaşıyorum. One Pulse modu için bir Timer master, diğeri slave oluyor. Ben Timer8'i master, Timer2'yi ise slave olarak ayarlardım. Çünkü bu iki timer ITRx bağlantı yolu ile MCU içinde birbirine bağlı. Bunu iyi anlamak gerekiyor. Her Timer arasında böyle bir bağlantı yok. Timer8 ve Timer2 ITR1 bağlantı yolu ile birbirine bağlı. Mcu'da ki bu bağlantıyı en son revizyonlu Application Note'dan buluyoruz. Zaten Cubemx bize doğru ITRx yolu seçildiğinde bir alt menü olarak gösteriyor.

Timer8'i her 2ms'de bir update event oluşturacak şekilde ayarladım. Daha sonra slave olarak ayarladığım Timer2'den ihtiyacım olan 200us'lik pulse için timer (Psc ve ARR) ayarlarını yaptım. Slave mode olarak Trigger mode'u, Trigger Source olarak ta dediğim gibi ITR1'i seçtim. Timer'ın Channel1'ini "Input Capture direct mode" olarak giriş tanımladım. Master Timer'ım bu girişten tetikleyecek. Çıkış olarak ise timer'ın  Channel2'çıkışını  "PWM Generation CH2" olarak tanımladım ve duty cycle pulse genişliğimi ayarladım . Son olarak ise "One pulse mode" tick'ini işaretleyerek one pluse modunu aktif ettim.Cubemx ayarları bu şekilde yapılıyor.
Kod bölümüne geldiğimizde ise  master timer'ın (Timer8) "interrupt callback" fonksiyonunda hiçbir şey yazmıyoruz. Her update event'da otomatik olarak slave timer'ı (Timer2) tetikliyor. Main bölümüne sadece timer8'i çalıştıracak
HAL_TIM_Base_Start(&htim8); olan kodu yazıyoruz. One pulse mode'unu başlatmak için ise;
  HAL_TIM_OnePulse_Start(&htim2, TIM_CHANNEL_2); kodunu yazıyoruz.Başka hiçbir ayara gerek yok. Bu şekilde 2ms'de bir 200 us'lik pulse'larımız oluşuyor.
Beni hayal kırıklığına uğratan şey ise bu mod kullanılırken Timer2'nin diğer 2 pinini de (CH3 ve CH4) aynı şekilde kullanamamak oldu.Bu mode sadece bir çıkışa izin veriyormuş. Yani bir timer'da sadece bir tane one pulse kullanılıyor. Oysa benim farklı delaylarda iki adet pulse ihtiyacım vardı.Sadece Timer çalışma sistemini ve Cubemx ayarlarını güzelce öğrenmiş oldum. Bana yardım eden Muhittin Kaplan hocama da çok teşekkür ederim. Muhittin hocam isterse blog sayfasına da koyabilir. (Sayın hocam low level bilsem burada ne işim var?) Okuyup ama bana tek kelime yazmayan herkese çok teşekkürler.