İnverter için PWM Üretimi

Başlatan masum altekin, 31 Mart 2017, 18:51:58

masum altekin

Merhabalar, Benim projemde bir PWM üretmem gerekiyor da yardımınıza ihtiyacım var.  PWM'i sinüs ile üçgeni karşılaştırıp yapıyoruz.  PWM'in duty cycle'ı sürekli değişiyor frekansı ise sabit olacak. PSIM programında simülasyonunu yapıp PWM'i ürettim. Şimdi de STM32F de aynı PWM'i üretmem lazım. Nasıl yapacağımı bilemedim. Yardımlarınız için şimdiden teşekkürler.(PWM üretme devresi aşağıdaki fotoda verilmiştir.)


Birol

#1
Şimdi sana yanlış bilgi vermek istemem ama sorunda birkac eksik var.Sonuncta benden yeniyim.
1)   Stm32f407 dısc. Bordlar için Keil , CoIDE,STM32cube gibi programlar var bunun üzerinden programlanıyor.
2)   ve PWMi üretmek için değerlerin belli olmalı yani örn: 10khz ve doluluk oranı %20 gibi.
3)   Eğer bu kadar ise  ve değerlerini biliyorsan bu forumda yeterince PWm proramları var ve sadece değerlerini değistirsen yeter.
4)   Ama sadece işlemciyi kullanıcaksan bukonuda benimde fazla bilgim yok.

masum altekin

Projede kritik detay duty oranının değişmesi. Yani yüzde 20 lik bir dutymiz yok. Dediğiniz gibi böyle bir durum olsaydı STM32f407 de PWM Output ile hazır projedeki değerleri değiştirmek suretiyle sorun çözülebilirdi.

seyityildirim

Arkadaşımızın sorunu kısaca şu:

Simülasyon programında sinüs ile üçgen dalgayı karşılaştırarak ürettiğim pwm sinyalini kod olarak nasıl yazabilirim ?.

Anlaşıldığı kadarıyla frekans sabit.

Değişen tek şey duty.

Bu duty değişimini fonksiyonel bir şekilde ifade edebilirse sorunu çözülecek.

Yoksa duty si ve frekansı belli bir pwm sinyalini üretmekte sıkıntı olacağını sanmıyorum.

Kısaca asıl sorunu duty değişimini zamana göre ifade etmek.

Cemre.

Üretmek istediğin PWM sinyalinin özel bir ismi var. SPWM (Sine PWM). Anahtar kelimelerini buna göre düzenleyebilirsin.

STM32 ile yapmak çok kolay olacak.

PWM'i Pulse (Doluluk (CCRx)) değerini DMA ile bir array'den (dizi) alacak şekilde programlıyorsun. Bu array'i de aha şu linkten hızlıca üretebilirsin. http://www.daycounter.com/Calculators/Sine-Generator-Calculator.phtml

Şimdi tek yapman gereken -eğer HAL lib kullanıyorsan- HAL_TIM_PWM_Start_DMA (emin değilim ama böyle olmalı) fonksiyonunu çağırmak.

Veya işlemcinin gücünü kullanarak her TIM Update kesmesinde sin(x) değerini yeniden hesaplatıp bunu 0-ARR değeri arasına map edeceksin. Sonra CCRx register'ına yazacaksın. Geriye 'x' değişkenini 0-2*pi arasında gezdirip Sine PWM'in oluşmasını izlemek kalıyor.

Kolay gelsin.

masum altekin

Bilgilendirme için teşekküreler. SPWMi araştırıp projeyi yapmaya çalışacam. Yararlı birşeyler bulursam diğer arkadaşların da faylanması için burda da paylaşırım.