kıyılmış ac akım hesabı ?

Başlatan ilhan_mkp, 26 Haziran 2011, 15:51:17

z

Programda asagidaki 2 satirdan 2.si dikkatimi cekti.

              pid(outset,y);
              y:=Nonlinear(pidout,kd);  // Burada Nonlineer fonksiyonuna kd yerine Dt gondermek gerekiyor

              y:=Nonlinear(pidout,0.01); // Soldaki ornekte 0.01 sn gondermis olduk.

PID cevriminde sample alma suresi ne ise Nonlineer fonksiyonumda da bu sure aynen kullanilmak zorunda.

Nonlineer fonksiyonumuzda asagidaki gibi olsun.

function NonLinear(V,Dt:real):real;
begin
        i:=i+10*v*Dt;
        if i>=0 then result:=power(10,i/10)-1
        else result:=-power(10,abs(i)/10)+1
end;



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

http://hotfile.com/dl/128603560/f923a32/NonLinearPID.rar.html

function NonLinear(V,Dt:real):real;
begin
        i:=i+10*v*Dt;
        if i>=0 then result:=power(10,i/10)-1
        else result:=-power(10,abs(i)/10)+1
end;

şeklinde yaptım. Evet hızlandı. Ama kontrolün kararlılığında pek birşey değişmedi.
Kararlılığın , PID ile NonLinear fonksiyonunun aynı döngüde çağırılmasından kaynaklanan bir yanılgı olabileceği ihtimalini düşünerek , bir de timer opsiyonu ekledim.
PID ve NonLinear fonksiyonu  iki ayrı timer içerisinde işleniyor.
Hatalı bir değerlendirme olmaması için her iki zamanlayıcının zamanlamaları farklı. Böylece gerçek hayata biraz daha yaklaşabiliriz sanırım.

Klein

K ve Dt yi dışarıdan girilebilir yaptım. İlk değerleri sizin istediğiniz gibi 0.01 ve 10

http://hotfile.com/dl/128604429/b82b8ce/NonLinearPID.rar.html

z

Ben bu işten bir şey anlamadım.

Elektrik elektronik 4.sınıf öğrencilerinden kontrol hocalarına şöyle bir soru yöneltmelerini isteyeceğim.

Nonlineer sistemler PID ile kontrol edilebilirmi?

Belki de yıllardır ben olayı yanlış yorumladım. Belki de kitaplarda söylenen nonlineer sistemleri klasik kontrol sistemleri ile kontrol etmeye kalktığınızda elinizdeki güçlü toollar işe yaramaz. (Laplace vs)
Analizi son derece zordur deniyordur. Belki de ben bunu nonlineer sistemler klasik kontrol yöntemleri ile kontrol edilemez olarak öğrendim.

Yorum yapamayacağım.

Not: Elektronik yazarken L ve Ş harfi yan yana olduğundan yanlışlıkla eşektronik yazdım ve bu terim çok hoşuma gitti.

Bol eşektronikli günler.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

http://hotfile.com/dl/128657924/a1fa374/nonlinear_pid.pdf.html

Nonlinear PID ile ilgili bir makale.
Benim uyguladığım yöntem , yazarın I-PD diye tabirettiği , K ve D için girdi olarak set değerine ne kadar yaklaştık (error) bilgisi yerine , Ne verdik ,ne kadar değişim elde ettik  bilgisini kullanan yöntem.

Klein

Hocam!
sizin bir sinir testi programı vardı. Çift integratörlü olan.  Onun PID ile sabitlenip sabitlenemeyeceğini merak ediyorum. Boş zamanınızda onun modelini oluşturabilirseniz , denemeyi isterim.

z

Girdimiz Inp, Ciktimiz Out

Y=Y+(Inp*dt);
Out=Out+(Y*dt);

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Daha onceki nonlineer modelin PID kontrolunda, girise sabit degilde frekansi degisebilen sinus yada karedalga girmekde de fayda var.
Sistemi zorlamak adina bunu da denemelisin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

http://hotfile.com/dl/128756538/852764e/NonLinearPID.rar.html

function NonLinear(V,Dt:real):real;
begin
nlin:=nlin+v*Dt*k;
nlout:=nlout+nlin*Dt*k;

if nlout>=0 then result:=power(10,nlout/10)-1
else result:=-power(10,abs(nlout)/10)+1;
end;


Bu çift integratörlü olan. Çıkış gerlimimizde +-150mV civarında bir dalgalanma oluyor.  +-20V için bu dalgalanmanın kabul edilebilir diye düşünüyorum.

Girişe sinüs ya da kare dalga vermekten kastınız sanırım giriş referansımız.  Daha önceki bir uygulamada 5Hz sinüs vermiştik. Aynı şekilde bu dalgayı verebilirim. Frekansı yükseltemem ama düşürebilirim. Ayrıca scroll bar'ı  sağ sol tuşları ile ileri geri hareket ettirerek +- 1~2V  1-2Hz civarında dalga uygulama etkisi verebiliriz.

Çift integratörlüde bunu takipedebileceğini sanmıyorum. Ama tek integratörlü için mümkün olabilir. Bir deneyeyim.

ilhan_mkp

değerli üstatlarım dersime biraz daha çalışıp yanlışım varmı diye sormak istedim

şimdi ilk önce max akımı blmem gerekiyor bulmak için bir saykılı 180 derece tetikleyip true rms almalıyım

max akımda tepe değerini bulmalıyım

kıt matematiğimle anladığım kadarıyla sin(x).vpp=anlık değer

bu formül doğru işliyorsa kapasite alma esnasında her 1 derce artımında o derececeye kadar olan true rms
değerini 180 basamaklı tablmuza kaydetsek

bu durumda set değerine en uygun tetik açısını vermiz kolaylaşaçak çünkü x zamanda geçen akım belli

aldığımız geri beslemedeki  hatayıda tabloyu referans alarak daha kısa bir süreçte sıfıra yaklaştıracağız

tabi bu işlemleri atmega16 ile bascomda yapmaya çalışıyorum bascomun sin(x) komutuyla birazdaha ugraşmam gerekecek daha tam anlamıyla doğru sonuçlar alamadım işlemi radyan olarak yapıyor dereceden radyana çevirdim yine hesapmakinasıyla yaptığım değeri alamadım çözersem kod üzerinde tartışmak daha dogru olacaktır


Klein

sine_value=sin(sine_degree*PI/180)*pp;

PID konusu üzerine bu kadar tartışma yapılmışken, neden halen tetik açısını geri beslemesiz bir sistemden almayı düşünüyorsun?

ilhan_mkp

üstat set değeriz değiştiğinde ilk tetik acımızı nasıl belirleriz tablo bana baya mantıkı geldi

verdiğiniz formülü tam anlayamadım biraz acarak anlatırsnız çok memnun olurum sizin pid konusunda tartıştıklarınızı ben bellibir seviyeden sonrasını hiç anlayamadım






jackal183

Alıntı yapılan: ilhan_mkp - 20 Eylül 2011, 23:03:02
üstat set değeriz değiştiğinde ilk tetik acımızı nasıl belirleriz tablo bana baya mantıkı geldi

verdiğiniz formülü tam anlayamadım biraz acarak anlatırsnız çok memnun olurum sizin pid konusunda tartıştıklarınızı ben bellibir seviyeden sonrasını hiç anlayamadım

verilen formül sanırsam dereceyi radyana çevirip işlem yapmakta, program derleyicilerindeki sin() fonksiyonunun içerisine, istediğiniz değerin radyan karşılığını yazarsınız, 30 derece sinüs için, sine_value = sin(30); yazarsanız sonucu 0.5 almazsanız ama sine_value = sin(30*PI/180) yazarsanız( yani PI/6 ki radyan karşılığıdır) sonucu 0.5 olarak alırsınız

Klein

Alıntı yapılan: ilhan_mkp - 20 Eylül 2011, 23:03:02
üstat set değeriz değiştiğinde ilk tetik acımızı nasıl belirleriz tablo bana baya mantıkı geldi

verdiğiniz formülü tam anlayamadım biraz acarak anlatırsnız çok memnun olurum sizin pid konusunda tartıştıklarınızı ben bellibir seviyeden sonrasını hiç anlayamadım

fonksiyon kısmını "jackal183" açıklamış.
PID konusu şöyle nihayetlendi:
kaskat bağlı 2 integratörlü nonlinear bir sistemin dahi, PID ile kontrol edilebildiğini gördük. Sizin sisteminizdeki linearizasyon bozukluğu, son çalıştığımız eğri ile kıyaslandığında neredeyse Linear kalıyor. Zaten önceki simülasyonlar tam sizinn sisteminize uygun şekilde kıyılmış AC akımın dalga şekli temel alınarak yazıldı.

Tablo ilk bakışta mantıklı.
Ama kapalı çevrim yapmadığınız sürece, sistemin gerilimindeki değişimler, yükün direncindeki değişimler, başka cihazlardan kaynaklı sinüs bozulmaları , sıcaklık etkisi gibi etkenler , tetik açınızın değişmesine neden olur. Geri besleme almadığınız sürece sistemi stabil tutamazsınız.  Geri besleme aldığınız durumda da , yukarıda bahsettiğim parametrelere göre , tablonuzu yeniden hesaplatmanız gerekebilir.   

ilhan_mkp

#74
ustalar küçük bir deneme kodu yazdım ama anlamadığım bir durum var kod üzerinden konuşacak olurak


$regfile = "m16def.dat"                                     'atmega16
$crystal = 8000000
$hwstack = 90
$swstack = 120
$framesize = 90
$prog &HFF , &HC4 , &HD9 , &H00                             'fuse ayarları dahili 8mhz osc jtag off

'*******************************************************************************

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.1 , Rs = Portc.0       'lcd pin tanımlamarı

Config Lcd = 16 * 2                                         '16x2 lcd

'*******************************************************************************


Enter Alias Pina.4


Dim A As Single
Dim B As Single
Dim C As Single
Dim D As Single
Dim E As Single
Dim F As Single
Dim G As Single
Dim h As Single

Dim Idx As Word


Config Debounce = 30



Cls

Do


Debounce Enter , 0 , z , Sub


Loop
z:

For Idx = 1 To 180

A = Idx
b= Deg2rad(a)  'dereceyi radyana çevirdik
C = Sin(b)          'sinüsünü aldık
D = C * 311       'anlık değer
E = D * D           'anlık değerin karesi
F = F + E            'karelerin toplamı
Next

G = F / 180        'örnek adedine bölüm
H = Sqr(g)          ' kökünü aldığımız bölüm ve sonuç h
Cls
Locate 1 , 1
Lcd H

Return


tepe değerini 311 volt kabul edip 180 derecenin her 1 derecesi için anlık değerler alıp rms hesaplıyorum

for döngüsünü 180 adım çalıştırınca 219,909 değerini alıyorum

buraya kadar herşey normal 90 derecede kıydığımızı farzedip for döngüsünü 90 adım çalıştırınca 156,361 değerini alıyorum. burada yklaşık 110 almam gerekmezmi

110değerini 66 adım çalıştırınca veriyor

fomüllerdemi hata yapıyorum (ac akımın ve rms hesabının formüller)

yoksa programsal bir hatammı var