FOC matematik fonksiyonları için optimum kod

Başlatan sedronjames, 17 Ekim 2022, 11:30:46

sedronjames

Merhaba forum

FOC kütüphanesi oluşturmaya çalışıyorum. STM32G4 serisi işlemci kullanacağım.

En basitinden  Clarke ve Park dönüşümlerini yaparak başlayacağım. Çevrim periyodu çok kısa olacağından dolayı bu fonksiyonların mümkün olan en hızlı şekilde çalışması gerekecek.

Basit birkaç adet 4işlemden oluşuyor bu fonksiyonlar. Ben bu fonksiyonları en optimum sürede çalışacak şekilde yazmak istiyorum.

Neleri araştırmam hangi yöntemleri kullanmam gerekir? Olmazsa olmaz diyeceğiniz tavsiyeleriniz nelerdir?

(G4 serisinde FPU birimi mevcut.)

apsis

İşlemlerini fixed point ile yap. FPU single precision ve bazı işlem basamakları double precision'a kayma yapabilir dolayısıyla loop sürelerin artar. Ayrıca o basit 4 işlem dediğin işin içerisinde açı hesaplama var. PID hesaplamaları, SVM vs var. Bunlar en temel fonksiyonlar.
Bunlar için bir math kütüphanesi oluşturman faydalı olacaktır.
"Makineye Beyin" MEKATRONİK

sedronjames

basit 4 işlem diyerek clarke ve park dönüşümlerini kastetmiştim. fixed point derken neyi kastettiniz tam olarak anlayamadım. faydalanabileceğim bir kaynak önerebilir misiniz?

sedronjames


kralsam

Fixed Point biraz google ile rahatlıkla bulabileceğin bir konu. Kodunu bu şekilde geliştirirsen taşınabilirliği de kısmen kolay olur.

Amacın tam olarak nedir? FOC da kullanılan blokların matematiksel kütüphanelerini oluşturmak mı?

Optimum süreden kastın işlemin çevrim süresi kısa olacak şekilde çalışacak kod yazmak amacındaysan trigonometrik fonksiyonları vb. LUT yapmanı öneririm. Bu da ram ve flash tüketimi demek. Ayrıca bitirdiğini düşündüğün her matematiksel bloğunu, tanımladığın veri aralığı için doğru sonucu verip vermediğini birim testlerle doğrulamanı öneririm. Aksi durumda komple bir kontrol model tasarımına başladığında hata bulman imkansıza yakın olur.

Kolay gelsin.

sedronjames

Amacım kesinlikle dediğiniz gibidir. FOC için matematiksel kütüphane oluşturuyorum. clark park svpwm gibi fonksiyonları içerecek

şu an clark park dönüşümlerini yazmaktayım. yazdığım fonksiyonların minimum çevrim süresine sahip olmasını istiyorum. dediğiniz gibi trigonometrik fonksiyonlar için look up table oluşturup kullandım. normal fonksiyonlar ile makro fonksiyonların çevrim süresini karşılaştırıyorum şu an.
 

kralsam

#6
Alıntı yapılan: sadogaffari - 19 Ekim 2022, 12:47:20Amacım kesinlikle dediğiniz gibidir. FOC için matematiksel kütüphane oluşturuyorum. clark park svpwm gibi fonksiyonları içerecek

şu an clark park dönüşümlerini yazmaktayım. yazdığım fonksiyonların minimum çevrim süresine sahip olmasını istiyorum. dediğiniz gibi trigonometrik fonksiyonlar için look up table oluşturup kullandım. normal fonksiyonlar ile makro fonksiyonların çevrim süresini karşılaştırıyorum şu an.
 
Deneysel ya da öğrenmek amaçlı yapıyorsan faydalı ama bir işte kullanmayı düşünüyorsan çok bu konuya takılman gerekmez diye düşünüyorum. Evet chip krizi var ama çok güçlü işlemciler var artık ve harcayacağın mühendislik ücretinden çok çok ucuza gelebilir. Bu anlamda en hızlı şekilde bitirmen yeterli olabilir.

Nacizane tavsiyem emeğini ürün tasarımı, algoritma tasarımı, sistem tasarımı, süreç tasarımı, deneyim tasarımı gibi konulara harcamalısın.
@edit: Yazım hatası düzeltildi.
İyi çalışmalar.

Tagli

CMSIS DSP kütüphanesi içinde Clarke ve Park dönüşümleri var. Fonksiyonlar hem f32, hem de q31 için sunulmuş.
https://arm-software.github.io/CMSIS_5/DSP/html/group__groupController.html
Gökçe Tağlıoğlu

sedronjames

Alıntı yapılan: kralsam - 19 Ekim 2022, 17:31:07Deneysel ya da öğrenmek amaçlı yapıyorsan faydalı ama bir işte kullanmayı düşünüyorsan çok bu konuya takılman gerekmez diye düşünüyorum. Evet chip krizi var ama çok güçlü işlemciler var artık ve harcayacağın mühendislik ücretinden çok çok ucuza gelebilir. Bu anlamda en hızlı şekilde bitirmen yeterli olabilir.

Nacizane tavsiyem emeğini ürün tasarımı, algoritma tasarımı, sistem tasarımı, süreç tasarımı, deneyim tasarımı gibi konulara harcamalısın.
@edit: Yazım hatası düzeltildi.
İyi çalışmalar.


Haklısınız. işlemcimiz 100mhz. motor çalışma frekansı 20khz. yani 50 mikro saniye içerisinde FOC için gerekli tüm işlemleri bitirmem gerekiyor. bu nedenle işin en başındayken ince eleyip sık dokuyorum. 20khz'lik adc çevrimi içerisinde bayağı bir işlem yapmam gerekecek. daha önceden de tecrübem yok. belki de 50 us fazla fazla yetecek 100mhzlik işlemcide bilemiyorum.

Emou

FOC konusunda fazla bir bilgim yok ancak CMSIS DSP içerisinde işine yarayacak fonksiyonlar varsa bir şans vermeni öneririm.

Matematiksel işlemler, FFT gibi konularda fonksiyonlarının performansını oldukça beğeniyorum. Ayrıca matematiksel işlemler için kesinlikle fixed point de bakmanı öneririm. Faydalı olur.

Önerim en yüklü olacağını düşündüğün işlemlere yönelik kod yazıp denetleyici üzerindeki performansını değerlendirmen olur. DWT birimindeki Cycle Counter register verisini kullanıp kodunun çalışma süresini ölçebilirsin.

Ayrıca G4 serisi yanlış hatırlamıyorsam 170MHz'de çalışıyor olması lazım. Siz mi düşük hızda çalışıtırıyorsunuz yoksa bilmediğim seri içerisinde düşük hızlı bir denetleyicileri mi var?