CNC Yazılım ve Hesaplaması

Başlatan tenri, 07 Eylül 2022, 16:37:30

tenri

Merhabalar,

Bitirme projemi 4 eksenli robot kolunun tasarımı, kinematik analizi ve çalıştırılması üzerine tamamlamıştım. 4 eksenli robot kolunun ileri ve ters kinematik hesaplamalarını el ile hesaplayıp MATLAB üzerinden gerçekleştirmiştim. Bir arayüz de tasarlamıştım çok güzel çalışıyordu.

Ancak CNC ve 3D yazıcılar kartezyen robot kategorisine giriyor. Masa tipi bir CNC tasarlamak istiyorum ancak girilen x,y ve z eksenlerinin hesaplanmasının nasıl yapılacağını hala kafamda oturtamadım. Yani ben g code dosyasını okuduğumda tek tek eksenleri registerdan çekip gidip o kesim işlemini yapacak ancak nerden başlayacağımı bilemedim. Tasarım anlamında bir problem olmaz 1-2 hafta içerisinde masa tipi bir cnc'yi tasarlayabilirim. PCB çizim, yazılım yazılması ve devrenin kurulumu vs bunlar da problem yok ancak tek sıkıntı algoritması nasıl çalışıyor?

Değerli yorumlarınızı ve önerilerinizi bekliyorum. Döküman, websitesi veya proje paylaşımı da yapabilirseniz çok sevinirim.


Teşekkür ederim.

Sozuak

Marlin gibi 3d yazıcı firmware dosyaları açık kaynak indirip inceleyebilirsiniz.


fatal16


Firzen

Sanırım sormak istediğini doğru anladıysam eksen takımları nasıl referanslanıyor. Çünkü Robot kol kartezyandan daha zor. Robot kolda ileri geri ters kinematik için 4x4 lük küresel ve silindirik koordinat parametreleri kullanıyorsun. Dikkat edersen 3d yazıcılarda ise kayar koordinatlar var bu yüzden 4X4 matris içindeki sin cos tan parametreleri olmaksızın eksen sayısına göre bir daha matrisi hesaplatabilirsin. ileri kinematik ve ters kinematik olarakta normalde açık çevrim ve kapalı çevrim olmasına göre durum değişiyor. G Code sana hangi motor değil hangi yörüngeyi ne hızla gitmesi gerektiğini söylüyor yani robot kolda senin verdiği Yol Planlama ve takibi gibi.
The University of Sheffield                                  (PhD) Automatic Control and Systems Engineering

ahmet35

Robotik dersinden hatırladığım kadarıyla kartezyen sistemlerde ileri ve ters kinematiğe ihtiyaç yok. Çünkü tezgahı sıfır noktasına çektikten sonra eksenlerin konumları elinde var. Yani her bir eksenin absolute hareket miktarları belli.

Üç eksen frezeler de tek bir hareket üzerine kurulu sistem. Bu da doğrusal senkron harekettir. Üç eksenin aynı anda harekete başlayıp aynı anda bitirmesi gerekiyor.
G kodlarında da dairesel hareketler oluşan çemberin çok küçük doğrusal çizgilere çevrilmesi ile gerçekleştiriliyor.


Firzen

Alıntı yapılan: ahmet35 - 08 Eylül 2022, 10:53:05Robotik dersinden hatırladığım kadarıyla kartezyen sistemlerde ileri ve ters kinematiğe ihtiyaç yok. Çünkü tezgahı sıfır noktasına çektikten sonra eksenlerin konumları elinde var. Yani her bir eksenin absolute hareket miktarları belli.

Üç eksen frezeler de tek bir hareket üzerine kurulu sistem. Bu da doğrusal senkron harekettir. Üç eksenin aynı anda harekete başlayıp aynı anda bitirmesi gerekiyor.
G kodlarında da dairesel hareketler oluşan çemberin çok küçük doğrusal çizgilere çevrilmesi ile gerçekleştiriliyor.



Aslına bakarsan şöyle gerek var veya yok. Eğer kullandığın motor servo motorsa kapalı çevrime girer gerek var. Eğer stepper motor ve enkodersizse (Aslına bakarsan o da servo motor demek = geribeslemeli motor) o zaman gerek yok çünkü matrisler hep sıfır gelir ve değerlerin doğru olduğunu kabul edersin.

Ve evet dediğin gibi Yol Planlama işlemini minik noktalara bölüp lineerleştirerek yapar.
The University of Sheffield                                  (PhD) Automatic Control and Systems Engineering

ahmet35

Alıntı yapılan: Firzen - 08 Eylül 2022, 15:28:31Aslına bakarsan şöyle gerek var veya yok. Eğer kullandığın motor servo motorsa kapalı çevrime girer gerek var. Eğer stepper motor ve enkodersizse (Aslına bakarsan o da servo motor demek = geribeslemeli motor) o zaman gerek yok çünkü matrisler hep sıfır gelir ve değerlerin doğru olduğunu kabul edersin.

Ve evet dediğin gibi Yol Planlama işlemini minik noktalara bölüp lineerleştirerek yapar.


@Firzen hocam kapalı çevrim olsa bile, her bir eksenin mutlak step pulse sayısını bildiğim için eksen konumlarını, bir mm için gerekli step pulse sayısı ile oranladığımda bilebilirim.   

tenri

#8
Örnek olarak nema17 kullandım diyelim, x, y ve z konumlarını sıfır konumuna getirdim. Yani herhangi bir x,y ve z için sıfır konumları belirleyip o konuma getirdim ve bekledim. Daha sonra x:15, y:15 ve z:0 konumuna git dediğim de nema17 stepper motorlar o noktalara gitmek için ne kadar dönmesi gerektiğini nasıl bilecek? Nema17 stepper motorlar her adım da 1.8 derece dönüyor. Bu da 200 tetikleme de 360 derece yapar. Tabi 1:1 çözünürlük için bu böyle. Dediğim gibi verilen x, y ve z nokta değerlerine gidebilmesi için stepper motorların o noktaya gideceği tetikleme sinyallerini bilmem gerekiyor. İşi karmaşık yapan bu aslında.  Tabi bir de sonsuz millerin dişlerinin açısı da hesaplamalar için bir etken.

esensoy

#9
2 tane interpolasyon var, bu ikisi ayrı ayrı ele alınmalı
1 Doğrusal interpolasyon, (G0, G1)
2 Dairesel interpolasyon (G2,G3)

G code içindeki her bir satır bir bloktur ve yazılım makineyi blok blok çalıştırmalı,

Diyelim makinen X10. Y2. Z4. koordinatlarında
G1 X5. Y3. F400 --> bu bir blok, F mm/min, yani eksenin dakikada kaç mm gideceğini gösteriyor, F olmasa da o anki F değerinden çekilecek,

DeltaX = 5 - 10 = -5.
DeltaY = 3 - 2  = 1.
F400  = mm/min

X için konuşursak;
60 sn de 400 mm ise 5 mm yi 0.75 saniyede eşit adımlarla aldırman lazım (dönme ve durma ivmelenmelerini hesaba katmıyorum)
Bu arada senin mekaniğinin bir sabiti var, motor 1 adım döndüğünde mekaniğin x mm hareket ediyor. Bunlar makine yapılırken ölçüldü ve ilgili hafızaya kaydedildi. diyelim ki sistemin 1000 adımda 1mm gidiyor,

yani bize 5000 adım lazım
bunu da 0.75 saniyede, yani her 0,00015 saniyede 1 adım çıkaracak şekilde sistemini kurman lazım.




Şimdi sen sisteminde şöyle bir ölçüm yapıyorsun;

G code oku,
Gidilecek mesafeleri bul,
Bunları F e göre adımla,
İlgili adımları kesmelerine yaz, ve adımla, eksenler yürüsün,
Bitiş.

Bu döngüyü ne kadar hızlı işletebiliyorsan bu senin interpolasyon zamanın oluyor,
diyelim ki döngünü ölçtün 1.1ms gibi bir zaman tutuyor,
2ms lik bir timer kur,
her 2 ms için adımlarını hesapla,(yukarıdaki örnekte X için 0.75 sn de 5000 adım ise 2ms de 13,3 adım atması lazım),
Kabaca bu şekilde yürümeli

Dairesel interpolasyon ise dairenin minik doğrulara bölünmesinden sonra her bir doğru için yukarıdaki işlemlerin yapılmasından ibaret,

Tekrar hatırlatayım, harekete başlamadan önce elimizdeki sabitleri bilmemiz gerekiyor;
Senin kartının çıkarabildiği max pulse sayısı ( 125kHz, 400kHz, vs gibi)
Her bir ekseninin 1mm yi kaç adımda gittiği
Her bir eksenin max hızı(Velocity mm/sn)
Her bir eksenin ivmelenme değeri (acceleration mm/sn^2) bunu ihmal ettik
En tehlikeli an "zafer" anıdır.

frederic

Bitirme tezinizi yayınladığınız bir yer varmı acaba okuyabilmek için ?

tenri


Firzen

Alıntı yapılan: ahmet35 - 08 Eylül 2022, 21:12:36@Firzen hocam kapalı çevrim olsa bile, her bir eksenin mutlak step pulse sayısını bildiğim için eksen konumlarını, bir mm için gerekli step pulse sayısı ile oranladığımda bilebilirim.   

Step motorlarda adım kaçırma problemi olabileceğinden riske girilmek istenmez o yüzden kapalı çevrim sistem pahalı ama tercih edilendir. 3D yazıcılarda step kullanılmasının nedeni tamamıyla maliyet konusunda. Yayınlarda bile SERVO-vs-STEP 3d baskı sonuçları karşılaştırılır.
The University of Sheffield                                  (PhD) Automatic Control and Systems Engineering