Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

DMA_PWM

Başlatan papsukkal, 09 Mart 2023, 04:03:40

papsukkal

ARM konusuna Blue Pill ile ufak ufak girmeye başladım.

ADC, USB, kesmeler derken PWM konusunda kafama takılan iki soruyu sizlere danışmak istedim.

Şimdilik öğrendiğim kadarıyla 3 farklı yöntem ile PWM oluşturabiliyoruz.

1. Yazılım ile (İşlemciyi aşırı derecede meşgul ediyor).
2. Timer kesmesi ile
3. DMA ile (timer burada da kullanılıyor).

İnternetteki kaynaklara baktım. Geneline yakını timer ile PWM oluşturmuş. DMA ile oluşturulan PWM için tam açıklayıcı bir kaynak bulamadım. Anlamaya çalıştığım konu ise şu: İnternette incelediğim DMA_PWM projelerinde Cube IDE ile proje oluştururken DMA aktif edilmiş. main.c dosyasında ise HAL_TIM_PWM_Start_DMA değil de HAL_TIM_PWM_Start kullanılmış ama PWM duty değeri direk CCR1 e yazılmış. HAL_TIM_PWM_Start_DMA ile HAL_TIM_PWM_Start arasında ne fark var? (her ikisini de incelemeye çalıştım ama bir sonuca ulaşamadım).

İkinci sorum ise PWM oluştururken neden Timer_PWM tercih edilir ve neden DMA_PWM tercih edilir. Avantajları ve dezavantajları nelerdir?

 

Tagli

Alıntı yapılan: papsukkal - 09 Mart 2023, 04:03:40İkinci sorum ise PWM oluştururken neden Timer_PWM tercih edilir ve neden DMA_PWM tercih edilir.
STM32'de Timer_PWM ve DMA_PWM gibi bir ayrım yok. CCR register'larının güncellenmesi sırasında DMA belki kullanılabilir. Birden fazla register'ın arka arkaya otomatik güncellenmesi için "burst mode" adı altında özel bir desteği de var.

Sen nasıl bir PWM sinyali elde etmek istiyorsun? Yani uygulaman nedir? Mesela ben şu sıralar FOC konusunu çalışıyorum, burada DMA ile PWM sürme ihtiyacı yok.
Gökçe Tağlıoğlu

quarko

Olsa olsa bir dizideki CCR registerına yüklenecek değerler, DMA ile periyodik ve otomatik olarak yüklenmesi sağlanabilir. Belirli bir sinyal formunu elde etmek amaçlı kullanılabilir. (Sinüs, Üçgen vs.)
"Vicdanın ziyası ulum-u diniyedir. Aklın nuru fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder."

papsukkal

Aslında timer ile PWM oluşturuluyor, DMA ise PWM güncellemesi sırasında tercih edilebilir. Bunu anladım.

Alıntı yapılan: Tagli - 09 Mart 2023, 09:00:39Sen nasıl bir PWM sinyali elde etmek istiyorsun?


Tagli Hocam bir hedefim yok. Anlamaya çalışıyorum sadece.

Peki HAL kütüphanesinde DMA için ayrı bir start fonksiyonu oluşturulması niye? Kullanım şekli mi değisiyor sadece?

Tagli

HAL kütüphanesini hiç bilmiyorum. Ama anladığım kadarıyla bazı uygulamalarda bir sinüs sinyalinin doğrudan PWM ile dışarı basılması gerekiyor. Böyle bir durumda DMA, önceden hesaplanmış bir sinüs tablosunun doğru zamanlama ile CCR register'larına otomatik kopyalanmasını sağlayabilir. Ama bu ihtiyacın hangi uygulamalarda ortaya çıktığını bilmiyorum.

Bilen bir arkadaş bu tarz bir kullanıma örnek verebilirse çok sevinirim.

Dediğim gibi, ben şu sıralar FOC ile uğraşıyorum, ki ben de öğrenme aşamasındayım. FOC'ta her Timer taşma kesmesinde (veya belki 2, 4 kesmede bir) bazı hesaplar yaparak yeni CCR değerlerinin elde edilmesi ve ilgili register'lara yazılması gerekiyor. Hesap yapmak için işlemcinin zaten her türlü işe karışması gerekeceğinden dolayı, DMA'lık bir iş olmuyor.
Gökçe Tağlıoğlu

flowchartx

https://deepbluembedded.com/stm32-change-pwm-duty-cycle-with-dma-for-sine-wave-generation/

Bu linki incelerseniz DMA ve PWM nasıl kullanılıyor daha rahat anlarsınız.