Marlin ile PID autotune

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
24,332
Bugün benim 3B yazıcının ısıtıcısını açtım ve ısınma grafiğini takip ettim. Hedef sıcaklık ayarı 190 derece, ama görüldüğü gibi ilk yükselmede 10 derecelik bir overshoot var.

1724318437506.png
 
Şimdi Marlin firmware'in desteklediği M303 komutu ile PID autotune yapacağım. Şu anda kullanılan PID katsayıları, daha önce hotend'e takılı olan 100k NTC ye göre. Ama şimdi ben oraya daha hızlı tepki veren PT1000 taktım.

Mevcut PID katsayıları:

C++:
// Biqu H2
#define DEFAULT_Kp 8.43
#define DEFAULT_Ki 0.35
#define DEFAULT_Kd 50.90
 
Aşağıdaki Marlin sayfasında M303 ün nasıl kullanılacağı var


Sistemdeki ilk extruder için 250 dereceye kadar 8 tane döngü yap dedim. Bir süre sonra ilk döngü sonucu çıktı. 8 tane daha çıktıktan sonra bunların ortalamasını yazması lazım.

1724319074042.png
 
Tüm döngü sonuçları ve önerilen yeni PID katsayıları da çıktı

1724319399059.png


Bu sırada yapılan döngünün grafiği de şöyle

1724319542685.png
 
Yeni katsayılar. Şimdi bu katsayıları firmware'e yazıp hotend soğuduktan sonra tekrar 190 dereceye çıkartacağım. Bakalım overshoot sorunu giderildi mi.

C++:
// Biqu H2
#define DEFAULT_Kp 13.34
#define DEFAULT_Ki 0.68
#define DEFAULT_Kd 65.91
 
Hmm, zerre kadar değişiklik yok :kizgin1:

1724320342143.png
 
Haaa tamam, EEPROM özelliğini kullandığım için PID katsayılarını EEPROM'a kaydediyor bu ve onları kullanıyor. Yani hala eski PID katsayıları kullanılıyor.

Parametreleri factory reset yapıp EEPROM'a kaydettim.

1724320542090.png

Sonra da ayarları geri okudum

Şu anda EEPROM'da doğru ayarlar var

1724320588925.png
 
Yeni PID katsayıları ile de hiç fark yok. Ama tabi PID autotune'un hedefi nedir bu da önemli. Belki 10 derece overshoot kabul edilebilir olarak programlanmış olabilir.

Aslında benim için de 10 derece overshoot önemli değil, ama yazdırma işleminin başlaması için sıcaklığın oturması bekleniyor, o yüzden ben de sıcaklığın en kısa zamanda oturmasını istiyorum.

1724322661026.png
 
Biraz D ye abandım, 150 yaptım, daha hızlı oturuyor gibi. Ama hala 10 derece overshoot var

1724326834232.png
 
PT1000 in dışındaki muhafaza kılıfı büyükse ısıl akümülasyon sebebiyle sıcaklığı gecikmeli okuyor olabilir.
 
Hocam bence integral bileşeninin çıkışa maksimum etkisini kısıtlamalı, katsayısı değil ama çıkışa etkisinin max değeri. Uzun sürede ısındığı için hedef sıcaklığa yaklaşıldığında veya gelindiğinde p ve d bileşenleri alıp başını gidmiş olan integral bileşenini telafi edemiyor olabilir. Malum, çıkış negatif olamadığı için hatanın pozitif veya negatif olmasına göre farklı değerler de kullanılabilir.

Doğrudan termostat gibi kullanınca nasıl oluyor? Termal kütle büyükse pid gerekmez gibi geliyor bana.
 
Termal macunun faydas oldu, overshoot 10 den 8 lere düştü ...

C++:
// Biqu H2
#define DEFAULT_Kp 14.36
#define DEFAULT_Ki 0.80
#define DEFAULT_Kd 64.64
 
@semih_s termal kütlesi piyasadaki yaygın hotendlerden farklı değildir, boyut olarak vs aynı. Sanırım PID mutlaka gerekli, yoksa sadece on/off kontrolü yaparsam overshoot çok daha fazla olur.
 
Şimdi 190 dan 80 e indirdim, undershoot 1 derecenin altında. Herhalde soğuma hızı, ısınma hızından çok daha yavaş olduğu için?
 
@semih_s termal kütlesi piyasadaki yaygın hotendlerden farklı değildir, boyut olarak vs aynı. Sanırım PID mutlaka gerekli, yoksa sadece on/off kontrolü yaparsam overshoot çok daha fazla olur.
Pardon hocam ben yatak sıcaklığı için sanmıştım. Hotend pidsiz olmaz bence de.

İlk overshoot sonrasında sıkıntı olmuyor değil mi? İntegral bileşeni ile ilgili bahsettiğim konu jbc klonuyla uğraşırken overshootu azaltmak için bulduğum çözüme dayanıyor.
 
80 den 190a a ısınma hızı 1 dakika gibi, 190 dan 80 e soğuma hızı 5 dakika.
 
İlk overshoot sonrasında sıkıntı olmuyor değil mi? İntegral bileşeni ile ilgili bahsettiğim konu jbc klonuyla uğraşırken overshootu azaltmak için bulduğum çözüme dayanıyor.

İşin matematiğini hala tam anlamıyorum. Ama 190 dan 80 e inerken 1 derecenin altında undershoot var. Ama 80 den 190 a çıkarken önce 8 derece overshoot, sonra 4 derece undershoot, sonrasında çok stabil bir şekilde 190 derece.
 
I ve D sıfır, sadece P 14.36 ile soğumada undershot pek yok, ısınmada baya overshoot ve undershoot var. Hatta sönümlü osilasyon var. Bir de I ortadan kalkınca durağan hata yüksek oluyor hem soğumada hem ısınmada

1724339019646.png
 
Bence 80 derecedeki düşük undershoot bu sıcaklıkta soğumanın zaten yavaş olmasından. Stabilitede hem güç hem de yük etkili oluyor. Denkleme bir şekilde katmak lazım(hotendde kritik değil tabii)

Yine havyadan örnek vereceğim, 15V le çok stabil çalışan pid değerleri, 24V beslemede osilasyona giriyordu. Bunda opampın da ufak bir etkisi olsa da pid denklemine besleme voltajını da eklemiştim güç bileşeni olarak ve osilasyon çok daha düşük olmuştu. Malesef çalışmayı paylaşamadım, hem tamamlanmadı hem derli toplu değildi, hem de başka sıkıntılar oldu.
 

Forum istatistikleri

Konular
7,030
Mesajlar
120,052
Üyeler
2,851
Son üye
ca01we

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