Mig-mag kaynak makinesi modifikasyonu.

Motoru böyle sürüyorum, fren de var, orjinal devrede de vardı.
1728723368179.png


Akım trafosunu aşağıdaki gibi okuyorum.
1728723431569.png


Voltajı böyle okuyorum.
1728723722036.png


LCD'yi böyle sürüyorum. Bunun için non-blocking 8bit moda çalışan i2c-karakter lcd kütüphanesi hazırladım. PCF8574 kütüphaneleri ekrana bir şey yazdırırken milisaniyeler boyunca işlemciyi blokluyordu ve bazen ekran resetlendikten sonra düzgün başlatılamıyordu.
1728724140656.png


1728723778307.png


proje dosyası da ekte.
 

Ekler

  • BLUEPILL_MIG_LCD_2PWM.pdsprj
    112.5 KB · Görüntüleme: 28
LCD yi proje gelistirme asamasinda devre disi birakmanda fayda var.
Hata ayıklamada LCD'yi kullanmayı düşünüyorum. Yalnız smps'i PWM sürerken LCD'ye veri göndermeyeceğim Bu durumda sıkıntı çıkarmayacağını düşünüyorum.
 
Hic bir yerde bir flagin set/reset olmasini beklemeyecek sekilde low level LCD kodlari da sen yazarsan sorun olmaz.
Bunun icin LCD'ye ayri bir task olusturmakta fayda var.
 
Hic bir yerde bir flagin set/reset olmasini beklemeyecek sekilde low level LCD kodlari da sen yazarsan sorun olmaz.
Bunun icin LCD'ye ayri bir task olusturmakta fayda var.
Tamamen interruptlarla çalışıyor. "buffer[2][16]" bir ekran verisini sürekli tarayarak çalışıyor. Yazdığım print komutları bu bufferi güncelliyor sadece. "12345.6789" float yazdırmam basamakları hesaplatıp bufferi güncellemekle beraber sadece 22us kadar meşgul ediyor işlemciyi. Bunun dışında da sadece interrupt gecikmesi kadar bir tarama gecikmesi oluyor. Burada bir de kabaca zamanlama için değişkenlerim var.

i2c callback:
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
{
    if (hi2c->Instance == I2C1)
    {
    // I2C1 veri gönderimi tamamlandı

    }
    else if (hi2c->Instance == I2C2)
    {
    // I2C2 veri gönderimi tamamlandı
        i2c_lcd_tarama();
        sayac0++;
        sayac1++;
        sayac2++;

    }
}

lcd tarama:
void i2c_lcd_tarama (void)
{
    if(lcd_en)
    {
        if (i2c_s==0)
        {
            lcd_send_cmd(0x80);
            if(i2c_pas==0)i2c_s++;
        }
        else if(i2c_s<17&&i2c_s>0)
        {
            lcd_send_data(satir[0][i2c_s-1]);
            if(i2c_pas==0)i2c_s++;
        }
        else if(i2c_s==17)
        {

            lcd_send_cmd(0xC0);
            if(i2c_pas==0)i2c_s++;        }
        else if(i2c_s>17&&i2c_s<34)
        {
            lcd_send_data(satir[1][i2c_s-18]);
            if(i2c_pas==0)i2c_s++;
            if(i2c_s==34) i2c_s=0;
        }
    }
}
}

send data:
void lcd_send_data (char data)
{
    if(i2c_pas==0)
    {
        data_t[0] = 0x02;         // pca9535 için output register seçimi          data_u| 0b1100;  //en=1, rs=0 -> bxxxx1100
        data_t[1] = data;         // gönderilecek komut                        data_u| 0b1000;  //en=0, rs=0 -> bxxxx1000
        data_t[2] = portP|RS|E|b_Light;            //en=1, rs=1
        HAL_I2C_Master_Transmit_IT(&hi2c2, ADRES_LCD, (uint8_t*) data_t,3);
        i2c_pas=1;
    }
    else
    {
        data_t[2]&= ~E;                                                        // enable pinine isabet eden biti 0 yapmak
        HAL_I2C_Master_Transmit_IT(&hi2c2, ADRES_LCD, (uint8_t*) data_t,3);    // sadece lcd "E" biti değiştirilmiş datayı gönder
        i2c_pas=0;

    }
}

I2C2nin bir sadece LCD'ye bağlı i2c'nin hazır-müsait olup olmadığı için bile beklemiyor kod, zaten interrupt'ta çalıştığı için i2c müsait demek oluyor. Bunu az daha toparlayıp yayınlayacağım. 7 segment sürmekten daha az meşgul oluyor işlemci.
 
Devreyi çalıştırdım. I/O test ediyorum. Garip bir şey oldu, bilenlere malumdur da bana garip geldi. Motorun devrini fotoğraftaki gibi bir hız sensörüyle okuyorum. Bunlar IR sensör çıkışını kondansatörle filtreliyorlarmış, onu söktüm ve enkoderden düzgün kare bir sinyal alabildim.

Yine de işlemcide takoyu çok dalgalı okuyordum enkoder kanatlarının düzgün olmamasından şüphenip söktüm.

1729448480604.jpeg


Aşağıda da enkoder sökülü iken çalıştırdğım durumun videosu var ve enkoder olmasa da devirle orantılı sinyal alıyorum. anlaşılan motordan gelen gürültüden kaynaklanıyor. Ses yüksek olabilir.

Motorun arkasındaki çıkıntı çok kısa, yalpa yapmayacak şekilde bir şey uydurmam zor. düzgün bir şey ayarlamaya çalışacağım. Devir başına 20 sinyal civarı alacağım birşey olmalı.
 

Ekler

  • tako_mig.mp4
    3.7 MB
1729453734672.png



Motorda iki delik var. Kirmizi ok yonunde isik kaynagi ve sensor konma durumu olabilir mi? Enduvi donerken burdaki isigi engeleyip ardindan yol verebilir.
 
Şimdi baktımda ışığı bloklayıp bırakabilecek bir yapı yok o boşlukta.

Hayalet sinyalin kaynağını buldum. Motorun ve devrenin besleme kablolarını sinyal kablolarından uzaklaştırınca takodaki hayalet sinyal kayboldu. Sinyali ir hız sensörü üretmiyormuş. Biraz daha uğraşıp yazıcıdan 3-5 enkoder basacağım. en az yalpalayanı kullanacağım.

Bu gürültüyü shield'lı kablolar engeller mi ?
 
Peki laser pointer gibi bir lambanin isigini acili sekilde iceri soksak icerde bir seylere carpip diger delikten sacilan isiga bakma durumu olabilir mi?

Benim bir proje vardi daha once konustuk mu hatirlamiyorum.

 
Peki laser pointer gibi bir lambanin isigini acili sekilde iceri soksak icerde bir seylere carpip diger delikten sacilan isiga bakma durumu olabilir mi?

Benim bir proje vardi daha once konustuk mu hatirlamiyorum.

Olabilir. Ama bu beni daha çok uğraştırır. Bu tarz incelikli işlerde kendime pek güvenmiyorum açıksası. Optikle enkoder okumak bildiğim ve basit bir iş. Mekanik sorunu çözmeye çalışayım biraz. Kablolarımı da ekranlı kullanayım. Hayalet tako sinyali sorununu, esas sinyalimi sönümlemeyecek çok küçük bir kapasite ekleyerek de çözebileceğim sanırım. skopla bakmaya kalktığımda mcu hayalet sinyali okumaz oluyor. Probdaki yük bile kolayca kesti...

Kazıma makinesini faaliyete sokmuş muydunuz?
 
Videodakini kazima isinde kullanmadim. Sonra bir tane daha yaptim. Hatta su an yanimda. Onu da faal hale getirmedim. Getirmeyecegim de.
Yaparsam voice coil ile yapacagim.
 
Motorla gereğinden fazla uğraştım. eski 3d yazıcıdan kalan nema17 Stepper'i redüktöre yerleştirmek için hem bir adaptör hem de dişli yazdırıp uyguladım. Malesef stepper gerekli hızlara çıkamıyor, hız arttıkça çektiği akım düşüyor ve daha yüksek voltaj ihtiyacı doğuyor. Daha düşük redüksiyon için yeni bir kutu tasarlamayı gözüm yemedi. Enkoderin okuma sorununu hem 25 kanallı yeni bir disk basarak hem de devrede gürültü kapan inputa 1nF kapasite bağlayarak çözdüm. Motorun hız limitlerinde sinyal düzgün okunuyor böyle.

1729712454390.jpeg


İyi bir kontrol tepkisi için kontrol döngüsünü daha sık çalıştırmak gerekiyor, bununla beraber devir başına 25 sinyal bunun zorlaştırıyor. Tako ölçümü için 50ms sürede gelen sinyal sayısını kullanıyorum. Enkoderin çözünürlüğü düşük kaldığından düşük devirlerde aldığım ölçümün çözünürlüğü de düşüyor.

Mesela takoda, periyot başına 10 sinyal okurken minimum hata 1 sinyal olarak ölçülebiliyor ve bu da %10 yapıyor... Sinyaller arası süreyi ölçmek bu sorunu çözer aslında ama şu anki sonucu makul buldum.

kontrol döngüsü:
// 50ms'de bir çalışır
                GPIOA->ODR|=(1<<0);        // süre ölçümü için bayrak
                
                hiz_mot=TIM2->CNT;
                TIM2->CNT=0;

                e_mot=hedef_mot-hiz_mot;
                i_mot+=e_mot;
                e1_mot=e_mot;

                out_mot= hedef_mot*10 + kp_mot*e_mot + ki_mot*i_mot;
                
                if(out_mot<0)out_mot=0;
                motor_pwm_set(out_mot);

                GPIOA->ODR&=~(1<<0);    // süre ölçümü için bayrak
                GPIOA->ODR|=(1<<0);

                lcd_print_cur(1,0,"hata:");
                if(e_mot>-1)lcd_print(" ");
                lcd_print_int(e_mot, 5);
                lcd_print_cur(1, 9, "duty:");
                lcd_print_int((TIM3->CCR1)/10, 5);
                lcd_print_cur(0,0,"hedef:");
                lcd_print_int(hedef_mot, 5);
                lcd_print_cur(0,9,"hız:");
                lcd_print_int_cur(0, 13, hiz_mot, 5);

                GPIOA->ODR&=~(1<<0);    // süre ölçümü için bayrak

out_mot= hedef_mot + kp_mot*e_mot + ki_mot*i_mot;

PI kontrol oluyor herhalde sadece hatayı ve kümülatif hatayı kullanıyorum. Çıkış denklemine hedefi de ekledim, etkisini ölçmedim ama denemelerimde ilk harekette daha çabuk dengeye geliyor gibiydi. Sadece "ki_mot*i_mot" ile de (integral bileşeni) gayet düzgün kontrol ediyordu ama yükün artış ve azalışına daha geç tepki veriyordu. Katsayılar "ki" ve "kp" katsayıları dahil integer değişkenler kullandım. katsayılar float değişkenken 8 us civarı süren kontrol döngüsü hesabı int aritmetikle 1.5 us kadar sürüyor...

1729714226624.jpeg
1729714256732.jpeg
 

Ekler

  • motor kont.mp4
    4.6 MB
Pwm kapture var onunla yapsaydın çok daha mükemmel olurdu , o şekilde ilk sayfadaki gibi miknatıs hal sensör ile bile hasaplanır , motor saniyede 60 tur atsa saniyede 60 defa pid kontrolu yapmış olacaktın , ama video gayet yeterli görünüyor.


Bu şekilde enkodersiz motor dönüş bilgisi alınabilir.
untitled.JPG
 
Pwm kapture var onunla yapsaydın çok daha mükemmel olurdu , o şekilde ilk sayfadaki gibi miknatıs hal sensör ile bile hasaplanır , motor saniyede 60 tur atsa saniyede 60 defa pid kontrolu yapmış olacaktın , ama video gayet yeterli görünüyor.


Bu şekilde enkodersiz motor dönüş bilgisi alınabilir.
37345 eklentisine bak
Haklısın ilk sayfadaki mıknatısı input capture yakalamayı düşünerek yapmıştım. Ama sonra kaynak yaparken smps'i kontrol etmek için daha fazla zaman kalsın diye süreyi değil de sinyal sayısını ölçerek kontrol etmeye karar verdim. Sebebi input capture ile sinyal yakalandığında, sinyal periyoduyla devir arasında ters orantı olması. Devir verisini elde etmek için daha fazla ve daha maliyetli( bölme işlemi, float değişken vb.) işlem yapacağımı düşünmüştüm. Bu kaygı yersiz de olabilir.

Birim zamandaki sinyal sayısını kullanınca, devir ile ölçtüğüm sinyal arasında doğru orantılı ve lineer ilişki oluyor, daha az hesapla kontrol döngüsünü tamamlarım diye düşünmüştüm. Bu yüzden enkoderdeki kanal sayısını arttırmaya çalıştım. Eğer uygulamada devir kontrolünü beğenmezsem dediğin gibi input capture ile sinyal periyodundan devir hesaplayacağım.

Şemadan nasıl motor devri okunur anlamadım. Transistörü süren trafo devir sinyali değil de PWM sinyalini yakalar gibi geldi bana.
 
Çift polarizyonlu buck konverter işte , kondansatörlerden sonra pwm den arınmış +-dc voltaj oluşur güç kaynağı gibi.

BU yöntemle ac sinus güç kaynağı da yapılabilir.

Yapacağım makinada sarjlı vidalama motoru kullanacağım bu motor en çok 5v da çalışır, 15v besleme ile rahatlıkla 5v motor sürülebilir bu mantıkla.

Hem igbt sürmede hem de motor sürmede bu entegreyi kullanmayı düşünüyorum 5A imiş
 
Çift polarizyonlu buck konverter işte , kondansatörlerden sonra pwm den arınmış +-dc voltaj oluşur güç kaynağı gibi.
Transistörü süren trafo komutatörün gürültüsünü veriyor çıkışa o zaman, doğru mu?

Motor sıkıntı olmaz diye düşünüyorum. Ama teli itmek için merdaneye bayağı baskı olması gerekiyor, yoksa tel kayıp patinaja düşüyor. Tel beslemesini de kendin mi yapacaksın?
 
Evet fırça her motor sargısına ilk elektrik verdiği an bir akım sıçraması olur bunu okuyabiliriz.

İlk başta cold welding ile uğraşacağım başarısız olursam bununla uğraşacağım.

Sürgü halkasının üzerini jet taşı ile pürüzlendireceğim , karşısına ortasından yaylı rulman konulduğunda yeterli olur , teli bisiklet firen hortumundan geçirmeyi düşünyorum , ucunu da bakır boruyu eğerek yapacağım en ucuna da bir elko kondansatörün içini boşaltıp epoksi ile yapıştırmayı düşünüyorum :D.

Yada satın alırım :(

 
Evet fırça her motor sargısına ilk elektrik verdiği an bir akım sıçraması olur bunu okuyabiliriz.

İlk başta cold welding ile uğraşacağım başarısız olursam bununla uğraşacağım.

Sürgü halkasının üzerini jet taşı ile pürüzlendireceğim , karşısına ortasından yaylı rulman konulduğunda yeterli olur , teli bisiklet firen hortumundan geçirmeyi düşünyorum , ucunu da bakır boruyu eğerek yapacağım en ucuna da bir elko kondansatörün içini boşaltıp epoksi ile yapıştırmayı düşünüyorum :D.

Yada satın alırım :(

Eğer gazsız çalışanını yapacaksan linktekini hemen al. Sadece kasa, torch, kablolar ve tel besleme için bile alınır. Geliştirmeye oradan devam edilir. Torçla uğraşmak umutsuz vaka, 2 katı paraya daha kötü bir mal çıkar ortaya. Fren teli ile çalışmıyorlar, teflon hortumun içinden geçiyor kaynak teli.

Böyle fiyatları görünce şu an uğraştığım şey saçma geliyor. Şu ana kadar, öğrenmesi ile beraber bu makineden 4-5 tane alacak kadar mesai harcamışımdır :) . Gerçi bitince bundan 10 kat pahalı makinelerle benzer kabiliyetli olacak.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
6,950
Mesajlar
118,747
Ü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