Saeyang Marathon SDE H37L1 35000 RPM Fırçalı Motor

Sercan

--
Katılım
17 Mart 2019
Mesajlar
4,927
Geçenlerde Saeyang marka Kore üretimi harika bir motor buldum. Genellikle dişçilerin kullandığı bu motor mücevher temizleme işlerinde de kullanılıyormuş. Bendeki Marathon SDE H37L1 modeli 35000 RPM dönebiliyor.

435




Bulduğum motorun kontrol ünitesi yok. Sadece yukarıda görülen mikro motor. Ben bu motoru PCB üretmek için kullanmayı düşünerek aldım ama şu an bir tezgahım yok. Tezgah üzerinde çalışmadan önce bununla neler yapabilirim görmek için hız ayarlı bir sürücü devreye ihtiyacım var. Elimdeki malzemeleri kullanarak bir sürücü devre yapmaya karar verdim.

436


Yukarıda görülen malzemeler Canon yazıcıdan çıkma (32V 0,75A ve 24V 0,5A iki farklı güç verebilen) güç kaynağı, 2 satır LCD, arduino uno, L293D motor sürücü entegre ve diğer elektronik elemanlar. Bunlar şu an elimde olan malzemeler ve ben bu sürücüyü elimdeki malzemelerle tamamlamak istiyorum.

Henüz yeni başladığım bu devreden beklentim şu;
1 Saat yönü ya da tersine motor döndürme özelliği
2 PWM ile ayarlanabilir hız özelliği
3 Ayak pedalı ya da ön panel tuşu ile bekletme, basılı tutunca çalıştırma ve sürekli çalıştırma özellikleri
4 LCD ekran (LED göstergeler de olabilir ama LCD daha kapsamlı olur) ile PWM, dönüş yönü, çıkış gerilimi gibi bilgileri gösterme özelliği

H37L1 mikromotor 30V DC/0.5A çıkış değerlerine sahip bir kontrolcü ile sürülüyor.

437


Bugün için burada bırakacağım yazıyı 3 aşamada tamamlamayı düşünüyorum. Öncelikle prototip üretip test edeceğim, sonra PCB üretip tek parça haline getireceğim. En sonunda da tüm malzemeleri bir kutu içinde derleyip toparlayacağım. Bu süreçte sizde fikirlerinizi esirgemeyin. Bakalım neler olacak :)
 
PWM olayının doğru çalıştığını test etmek için osiloskop gerekli olacak. Osiloskopsuz PWM'nin doğru çalıştığını belki dolaylı yolla test edebilirsin. Elinde ibreli analog ölçü aletleri var. PWM çıkışında analog ölçü aleti ile DC ölçüm yaparsan, PWM duty cycle'a göre artan/azalan bir voltaj gözlemlemen lazım.
 
PWM olayının doğru çalıştığını test etmek için osiloskop gerekli olacak. Osiloskopsuz PWM'nin doğru çalıştığını belki dolaylı yolla test edebilirsin. Elinde ibreli analog ölçü aletleri var. PWM çıkışında analog ölçü aleti ile DC ölçüm yaparsan, PWM duty cycle'a göre artan/azalan bir voltaj gözlemlemen lazım.
Meraktan soruyorum dijital ölçü aletiyle ölçmenin bir yolu var mı? Daha doğrusu şöyle sorayım, bendeki dijital ölçü aletlerinin biri UT61E diğer Protek 506. İkisinde de dijital ekranda aşağıdaki kırmızı işaretli gibi grafik gösterimi var.

438


Bunlar yeterince hızlı tepki verir mi?
 
Mesela hızlı değil, yavaş tepki vermesi. O yüzden analog ibreli alet daha iyi olur. Bu dijitallere PWM sinyal verirsen ne olacağını kestirmek zor. Bir aletin tepkisi diğerini tutmaz.
 
Bu arada osiloskobumun 2. kanalı çalışıyor gibiydi, bunu da test etmek için iyi bir fırsat olacak.
 
Haa evet doğru, o zaman osiloskop var :)
 
Bu arada sorun olmaz diye biliyorum ama gene de sorayım, PWM'i görmek için arduino çıkış pinin doğrudan osiloskoba bağlamam sorun oluşturur mu? Henüz osiloskop probum da yok...
 
Bu arada sorun olmaz diye biliyorum ama gene de sorayım, PWM'i görmek için arduino çıkış pinin doğrudan osiloskoba bağlamam sorun oluşturur mu? Henüz osiloskop probum da yok...

Hiçbir sorun olmaz.

50 Ω giriş empedansı modu olan osiloskoplarda bunu düşünmek lazım, çünkü 50 Ω modunda girişe verilecek maksimum voltaj çok düşüktür. Ayrıca 50 Ω luk yük, 5V'ta 100 mA akım çekecektir, bu da Arduino'nun çıkış pinlerini yakabilir. Senin osiloskopta 50 Ω modu yok anladığım kadarıyla.
 
Girişteki değerler 1MΩ 15pF ≤ 400Vpk altında da 50Ω≤5V RMS yazıyor. Coupling/Inverting menüsüne girdiğimde, Coupling 50Ω On/Off seçeneği mevcut. Sanıyorum seçebiliyorum.

440

441
 
Demek 50 Ω modu da var, bu çok iyi.

1 MΩ moduna getirirsen sorunsuz olarak arduino'nun PWM lerini inceleyebilirsin (Hem 1:1 hem de 10:1 ile).
 
Devre şemasını hazırladım.

461


Devrede iki noktayı netleştirmem gerekiyor. İkisi de bir sonrakinin adımı gibi. İlki güç kaynağını başlatmakla ilgili. Güç kaynağının kontrol pini 1kΩ bir ve direnç bir diyot ile TL1431 voltaj referansına gidiyor. İkincisi ise mikroişlemcinin dijital çıkış pinini yukarıdaki gibi bir gerilim bölücü ile 3.3 volt gerileme (Power start) düşürmek ve bahsettiğim TL1431'i bununla beslemek doğru mudur?
Yaptığım araştırmaların birinde çalışır vaziyette iken kontrol pinin 3.3 volt gerilim olduğu yazıyor. Rast gele denemek istemiyorum. Tavsiyeniz var mı?
 
İkincisi ise mikroişlemcinin dijital çıkış pinini yukarıdaki gibi bir gerilim bölücü ile 3.3 volt gerileme (Power start) düşürmek ve bahsettiğim TL1431'i bununla beslemek doğru mudur?

Evet sorun olmaması lazım.

Motorun iki ucunu kısa devre etmişsin yalnız, onu da düzelt. Bir de kontrol butonlarını bu şekilde yaparsan, yazılımda bunları debounce etmen lazım, yoksa butona her bastığında birden fazla kez basıldı bilgisi gidebilir.
 
Henüz osiloskop probum da yok...

Osiloskop probu alacaksan, 1:1 ve 10:1 probları ayrı ayrı alman daha iyi olur. Önce 10:1 al, o seni baya bir süre götürür. Sonra gerekirse 1:1 alırsın.

1:1 ve 10:1 olan ve bir switch ile değiştirilen prob kullanırsan belli bir risk alıyorsun. 1:1 modunda unutup şebeke voltajı verirsen, osiloskobun giriş devresi yanacaktır. Ayrıca o switch bir arıza noktasıdır. Zamanla iyi temas sağlamayıp seni aldatabilir.
 
Bir de motorun akım gereksinimi ile ilgili tutarsız bilgiler var. 30V'da 35W güç çekiyorsa, 1A'den biraz fazla akım ihtiyacı var, ama sen kendi güç kaynağının 0.5A lik olduğunu yazmışsın. Hadi diyelim 0.5A lik akım çekiyor motor. Bu motor, kalkış anında tipik olarak 4 kat veya daha fazla akım çekebilir, dolayısıyla senin güç kaynağının EN AZ 2A olması lazım. Daha fazla olması daha iyi olur, çünkü o zaman motordan daha iyi tork alırsın.

Ama senin kullandığın L293D, nominal 600 mA, peak olarak da 1.2A verebiliyor. Bu şekilde sistemi kurarsan, o motordan ne 35W güç alabilirsin, nede ilk kalkışta iyi tork verir.
 
Motorun iki ucunu kısa devre etmişsin yalnız, onu da düzelt
Evet aynı çıkışa bağlamışım düzelttim.
Bir de kontrol butonlarını bu şekilde yaparsan, yazılımda bunları debounce etmen lazım, yoksa butona her bastığında birden fazla kez basıldı bilgisi gidebilir.
Daha kararlı çalışması için donanımı düzeltmenin başka bir yolu var mı?
Bir de motorun akım gereksinimi ile ilgili tutarsız bilgiler var. 30V'da 35W güç çekiyorsa, 1A'den biraz fazla akım ihtiyacı var, ama sen kendi güç kaynağının 0.5A lik olduğunu yazmışsın. Hadi diyelim 0.5A lik akım çekiyor motor. Bu motor, kalkış anında tipik olarak 4 kat veya daha fazla akım çekebilir, dolayısıyla senin güç kaynağının EN AZ 2A olması lazım. Daha fazla olması daha iyi olur, çünkü o zaman motordan daha iyi tork alırsın.

Ama senin kullandığın L293D, nominal 600 mA, peak olarak da 1.2A verebiliyor. Bu şekilde sistemi kurarsan, o motordan ne 35W güç alabilirsin, nede ilk kalkışta iyi tork verir.
Bu tutarsızlık benim de dikkatimi çekti. Max 35W yazınca ben de uygulanabilecek en yüksek değer gibi algıladım. Yukarıda değerlerin yazdığı görsel pdf'den alınma, başka bir kaynak da bulamayınca ona göre hareket ediyorum. Elimde aslında motor sürmek için birkaç entegre daha var. Onları da step motor sürmek için tezgaha saklıyorum...

463
 
Daha kararlı çalışması için donanımı düzeltmenin başka bir yolu var mı?

Donanımda birşey yapmana gerek yok. Yazılımla bunu çözmen lazım. Tipik bir debounce algoritması, butonu belli periyotlarla okur ve belli sayıda aynı değeri görmeyi bekler. Mesela 10 ms'de bir okuyorsan, 3 kere aynı değeri gördün mü o butonun değeri artık stabil hale gelmiştir.
 
C++:
/*

L293D ile LCD GÖSTERGELİ MOTOR SÜRÜCÜ
    Özellikler
        1 Saat yönü ya da tersine motor döndürme özelliği
        2 PWM ile ayarlanabilir hız özelliği
        3 Ayak pedalı ya da ön panel tuşu ile bekletme ve çalıştırma özelliği
        4 LCD ekran ile Yön, çalışma/bekleme PWM oranı ve olması gereken çıkış gerilimi.

    LCD Bağlantıları
        LCD RS        -> D06  12
        LCD Enable    -> D05  11
        LCD D4        -> D03  5
        LCD D5        -> D02  4
        LCD D6        -> D01  3
        LCD D7        -> D00  2
        LCD R/W        -> GND
        LCD V0        -> GND
        +5V ve GND

    KOMUT GİRİŞLRİ
        HIZ ARTTIRMA        -> A0 23
        HIZ AZALTMA        -> A1 24
        YÖN DEĞİŞTİRME    -> A2 25
        SAAT YÖNÜ TERSİ    -> D13 19
        * Tüm butonlar dahili pull up modunda. Harici direnç kullanılmadı.

    ÇIKIŞ KOMUTLARI
        GÜÇ KAYNAĞI AKİVASYON        -> D08  14
        L293D PWM (ENABLE)            -> D09  15
        L293D IN1 (SAAT YÖNÜ)        -> D10  16
        L293D IN2 (SAAT YÖNÜ TERSİ)    -> D11  17

DİKKAT BU NOT SADECE BENDEKİ MEVCUT ENTEGRE İÇİN GEÇERLİDİR.
Uno üzerindeki 328'in D4 ve A5 Portları çalışmıyor

*/


#include <LiquidCrystal.h>
LiquidCrystal lcd(6, 5, 3, 2, 1, 0);

/********************************* BAŞLANGIÇ DEĞERLERİ *********************************/
int PWMOrani = 100;           // İlk çalıştırmada ne kadar hızlı başlacak 1-100
int PWMOraniAdim = 5;         // PWM oranının yüzde olarak değişim değeri 1-100
int GucKaynagi = 32;          // Uygulanan harici gerilim
int DonusYonu = 1;            // Dönüş yönü 1 ileri 2 geri
int BaslatDurdur = 1;         // 1 durdurur 2 başlatır
/******************************* BAŞLANGIÇ DEĞERLERİ SON *******************************/



/*************************************** AYARLAR ***************************************/
const int HariciPSU = 8;      // GÜÇ KAYNAĞI AKİVASYON       -> D08  14
const int En = 9;             // L293D PWM (ENABLE)          -> D09  15
const int In1 = 10;           // L293D IN1 (SAAT YÖNÜ)       -> D10  16
const int In2 = 11;           // L293D IN2 (SAAT YÖNÜ TERSİ) -> D11  17
const int HizYukariButton = A0;     // HIZ ARTTIRMA    -> D04 6 -- Üzerindeki çipin bu pini çalışmıyor
const int HizAsagiButton = A1;      // HIZ AZALTMA     -> D07 13
const int YonButton = A2;           // MOTOR HAREKET YÖNÜ       -> D12 18
const int BaslatDurdurButton = A3;  // MOTOR BEKLEME/ÇALIŞTIRMA -> D13 19
const int Kontrast = A5;  // MOTOR BEKLEME/ÇALIŞTIRMA -> D13 19
int volt = GucKaynagi;
int PWM = PWMOrani * 255 / 100;
/************************************* AYARLAR SON *************************************/

void selamlama() {
    lcd.setCursor(0,0);
    lcd.print("PWM HIZ KONTROLU");
    lcd.setCursor(0,1);
    lcd.print("<--   v1.0   -->");
    delay(3000);
    lcd.clear();
}

void ilkEkran() {
    lcd.setCursor(0,0);
    lcd.print("Yon");
    lcd.setCursor(4,0);
    lcd.print("iLERi");
    lcd.setCursor(12,0);
    lcd.print("%");
    lcd.setCursor(13,0);
    lcd.print(PWMOrani);
    lcd.setCursor(0,1);
    lcd.print("BEKLEMEDE");
    lcd.setCursor(13,1);
    lcd.print(volt);
    lcd.setCursor(15,1);
    lcd.print("V");
}

void PWMOraniYazdir() {
    lcd.setCursor(12,0);
    lcd.print("    ");
    if (PWMOrani < 10) {
        lcd.setCursor(14,0);
        lcd.print("%");
        lcd.setCursor(15,0);
        lcd.print(PWMOrani);
    } else if (PWMOrani < 100) {
        lcd.setCursor(13,0);
        lcd.print("%");
        lcd.setCursor(14,0);
        lcd.print(PWMOrani);
    } else {
        lcd.setCursor(12,0);
        lcd.print("%");
        lcd.setCursor(13,0);
        lcd.print(PWMOrani);
    }
}

void VoltYazdir() {
  lcd.setCursor(13,1);
  lcd.print("  ");
  if (volt < 10) {
    lcd.setCursor(14,1);
    lcd.print(volt);
  } else {
    lcd.setCursor(13,1);
    lcd.print(volt);
  }
}

void HiziGuncelle() {
    if (BaslatDurdur == 2) {
        analogWrite(En, PWM);
        lcd.setCursor(0, 1);
        lcd.print("CALISIYOR");
    }
    if (BaslatDurdur == 1) {
        analogWrite(En, LOW);
        lcd.setCursor(0, 1);
        lcd.print("BEKLEMEDE");
    }
}

void setup() {
    lcd.begin(16, 2);
    pinMode(Kontrast, 125);

    pinMode(HizYukariButton, INPUT_PULLUP);
    pinMode(HizAsagiButton, INPUT_PULLUP);
    pinMode(YonButton, INPUT_PULLUP);
    pinMode(BaslatDurdurButton, INPUT_PULLUP);

    pinMode(HariciPSU, OUTPUT);
    pinMode(En, OUTPUT);
    pinMode(In1, OUTPUT);
    pinMode(In2, OUTPUT);
    digitalWrite(HariciPSU, LOW);
    digitalWrite(En, LOW);
    digitalWrite(In1, HIGH);
    digitalWrite(In2, LOW);

    lcd.clear();
    selamlama();
    ilkEkran();
}

void loop() {
    if (digitalRead(HizYukariButton) == 0) {
        if (PWMOrani < 100) {
            PWMOrani = PWMOrani + PWMOraniAdim;
            volt = PWMOrani * GucKaynagi / 100 ;
            PWM = PWMOrani * 255 / 100;
            PWMOraniYazdir();
            VoltYazdir();
            HiziGuncelle();
        }
        delay(300);
    }
    if (digitalRead(HizAsagiButton) == 0) {
        if (PWMOrani > 1) {
            PWMOrani = PWMOrani - PWMOraniAdim;
            volt = PWMOrani * GucKaynagi / 100 ;
            PWM = PWMOrani * 255 / 100;
            PWMOraniYazdir();
            VoltYazdir();
            HiziGuncelle();
        }
        delay(300);
    }
    if (digitalRead(YonButton) == 0) {
        switch (DonusYonu) {
            case 1:
                digitalWrite(In1, LOW);
                delay(50);
                digitalWrite(In2, HIGH);
                DonusYonu = 2;
                lcd.setCursor(4, 0);
                lcd.print("GERi ");
                break;
            case 2:
                digitalWrite(In1, HIGH);
                delay(50);
                digitalWrite(In2, LOW);
                DonusYonu = 1;
                lcd.setCursor(4, 0);
                lcd.print("iLERi");
                break;
        }
        delay(300);
    }
    if (digitalRead(BaslatDurdurButton) == 0) {
        switch (BaslatDurdur) {
            case 1:
                BaslatDurdur = 2;
                digitalWrite(HariciPSU, HIGH);
                delay(1000);
                HiziGuncelle();
                break;
            case 2:
                BaslatDurdur = 1;
                HiziGuncelle();
                digitalWrite(HariciPSU, LOW);
                break;
        }
        delay(300);
    }
}

Yazılımı tamamladım. Breadboard üzerinde giriş çıkışları logic probe ile ölçerek test ettim. PWM de iyi gibi duruyor ancak kesin sonuçları osiloskop ile ölçerek söyleyebilirim. Entegrenin D4 portu çalışmıyor. Sanıyorum önceki çalışmada hasar verdim. Bunun dışında şu an her şey yolunda görünüyor. PCB üretip entegreyi Arduino UNO kartından ayıracağım için bir bakıma iyi de oldu. İleride sorun çıkartır mı bilmiyorum. Tabii bu da ilk şemada değişiklikler yapmama sebep oldu. Harici Pull-Up dirençlerini kaldırmayı düşünüyorum. Şu an tuşlara bastığımda gayet iyi gibi görünüyor. Yazılım ve donanım değişiklikleri hakkında öneriniz var mı?

475

476
 
Eline sağlık, program da gayet güzel duruyor.

Debounce'u yapmamışsın, ama bu uygulamada anahtar bounce'un tek etkisi motoru bir yerine iki kez hızlandırmak veya yavaşlatmak olur. Veya motoru açarsın, ama hemen sonra kapanır, vs. Eğer bunları görmüyorsan, sendeki buton çok temiz geçişler yapıyor demektir. Ama gene de buna güvenmemek lazım.
 
Devrede ufak tefek değişiklikler yaptım, en son çalışan bir prototip halinde bırakmıştım. Başına geçip neticelendirmek için vakit bulamadığım için ben de kutunun ön tasarımını yaptım. Yukarıdaki kutunun ön yerleşim planını aşağıdaki gibi çizdim. XLR soketini ön tarafa yerleştirmek istedim ancak yeterli alan mevcut değil. Hiç istemeye istemeye arka tarafa taşıyacağım ya da kutuyu değiştirmem gerekecek... Bu tarz işlerde lazım olur diye sakladığım eski Digiturk DT-5002 cihazın güç kaynağı ile birlikte kutusu mevcut üstelik yukarı aşağı sağa sola yuvarlak 4 tuş ve açma kapama tuşu da hazır ama ona da LCD ekranı sığdırmak sorun...
Ölçüler (mm)___________
Panel : 122x66
LCD : 80x36
LCD Çerçeve : 64,5x16,4
609

610
 
Soket XLR değil sanki. Eski müzik sistemlerinde kullanılan DIN sokete benziyor. Bunları aliexpress'de bulabilmen lazım, ben daha önce DIN'den RCA'ya dönüştürücü kablolar bulmuştum.

Bir de PWM ile ilgili aklıma geldi, birçok dijital ölçü aleti PWM ölçüm de yapabiliyor. Ama tabi şöyle bir durum var. PWM dalga şeklinin var olduğundan emin olduktan sonra multimetre ile güvenilir PWM ölçümü yapılabilir. Ama dalga şeklinin ne olduğu belli değilse, gene multimetre sana bir duty cycle değeri verecek, sen de ne güzel PWM çıkış var zannedeceksin :) O yüzden en güveniliri osiloskop ile yapmak.
 

Benzer konular

Çevrimiçi personel

Forum istatistikleri

Konular
5,788
Mesajlar
99,009
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top