STM32 Akım Kontrollü PWM

Başlatan quarko, 19 Ağustos 2019, 16:16:37

quarko

Merhabalar arkadaşlar,
Aliexpress üzerinden aşağıdaki bldc motoru satın aldım. Hem öğrenme amaçlı hemde hobi olarak bir sürücü devresi tasarımı yaptım. Şuan blok komutasyon diye biline six-step modda sürebiliyorum. İşlemci olarak STM32 kullandım. PWM ile hızı da kontrol edebiliyorum. Bir sonraki adım olarak faz akımlarını da kontrol etmek istiyorum. (Çünkü yanlış bir işlem sonucu bir tane motorum yandı. Yenisini sipariş etmek zorunda kaldım.) Faz akımlarını kontrol edip PWM ile nasıl ilişkilendirebileceğim konusunda yardıma ihtiyacım var. ADC ve TIM modüllerinin entegrasyonunu nasıl yapacağım. ADC yi injected modda mı kullanmam gerekiyor. Bu konuda açıklama yapabilecek arkadaş var ise minnettar olurum. Şimdiden teşekkürler.


"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

apsis

Koruma için en güzel yöntemlerden biri break input ile sistemi korumaya sokmaktır. Komprator ile limit değeriniz aştığında çıkış alıp bunu brkin pinine girip pwmleri kapatabilirsin. Ya da motoruna göre PI ile akım regülasyonu yapabilirsin.
"Makineye Beyin" MEKATRONİK

quarko

Tasarımda her ikisine göre de çalışabilecek şekilde yaptım hocam. Şönt dirençler üzerinden akım geri beslemesi alıp, karşılaştırıcı vasıtasıyla timer ın break pinine getirdim. Ama ilk olarak akım kontrolünü PI kontrolör ile yapmak istiyorum aslında. İlk olarak PI olmasına da gerek yok. Geri Kp = 1 olan bir P kontrolör de olur. Sadece adc ve timer ın yazılımsal organizasyonunu becerebilsem gerisi bir şekilde gelir. Bunun için adc yi pwm i üreten timer la tetiklenecek şekilde, duty cycle değerine göre tam ortada çevrimi başlatıp, ona göre bir sonraki pwm periyodunda dutyc cycle değerini güncellemem gerekiyor galiba, anladığım kadarıyla.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

apsis

Duty'nin tam ortasından başlatmak nasıl olur ben bilmiyorum. Benim bildiğim adc'nin desteklediği bir timer'dan tetikleme alıp örnekleme süresi belirlenebiliyor bu "External Trigger Conversion Sorce" dan belirlenebiliyor.
Burada timer 1 Compare Capture 1,2,3 gibi kanallardan her event oluşumunda adc'yi tetikleyebilirsin. CC1,2,3 senin aslında duty registerindir.

Ben bildiğimi söyledim. Ancak duty'nin herhangi bir anında bunu donanımsal olarak yapmak sanırım imkansız.

Belkide bilmiyorum.
"Makineye Beyin" MEKATRONİK

quarko

Duty cycle ın tam ortasında adc yi tetiklemenin donanımsal olarak bir yolu yok hocam ama şöyle birşey aklıma geldi. Ana pwm i TIM1 ile üretiyorum. TIM3 ü de, TIM1 ile aynı frekansa ayarlayıp, duty cycle değerini TIM1 in yarısı yapıyorum. ADC yi TIM3 ile tetikliyorum. Aşağıdaki osiloskop görüntüsünde mor olan tim1 pwm, sarı olan tim3 pwm, mavi olan da adc çevrimi tamamlandığında toggle yaptığım pin. Fazladan bir timer kullanmış olacağım ama bu şekilde olacak galiba. STM32F100RB ile test ediyorum.



"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

quarko

#5
Yapmak istediğim buydu. Osiloskop görüntülerine göre oldu gibi sanki.

"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

apsis

Mantıklı valla  :D .

Ancak çevrim için tetiklemeyi hangi kenarda yapıyorsunuz. İşlemciniz nedir bilmiyorum ama 103c8 için yanlızca yükselen kenarda tetikleme yapıyor. Sizde de böyle bir durum geçerliyse yukarıda anlattığınıza göre tam işiniz görmeyecek. Yani yukarıda tam ortada çevrime başlamasını istediğinizi yazmışsınız.

Benim aklıma dma'dan dizilere verileri atıp içerisinden belirli basamakları çekmek geldi. Ama o da yazılımsal çevrim demek.
"Makineye Beyin" MEKATRONİK

quarko

İşlemci STM32F100RB hocam. Discovery boardla deneme yapıyorum. Yükselen veya düşen kenara göre tetikleme yapmıyor hocam. Ayrıca TIM3 pwm üretmiyor (osiloskopta görünsün diye pwm çıkışı almıştım ilk olarak), sadece compare işlemi yapıyor.CCR registerındaki eşleşme olduğunda tetikleme yapılıyor. Duty cycle değerine göre adc yi tetikliyor yani.

TIM3 duty cycle, TIM1 in yarısı olduğu için sürekli %50 durumunda çevrim başlıyor. (Duty cycle değeri %50 nin altında ise off periyodunun yarısında, %50 nin üstünde ise on periyodunun ortasında olacak şekilde ayarladım.)

"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

apsis

Aslında faz farkı ayarlanabilse tam istediğiniz gibi olacak.

Bu işi TMS320F'lerde çok güzel yapmışlar. İstediğin gibi faz farkı ayarlanabiliyor ve çok gelişmiş timer pwm donanımı var. ST'deki gibi adc'ler timer'lar ya da PWM'lerin clocklarından tetiklenebiliyor.
"Makineye Beyin" MEKATRONİK

quarko

Alıntı yapılan: apsis - 20 Ağustos 2019, 19:21:44Aslında faz farkı ayarlanabilse tam istediğiniz gibi olacak.

Bu işi TMS320F'lerde çok güzel yapmışlar. İstediğin gibi faz farkı ayarlanabiliyor ve çok gelişmiş timer pwm donanımı var. ST'deki gibi adc'ler timer'lar ya da PWM'lerin clocklarından tetiklenebiliyor.

Haklısınız hocam. C2000 lerdeki pwm ve adc modülleri o kadar harika tasarlanmışlar ki, tam olarak güç elektroniği uygulamaları hedeflenmiş. ST bu konuda biraz daha geride. STM32F3 serisi veya yeni çıkan STM32G0 ları tam incelemedim ama. O seriler genelde analog ve motor kontrol uygulamaları için üretildiğinden bu istediğim tarz özellikleri olabilir.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

Cemre.

#10
Doğru DMA ayarları ve TIM senkronizasyonu ile tek kanalda çipin native özelliği olmasa da asimetrik PWM üretmek mümkün STM32 ile, bu sayede tüm kanalları periyodun istediğiniz kısmına öteleyebiliyorsunuz.

Aşağıdaki resimde görülen sağdaki grafiği bu şekilde üretebiliyorsunuz. Solda görülen tek şönt ile üç fazın akımının ölçülmesi ile ilgili bir tekniği gerçekleştirebilmek için bu yapıyı kullanmıştım...
(STM32F030K6x)



apsis

Alıntı YapHaklısınız hocam. C2000 lerdeki pwm ve adc modülleri o kadar harika tasarlanmışlar ki, tam olarak güç elektroniği uygulamaları hedeflenmiş.

Ama pahalı işlemciler. Caydırıcı tarafı bu :).

@Cemre.  Merak ettim doğrusu. Nasıl yapılıyor? Biraz anlatabilir misin?
"Makineye Beyin" MEKATRONİK

quarko

Alıntı yapılan: apsis - 21 Ağustos 2019, 00:29:23Ama pahalı işlemciler. Caydırıcı tarafı bu :).

Evet fiyatları pahalı st ye göre. CubeMX te Cross Selector var hocam. oradan farklı firmalara ait mcu ları seçip, ST deki muadillerini bulabiliyorsunuz. En ucuzu ile iki kat fiyat farkı var neredeyse.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

Cemre.

Alıntı yapılan: apsis - 21 Ağustos 2019, 00:29:23Ama pahalı işlemciler. Caydırıcı tarafı bu :).

@Cemre.  Merak ettim doğrusu. Nasıl yapılıyor? Biraz anlatabilir misin?
Müsait bir zamanda detaylandıracağım

apsis

Alıntı YapEvet fiyatları pahalı st ye göre. CubeMX te Cross Selector var hocam. oradan farklı firmalara ait mcu ları seçip, ST deki muadillerini bulabiliyorsunuz. En ucuzu ile iki kat fiyat farkı var neredeyse.

Evet biliyorum.

Bende çift çekirdeklisi var(TMS320F28379D). Bazen ona bakınca ST'ye ekmek veresim gelmiyor. Ancak ARM'ın mimari yapısı daha çekici geliyor.
"Makineye Beyin" MEKATRONİK