STM32 ile DENEYSEL ANEMOMETRE
Sinyallerinizin doğru senkronizasyonu için, TMS320F PLL...
TMS320F ile PLL Tasarımı
C2000 Kütüphaneleri Hakkında
Yazılımsal PLL (Phase Locked Loop) tasarımını MATLAB üzerinden gerçekleştirmiştim. Bundan sonraki aşamalarda tasarlanan PLL yazılımını, TI firmasının C2000 mikrodenetleyici ailesinden olan TMS320F28069M işlemcisi ile kullanılması amaçlanmıştır. Aşağıdaki görselde projede kullanacağım TI F28069M Launchpad geliştirme kartı görülmektedir.
TMS320F28069M, Texas Instruments tarafından üretilen bir dijital sinyal işlemci (DSP) mikrodenetleyicisidir. TMS320F28069M, yüksek performanslı işlem gücü, hızlı veri işleme yeteneklerime sahiptir. Ayrıca geliştiriclere kolaylık sağlamak için bir dizi entegre geliştirme aracı ve yazılım kütüphanesiyle birlikte gelir.
Texas Instruments firması, C2000 mikrodenetleyici ailesinin güç elektroniğine yönelik aktif kullanımlarını kolaylaştırmak için çeşitli kütüphaneler sunmuştur. Yukarıdaki görsel incelendiğinde güneş panelleri, motor kontrolü ve dijital güç uygulamalarına yönelik kütüphanelerin bulunduğunu görebilirsiniz. Bu kütüphaneler ilgili konular üzerine genel konu anlatımlarını, tasarımları ve yazılımsal fonksiyonları içerir.
Yukarıda Solar sistemler için oluşturulan küütüphanenin pdf dosyasındaki bazı içerikleri verilmiştir. Bu dosyada MPPT, Park dönüşümü, PLL ve sinyal işleme gibi uygulamaların fonksiyonlarını ve bunların nasıl kullanılacağı anlatılmaktadır. PLL uygulaması gerçekleştirmek için ‘solar lib’ içindeki hazır PLL fonksiyonlarından nasıl kullanılması gerektiği pdf'te anlatılmaktadır.
Solar Lib ile Sinyal Üretimi
SolarLib’ içinde yazılımsal olarak sinüs, rampa vb. sinyalleri üretebileceğimiz hazır fonksiyonlar mevcuttur.
Bu kod parçasında, başlık dosyaları ve kütüphaneler dahil ediliyor. Ardından, SIGNAL_LENGTH, GRID_FREQ ve ISR_FREQUENCY gibi sabitler tanımlanıyor. ipcb ve x1 gibi IQ biçiminde değişkenler oluşturuluyor ve ipcb dizisi sıfırlanıyor. cpuTimer_Config işlevi, CPU zamanlayıcısını yapılandırarak kesme işlevini ayarlıyor. Main işlevinde, sistem kontrolü, kesme kontrolü ve zamanlayıcı tablosu başlatılıyor. RAMPGEN_IQ_init işlevi, Rampgen yapısını başlatırken Ramp.Freq, GRID_FREQ değeriyle ayarlanıyor. Ramp.Angle, 0 olarak ayarlanırken Ramp.StepAngleMax, ISR_FREQUENCY'ye bölünerek adım açısını belirlerleniyor.
Yanda kodun devamı yer almakta. Bu kod parçasında, cpu_timer0_isr adlı bir kesme işlevi tanımlanıyor. Bu işlev, cpuTimer0 kesmesi tetiklendiğinde çağrılır. CpuTimer0.InterruptCount değeri artırılır. RAMPGEN_IQ_MACRO(Ramp) işlevi ile RAMPGEN_IQ işlevi çağrılır, bu işlevde RAMPGEN_IQ yapısı (Ramp) kullanılarak bir adım ilerletilir ve yeni bir açı hesaplanır. ipcb dizisi için SINPU (sinüs fonksiyonu) işlevi kullanılarak sinüs sinyali hesaplanır. Kesme işlevinin sonunda PieCtrlRegs.PIEACK.all değeri PIEACK_GROUP1 olarak ayarlanır, bu da kesme işlevinin sonlandığını belirtir.
SPLL Uygulaması
SPLL_1ph_F.h ve SPLL_1ph_F.c dosyası içindeki kodlar düzenlendikten sonra bu modülü kullanmak için Solar kütüphane main içinde eklenir. Ayrıca sonuçları kaydetmek için Solar kütüphane içindeki datalogger kütüphanesi kullanılmaktadır. Şekilde struct ve buffer tanımlamalarına, konfigürasyonlara ek olarak şebeke ve kesme (interrupt) frekanslarının da bir makro ile tanımlandığı görülmektedir.
main fonksiyonunun içinde rampa, datalogger ve ve spll modüllerinin başlatıldığı (initialize) görülmektedir. Datalogger’daki giriş ve çıkışlar ayarlanıp, şebeke frekansı 50 Hz olarak ayarlanmıştır. Şekil 38’de bulunmayan sistem konfigürasyonlardı da main fonksiyonu içinde çağırılmaktadır. Interrupt frekansı 20kHz olacak şekilde yapılandırılmıştır. Şekilin en altında bulunan spll_uptade fonksiyonuna, belirlenen sönümleme katsayıları ( ve ) gönderilmiştir
interrupt içinde, spll fonksiyonu çağrılarak algoritmadaki hesaplar yapılmakta ve datalogger ile sonuçlar kaydedilmektedir.
SPLL Çıktısı
Sinüs şebeke giriş sinyali
Faz açısı (giriş)
Sin çıkışı
Cos çıkışı
Theta PLL çıkışındaki faz açısı
Öncelikle 50 Hz’lik bir sinüs olan şebeke sinyalimizi ve onun faz açısını görmekteyiz. SPLL çıkışında üç adet çıktı aldık. Bu çıktıları detaylı olarak örnekler ile açıklarsak:
Şebeke frekansında (örneğin 50 Hz) bir sinüs sinyali düşünelim. Bu sinüs sinyalinin anlık faz açısı, 0 ile 2π (radyan cinsinden) arasında değişecektir. Bu faz açısını tam olarak ifade etmek için sinüs ve kosinüs fonksiyonlarını kullanırız.
Sinüs fonksiyonu, bir açının sinüs değerini hesaplar. Yani, sin(x) = A/B, burada x açının değeri, A ise açının karşılık geldiği kenarın uzunluğu ve B ise hipotenüsün uzunluğudur.
Kosinüs fonksiyonu ise bir açının kosinüs değerini hesaplar. Yani, cos(x) = C/B, burada x açının değeri, C ise açının kosinüs değerini temsil eden kenarın uzunluğu ve B ise hipotenüsün uzunluğudur.
Şimdi, PLL'nin çıkışlarını ele alalım:
Cos[2] çıkışı, şebeke faz açısının kosinüs değerini temsil eder.
Sin[2] çıkışı, şebeke faz açısının sinüs değerini temsil eder.
İkisi bir arada kullanıldığında, sin ve cos çıkışları, bir açının tam olarak ifade edilmesini sağlar. Örneğin, cos[2] = 0.707 ve sin[2] = 0.707 ise, bu değerler birlikte ele alındığında, açının tam olarak 45 derece olduğunu ifade eder.
Bu şekilde, sin ve cos çıkışları, şebeke frekansındaki sinüs sinyalinin faz açısını tam olarak ifade etmek için kullanılır.
Theta[2] çıkışı, şebeke faz açısını temsil eder. Bu çıkış, bir açının değerini ifade eder ve genellikle radyan veya derece cinsinden ölçülür. Örneğin, theta[2] = 1.5708 radyan veya theta[2] = 90 derece olarak ifade edilebilir.
Bu çıkış, sin[2] ve cos[2] çıkışlarıyla ilişkilidir. Sin[2] ve cos[2] değerleri kullanılarak, trigonometrik fonksiyonlar yardımıyla hesaplanan şebeke faz açısı theta[2]'yi elde edebilirsiniz.
Theta[2] çıkışı, şebeke frekansındaki sinüs sinyalinin anlık faz açısını doğrudan ifade eder. Örneğin, bir sinüs sinyali için theta[2] çıkışı, sinüs dalgasının anlık faz açısını radyan veya derece cinsinden verir.
SPLL Çıktıları Hakkında
Girişteki faz açısı ile çıkıştaki faz açısı arasındaki karşılaştırma, PLL'nin performansını değerlendirmek için önemlidir. İdeal bir durumda, PLL'nin amacı girişteki faz açısını hassas bir şekilde takip etmek ve çıkışta aynı veya çok yakın bir faz açısı sağlamaktır.
Eğer girişteki faz açısı ve çıkıştaki faz açısı birbirine çok yakınsa, bu durumda PLL'nin iyi bir kilitleme performansı sergilediği söylenebilir. Bu, PLL'nin girişteki faz değişikliklerini hızlı ve doğru bir şekilde algıladığını ve çıkışta istenen faz açısını elde ettiğini gösterir.
Ancak, girişteki faz açısı ile çıkıştaki faz açısı arasında bir fark varsa, bu durumda PLL'nin kilitleme süresi, doğruluk veya istikrar gibi performans faktörleri değerlendirilmelidir. Faz açısı farkı, PLL'nin girişteki faz değişikliklerine ne kadar hızlı tepki verdiğini veya ne kadar doğru bir kilitleme sağladığını gösterebilir.
Bunun yanı sıra, faz açısı farkı, sistemin frekans bozulmalarına veya harmonik bozulmalara ne kadar duyarlı olduğunu da yansıtabilir. Eğer girişteki faz açısı ile çıkıştaki faz açısı arasında istenmeyen dalgalanmalar veya harmonik bozulmalar varsa, bu durumda PLL'nin filtreleme veya frekans algılama ayarları gözden geçirilmelidir.
Sonuç olarak, girişteki ve çıkıştaki faz açılarını karşılaştırarak, PLL'nin kilitleme performansını, doğruluğunu ve frekans istikrarını değerlendirebilirsiniz. İdeal durumda, giriş ve çıkış faz açıları birbirine çok yakın olmalıdır.
Girişin faz açısı ile çıkışın faz açısı karşılaştırıldığında kilitleme işleminin mükemmel olmadığını fakat istikrarlı bir şekilde çıkış fazının giriş fazını takip ettiği söylenebilir.
SPLL uygulaması için bir önemli konu da frekanslardır. Wn girişi, şebeke frekansının radyan/saniye cinsinden belirtilen değeridir. Bu değer, SPLL (Software Phase Lock Loop) modülüne, şebeke frekansının bilgisini sağlamak için kullanılır. Şebeke frekansı genellikle sabit bir değerdir, örneğin 50 Hz veya 60 Hz, ve bu değer radyan/saniye cinsinden ifade edilir.
Wo ise SPLL modülünün içsel bir değişkenidir ve anlık şebeke frekansını radyan/saniye cinsinden temsil eder. SPLL modülü, giriş olarak aldığı şebeke frekansı bilgisini kullanarak, Wo değerini günceller ve çıkışta kullanır. Wo değeri, gerçek zamanlı olarak şebeke frekansındaki değişimlere göre güncellenir ve SPLL'nin doğru kilitleme ve frekans takibi yapabilmesini sağlar.
Özetle, Wn girişi, sabit şebeke frekansının bilgisini içerirken, Wo değişkeni SPLL modülünün içindeki anlık şebeke frekansını temsil eder. Bu değerler, SPLL'nin doğru çalışması ve şebeke frekansını takip etmesi için önemlidir.
Wo ve Wn arasındaki ilişki, PLL'nin doğru çalışması için önemlidir. İdeal durumda, Wo ve Wn değerleri birbirine çok yakın olmalıdır. Bu, PLL'nin şebeke frekansını doğru bir şekilde takip ettiğini ve çıkışta doğru frekansı sağladığını gösterir.
PLL'nin temel amacı, girişteki şebeke frekansını takip etmek ve çıkışta aynı frekansı elde etmektir. Wo değeri, PLL'nin içsel bir değişkenidir ve anlık şebeke frekansını temsil eder. Wn ise giriş olarak aldığı şebeke frekansı bilgisidir.
İdealde PLL'nin çalışma prensibi, Wo değerinin Wn'ye tam olarak eşit olduğu durumdur. Bu durumda, PLL, şebeke frekansını tam olarak kilitlemiş ve çıkışta doğru frekansı sağlamış demektir.
Ancak, gerçek dünyada, şebeke frekansında değişimler ve dalgalanmalar olabilir. Bu nedenle, Wo ve Wn değerleri birbirine tam olarak eşit olmayabilir, ancak birbirine yakın olmalıdır. Bu durum, PLL'nin şebeke frekansındaki değişimlere hızlı bir şekilde tepki verdiğini ve çıkışta yakın bir frekansı koruduğunu gösterir.
Wo ve Wn arasındaki fark, PLL'nin frekans takibi yeteneklerini ve frekans hatasını yansıtabilir. Eğer Wo ve Wn arasındaki fark çok büyükse, PLL'nin frekans takibi zayıf olabilir ve çıkışta istenmeyen frekans sapmaları görülebilir.
Sonuç olarak, Wo ve Wn arasındaki ilişki, PLL'nin doğru kilitleme ve frekans takibi yapabilmesini yansıtır. İdeal olarak, bu değerler birbirine yakın olmalıdır, ancak gerçek dünyada küçük farklar kabul edilebilir. Farkın büyüklüğü, PLL'nin frekans takibi performansını değerlendirmek için dikkate alınmalıdır.
Uygulamadaki değişkenlerin Code Composer yardımı ile Live Expression’da anlık olarak görüntülüyoruz. Bu yöntemle Wo ve Wn değerleri incelendiğinde Wo değerinin Wn değerine yakın aralıkta takip ettiğini görmekteyiz. Bu da SPLL uygulamasındaki frekans takibinin mükemmel olmadığını fakat istikrarlı olduğunu gösterir.