Baskı Devre Kartı Delme Makinesi – VI
Yazı dizimizin altıncı ve son bölümü. Bilgisayar kontrollü baskı devre kartı delme makinesi (CNC PCB Drilling Machine) yapmak isteyenler, gerçekleştirilmiş olan bu projeye ilişkin yazı dizisini kaçırmasınlar! MAXIMUS’un hikayesi bu sayıda bitiyor.
PC Yazılımı
Yazılımı oluşturan yapılar şunladır:
Kullanıcıyla etkileşecek grafik arabirimi (GUI – Graphical User Interface)
Excellon delgi dosyasın açılması
Dosyadan alınan delik koordinatlarının uygun değişkenlere atanması
Seri port haberleşme rutinleri
Makine ayarlarının yapılabileceği ayar penceresi
Offset noktasının belirlenebilmesi için manuel makine hareketi (JOG)
Tüm deliklerin delinebilmesi için otomatik makine hareketi (DRILL)
Delik çaplarını gösteren “tool index” penceresi
Makine hareketinin ani olarak durdurulmasını sağlayan “Emergency Stop” düğmesi
Yazılım Borland C++ Builder 5.0 altında hazırlanıp derlenmiştir.
Grafiksel Kullanıcı Arabirimi
Yandaki resimde programın ekran görüntüsü görülmektedir. Arabirimi güzelleştirmek için araç çubuğu butonlarında “TMS Software” firmasının “Advanced Tool Button Component” paketi kullanılmıştır. Pencerenin sol tarafındaki “String Grid” içinde delik koordinatları listelenmektedir. Ortadaki beyaz alan delik yerleşimlerinin görüntülendiği “Image Canvas” kısmıdır. Sağ alttaki “Memo Box” ise kullanıcıyı yönlendirmek ve bilgi vermek amacıyla kullanılmaktadır.
Excellon Delgi Formatı
Baskı devre endüstrisinde kart delim işlemleri Excellon delgi dosyaları üstünden yapılır. Bu nedenle, tüm CAD programları Excellon formatında delgi dosyası üretebilir. Excellon dosyası, bir baskı devre kartı üstündeki tüm delik koordinatlarının belirlenen offset noktasına göre listelendiği bir ASCII text dosyasıdır. Delik koordinatlarının dışında çeşitli makine ayarları da bu dosya içinde yer alır. Aşağıda OrCAD 9.0 Layout Plus programında üretilen bir delgi dosyası görülmektedir.
Satır | Açıklama |
% | Başlık bölümü sonu (Bu dosyada başlık bölümü yok) |
T1C0.034F200S100 | Tool No = 1, Diameter = 34 mils, Feedrate = 200 IPM, Spindle = 100000 RPM |
X003000Y003000 | X = 300 mil, Y = 300 mil (Offset noktasına göre) |
X004000Y003000 | X = 400 mil, Y = 300 mil (Offset noktasına göre) |
… | … |
… | … |
… | … |
X009000Y003000 | X = 900 mil, Y = 300 mil (Offset noktasına göre) |
X009000Y006000 | X = 900 mil, Y = 600 mil (Offset noktasına göre) |
M30 | Drill dosyası sonu |
Delgi Dosyasının İşlenmesi
Yukarıda görülen delgi dosyası program içinde açıldıktan sonra her satırın ilk karakteri program tarafından incelenir. Satırın ilk karakterinin “T” , “X” yada “M” olup olmadığı kontrol edilir. Bu 3 harf dışındaki karakterlerle başlayan satırlar es geçilir.
“T” karakteri gelmesi durumunda tool index değişkeni uygun delik numarası ile atanır. Bir sonraki satıra geçilir.
“X” karakteri gelmesi durumunda 6 haneli X ve Y eksenlerinin offset noktasına olan uzaklıkları uygun değişkenlere atanır. Bir sonraki satıra geçilir.
“M” karakteri gelmesi durumunda deişkenlere atama işlemi sonlandırılır. Delgi dosyası kapatılır.
Değişkenlere atama işlemi aşağıdaki şekilde tanımlanan holes[] yapısı (structure) altında gerçekleşir.
struct holeFile
{
char T[3];
char X[7];
char Y[7];
};
holeFile holes[1000];
Burada, 3 bitlik T dizisi delik çapı numarasını, 7 bitlik X dizisi deliğin x ekseninden offset noktasına olan uzaklığını, 7 bitlik Y dizisi de deliğin y ekseninden offset noktasına olan uzaklığını tutmaktadır.
Program makisimum 1000 delik işleyebilecek şekilde derlenmiştir ancak kaynak kodunda holes[1000] tanımlaması değiştirilerek daha fazla delikli kartların işlenmesi sağlanabilir.
Seri Port Haberleşmesi
Seri port haberleşmesi için “Dejan Crnila” tarafından yazılan “ComPort Component” paketi kullanılmıştır. Kullanılan bu paket sayesinde, seri port haberleşmesi oldukça basite indirgenmiştir. Paket, C++ Builder ortamına yüklendikten sonra normal componentler gibi (button, editbox vs) form üstüne taşınıp kod içinde kullanılmıştır.
Paket içinden kullanılan fonkisyonlar:
ComPort1->ShowSetupDialog() Seri port ayar penceresini aç
ComPort1->Open() Seri portu aç
ComPort1->Close() Seri portu kapat
ComPort1->Read() Seri porttan oku (zaman aşımı olana kadar)
ComPort1->Write() Seri porta yaz
Paket içinden kullanılan event’ler:
TFormMain::ComPort1RxChar() Seri porta veri gelince çalışan event
Makine Ayar Penceresi
Makine ayarlarının yapıldığı ve saklı tutulduğu penceredir.
Full steps per unit Step motorun 1 full-step hareketinin oluşturduğu yerdeğiştirme miktarı (Hareketlerin oluşturacağı step miktarı bu alanlara girilen değerler ile belirlenir.)
Driving Modes Eksenlerin Half-step/Full-step sürüleceği
Invert Direction Step motor sürücülerindeki DIR pinlerinin polaritesi (Kullanımı: Jog Modunda sağa basınca eksenin sola hareket etmesi durumunda “Invert DirX Pin” seçilmelidir.)
PCB Drill Mode Offset noktasının belirlenme şekli (“Drill Using Placement Matrix” özelliği henüz tamamlanmamıştır, bu nedenle seçim inaktif durumdadır.)
Axis Speeds Eksen hızları (Girilen değerler step periyodunun yarısını belirtiği için düşük değerler daha hızlı hareket manasına gelmektedir.)
Head Movement from Z Offset Delgi işlemi sırasında, matkap kafasının JOG penceresinde belirlenen offset noktasına göre hareket ve delgi konumu (Normalde bu alanların el ile girilmesine gerek yoktur. Jog penceresi içinden yapılan ayarlamalar, bu alanlara otomatik olarak etki etmektedir.)
Tool Changing Delik çapının değişmesi durumunda, programın matkap ucunun değiştirilmesi için uyarı verip vermeyeceği
Bu menülerde yapılan ayarlardan “Full steps per unit”, “Invert Direction” ve “Tool Changing” kısımları sadece program içinde kullanılır. Geriye kalan “Driving Modes”, “Axis Speeds” ve “Head Movement from Z Offset” ayarları ise gereken zamanlarda seri port üstünden kontrol kartına gönderilir.
Yapılan ayarların program her açıldığında tekrar girilmemesi için bir dosyaya kaydedilmes
i gerekmektedir. Bunun için INI dosya yapısı kullanılmıştır. Programın her açılışında tüm ayarlar INI dosyasından yüklenmektedir. INI dosyasının bulunamaması durumunda program varsayılan ayarları kullanmaktadır. Ayar penceresi kapatıldığında değişen alanlar INI dosyasına kayıt edilmektedir.
INI dosyasından okuma örneği:
TIniFile *ini;
ini = new TIniFile(ChangeFileExt( Application->ExeName, “.INI” ) );
MaskEditOneStepX->Text = ini->ReadString( “Steps per Unit”, “OneStepX”, “008.7500” );
delete ini;
INI dosyasına yazma örneği:
TIniFile *ini;
ini = new TIniFile(ChangeFileExt( Application->ExeName, “.INI” ) );
ini->WriteString(“Steps per Unit”,”OneStepX”,MaskEditOneStepX->Text);
delete ini;
JOG Modu
Jog penceresi açılarak makine jog modunda manuel olarak çalıştırılabilir. Bu sayede eksenler ayrı ayrı çalıştırılıp denemeler yapılabilir. Ayrıca, Jog penceresi Offset noktasının ve Z ekseni hareket konumlarının belirlenmesinde kullanılır. (Detaylar için dosyalar bölümündeki “kullanım adımları” dökümanını inceleyiniz.)
DRILL Modu
Delgi dosyası açıldıktan ve Jog penceresi içinde offset noktası belirlendikten sonra “Drill” butonu aktifleşir. Drill butonuna basılarak Drill modu çalıştırılır. Bu aşamadan sonra gerçekleşen işlemler sırasıyla şöyledir:
gotoOffsetPosition() fonksiyonu çağrılarak OPENDRILLMODE1 byte’ı PIC’e gönderilir. Timeout olana kadar DRILLMODE1ON byte’ının alınması beklenir. Bu byte alındıktan sonra o anki eksen konumlarına göre “Offset Positioning Packet” oluşturulur ve PIC’e gönderilir. PIC bu paketi aldıktan sonra eksenleri offset noktasına taşıyıp PC’ye ATOFFSETPOS byte’ını gönderir.
ATOFFSETPOS byte’ı alındıktan sonra initializeDrillMode() fonksiyonu ile “Initialize Drill Mode Packet” oluşturulup PIC’e gönderilir. PIC bu paketi aldıktan sonra gerekli makine ayarlarını yapıp PC’ye DRILLMODE1INITIALIZED byte’ını gönderir.
DRILLMODE1INITIALIZED byte’ı alındıktan sonra boş bir “Drill Data Packet” oluşturulup PIC’e gönderilir. (Bu boş paketin gönderilme amacı offset noktası delinmeden delgi işlemine başlamaktır.) PIC bu paketi aldıktan sonra delgi işlemi yapılmış gibi PC’ye ONEHOLEDRILLED byte’ını gönderir.
ONEHOLEDRILLED byte’ı alındıktan sonra sırasıyla eksen konumları güncellenir, en son delinen nokta kırmızı daire içine alınır ve tool change durumu kontrol edilir. Bundan sonra holeFile[] yapısındaki ilk deliğin koordinatları “Drill Data Packet” ile PIC’e gönderilir. PIC paketi çözüp delgi işlemini gerçekleştirir. Bu sırada PC üstünde yapı indisi bir arttırılarak delik sayısı ile karşılaştırılır. Tüm delikler delinene kadar PIC’e “Drill Data Packet” X ve Y koordinatları ile gönderilir. Delikler delindikten sonra son paket, config byte’ı içindeki “Continue Drilling Flag” biti 0 yapılarak PIC’e gönderilir ve delgi rutininden çıkılır. (Paket yapısı için MCU Yazılımı sayfasını inceleyiniz.)
PIC CDF=0 bitini aldıktan sonra PC’ye DRILLMODE1DONE byte’ını gönderir.
DRILLMODE1DONE byte’ı alındıktan eksenler X-Y-Z sırasında offset noktasına çekilir. (Bu işlem kullanıcıya belli edilmeden Jog modu içinde gerçekleşir.) Bu sayede mekanik sistem delgi sonrasında başlangıç konumuna dönmüş olur. Drill modu tamamlandıktan sonra makine kontrolü tekrar kullanıcıya geçer.
Resimler
Alper YILDIRIM
b0164043@hacettepe.edu.tr