Buck converter Akım ölçme sorunu.

Başlatan exmachine, 17 Ekim 2017, 12:03:25

exmachine

Merhaba arkadaşlar.

Girişi 36-72V, çıkışı ise 24V(maks. 20A)  olan MCU kontrollü buck converter üzerinde çalışıyorum. Anahtarlama frekansım 100Khz.
Sorun şu ki; akım kontrolünü yapamıyorum. Şönt(0.0015R) üzerindeki gerilimi opamp ile yükselterek akım ölçmeye çalışıyorum ama kullandığım opamplar(op-07,lm358 ) yeterince hızlı cevap vermiyor. Sizce ne tür bir opamp veya akım sensörü kullanmalıyım?


ustad

Hall effect akım sensörlerinden LTS-25 e bakabilirsiniz. <1us tepki süresi var.  Opamp için de Texas'ın Opa serileri uygun olabilir.

Erol YILMAZ

Akimi high side mi olceceksiniz? Low side mi?  Tavsiyem high side tarafindan olmasidir.

exmachine

Akımı high-side ölçüyorum.
@ustad önerdiğin hall sensör tabanlı akım trafosu güzele benziyor ama felaket pahalı. Eğer başka çare bulamazsam onu kullanacağım.

Erol YILMAZ


exmachine

Alıntı yapılan: Allegro - 18 Ekim 2017, 09:11:44
https://www.digikey.com/product-detail/en/pulse-electronics-power/PA1005-100NLT/553-1529-6-ND/2362941

Elimde buna benzer özelliklerde 1:40 pulse trafosu var. Yukarıdaki şemada gösterilen mantıkla bir deneme yapıp sonucu burada paylaşağım.

JOKERAS

Alıntı yapılan: exmachine - 17 Ekim 2017, 12:03:25
Merhaba arkadaşlar.

Girişi 36-72V, çıkışı ise 24V(maks. 20A)  olan MCU kontrollü buck converter üzerinde çalışıyorum. Anahtarlama frekansım 100Khz.
Sorun şu ki; akım kontrolünü yapamıyorum. Şönt(0.0015R) üzerindeki gerilimi opamp ile yükselterek akım ölçmeye çalışıyorum ama kullandığım opamplar(op-07,lm358 ) yeterince hızlı cevap vermiyor. Sizce ne tür bir opamp veya akım sensörü kullanmalıyım?

Hzlı Cevap vermiyordan kastınız nedir?
Opamp'ın hızlı cevap veremiyor olması çok zor.Alt tarafı 100Khz.
Tasarladığınız devreyi hızlı cevap versin diye değil,çıkış akımını okusun diye koyuyorsunuz.
Kaldıki Akım yükseltme devresi dediğiniz gibi yavaş kalıyorsa bunu okuduğunuz Adc
kanalı ve ilgili Kodunuz Kağnı arabası kalır.






exmachine

@Allegro Hocam önerdiğin tekniği kullandım ve işe yaradı. Çok sağol. Şu anda hassas bir şekilde akım kontrolü yapabiliyorum.

Akım trafosunu mosfetin girişine bağladım. Aslında daha önce de denemiştim ama trafonun çıkışına seri bağlanan shottky diyodu koymamıştım. Bundan dolayı trafo çıkışı eksiye de iniyordu.

@JOKERAS Ben sistemi ortalama akım kontrol tekniği ile kontrol ediyorum. PWM on süresinin tam ortasında akım ölçüyorum. Doğru ölçüm yapabilmem için opamp akım eğrisini düzgün bir şekilde dönüştürmeli. Örneğin band genişliği 600Khz olan OP-07 100Khz'lik sinyalden sadece 6 örnek alabilir ve bu benim işime yaramadı. (Son cümleden tam emin değilim, yanılıyor olabilirim:P )

JOKERAS

exmachine, siz işi halletiğinizi söylüyorsunuz.Sakıncası yoksa şemasını yayınlarmısınız?
Belki bize de faydası olur.















kapadokyali5042

#9
ACS 712 akım sensorunu kullanabilirsin.Bende buck converter calisiyorumda kafama takılanları sormak isterim Anahtarlama elemanını hangi yöntem ile sürüyorsun.Bobin ve kondansator degerlerin nelerdir.

exmachine

#10
Devrenin prensip şeması aşağıdaki gibidir. MCU olarak dsPIC33FJ06GS202A kullandım.
ADC0 ile akım, ADC1 ile gerilim ölçülüyor. PID kontrol ile çıkış gerilimi 24'e ayarlanıyor.
Akım ise elle ayarladığım değeri geçtiğinde pwm sıfırlanıyor(cycle by cycle).

Şimdi de girişteki 72 volttan MCU için nasıl basit bir şekilde 3.3V elde edebilirim onu düşünüyorum :)





JOKERAS

DsPicler'in içinde Smps yapısı hazır olanları vardı,öyle hatırlıyorum.
Eğer böyle bir Pic kullanırsanız ADC PID falan uğraşmazdınız.


Cycle By Cyle olmadıki sizin bu yönteminiz.
Akım Trafosundan Adc ile okuduğunuz değeri Pid Algoritmasıyla Toplayıp Error aldınız.
Bu sırada sayısız Cycle geldi geçti.


Pwm Sfırılanıyor diyorsunuz,Cycle By Cyle yapısında Pwm sıfırlanmazki.
Pwm oranı düşer.Bu durum için de ya çok hızlı işlemci yada Analog yapı gerekli.

Gerilimi sabit tutmak için Komparatör İnterrupt yapıp Pwm'i kapatırsanız daha hızlı olurdu.

Size zahmet  olmazsa yaptığınız Buck yapısını anlatabilirmisiniz?
Benimde ilgilendiğim ve uğraştığım konu onun için diyorum.Bizde faydalanalım.
Danke Schön:)






exmachine

#12
Sadece gerilim izlenip pid ile kontrol ediliyor, akım değil. Akım limit değeri geçtiğinde pwm bir periyot boyunca kapatılıyor.
Tabi bu işlem dahili hızlı komparatörlerle de yapılabilirdi. Onun üzerinde de çalışıyorum. Her neyse gelelim sistemin temel yapısına:

Buck converter smps topolojilerinin temel yapı taşıdır. Onunla ilgili kaynak bulmak kolay, hatta online hesaplama araçları bile var. Bu yüzden bu kısmı es geçiyorum.

buck converter ortalama ve tepe akım kontrol modları çalışma mantığı:
http://microchipdeveloper.com/pwr3201:buck-converter-average-current-mode
http://microchipdeveloper.com/pwr3201:buck-converter-peak-current-mode

https://www.youtube.com/watch?v=lMMB3FU5HrY
Yukaridaki videoda pid kompensatörün smps devreler için uygun olmadığı örneklerle anlatılmış. Fakat ben burada önerilen 2kutup-2sıfır ya da 3kutup-3sıfır kompensaötürün dijital olarak uygulanması hakkında bilgi sahibi olmadığım için pid tercih ettim.

Pid kontrolün algoritması basittir. Zor olan uygun katsayıları belirlemektir. Katsayıları belirlemenin en uygun yolu sistemin transfer fonksiyonu üzerinden hesaplama yapmaktır. Ancak özellikle de karmaşık sistemlerde bu her zaman mümkün olmayabiliyor. Neyse ki bizim sitemimiz nispeten basit bir sistem. Buck converter ile ilgili temel hesaplar ve sistemin transfer transfer fonksiyonunun çıkarılışı şu youtube kanalında çok güzel anlatılıyor:
https://www.youtube.com/user/katkimshow/feed?disable_polymer=1

Transfer fonksiyonu bilinen bir sistemi incelerken işin zor olan kısmını matlab vb. programlara bırakabilirsiniz.
Matlab'da pid tuning: https://nl.mathworks.com/videos/pid-controller-design-116783.html

Şunu hatırlatmakta fayda var; s domeninde elde edilmiş fonksiyonlar dijital ortama aktarılırken, örnekleme periyodu baz alınarak ayrıklaştırılır ya da  doğrudan z düzleminde tasarım yapılır. Açıkçası doğrudan z düzleminde tasarım noktasında pek fazla bilgim yok.
Pid kontrol ile diğer ayrıntılara girmeyeceğim çünkü bu tamamen farklı bir konu.

Şimdi de pid compensatörün dijital olarak uygulanmasını ele alalım.

Daha öncede dediğim gibi pid algoritması yapı olarak basittir. İnternette C ile yazılmış bir çok örnek var. Fakat buradaki kilit nokta, pid hesabı yapılırken kullanılan değişken türleridir. Eğer bu işi doğrudan float değişkenlerle yapmaya kalkışırsak, işlemci tüm hesapları istediğimiz zaman aralığında yapamaz. Bunun için Fixed point veri tiplerini ve işlemcimizin eğer varsa(ki çoğunda var) dahili donanımsal çarpma modülünü kullanmalı veya DSP motoru barındıran bir MCU seçip tüm hesapları DSP motorunun üstüne yıkmalıyız.

integer-fixed bağıntısı: http://microchipdeveloper.com/dsp0201:numerical-formats

Fixed point veri tipleri ve bunlarla yapılan işlemler ile ilgili bazı videolar:
https://www.youtube.com/watch?v=S12qx1DwjVk
https://www.youtube.com/watch?v=npQF28g6s_k&t=172s

Eğer pid hesabını DSP modülünün yardımıyla yapacaksanız şurada çok ayrıntılı bir şekilde adım adım anlatılmış(dPIC serisi için):
http://microchipdeveloper.com/pwr3201:dspic-dscs-implementation

Yazılımı C dili yapmak istiyorsanız microchip XC16 compiler ile birlikte gelen dsp kütüphanesinde bulunan hazır pid fonksiyonu kullanarak yapabilirsiniz. Bu fonksiyonla ilgili örnek uygulama ve kullanım yapısı XC16 derleyicinin kurulu olduğu dizinin içindeki doc klasöründe bulunuyor.
sizin tek yapmanız gereken, değerleri fonksiyona parametre olarak girmek, geri kalanı fonksiyon hallediyor.

Yok ben kendi pid fonksiyonumu yazacam derseniz, XC16 derleyicinin DSP modülüyle ilgili "builtin" komutları da var. Böylece C dili içinden kolayca DSP çekirdeğine erişilebilinir.

DSP assembly komut seti ve C dili için Builtin fonksiyonlar ve kullanım yapıları şu dökümanda anlatılıyor:
http://ww1.microchip.com/downloads/en/DeviceDoc/70157F.pdf

Yukarıda anlattıklarım hep microchip DSP üzerineydi ama olayın temel mantığını kavradıktan sonra her çeşit MCU ile yapılabilir.
Microchip'in DSP'leri piyasadaki rakiplerine kıyasla biraz dandik olmasına rağmen özellikleri saymakla bitmiyor. Ben acemi olduğum için bundan başladım.

Şimdilik bu kadar.

volkanunal

Alıntı yapılan: exmachine - 19 Ekim 2017, 15:01:17
Devrenin prensip şeması aşağıdaki gibidir. MCU olarak dsPIC33FJ06GS202A kullandım.
ADC0 ile akım, ADC1 ile gerilim ölçülüyor. PID kontrol ile çıkış gerilimi 24'e ayarlanıyor.
Akım ise elle ayarladığım değeri geçtiğinde pwm sıfırlanıyor(cycle by cycle).

Şimdi de girişteki 72 volttan MCU için nasıl basit bir şekilde 3.3V elde edebilirim onu düşünüyorum :)





Merhabalar devre de 72volt çıkış alabilmek için ne gibi değişikliğe gidilmeli acaba , akım ve voltaj ölçümü değil de , 36-72 giriş , 72 dc çıkış olarak
Primum nil nocere

exmachine

Alıntı yapılan: volkanunal - 20 Ekim 2017, 12:50:52
Merhabalar devre de 72volt çıkış alabilmek için ne gibi değişikliğe gidilmeli acaba , akım ve voltaj ölçümü değil de , 36-72 giriş , 72 dc çıkış olarak

Bunun için Boost Converter konusunu araştır. (Tabi eğer izolasyon şart değilse)