STM32 TABANLI MASAÜSTÜ CNC-1

Masaüstü CNC geliştirme projem yeni bir şey değil. Adım motorlarla oynamaya başladığım günlerden beri -10 yıldan daha fazla bir süredir- sürekli olarak gündemimde olan bir konu. İlk masaüstü CNC mi çalıştırdığımdan bu yana kaç defa değişiklik yaptığımı bilemiyorum. Ama yazılımının güncel sürüm numarasının 20 olduğunu, her bir sürümde de a,b,c,d,e … şeklinde ilerleyen ara sürümler olduğunu belirtirsem bir fikir verir sanırım.

Sonuçta son 2-3 yıldır çok işime yarayan bir alet olarak atölyemin baş köşesinde duruyor. Sürekli olarak gelişmeye de devam ediyor.

Bugünlerde kontrol biriminde önemli bir değişiklik yaparak L298 motor sürücülerinden A4988 sürücülere geçiyorum. Bununla birikte yazılımda da hatırı sayılır geliştirmeleri uygulamaya koyuyorum.

Bu aşamada, buraya CNC nin mevcut durumuna ve yukarıda sözünü ettiğim değişikliklerden sonraki haline yönelik bilgiler koymaya karar verdim. Aslında CNC konusundaki ilk yayınım değil, üç yıl önce de kapsamlı bir yayın yapmıştım. Ama Blog Press bir platform değişikliği yaptı, o geçiş esnasında yayının bütün görsel öğeleri silindi. O zaman yazıyı onarmaya üşendiğimden yayından kaldırdım. Şimdi yeni baştan …

CNC NİN EYLÜL 2020 DEKİ DURUMU

Masa üstü CNC’min Eylül 2020 deki görünümü yukarıdaki gibi. İlk başladığımdan bu güne sayamadığım kadar çok değişiklik geçirdi. Özellikle mekanik aksamdaki değişiklikler için aşağıdaki fotodaki eski modellerden kalan artıklar hangi yollardan geçerek geldiğim hakkında bir fikir verebilir.

Önceki modellerden kalan mekanik aksam

Görüldüğü gibi, mobilya çekmece kızakları kullanarak yaptığım X-Y-Z tablalardan başlayarak daha profesyonel malzemeler kullandığım günlere gelene kadar epeyi emek vermiş durumdayım.

CNC NİN KONTROL SİSTEMİ HAKKINDA

SİSTEM KONFİGÜRASYON BİLGİLERİ Ağustos 2020 

Yazılım : 
CNC yazılımı : Selcuk STM32F103RB CNC R16
PC yazılımı : Python - PYCHARM 2019.1 - Streamer R1c.py

ELEKTRONİK AKSAM :

CNC kontrol kartı Smart CNC Minikit TFT P R2a - Dec 18 (EAGLE)
Modifikasyon : Yok

STM32F103 Modülü : 1) STM32F103RB - Minikit Kırmızı
                   2) STM32F103RB TFT-S R2 Minikit Yeşil

MOTORLAR :

Minbea NEMA23 2A, bipolar

GÜÇ KAYNAĞI :

CNC Kontrol birimi ve Motorlar : 20V 4A notebook adaptörü ve LM25..  ayarlanabilir SMPS modüller, her biri 5VDC ye ayarlı.

Spindle motor : 500W 100VDC ayarlanabilir güç kaynağı.

CNC nin kontrol birimi bir PC den, UART arayüzü üzerinden Gerber ya da Excellon komutlarını alarak işliyor ve motor kontrol sinyallerine çeviriyor.

MAC3 arayüzü kullanmıyorum, CNC nin mümkün olduğunca kendi kendine yeterli bir sistem olmasını amaçladım. Bu nedenle, bir PC bulunmadığında da SD kart üzerinde text dosyaları içinde verilen G-code komutlarını işleyebilecek şekilde geliştirdim.

Blok diyagram aşağıdaki gibi. Motor güç kaynağı için 5-12VDC yazılmış ama bu son yapacağım değişiklikle 35 Volta kadar çıkacak.

KULLANILAN MİKRO KONTROLCÜ

İlk modelden beri STM32F103RB , 64 pin mikrokontrolcüyü kullanıyorum. Bu tümdevre Çin yapımı “Minikit” adlı aşağıdaki kırmızı geliştirme modülü üzerinde. Ama artık kendi geliştirdiğim Minikit adaptör modüllerim var, onları tercih ediyorum.

KONTROL BİRİMİ

Şu anda kullanımda olan kontrol birimi aşağıdaki gibi. Fotoğrafta STM32F103RB Minikit modülü ekranın altında kaldığı için görünmüyor.


Güç kaynağı ayrı bir kutu halinde, motorlara ve mikroişlemciye giden ayrı ayrı ayarlanabilir DC besleme çıkışları var. Kutunun içinde 20V 4A lik bir notebook adaptörü, sigortalar vb. var. Ön panelinde de 3 adet ayarlanabilir LM2596 tabanlı SMPS var. Her birisi bir motoru besliyor. Eksenlerde farklı motorlar da olsa bunların gerilimleri birbirinden bağımsız olarak ayarlanabiliyor. Bu SMPS ler ısınma sorununu azaltmak için kutu dışına konuldular.

Mikrodenetleyiciyi besleyen 5VDC kaynak kutunun içinde.





Bu kontrol biriminin biraz daha derli toplu kompakt yapıda olanı da var, soldaki gibi. Bunda DC güç kaynakları ayrı bir kutu üzerinde değil.









Sözünü ettiğim kompakt modelde motor DC besleme modülleri plaketin alt tarafına iliştirdiğim bir soğutucu üzere monteli.
















Bu modelde motor sürücüler kontrol kartının üst tarafında yer alan L298 bipolar tümleşik devrelerden oluşuyor. Ancak devam yayınında anlatacağım gibi, bu sürücülerin yerini artık A4988 ler alacak.







MEKANİK AKSAM

KIZAKLAR

Üç eksenin her birinde ikişer adet alttan destekli 12mm çelik çubuk ray var. Bunların üzerinde de her bir tablayı taşıyan dörder adet bilyeli lineer rulman var. Bundan önceki modelde sadece uçlarından desteklenen 8 mm çapında ray çubukları kullanmıştım, ancak esneme nedeniyle konumlandırma doğruluğunda kayıp yaşayınca çok daha sağlam olan bu boydan boya destekli raylara geçtim.

Rulman seçimi hakkında önemli not: Çin yapımı rulmanlara güvenmemek gerekiyor. Görünümü aynı olan pek çok lineer rulman tam bir fiyasko oldu. Rulman satın alırken yanınızda ray çubuklarını da bulundurup deneyerek almayı öneririm. 

ADIM MOTORLARI

Yandan görünüm. X motoru ve tablası ile rayları görülebiliyor. Sağ tarafta da spindle motorunun güç kaynağı ve hız ayar potansiyometresi görülüyor. Kablo demetlerinin perişanlığı sık sık yaptığım değişikliklerin sök-taklarından kaynaklanıyor.

Minbea yapımı Bipolar 2A lik nema 23 adım motorları kullanıyorum. Bobin dirençleri 2.5 Ohm.

SPINDLE MOTORU VE GÜÇ KAYNAĞI

Bu 500W lık kömürlü bir DC motor. 100V luk, bir potansiyometre ile ayarlanabilen güç kaynağı var.

Devir hızı DC besleme gerilimi değiştirilerek 3000-12000devir/dk arasında ayarlanabiliyor. Hava soğutmalı ve çok sessiz. Motor miline takılı bir ER11 uç tutucusu var. Sonuçta 100 Doların altında bir fiyat için gayet uygun bir seçenek.

Şu anda motor hızını bu potansiyometre ile manuel olarak ayarlıyorum ama, yakında PID kontrollu bir sürücüye geçeceğim.


Elbette spindle motorun da bir tarihçesi var. İlk modellerde bir Dremel ahşap el frezesini düşey eksene bağlayarak kullanmıştım. Korkunç gürültülü idi, uğultusu sokaklara taşıyordu.

Y TABLASI

Üzerinde çalışılacak parçanın bağlandığı tabla, ileri geri yani “Y” ekseni üzerinde hareket ediyor.

Kızaklar ve lineer rulmanlar körüklerle tozdan korunuyor. Kızakların üzerinde 4 lineer rulmanın taşıdığı araba, onun üzerinde bir oluklu alüminyum tabla, onun da üzerinde 20 mm ahşaptan bir çalışma tablası var. Bu ahşap tablaya 50 ve 60 mm nin katları halinde bir matris düzeninde metal dübeller gömdüm. İşlenecek parçaya bu deliklere denk gelecek şekilde kılavuz delikleri delip vidalayarak bağlıyorum.

Parçaları bu şekilde vida ile tesbit etmeyi tercih ediyorum. Bu yöntem, böyle bir hafif konstrüksiyon için en sağlıklısı. Bu teknik, özellikle PCB ler ve plaka halindeki parçalar için çok uygun oluyor.

Çok toz çıkaran bir makina olduğunu belirtmeye gerek yok. Bu nedenle, çalışma tablası üzeri saydam akrilik bir plaka ila kapatılabilen bir havuz içinde kalıyor. Parça bağlanıp ayarlar yapılırken bu havuz çıkartılıp sonra kolayca tekrar takılabiliyor.

YAZILIM

STM32F103 üzerinde koşan yazılımı C dilinde geliştirdim. Başlangıçta KEIL, ardından ATOLLIC True Studio kullandım, şimdi de STM32 CubeIDE platformunu kullanıyorum.

İşin ağırlığı STM32 yazılımında da olsa, buna CNC kodlarını göndermek için PC üzerinde koşan bir kullanıcı arayüzüne gereksinim var. Bunu başlangıçta MS Visual Basic ile hazırlamıştım, ama artık Python kullanıyorum.

BAZI ÜRETİM ÖRNEKLERİ







Bunlar bu CNC ile ürettiğim tipik bir PCB ye air görseller. 0.5mm ayak aralıklı tümleşik devreler içeren PCB leri rahatlıkla üretebiliyorum. Tek yüzlü PCB prototip üretimlerinde çok işime yarıyor. Akşam aklıma gelen bir PCB yi ertesi gün elime alabiliyorum.

Soldaki görsel, PCB nin CNC ekranındaki öngörünümü.

Bunlar da başka PCB örnekleri

Bu encoderin mekanik parçaları ile PCB lerini bu CNC de yaptım. Sonuç alana kadar epeyi bir deneme yanılma çalışması gerekti. Üretim artıkları aşağıdaki fotolarda görülebiliyor. Kullandığım malzemeler fiber takviyeli fenolik reçine plakalar ve PCB plaketleri. Delikli optik encoder diskler için CNC nin kütüphane fonksiyonlarından yararlanıyorum.




Bu da bir başka örnek üretim. Adım motoru için akrilikten yapılmış bir dişli kutusu.

KULLANILAN ADIM MOTOR SÜRÜM YÖNTEMİ

SMT32 ile motorların her birisi için 4 er adet kontrol sinyali üretiliyor. Bu sinyaller L298 sürücünün iki H köprüsünden her birinin ikişer girişine uygulanıyor. H köprülerin çıkış uçları da her bir motor bobininin iki ucuna bağlı. Kullandığım motorlar bipolar tipte, bobin başına ikişerden, toplamda dört ucu var.

L298 lerin ikisine ilişkin bağlantı diyagramı :

Bu şekilde 3 motoru sürebilmek için mikro denetleyicinin 12 adet GPIO çıkışını bu işe ayırmak gerekiyor. Ben bu amaçla PC0 ila PC11 arasındaki çıkışları görevlendirdim.

Motor bobinlerine aşağıdaki diyagramda gösterildiği gibi yarım adım tekniği ile iki yönlü akımlar uyguluyorum.

Buna göre bobinlere uygulanan akımlar aşağıdaki gibi oluyor. Motor bobin sinyalinin bir periyodu 4 tam, 8 yarım adımdan oluşuyor. Motorlar 1.8 derecelik adımlara sahip olduğundan bir tam motor devri için 200 tam, 400 yarım adım atılması gerekiyor.

Kullandığım spiral sürücü miller bir tam devirde 8 mm ilerleme sağlıyor. Bu da her bir yarım adımda 0.02mm yani 20µ ilerleme anlamına geliyor.

Motor bobinlerine akım uygulamak üzere L298’e 5V sabit DC gerilim veriyorum. Akım kontrolu yapmıyorum. L298 lerin “sense” pinleri doğrudan toprağa bağlı.

Bu motor geriliminin bir bölümü (en az 0.5V) motora giden kablolarda düşüyor. L298 in bipolar köprü tranzistorlarında düşen gerilimleri de dikkate alırsak, bu 5 V DC den geriye ne kalıyorsa onun akıtabildiği kadar akım akıyor. Bobinlerin endüktansları ve dinamik yanıtları, yarım adımlardan bazılarında bobinlerden birinden hiç akım akmayan periyotlar bulunduğunu da dikkate aldığımızda pek de verimli olmayan, titreşimli bir sürüş tekniği kullandığım görülebilir.

Bununla birlikte bu durum, geliştirme çalışmalarımın ilk döneminde ikinci planda kaldı. Motorların dönüyor, yavaş, titreşimli ve düşük güçle de olsa istenen pozisyona gidebiliyor olması yeterli idi.

Yeni modelde ise bu konu öncelik kazanıyor.

KULLANICI ARAYÜZÜ – MENÜLER

PC ARAYÜZÜ

CNC ye kullanıcı erişimi için iki seçenek var. Bulardan birincisi UART üzerinden bağlı olduğu PC de koşan program. Bu programı Python kullanarak geliştirdim. Ana amacı, PC üzerindeki Gerber/Excellon dosyalarını satır satır okuyarak CNC kontrol birimine göndermek. CNC nin ayarlarına ve çeşitli kontrollarına da erişilebiliyor. Sık ihtiyaç duyulan bazı kesme/delme işlemleri için bir kütüphanesi de var.

CNC nin PC üzerindeki kullanıcı ayarüzü

Bu arayüzde görülen tüm fonksiyonlar doğrudan CNC kontrol birimi üzerinden de yürütülebiliyor.

Ana işlev olan diskten seçilen bir text dosyasının CNC ye satır satır aktarılması için PC-CNC arasında yürütülen bir protokol var. PC den CNC ye komutlar, kontrolcünün “hazırım, yeni satır gönder (‘~’) ” ve “hatalı alış – aynı satırı tekrar gönder (‘*’) ” şeklindeki sinyalleri ile koordine ediliyor.

KONTROL BİRİMİ ARAYÜZÜ

CNC nin tüm fonksiyonları Kontrol Birimi üzerindeki TFT ekran ve tuş takımı aracılığıyla kontrol edilebiliyor. CNC Kod dosyaları bir SD kart üzerine text dosyaları halinde kaydedilerek verildiği takdirde, PC ye hiç gereksinim olmadan çalışmak da mümkün.

Dokunmatik tipte olan bir TFT ekran takıldığında tuş takımı yerine doğrudan ekrana dokunularak çalışılabiliyor.

Şimdi kontrol birimi ekranından bazı menü örnekleri vereceğim:

Aşağıda ana menü ekranı görülüyor. Buradan Dosya Sistemine, Jogging, Koordinat ve Ayarlar menülerine geçilebiliyor.

Aşağıdaki ekranda CNC tablalarını manuel olarak hareket ettirmekte ya da ayarlamakta kullandığımız “Jogging” menüsü görülüyor.

Aşağıdaki ekran, tablaların istenen koordinatlara gönderilmesini sağlıyor.

Aşağıdaki ekranda da kütüphane fonksiyonları görülüyor. Belki zamanla başka fonksiyonlar da eklerim. Her bir seçenekten sonra açılan yeni bir ekranda parametre girişleri yapılıyor. Bu sürümde var olan fonksiyonlar :

  • Çember/halka : İç ve dış çapı ile derinliği verilen bir silindirik kesim.
  • Dikdörtgen : Kenar uzunlukları ve kesim derinliği verilen bir dörtgen kesimi
  • Encoder : İstenen çapta ve delik sayısına sahip optik encoder kesimi
  • Delik : Verilen koordinatlarda, istenen derinlikte delik delinmesi
  • Altıgen vidabaşı yuvası : Vida başının kilitlenecek biçimde gömülmesi için

Aşağıdaki ekran, kütüphane fonksiyonları arasındaki çember/halka kesimine ilişkin parametre girişlerine ait.

Aşağıda, dosya sistemi menüsünden erişilen, SD kart üzerinde kayıtlı, seçilmiş bir tipteki dosyaların listesi görülüyor. Bu örnekte BMP dosyalar seçilmiş görünüyor ama CNC için Gcode tipindeki gerber dosyalar listelenip içlerinden birisi seçilerek çalıştırılabiliyor.

TEMEL TEKNİK ÖZELLİKLER

Şu anki durumuyla CNC nin özellikleri aşağıdaki gibi. Bu günlerde yapacağım değişikliklerle hız ve güç açısından önemli gelişmeler olacak. O değişiklikleri ilerideki paragraflarda vereceğim. Elektronik yapıda ciddi değişiklikler olsa da mekanik yapıda bir değişiklik olmayacak.

  • Motorlar : 3 adet NEMA23 2A adım motoru
  • Çalışma alanı (XYZ) : 150x150x100mm
  • Adım boyutu : 0.020 mm
  • Konumlandırma doğruluğu : % 0.5
  • Konumlandırma tekrarlanabilirliği : +-0.1mm (Yük ve hız sınırlandırmalarına uyulduğunda)
  • 1 mm ilerleme adım sayısı : 50 (Yarım adım tekniği kullanılmaktadır, motorlar 1.8 derece)
  • En yüksek ilerleme hızı : 10mm/sn (600mm/dk)
  • Tipik kesim hızı  : 5mm/sn (300mm/dk)
  • Ekranlar : Bir adet 4 satır 20 karakter LCD, bir adet 320×480 TFT Grafik ekran. Değişken menü görüntülemeleri ve ekrana çizim için.
  • Kullanıcı girişleri : CNC ye PC olmaksızın da doğrudan erişim için bir adet 4×4 tuş takımı. Ayrıca UART üzerinden bağlanan bir PC üzerindeki HMI uygulaması. Bu uygulama CNC ye Gerber kodları aktarmak için ve parametrelendirme için kullanılabiliyor.
  • Kütüphane uygulamaları : Gerek CNC gerekse PC üzerindeki kütüphanelerde halka, dikdörtgen, altı köşebaşlı cıvata yuvaları vb. gibi sık kullanılan kesim işleri için kütüphane fonksiyonları
  • Kabul edilen kodlar : Gerber G-Code ve Excellon delme kodları.
  • Besleme : 220VAC/50Hz
  • Yapısal malzeme : Alüminyum profiller ve fiber takviyeli fenolik reçine plakalar.

CNC NİN TANIDIĞI KOMUTLAR

GERBER KOMUTLARI

Sisteme text dosyaları içindeki Gerber kodlarını PC arayüzü yardımı ile, ya da bir SD karta yükleyerek doğrudan CNC ekran ve tuş takımı aracılığı ile aktarıyoruz.

İnternette Standard Gerber kodlarını açıklayan çok kaynak var. Ben burada sadece bu CNC nin tanıyıp işlediği komutların listesini vermekle yetineceğim. Eğer bu listede olmayan bir komut gelirse, CNC kontrol birimi onu gözardı ederek bir sonraki satıra geçecektir.

Birkaç komut da standard dışı olup (INCH; METRIC; #XLN; #GCO), sadece bu sisteme yönelik. Özellikle M300 serisi komutlarda epeyi eksiğim var. Ama bunların eksikliklerini hissettiğimi söyleyemeyeceğim. Her bir komutun bir LF/NL (‘\r\n’) ile sonlandırıldığını da unutmayalım.

  • % – Program başlangıcı
  • INCH – bu satırdan sonra verilen koordinatların “inch” olduğunu belirtir
  • METRIC – bu satırdan sonra verilen koordinatların “mm” olduğunu belirtir
  • #XLN – Bu satırdan sonraki satırların Excellon komutları olduğunu belirtir
  • #GCO – Bu satırdan sonraki satırların Code – Gerber komutları olduğunu bildirir
  • (…) – Parantezler arasında kalan her şey açıklama (comment) dir, gözardı edilir.
  • G0 … – Bunun ardından verilen koordinatlara maksimum hızda git
  • G1 … – Bunun ardından verilen koordinatlara programda belirlenmiş hızda git
  • X… – Excellon modunda X ile başlayan satırlarda verilen koordinatlara giderek bir delik deler. Gerber modunda sadece satırda verilen koordinatlara gider, delik delmez.
  • G20 – Bu satırdan sonraki koordinatlar inch
  • G21 – Bu satırdan sonraki koordinatlar mm
  • G50 – Ölçeklendirme (scaling) kapalı
  • G51 – Ölçeklendirme (scaling) etkin
  • G54 – Offset ayarı
  • G90 – Bu satırdan sonrakiler mutlak koordinatlar
  • G91 – Bu satırdan sonrakiler bağıl koordinatlar
  • G92 – Bulunulan pozisyon ‘0,0,0’ yani orijin olarak kabul edilir.
  • M03 – Spindle motoru çalıştır
  • M05 – Spindle motoru durdur
  • M06 T xxx – Tool değişikliği
  • M18 – Sürücüleri kapat
  • M30 – Program sonu
  • M48 – Excellon başlık başlangıcı
  • M95 – Excellon başlık sonu/Excellon program başlangıcı
  • M71 – Ölçüler mm
  • M72 – Ölçüler inch
  • M114 – Bulunulan pozisyonu ekranda görüntüle
  • M208 S .. – SW limit ayarları
  • M300 S30 – Pen down
  • M300 S50 – Pen Up
  • Fxxxx – İlerleme hızı (Feed rate) mm/dk
  • Pxxxx – Bekleme (Pause) ms
  • Txxxx – Uç değişikliği – Tool change

GERBER DOSYASI ÖRNEĞİ (CARBIDE CREATE -2019 ÇIKTISI)

EXCELLON DOSYASI ÖRNEĞİ (EAGLE ÇIKTISI)

Burada #XLN satırını ben ekledim. Zira CNC yazılımım Gerber ve Ecellon kodlarını aynı dosya içinde işleyebiliyor. Bunun için de Gerber ve Excellon kod bloklarını ayırd edebilmesi gerekiyor.

TEMEL MODEL HAKKINDA SON SÖZ

Temel model olarak andığım, Ağustos 2020 deki mekanik-Elektronik donanım ve yazılım konfigürasyonuna sahip cihaz sürümü. Yeterince test edilmiş olan bu model, 0.2mm doğrulukla ve 250mm/dk kesim hızıyla amatör çalışmalar için gayet tatminkar sonuçlar veriyor. Muhtelif sertliklerde ahşap, akrilik, fenolik reçine ve Fiber-Epoxy PCB plaketleri, fiber takviyeli fenolik plaka ve bloklar rahatlıkla işlenebiliyor. Metal işleme konusunda başarılı olamadım, ama sorun CNC den çok, kullanılması gereken kesici uçlardan kaynaklanıyor. Soğutma sıvısı mekanizmalarının olmaması da bir etken.

Bu haliyle stabil ve iş gören bir alet olmakla birlikte, yazılım ve motor sürme teknikleri açısından bugün ulaşmış olduğum seviyenin epeyi gerisinde kalmış durumda. Şimdi esaslı bir güncelleme yapma zamanı. Sonuçları bu yayının ikinci bölümünde anlatacağım.

Bu yayının sonu – Selçuk Özbayraktar Eylül 2020

2 Replies to “STM32 TABANLI MASAÜSTÜ CNC-1”

    1. İlgi ve yorumunuz için teşekkürler Cengiz bey. Böyle şeylerle uğraşıp da başkalarının bu konularda yaptıkları ile ilgilenmemek elbette garip olurdu. Üzerinde haftalarca çalıştığım, öğrenmek için kafa yorduğum her şeyin zaten yapılmışı var. İnternette ücretsiz açık ya da kapalı kaynak kodlu çok CNC yazılımı var. Linux CNC bunlardan birisi ve burada sayamayacağım kadar çok MAC3 tabanlı program var. Benim amacım yeni bir şeyler öğrenmek, artık yaşlanmakta dolan beynimi zinde tutmak, “ben de yapabiliyorum” diyebilmek, bu arada da benden bir şeyler öğrenmek isteyenler olursa yardımcı olmak. Bakarsınız zaman zaman kimsenin yapmayı akıl etmediği bir şeyler de araya karışmış :). Selamlarımla,

Leave a Reply

Your email address will not be published. Required fields are marked *