Universal Havya Kontrolcüsü Tasarımı

Programın tamamını paylaş Ahmet, yoksa verdiğin değişken tiplerine göre INF çıkmaz. Bir de aynı tip kullanmaya özen göster. Ya herşey float olsun yada herşey double olsun.
 
Bu gün PID bitmesi lazım başlayalım.
C++:
double mn = 0;
double mx = 60000;
double lTime = 0;
double errSum = 0;
double lErr = 0;

double Kp = 45;
double Ki = 26;
double Kd = 40;
void PID() {
  unsigned long now = millis();
  double timeChange = (double)(now - lTime);
  double error = 240 - c;
  errSum += error * timeChange;
  errSum = constrain(errSum, mn * 1.1, mx * 1.1);
  double dErr = (error - lErr) / timeChange;
  double newOutput = (Kp * error + Ki * errSum + Kd * dErr);
  double output = constrain(newOutput, mn, mx);
  lErr = error;
  lTime = now;
  analogWrite(0, output);
  Serial.println(output);

}

Şöyle bir PID başlangıcı yaptım ama PID değerlerini nasıl hesaplayacağımı bilmiyorum.
MATLAB için PID kısmı var ama beceremedim pek kullanmayı.
 
PID ile birlikte akım sınırlama da yaptık.
İsteyen istediği akımda adaptörü kullanabilir artık.
Bu adaptör akım değeri ısınma süresi ile doğrudan orantılı.
 
Amacım -->Bu<-- kullanarak devreyi performans kayıpsız çalıştırabilmek.
100Hz pwm count 52k 3.9A çekiyor.
Isınma süresi benim hoşuma gitti ama ben düğmesine bastım elimi çekene kadar hazır olsun diye bir beklenti varsa hem adaptör boyutu büyeyecek hemde software ciddi değişikliğe uğrayacak çünkü pwm count 52k üstüne çıktığında sıcaklık hesaplamaya zaman kalmıyor.
 
Amacım -->Bu<-- kullanarak devreyi performans kayıpsız çalıştırabilmek.
100Hz pwm count 52k 3.9A çekiyor.
Isınma süresi benim hoşuma gitti ama ben düğmesine bastım elimi çekene kadar hazır olsun diye bir beklenti varsa hem adaptör boyutu büyeyecek hemde software ciddi değişikliğe uğrayacak çünkü pwm count 52k üstüne çıktığında sıcaklık hesaplamaya zaman kalmıyor.
2-3 dk bekletmesin Ahmet. 20-30 sn benim açımdan uygundur. Hatta 1dk ya bile razıyım.
 
Ne kadar akım o kadar hızlı ısınma abi.
Dersen ki ben 10A adaptörü koyacak kutu basarım/bulurum ısınma süresi 5-6 saniye max.
Benim için sorun değil. Herkesin alabileceği bir şey olsun. Yani 10 ampere göre ayarlarsın, adam 5 amper adaptör koyar, sonrada devre akım çekeceğim diye adaptöre yüklenirse sıkıntı olur. Voltaj çökmesi filan olmayacak şekilde hallet işi. Ben muhtemelen trafo ile kullanırım. İstasyonun oynamaması için ağırlıkta yapar hem trafo.
 
Benim için sorun değil. Herkesin alabileceği bir şey olsun. Yani 10 ampere göre ayarlarsın, adam 5 amper adaptör koyar, sonrada devre akım çekeceğim diye adaptöre yüklenirse sıkıntı olur. Voltaj çökmesi filan olmayacak şekilde hallet işi. Ben muhtemelen trafo ile kullanırım. İstasyonun oynamaması için ağırlıkta yapar hem trafo.
Amacım herkesin elindekini değerlendirmesi.
Çeşitli hazır projeler gibi bu kullancaksın şartı koşmak benim ilkelerime aykırı.
Elinde 5A 24V'u olan birisi normal ısınma süresinden 3-4 kat fazla bekler ama yine kullanır.

Bunlar kalibrasyon kısımları bunları %20'lik kısıma atıyorum.
%80 dilim Sıcaklık okuma PID ve minimal sıcaklık fırlaması.

%20lik kısmı forumdaki herkes yapabilir olacak.

Birde süsleme kısmı var. bir yandan UF2(USB FLASH FORMAT) C# eklentisi üstüne çalışıyorum dediğim gibi firmware'da kullanıcıyı fıldır fıldır gezdirmeyeceğim kullanıcı sadece UF2 dosyasını seçip yükle diyip yükleyecek sonra gerekli ayarlarlarını yapıp başlayacak kullanmaya.
 
PID BITTI.
300 DERECE USTUNDE BIRAZ FAZLA COKUYOR PID 300 DERECE USTUNDE COK IYI CALISMIYOR.
real örn:
311 set edili 311-313 arası geziyor geniş bit metal dokundurduğumda 307'ye kadar çöküyor tekrar set değerine gelmesi nerdeyse 20 saniyeyi buluyor bunu tolere etmek için tekrar pid düzenlediğimde asıl kullanım aralığı 190-260 aralığında duramamaya başlıyor feda edeceğim kısım +300 derece kısımı.

310 derece lazım olduğunda 305 olması bizim için çok bir anlam ifade etmez diye düşünüyorum.

Videolar gelecek...
 
Sende güçlü 24 V kaynak yok muydu Ahmet? Toparlama süresinin uzun olması akımın düşük olmasındandır.
 
Elinde MAX6675 olan biriside testler yaparsa güzel olur.
Çünkü op-amp gerçekten çok uğraştırdı ve sorun çıkarmaması konusunda pek garanti veremem.

Şimdi felaket seneryolarıma geçelim.
OP-AMP bozuldu ve 0V okuyoruz.
Bizim PID algoritması da sıcaklık yükselmiyor diye en full ayarda reziztansı sürüyor.
Reziztans geldi 500 derece nalları dikti, gitti 500-600 lira.

PID algoritmasına biraz ipi gevşek zaman vermek lazım.
Set edilen + 20 saniye içinde gelmediyse sürmeyi bırak gibi.
 
Sende güçlü 24 V kaynak yok muydu Ahmet? Toparlama süresinin uzun olması akımın düşük olmasındandır.
Kullandığım kaynak çok rahat 10A verebiliyor fakat ben PWM'i 52k ile sınırladım.
daha fazlası hesaplama zamanıma yetmiyor.

PWM count 52k iken 3.9-4.050 civarında çekiyor.

Software'ı anlaşılır hale getirip atacağım daha gözünü kırpmadan 10 15 hata bulursun abi.
 
Ben evde benim havyayı 350 dereceden aşağı kullanmıyorum. Helede anakart ile uğraşıyorsam 450 dereceye set ediyorum, yoksa lehim erimiyor. Sen 300'ün üstü stabil değil diyorsun. Eğer benim havya 400 gösterip 300 ayarlamıyorsa senin 300 bize yetmez.

Çok da kasma akşama yetiştireceğim diye. Sonuç iyi olmadıktan sonra önemi yok yetişmesinin. Sen zaten kendini kanıtladın. Yavaş yap, sağlam yap.
 
Ben evde benim havyayı 350 dereceden aşağı kullanmıyorum. Helede anakart ile uğraşıyorsam 450 dereceye set ediyorum, yoksa lehim erimiyor. Sen 300'ün üstü stabil değil diyorsun. Eğer benim havya 400 gösterip 300 ayarlamıyorsa senin 300 bize yetmez.

Çok da kasma akşama yetiştireceğim diye. Sonuç iyi olmadıktan sonra önemi yok yetişmesinin. Sen zaten kendini kanıtladın. Yavaş yap, sağlam yap.
JBC uç 400 dereceden sonra kızarmaya başlıyor ne kadar sağlıklı bilmiyorum.

Ve 300ün üstünde gezme aralığı en geniş bakışla ±5 derece. bazen set ettiğin 320 325 oluyor veya 315 oluyor. tabi bunlar yavaş gezinmeler 320'den 325e çıkması 30 saniye sürüyor nerdeyse.
PID üstüne çalışmaktan beynim bulandı.
Bir bu haline bakalım yazılımın iyileştirmeler yapabilir miyiz?
 
C++:
float       adc   = 0.0;
const float cpu_v = 3.30;
const int max_adc = 4096;
float       adc_v = 0.0;
float           c = 0.0;

int state = 0;//LAZIM OLUR DIYE BURDA

const int numReadings = 20;
int readings[numReadings];
int readIndex         = 0;             
int total             = 0;                 
float average         = 0;

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
  pinMode(A0, INPUT);
  pinMode(1, INPUT);
  analogWriteResolution(16);
  pinMode(0, OUTPUT_8MA);


  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
  }
}

void loop() {

  if(digitalRead(1) == LOW){
    total = total - readings[readIndex];
    readings[readIndex] = analogRead(A0);
    total = total + readings[readIndex];
    readIndex = readIndex + 1;
    if (readIndex >= numReadings) {
      readIndex = 0;
    }
    average = total / numReadings;
    adc_v = average * (cpu_v / max_adc);
    c = adc_v * 290, 32;
    c = c - 7,6;//KALBRASYON -
    c = c + 0; //KALIBRASYON +
    Serial.println(c);
  }

    PID();
}

double mn     = 0;    //MIN PWM COUNT
double mx     = 52000;//MAX PWM COUNT
double lTime  = 0;
double errSum = 0;
double lErr   = 0;

double Kp = 70;//P
double Ki = 12;//I
double Kd = 66;//D

void PID() {
 
  unsigned long now = millis();
  double timeChange = (double)(now - lTime);
  double error = 251 - c;//set değişkeni buraya girecek
  errSum += error * timeChange;
  errSum = constrain(errSum, mn * 1.1, mx * 1.1);
  double dErr = (error - lErr) / timeChange;
  double newOutput = (Kp * error + Ki * errSum + Kd * dErr);
  double output = constrain(newOutput, mn, mx);
   analogWriteFreq(100);
   analogWrite(0, output);
}
 
Kısa bilgilendirme ve çalışma videosu.
 
Havya ucunu bağladığın mengenenin ve soğutucunun da ısıl bir kapasitesi (veya kayıpları) var.

Uç boştayken(sapa takılıyken) daha stabil olacaktır diye düşünüyorum.
 
Kullandığım kaynak çok rahat 10A verebiliyor fakat ben PWM'i 52k ile sınırladım.
daha fazlası hesaplama zamanıma yetmiyor.

PWM count 52k iken 3.9-4.050 civarında çekiyor.

Software'ı anlaşılır hale getirip atacağım daha gözünü kırpmadan 10 15 hata bulursun abi.

Bir anormallik var. 16 bit PWM için 52000, %79 duty cycle demek. Bu da 10 A veren bir kaynak için 7.9 A demektir. Ya sen akımı yanlış ölçüyorsun (multimetre ile ölçemezsin) yada bir yerlerde bir sorun var.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,955
Mesajlar
118,787
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top