Pada pergerakan printer Cartesius sangat sederhana. Jika kita menganggap printer memiliki 100 langkah / mm pada setiap sumbu, maka gerakan 10mm pada sumbu hanya 1000 langkah pada sumbu itu.
Gerakan yang tidak selaras dengan satu sumbu juga sederhana. Pindah dari x, y = 0,0 ke 10,10 akan menjadi 1000 langkah pada x dan y.
Pada delta bahkan untuk gerakan sederhana, lebih dari satu motor harus bergerak. Dan hanya menghitung jumlah langkah pada setiap sumbu yang dibutuhkan untuk mencapai tujuan mungkin memberikan gerakan melengkung.
Jadi apa algoritma untuk menghitung langkah-langkah untuk langkah yang diberikan untuk printer delta?
Jawaban:
Ada dua langkah khusus utama untuk teknik yang digunakan oleh sebagian besar pengontrol printer open-source 3d:
Kinematika terbalik ternyata sangat sederhana. Segitiga 90 derajat virtual dibangun dari dua panjang yang diketahui untuk dipecahkan untuk panjang ketiga yang tidak diketahui:
Saya pikir referensi open-source terbaik di sini adalah dokumen Rostock Kinematika Steve Grave, rev3 tersedia untuk diunduh di sini: https://groups.google.com/d/msg/deltabot/V6ATBdT43eU/jEORG_l3dTEJ Beberapa gambar yang relevan:
Perhitungan kinematika terbalik ini dilakukan untuk setiap carriage untuk mendapatkan posisi target "carriage space", dan ini dilakukan untuk setiap sub-segmen jalur.
Hasil dari langkah-langkah ini kemudian dapat dimasukkan kembali ke dalam teknik interpolasi jalur linier standar untuk printer, di mana ia meluncurkan langkah-langkah dalam rasio yang diperlukan dan pada tingkat yang diperlukan untuk menghasilkan gerakan garis lurus yang diinginkan dan profil percepatan / kecepatan. (Bagaimana hal itu dilakukan adalah pertanyaan yang berbeda.)
Efek bersihnya adalah bahwa printer akan bergerak melalui serangkaian gerakan carriage "linear" kecil (linear yang berarti kecepatan * konstan berkenaan dengan waktu) yang secara kolektif memperkirakan gerakan kereta yang diperlukan melengkung (posisi kuadrat dengan memperhatikan waktu) yang diperlukan untuk menghasilkan langkah-efek akhir garis lurus.
* ( Kecepatan konstan sebelum perlambatan akselerasi diterapkan untuk mematuhi batasan dinamika. Lagi-lagi, itulah subjek pertanyaan yang berbeda.)
Segmentasi sangat mirip dengan proses menggunakan poligon untuk memperkirakan lingkaran. Jika segi cukup kecil, poligon adalah pendekatan yang baik. Tingkat Segmentasi yang lebih tinggi menghasilkan lebih sedikit kesalahan mengikuti jalur. Perbedaan konseptual utama antara busur lingkaran gambar dan jalur gerak Delta adalah bahwa apa yang disebut "busur segi-segi" dengan Delta Segmentation dibangun dalam koordinat tinggi-vs-waktu, bukan koordinat X-vs-Y yang akan Anda gunakan untuk menggambar lingkari layar komputer.
Sistem ini digunakan sebagian besar karena dukungan untuk printer gaya Delta pada awalnya melesat ke perencana gerakan berbasis GRBL yang ditulis khusus untuk jalur gerak garis lurus pada printer Cartesius. Itu adalah modifikasi yang relatif minimal untuk basis kode yang ada dibandingkan dengan menerapkan interpolasi jalur kuadratik penuh.
Teknik telah berkembang selama bertahun-tahun. Dan pendekatan alternatif sering digunakan: misalnya, garpu dc42 dari RepRapFirmware melakukan path-following yang tepat tanpa segmentasi, dengan menghitung ulang waktu yang tepat untuk langkah berikutnya setelah setiap langkah . Ini secara fungsional setara dengan mendekati lingkaran dengan jumlah segi poligon begitu tinggi sehingga setiap piksel pada layar mendapatkan segi sendiri . Jadi persis seakurat resolusi posisi motor memungkinkan. Kelemahannya adalah bahwa teknik bebas segmentasi ini cukup intensif-prosesor, sehingga hanya bekerja pada pengontrol yang relatif cepat, bukan Atmega AVR 8bit yang lebih lama yang menggerakkan sebagian besar printer konsumen / penggemar saat ini.
Teknik lain dimungkinkan. Literatur kontrol robotika akademik paralel adalah seluruh dunia lain dari teknik matematika dan kompleksitas untuk menghasilkan algoritma kontrol umum yang bekerja untuk berbagai mekanisme robot. Versi yang kami gunakan dalam printer 3d open-source cukup sederhana dan spesifik aplikasi dibandingkan.
sumber
Saya menjelaskan bagaimana ini dilakukan dalam firmware Marlin.
Langkah pertama adalah membagi gerakan linier dari (x, y, z) ke (x ', y', z ') menjadi banyak segmen diskrit. Untuk tujuan ini, jumlah waktu langkah akan diambil pada kecepatan yang diberikan dihitung, dan nilai delta_segments_per_second digunakan untuk menghitung jumlah segmen yang digunakan.
Ini dilakukan dalam fungsi prep_move_delta dalam file Marlin_main.cpp. Titik akhir dari masing-masing segmen ini kemudian diteruskan ke fungsi calcul_delta :
Fungsi ini menangani geometri delta dan perhitungan yang diperlukan untuk mengkonversi (x, y, z) koordinat titik akhir segmen ke posisi yang sesuai untuk gerbong. Koordinat yang diterjemahkan kemudian diteruskan ke plan_buffer_line , yang menghitung langkah-langkah yang diperlukan untuk setiap motor stepper dan benar-benar membuat langkah-langkah ini terjadi.
Kinematika yang tepat digunakan dalam fungsi ini dijelaskan lebih detail di Marlin github .
Yang penting untuk dicatat adalah plan_buffer_line memindahkan carriage secara linier, dan printhead dengan demikian menggambarkan lengkungan dan bukan garis lurus. Dengan demikian, sebuah garis lurus diperkirakan oleh banyak busur kecil.
sumber