PID Algoritmasında Röle kullanmak

Başlatan Mucit23, 22 Ocak 2024, 18:17:48

Mucit23

Selamlar

PID Algoritması ile daha önce motor kontrol uygulamaları yaptım. Gayet güzel sonuçlar alıyordum. Fakat çıktığı olarak ben genelde PWM Duty Cycle değerini arttırıp azaltıyordum. PID'de röle kullanımında işler nasıl yürüyor? Daha önce PID sıcaklık kontrol cihazları incelemiştim. Belirli periyotlarda Röleyi ON OFF yapıyor. Bu on off algoritması nasıl işliyor sözlü olarak anlatabilecek olan var mı?

Erol YILMAZ

PID, Çıkış gücünü %40 olarak ayarladıysa,,

Çıkış periyodu : 5 sn ise;

5 sn x 40% = 2 sn ON + 3 sn OFF

Çıkış verirsin olur biter.

Bu 5 sn büyük zaman sabitli sıcaklık kontrolcüler için kabul edilebilir bi değerdir.
Bu süreler Elbette motor için olmaz.

Mucit23

Yahu ben niye kafayı karıştırıyorum ki. Aynen öyle abi. Yine PWM gibi düşünmek gerekiyor. Motor sürerken Frekans diyelim ki 10Khz ise T=0.1ms olur. Burada ise periyodu T değerini 5000ms yaparsam aynı şekilde çalışır. Timer PWM donanımında Prescaller ve Periyot değerlerini bu düşük frekanslarda çalışacak şekilde ayarlarsam sanırım olur.

DaRt

PWM donanımı düşük frekanslara izin veriyorsa olur. Ben en son yaptığım PID ve 2 KW ısıtıcı içeren sistemde PWM donanımı düşük frekanslara izin vermediği için 10 HZ timer interrupt ile yaptım. 2,5 saniyeye de bir orana göre aç kapa yaptım. Ayrıca normal röle değil SSR kullandım.

Mucit23

Arkadaşlar burada algoritmada sorun yaşadım. Onu tam oturtamadım. Bunu anlatabilecek birileri var mı? Bu sistemi denedim şuanda.

Daha önce hiç kullanmadım ama mantık olarak şöyle bir yapı yürüttüm.

PWM donanımının periyodu 5 saniye. Burada PID algoritmasına göre bir fonksiyonum hata değerine göre bir çıkış üretiyor.

PID_Output=PID_Compute(Current_Val,Set_Val);

Bu fonksiyon belirli bir pencerede çıkış üretiyor. Bunu ben belirliyorum(+-500, +-1000 gibi) PID Fonksiyonu hata değerine göre çıkışı arttırıyor yaza azaltıyor. KP,KI ve KD katsayıları, PID fonksiyonunun  çıkışının nasıl değişeceğini belirliyor.

Şöyle bir sıkıntı yaşıyorum.

PID fonksiyonu Okunan değer < Set değer olduğu sürece pozitif bir çıkış üretmeye başlıyor. Eğer ısıtıcı gibi geç tepki veren bir donanımla çalışıyorsa PID çıkış değeri artıyor artıyor onunda pencere ile belirlediğim değere ulaşıyor. Bu sırada PWM değeri %100 oluyor.

Eğer okunan değer ile hedef değer arasındaki fark çok yüksek ise zaten %100 olması lazım bunda da sorun yok.

Ama sorunum şu ki Set değer ile okunan değer arasındaki fark azalınca sistemin on off rutinlerine başlaması lazım. Duty değeri okunan değere göre belirli bir yerde olması lazım.

Benim uygulamada okunan değer set değere ulaşınca pwm duty düşmeye başlıyor. Hedef değere ulaşıncaya kadar %100 çalışıyor. Aslında on off sistem gibi çalışıyor. Burada PID çıkışının PWM donanımı ile nasıl bir implementasyon yapılması gerekiyor anlayamadım. Bunun bir algoritması var mıdır? 
 

alikeskinkilic

eğer sistemin yavaş ısınan ama kapattığında da bayağı bir süre ısıyı arttırmaya devam eden bir yapıda ise sadece P ile kontrol etmen daha iyi olur eksiği olursa eklemeyi yaparsın. pid yi tam kullanacaksan da  I nin altını azıcık kıs yavaş hareket eden sistemde periyodu çok hızlı ayarlarsan hatalarının toplamı çok büyür bu yüzden periyodunun süresini arttır .biraz düz mantık ama iş görür şöyle bir şey yapabilirsin rezistansa elektriği ver ve ısıtacağın yerden ölçüm alırken süre tut eğer istediğin çözünürlük her bir derece için yeterli ise bir derece arttığı anda geçen süreyi kabaca pid çevrimi olarak belirleyebilirsin
Hep meraktan

Okan AKÇA

Hata=set-ölçülen deger
P=hata x p katsayı

Pwm duty degeride 100 olsun
P katsayı 1

Set 50 ölçüm değeri 20 olsun
50-20 =30. P oransal=30x1=30
Pwm değerimiz bu sıcaklıkta %30 oldu.
Bu şekilde çalışarak set e paralel altında veya üstünde bir sonuç alınır.

Sisteme integral katalım
I katsayı 0.1 olsun
Integral 5sn de bir sisteme etki etsin.
Her 5 sn de bir
I +=hata * I katsayı çarparak integrali toplayalim

Şimdi pi sisteminizin formülü
Pi=p+i  oldu

İntegral katsayısı ve örnekleme zamanını uygun değerlere ayarladınız an sistem istenilen sıcaklıkta çalışacaktır.
Ben olsam  katsayı değerlerini en küçükten ayarlar sistemi izleyerek yavaş yavaş değerleri arttırır ve en hızlı tepki verdiği yerde bırakırdım.

arci03

Merhaba;
kendi kuluçka çalışmam için resistans kontrolünü PI ile yaptım.ısının üretilmesi ve algılanması arasındaki problemi bende yaşadım hedef değere ulaşınca sistemdeki çıkışın sbit dahi olsa ısı artmaya ve bu seferde cıkışın düşme eğilimi başlıyor ve gene gecikme sebebi ile fazla düşüp tekrar ısıtmaya başlayan salınım oluyordu.

sistemde integral katsayı değişimini 30sn olacak şekilde ayarladım bu süre boyunca ölçülen sıcaklık değerlerinin alt ve üst limitleri takip ettim bunun sebebi ise sistem ısınmada limite gelince ortamdaki kayıplar dan ötürü ısı dalgalanması yapıyor. hedef sıcaklıktaki değerden artı eksi 0.2 salınımı görmezden gelmek için 30sn lik süre içinde bu değerler arasında ise çıkışda değişiklik yapmadan devam ettirdim. eğer limitler aşılmış ise çıkışa hata payına göre %0.5 katsayı ile müdale ettim.

Oransal çıkış en başından beri sisteme müdale ediy ve hedef değere 2 derece kalasıya kadar %100 çıkış veriyor ardından son 2 derece kalada integrali çalıştırıyorum deneme yanılma ile zamanlama ve limit değerlerini buldum biraz zaman alıyor ama çalışıyor.

Epsilon

#8
Bu PID konusunda tasarımda yardımcı olan  ara bir program yokmudur.Örneğin ,Hangi konuda yardım istiyorsun ,"Bu konuda şunu seçebilirsin"diye.

Sonuçları girdiğinde'de  ,"Şu değeri değiştirmeli ve şunu yapmalısın " falan diye.
Yani bir tür yol gösteren ve yardımcı olan yazılım.
Yakında  "Yapay zekayle PID kontrol " diye birşeyler çıkar (Yada zaten vardır da ben bilmiyorum)
*Konu hakkında hiçbir bilgim  olmadığından soruyorum

arci03

otomatik olarak kazanc ları hesaplayan ısı kontrol sistemleri var.

Mucit23

Anladığım kadarıyla burada PID ye gerek yok. P veya PI yapmak yeterli oluyor. Bende Hata ve Integral katsayıları da çok fazla olduğundan dolayı sistem çok hızlı limitlere ulaşıyor. Bunu düzeltmem gerekiyor. Türev çarpanlarını iptal edeceğim. Buna da gerek yok.

kimlenbu

Öneri :

Röle takılı kalırsa veya bozulursa sonuç felaket olur. Bence ayrıca düşük ve yüksek değer alarmları da konulması gerekiyor, hatta bir adım ötesi, röle çıkışlarının da kontrol edilmesi gerekiyor, aç sinyali verdiğinizde açılıyor mu, kapattığınızda kapanıyor mu diye. Sıcaklık sensörü de en az 2 adet olmalı, belirlenenden fazla bir fark oluşursa da alarma geçmeli.

5sn gibi süre için P yeter de artar bile, solid state relay kullanacaksanız o zaman PID olabilir, istenen hassasiyete bağlı.

STM32F730'da 16bit timer ile maksimum 40sn civarı alabiliyoruz, işlemci hızına göre değişmekle birlikte 1sn'lik interrupt yaratıp harici bir sayaçla istenen sürelerin elde edilmesi iyi olur.

Mucit23

@kimlenbu Hocam şuan için röle ve SSR ikilisi bağlı ama normalde SSR'i basit bir transistör çıkışıyla sürebiliyoruz. Şuan için Kontrol işlemini SSR ile yapıyorum.

@Okan AKÇA
Burada bir ev tipi masaüstü fırında birkaç deneme yaptım. PI gibi kontrol sistemleri yeterli oluyor ama osilasyon değerim çok yüksek oluyor. 100 derece gibi bir sıcaklığa ayarlıyorum sistemi +-20 derece oynuyor. Kabul edilebilir değil

Benim PID algoritmam aşağıdaki gibi.
float PID_Compute(float Input, float SetPoint){
	float output;
  float error = SetPoint - Input;
	
	outputSum += (ki * error * SampleTimeInSec);
	output = outputSum + (kp * error);
	
	if(output > outMax){
			outputSum -= output - outMax; 
			output = outMax;
	}	
	else if(output < outMin){
			outputSum += outMin - output; 
			output = outMin;
	}
	
	return output;
}

PID Fonksiyonunun limitleri +-100 olarak belirledim.

PID çıkışını PWM registerine de aşağıdaki gibi yansıtıyorum.
  PID_Output=PID_Compute(Temp_Value,Set_Val);
				
				Timer_Val+=PID_Output;
				
				if(Timer_Val>10000)Timer_Val=10000;
				if(Timer_Val<0)Timer_Val=0;			
        TIM2->CCR4=Timer_Val;

PWM donanımının periyodu T=5 sn. ARR max değeri için 10000 yazmak gerekiyor. Burada algoritmayı da yanlış kuruyor olabilirim. Sample Time değerim ise 1 sn. Yani 1 sn aralıklarla sıcaklık okuyup PID işlemlerini yapıp çıkış değerini belirliyorum.

Hazır PID sıcaklık kontrol cihazlarını inceledim. Onlarda şöyle bir mantık var. Eğer set değeri ile ölçülen değer arasındaki fark yüksek ise Çıkışı %100 açıyor. Hata farkı azaldıkça çıkışı % olarak azaltmaya başlıyor. Dolayısıyla Sistem salınıp yapmak yerine yavaş yavaş set değerine yaklaşıyor belirli bir hata ile kalıyor. Bunu nasıl yapıyorlar bilmiyorum ama bizim kurduğumuz standart PID mantığında Ölçülen > Set olmadıktan sonra çıkış değeri azalmıyor. Algoritma olarak mümkün değil çünkü integral katsayısından dolayı çıkış değeri ölçülen<Set olduğu sürece artıyor.  Ölçülen>Set olunca integral ve Hata oranında çıkış azalmaya başlıyor. Sistemde katsayılar düzgün ayarlansa belki bu böyle olmayacak ama bi türlü doğru katsayıları bulamıyorum ve sistem sürekli osilasyona girip +-20 derece gibi salınım yapıyor.


Hızlı Tepki veren Motor gibi sistemlerde PID ile gerçekten güzel işler yapmıştım ama yavaş tepki veren sistemlerin mantığını henüz çözemedim. 

Okan AKÇA

Sn de bir oku ancak integrali daha uzun sürede örnekleme ye tabi tut veya integral çarpanıni çok küçük tut. Ve integrali sınırla 0 altına inmesin ve çıkışın %70 geçmesin

devrecii

#14
Alıntı yapılan: Mucit23 - 04 Mart 2024, 18:57:33Hazır PID sıcaklık kontrol cihazlarını inceledim. Onlarda şöyle bir mantık var. Eğer set değeri ile ölçülen değer arasındaki fark yüksek ise Çıkışı %100 açıyor. Hata farkı azaldıkça çıkışı % olarak azaltmaya başlıyor. Dolayısıyla Sistem salınıp yapmak yerine yavaş yavaş set değerine yaklaşıyor belirli bir hata ile kalıyor. Bunu nasıl yapıyorlar bilmiyorum ama bizim kurduğumuz standart PID mantığında Ölçülen > Set olmadıktan sonra çıkış değeri azalmıyor. Algoritma olarak mümkün değil çünkü integral katsayısından dolayı çıkış değeri ölçülen<Set olduğu sürece artıyor.  Ölçülen>Set olunca integral ve Hata oranında çıkış azalmaya başlıyor. Sistemde katsayılar düzgün ayarlansa belki bu böyle olmayacak ama bi türlü doğru katsayıları bulamıyorum ve sistem sürekli osilasyona girip +-20 derece gibi salınım yapıyor.

Türevi alıp güçten çıkarma işlemi yapmalısın bu nedenle olmuyor bence. Yada yeterli değil