Firmware DIY untuk printer LCD 3D photopolymer. Bagian 2





Kelanjutan dari artikel tentang menulis firmware Anda sendiri untuk printer LCD 3D photopolymer.

Pada bagian ini, saya akan terus menjelaskan tahapan proyek saya:

2. Bekerja dengan USB flash drive dan file di dalamnya

3. Mengontrol motor stepper untuk memindahkan platform.





- Bagian 1: 1. Antarmuka pengguna.

- Bagian 2: 2. Bekerja dengan sistem file pada USB-stick. 3. Kontrol motor stepper untuk gerakan platform.

- Bagian 3: 4. Menampilkan gambar lapisan pada tampilan lampu latar. 5. Setiap hal kecil, seperti mengontrol pencahayaan dan kipas, pengaturan pemuatan dan penyimpanan, dll. 6. Fitur tambahan untuk kenyamanan dan kemudahan.



2. Bekerja dengan USB flash drive dan file di dalamnya



Saya belum pernah bekerja dengan host USB di mikrokontroler sebelumnya. Sebagai perangkat USB - Saya membuat firmware dengan kelas CDC (emulasi port COM) dan kelas HID, tetapi tidak berfungsi dengan host. Oleh karena itu, untuk mempercepat prosesnya, saya membuat semua inisialisasi perangkat ini di STM32CUBE. Hasilnya, saya mendapat host yang bekerja dalam mode USB FS yang mendukung perangkat penyimpanan massal. Di kubus yang sama, saya segera menghubungkan pustaka FatFS untuk bekerja dengan sistem file dan file. Kemudian Anda hanya perlu menyalin sumber yang diterima ke dalam proyek Anda dan mencari cara untuk bekerja dengannya. Ternyata mudah dan tidak banyak yang bisa dijelaskan di sini. File usb_host.c dari Kuba memiliki variabel global Appli_state jenis ApplicationTypeDef:

typedef enum {
  APPLICATION_IDLE = 0,
  APPLICATION_START,
  APPLICATION_READY,
  APPLICATION_DISCONNECT
}ApplicationTypeDef;


Pada berbagai kejadian periferal host USB (dalam interupsi), variabel ini dapat menggunakan salah satu status yang terdaftar, yang menunjukkan status host saat ini. Di loop utama program, tetap hanya melacak perubahan dalam variabel ini dan bereaksi sesuai. Misalnya, jika nilainya telah berubah menjadi APPLICATION_READY, maka flash drive atau card reader telah terhubung dan berhasil diinisialisasi, Anda dapat membaca file darinya.



Juga tidak ada kesulitan dengan FatFS - Cube sudah sepenuhnya mengkonfigurasinya dan "menghubungkan" ke host USB, jadi segera setelah menghubungkan flash drive, Anda dapat mengakses fungsi perpustakaan ini untuk bekerja dengan file. Benar, kubus yang baru diperbarui menyertakan pustaka versi lama. Setelah memperbarui file-nya ke versi baru, saya harus memperbaiki nama definisi dari konfigurasi FatFS di beberapa tempat di kode sumber Kuba, karena mereka telah berubah di versi baru. Tetapi pembaruan tidak membawa masalah khusus, semuanya berjalan dengan cepat dan mudah.



Tetapi agar FatFS dapat bekerja dengan Cyrillic atas nama file dan direktori, saya harus bermain-main sedikit. Agar FatFS dapat membaca nama Cyrillic dengan benar, Anda harus mengaktifkan Unicode dalam konfigurasinya, dan setelah itu semua string yang terkait dengan FatFS harus hanya ada dalam pengkodean ini - nama drive, nama file, dll. Pada saat yang sama, editor teks di IDE dan FatFS mendukung Unicode dengan posisi byte tinggi yang berbeda - satu dengan Little Endian, yang lain dengan Big Endian, jadi tidak mungkin untuk hanya menulis sumber dengan teks Unicode. Dan saya tidak mau, jujur ​​saja. Saat itulah saya harus menulis konverter dari ANSI dan UTF-8 ke Unicode dan sebaliknya, ditambah beberapa fungsi untuk bekerja dengan string pengkodean berbeda dalam kombinasi berbeda. Misalnya, salin string UTF-8 ke string Unicode, atau tambahkan string ANSI ke string Unicode. Namun, string ANSI sepertinyatidak ada tempat yang tersisa, semua sumber sepenuhnya dikonversi ke pengkodean UTF-8.

Jadi, membuka file dengan nama tertentu sekarang terlihat seperti ini:

tstrcpy(u_tfname, UsbPath);	//    (Unicode)    (Unicode)
tstrcat_utf(u_tfname, SDIR_IMAGES);	//    (Unicode)   (UTF-8)
tstrcat_utf(u_tfname, (char*)"\\");	//    (Unicode)  (UTF-8)
tstrcat(u_tfname, fname);	//    (Unicode)   (Unicode)


Ketika semuanya bekerja dengan cepat, saya ingin memeriksa kecepatan membaca file dari flash drive. Membaca file 10MB dalam blok 4 KB menunjukkan kecepatan sekitar 9 Mbps, yang secara umum cukup bagus dan cocok untuk saya.



Saya mencoba mempelajari masalah mentransfer kasus ini ke DMA, tetapi ternyata periferal host USB tidak memiliki akses ke DMA. Ya, atau saya tidak menemukannya :) Oleh karena itu, tampaknya logis untuk mengatur semua buffer baca / tulis untuk file USB di CCM (Core Coupled Memory) - area RAM 64 KB yang juga tidak memiliki output DMA. Di area memori yang sama, masuk akal untuk menempatkan variabel / array lain yang tidak bekerja dengan DMA, hanya untuk menyisakan lebih banyak memori di RAM biasa. Ngomong-ngomong, menurut saya kernel itu sendiri bekerja sedikit lebih cepat dengan memori ini daripada dengan memori biasa.



2.1 Antarmuka Pengguna File



Printer Anycubic Photon S yang saya miliki menampilkan daftar file sebagai ikon pratinjau, 4 buah per layar. Dan pada prinsipnya, itu cukup nyaman - Anda dapat melihat nama file, di gambar pratinjau Anda dapat melihat kira-kira model seperti apa. Oleh karena itu, saya mengikuti jalur yang sama - file ditampilkan 4 buah per halaman dalam bentuk gambar pratinjau dengan nama file.



Folder kuning yang sudah dikenal digambar pada ikon direktori, dan roda gigi pada file pengaturan. Hanya file yang ekstensinya termasuk dalam salah satu file yang diketahui yang akan ditampilkan. Saat ini, ini adalah file .pws (file yang disiapkan oleh pemotong untuk dicetak) dan file .acfg (file teks dengan pengaturan printer).



Karena firmware juga bekerja dengan direktori yang dapat dimasuki oleh pengguna, saya menempatkan baris di atas daftar file tempat jalur saat ini ditulis. Tombol untuk keluar dari direktori saat ini atau menggulir ke bawah dan atas hanya muncul jika masuk akal - yaitu, saat Anda dapat meninggalkan direktori saat ini atau menggulir daftar ke bawah atau atas.





Teman saya, yang saya tunjukkan semua ini ketika firmware ditulis, menyarankan opsi lain untuk mengeluarkan file - dalam bentuk daftar, tabel. Pertama, kemudian lebih banyak file muat di halaman, dan kedua, daftar ditampilkan lebih cepat, karena Anda tidak perlu membaca gambar pratinjau dari file dan menggambarnya dengan penskalaan pada tampilan, dan ketiga, dalam bentuk tabel, Anda juga dapat menampilkan selain namanya dan waktu terakhir kali file diubah, yang terkadang sangat memudahkan. Merupakan dosa untuk menolak ide yang baik, jadi saya menambahkan daftar tabel, dan pada saat yang sama tombol untuk beralih antara tampilan "ikon" dan "tabel". Direktori dalam bentuk tabel disorot dengan latar belakang kuning dan baris "DIR" ditulis sebagai pengganti tanggal-waktu:





Omong-omong, tidak ada intrik tentang gambar pratinjau yang diambil untuk file dalam mode ikon. Firmware tidak menganalisis seluruh file untuk membuat gambar dari model 3D, seperti yang dipikirkan beberapa orang :) Gambar ini disimpan dalam file cetak oleh pemotong itu sendiri, dalam format yang mirip dengan BMP - larik nilai warna piksel 16-bit. Ukuran gambar pratinjau disimpan di bidang khusus di dalam file. Jadi semuanya sangat sederhana.



Satu-satunya hal yang harus dibebani firmware adalah mengubah skala gambar dari file ke ukuran ikon di layar. Firmware melakukan penskalaan dengan cara yang sangat sederhana: faktor penskalaan k dihitung(angka pecahan) - lebar gambar asli dibagi dengan lebar area tampilan pada tampilan (koefisien tinggi juga dihitung dan yang terbesar dari kedua nilai digunakan) dan kemudian piksel dan garis diambil dari gambar asli untuk ditampilkan pada tampilan dengan langkah k .



Dengan cara ini, Anda dapat menskalakan plus dan minus. Kualitas hasil yang diskalakan, tentu saja, menyisakan banyak hal yang diinginkan, karena tidak ada interpolasi yang dilakukan, tetapi pada tampilan yang kecil dan tidak terlalu berkualitas tinggi itu tidak terlihat, tetapi kecepatan algoritme semacam itu cukup tinggi.



Saat Anda mengklik ikon atau baris file .pws, layar untuk melihat informasi tentang file terbuka dengan kemampuan untuk mulai mencetaknya. Jika file .acfg diklik, maka pengguna akan diminta untuk memuat pengaturan dari file ini. Nah, jika direktori ditekan, maka itu menjadi saat ini dan daftar file diperbarui.



2.2 Melihat Informasi File Sebelum Mencetak



Seperti yang Anda catat dengan benar di komentar ke bagian sebelumnya, Anycubic tidak memiliki informasi apa pun tentang file saat dipilih. Tombol untuk mulai mencetak dan menghapusnya muncul begitu saja. Dan ini sangat merepotkan - untuk mengetahui perkiraan waktu cetak, atau jumlah lapisan, atau parameter lain dari file ini, Anda perlu mulai mencetaknya. Saya memutuskan untuk tidak mengulangi cacat ini, dan ketika saya mengklik file yang dipotong, sebuah layar terbuka dengan informasi paling lengkap tentangnya:





Nama file, ukuran, waktu modifikasi terakhir dan hampir semua parameter cetak. Namun, di sini, fakta bahwa layar MKS DLP memiliki resolusi 480x320 dimainkan di tangan saya, sedangkan Enikubik memiliki yang lebih kecil - 320x240, yang satu ini Anda tidak dapat benar-benar berayun dengan banyak teks.



2.2.1 Saya akan menulis secara terpisah mengenai perhitungan waktu pencetakan.

Indikator ini tidak disimpan dalam file, tidak seperti semua parameter lainnya. Pencetaknya harus menghitung secara mandiri, berdasarkan informasi yang dia ketahui. Anycubic Photon S yang sama memiliki kebiasaan overshooting dengan perhitungan ini, dan ke bawah - misalnya, menjanjikan pencetakan 5 jam, sedangkan kenyataannya mencetak 6 jam. Dan Longer Orange 30 berubah kali ini bolak-balik hampir dua kali selama pencetakan. Saya memutuskan untuk mendekati poin ini dengan hati-hati. Terdiri dari apakah waktu ini?

  1. Waktu yang diperlukan platform untuk turun dengan kecepatan tertentu ke ketinggian lapisan berikutnya.
  2. Waktu jeda sebelum dimulainya eksposur.
  3. Waktu pemaparan lapisan.
  4. Waktu yang diperlukan platform untuk naik ke ketinggian tertentu pada kecepatan tertentu setelah lapisan terbuka.




4 parameter ini dijumlahkan, dikalikan dengan jumlah lapisan dan total waktu cetak diperoleh. Jika semuanya sederhana dengan waktu jeda dan flare - semuanya dipertahankan dengan presisi milidetik, tetapi dengan pergerakan platform, semuanya sudah menjadi sedikit lebih rumit.



Platform tidak mengambil kecepatan yang ditetapkan secara instan, ia memiliki beberapa akselerasi, yang diatur dalam pengaturan. Selain itu, saat mencetak, ini adalah akselerasi yang agak kecil, karena platform harus mulai terangkat dengan sangat halus sehingga lapisan yang mengeras terakhir tanpa rasa sakit terlepas dari film di bagian bawah bak mandi (sayangnya, polimer juga menempel pada film).



Ternyata gerakan platform terdiri dari tiga komponen - percepatan hingga kecepatan tertentu tercapai, gerakan seragam pada kecepatan tertentu, dan perlambatan hingga berhenti total. Dan di sinilah opsi dimulai - misalnya, akselerasi dan ketinggian angkat yang ditentukan tidak memungkinkan platform mencapai kecepatan yang ditentukan, ia masih berakselerasi pada saat itu sudah perlu mulai melambat untuk berhenti pada ketinggian yang ditentukan. Atau percepatan dan ketinggian cukup bagi platform untuk mempercepat ke kecepatan yang ditetapkan dan melakukan perjalanan ke beberapa bagian jalur dalam gerakan stabil sebelum mulai melambat. Kita perlu memeriksa semua ini, menghitung waktu dan jarak untuk setiap komponen.



Sejujurnya, kepalaku pusing saat menulis fungsi penghitungan waktu cetak :) Dan akibatnya aku masih mendapat sedikit error. Misalnya, waktu cetak sebenarnya adalah 07:43:30, bukan perkiraan 07:34:32.





Atau 05:48:43, bukan 05:43:23 yang dihitung.





Namun pada prinsipnya, kesalahan ini cocok untuk saya. Saya mencoba menemukan kesalahan dalam perhitungan, tetapi semuanya tampaknya benar di sana. Kemungkinan besar, percepatan sebenarnya sedikit tidak sesuai dengan yang ditentukan karena kekhasan kontrol motor stepper. Begitu lancar kami sampai ke tahap berikutnya :)



3. Kontrol motor stepper untuk gerakan platform.



Awalnya saya sempat terpikir untuk menulis kontrol motor stepper saya sendiri. Ini tidak sulit sama sekali, memiliki driver normal di papan - atur arah putaran pada satu pin dan arahkan denyut langkah ke pin lainnya. Anda perlu memutar dengan cepat - Anda menaikkan frekuensi denyut nadi, Anda harus perlahan - Anda menguranginya.



Tetapi ketika saya mulai mendekati masalah ini secara lebih spesifik, saya menyadari bahwa kesederhanaannya menipu. Tidak, Anda dapat menulis sendiri, dan itu akan berhasil, tetapi menulis sedemikian rupa sehingga berhasil dengan baik adalah tugas yang cukup besar. Motor stepper tidak terlalu menyukai ketidakteraturan dalam langkah, jadi perlu untuk memastikan keseragaman yang baik dari pulsa langkah dalam rentang frekuensi yang cukup luas - dari beberapa hertz hingga puluhan kilohertz. Hal ini diperlukan untuk memastikan peningkatan dan penurunan yang mulus dalam frekuensi pulsa untuk akselerasi dan deselerasi. Penting untuk menghitung impuls yang dihasilkan secara akurat untuk memastikan untuk mengetahui di posisi apa platform sekarang. Penting untuk menghitung jumlah pulsa dan periode perubahan frekuensinya dalam periode waktu yang ditentukan secara ketat untuk memberikan percepatan yang diperlukan.



Singkatnya, tugas itu, meskipun memungkinkan, sangat, sangat berat, yang akan memakan waktu lebih dari satu hari. Jadi saya memutuskan untuk mencabut fungsi manajemen mesin dari Marlin . Saya pikir ini akan mudah ...



Pertama, saya mengambil file stepper.cpp dari sumber Marlin - langsung mengontrol motor stepper. Namun ternyata pekerjaannya sangat bergantung pada motion planner dari file planner.cpp, jadi saya harus mengambilnya juga. Nah, ke heap, saya juga mengambil file endstops.cpp dari sana - memproses sakelar batas sumbu, karena saya masih perlu memproses acara dari mereka, dan di sini kontrol penjadwal dan mesin sudah dikaitkan dengan file ini untuk sakelar batas.



Saya menghabiskan waktu lama untuk mencoba menghapus semua yang tidak perlu dari file-file ini dan melepaskannya dari ekosistem Marlin lainnya. Faktanya adalah bahwa Marlin diasah di bawah kendali 6 atau 7 stepper pada saat yang sama, sementara pekerjaan mereka mungkin tergantung pada suhu beberapa pemanas, parameter plastik, dll. Sistemnya sangat rumit di sana. Saya harus melakukan banyak pengulangan, terutama menghapus sumbu yang tidak perlu dan pengekstrusi yang tidak perlu dan menyingkirkan sejumlah besar makro yang berguna dalam versi aslinya, tetapi sangat mengganggu bagi saya. Sekadar pemahaman - ukuran sumber yang saya ambil dari Marlin telah dikurangi dari 346 menjadi 121 KB. Dan setiap baris harus dihapus dengan hati-hati.



Secara alami, dalam proses pemangkasan yang sulit ini, saya masuk sedikit lebih dalam ke pekerjaan seluruh sistem, cara kerjanya. Untuk memindahkan sumbu, posisi target sumbu dipindahkan ke perencana melalui salah satu fungsinya (perencana menyimpan posisi saat ini). Penjadwal menghitung jumlah langkah dan parameternya untuk akselerasi, gerakan garis lurus, dan perlambatan dan dari data ini membentuk paket data khusus untuk fungsi kontrol motor langsung (stepper). Mungkin ada beberapa paket ini, penjadwal menghitung dan membuat paket baru yang berikutnya untuk setiap tugas baru.



Stepper, bekerja dalam penghitung waktu, dalam keadaan bebas, meminta paket data berikutnya dari penjadwal. Jika penjadwal memiliki paket yang sudah disiapkan, penjadwal akan memberikannya dan menganggapnya sudah selesai. Stepper mengambil paket yang diterima ke dalam pekerjaan dan mulai mengerjakan langkah-langkah mesin sesuai dengan data darinya. Sampai selesai, paket berikutnya tidak diminta.



Yang anehnya diterapkan di stepper adalah bahwa pada kecepatan rendah ia mengeluarkan satu pulsa langkah di setiap interupsi, menyesuaikan pengatur waktu sehingga interupsi berikutnya terjadi setelah periode waktu yang diperlukan. Ketika tingkat langkah yang diperlukan melebihi nilai tertentu, stepper mulai mengeluarkan beberapa langkah di setiap interupsi. Pada saat yang sama, semua pengaturan waktu dipilih dengan sangat baik sehingga keseragaman langkahnya sangat bagus, demi keingintahuan saya melihat osiloskop.



Penjadwal juga tahu bagaimana "menggabungkan" paket-paket tetangga. Artinya: jika penjadwal sudah memiliki paket yang disiapkan untuk stepper dan kemudian tugas baru datang kepadanya, maka ia membentuk paket berikutnya dan mengubah paket sebelumnya sehingga sebagai hasil dari pemrosesan sekuensial kedua paket ini oleh stepper, satu gerakan mulus diperoleh.



Izinkan saya menjelaskan dengan sebuah contoh. Perencana bebas, dia menerima tugas untuk menggerakkan sumbu ke depan sebesar 20 mm dengan kecepatan 30 mm / s. Perencana membuat paket pertama, yang menjelaskan percepatan dari nol hingga 30 mm / s, gerakan garis lurus pada kecepatan ini dan perlambatan dari kecepatan ini ke nol. Jika, sebelum stepper mengambil paket ini dari penjadwal, penjadwal diberi tugas baru untuk memindahkan sumbu ini 50 mm lagi ke depan, tetapi sudah dengan kecepatan 40 mm / s, maka penjadwal tidak akan hanya membuat paket baru dengan percepatan dari nol, tetapi mengubah paket pertama dengan menghilangkan perlambatan dan memperluas gerakan garis lurus dengan jaraknya, dan dalam paket kedua yang dibuat, percepatan akan dimulai bukan dari nol, tetapi dari kecepatan paket sebelumnya.



Hasilnya adalah satu gerakan di mana sumbu akan berakselerasi hingga 30 mm / s, bergerak 20 mm, lalu berakselerasi lagi hingga 40 mm / s dan bergerak 50 mm lagi, melambat hingga nol pada akhirnya. Tetapi ini hanya jika stepper belum berhasil mengambil paket sebelumnya, jika tidak, kedua tugas ini akan diproses sebagai dua gerakan terpisah dengan nol kecepatan awal dan akhir di masing-masing. Oleh karena itu, pada printer dengan kontrol platform manual, jika Anda menekan lift beberapa kali berturut-turut dengan peningkatan 10 mm, platform akan berhenti setelah pengangkatan 10 mm pertama dan kemudian terus bergerak tanpa berhenti hingga ketinggian penuh diklik oleh tombol.



Dalam versi baru Marlin, perbaikan telah muncul terhadap gerakan "tersentak-sentak" - sekarang penjadwal tidak memberikan paket stepper untuk waktu tertentu setelah pembentukannya jika paket ini adalah satu-satunya yang siap. Kali ini disisihkan untuk menunggu - akankah tugas berikutnya tiba sehingga Anda dapat menggabungkannya dengan yang sudah ada.



3.1 Antarmuka kontrol gerakan platform







Di sini, secara umum, semuanya standar dan biasa untuk printer photopolymer. Di bagian atas adalah pemilihan langkah pergerakan sumbu, di sebelah kanan adalah tombol untuk menggerakkan sumbu ke atas atau ke bawah dengan langkah yang dipilih.

Tombol "Rumah" digunakan untuk membidik platform (parkir, rumah), saat ditekan, platform mulai bergerak menuju sakelar batas "rumah". Setelah mencapainya, platform berhenti, mundur sedikit dan lagi perlahan (untuk akurasi yang lebih baik) berjalan ke sakelar batas. Setelah itu, firmware pasti mengetahui ketinggian pengangkatan platform saat ini dengan tepat.



Tombol set Z = 0 ”digunakan untuk mengkalibrasi ketinggian platform di atas tampilan. Sistem kalibrasi seperti itu digunakan, misalnya, pada printer Anycubic, ketika titik nol platform (ketinggian optimal di atas layar) adalah 1-2 mm di bawah pemicu sakelar batas "rumah". Dan sistem kalibrasi ini menurut saya lebih tepat daripada sistem yang baru-baru ini menjadi populer, ketika ketinggian aktuasi sakelar batas pada saat yang sama sama dengan ketinggian nol platform.



Nah, tombol terakhir adalah "Berhenti!" Merupakan pemberhentian tanpa syarat dan langsung dari pergerakan platform. Ngomong-ngomong, saat platform sedang bergerak, Anda tidak dapat meninggalkan layar ini, tombol "Kembali" tidak akan berfungsi. Ini dilakukan agar saat platform bergerak, tombol Stop segera tersedia.



3.2 Poin lain pada pergerakan platform



Ada beberapa hal yang sangat mengganggu saya di Anycubic Photon.



Yang pertama adalah mengapa pergerakan manual platform terjadi dengan akselerasi siput yang sama seperti pada mode cetak? Saat mengetik, akselerasi sekecil itu berguna, tetapi saat mengontrol sumbu secara manual, akselerasinya selama 2 detik - itu hanya mimpi buruk. Dan kecepatan gerakannya biasa saja.



Poin kedua - mengapa, saat pencetakan dihentikan sementara, platform naik ke ketinggian jeda pada kecepatan yang ditentukan dalam parameter cetak? Sial, menunggu 15 detik sampai platform naik dua (hanya) sentimeter itu sangat bagus. Tapi terima kasih sudah bangun. Di Orange 30, jeda tidak berarti mengangkat platform bahkan satu milimeter, jadi bahkan tidak jelas mengapa platform itu ada di sana.



Dan saat ketiga, yang membuat marah - setelah akhir pencetakan, platform naik ke puncak. Pada kecepatan yang sama yang ditentukan dalam parameter cetak - 1 mm / detik. Butuh 100 detik untuk mendaki dari ketinggian 5 cm!



Oleh karena itu, dalam firmware saya, saya membuat kecepatan dan akselerasi yang dapat disesuaikan secara terpisah untuk mode cetak dan secara terpisah untuk kontrol platform manual. Tetapi dengan dua batasan:

  1. Hingga sumbu disetel ulang oleh tombol Beranda, kecepatan perjalanan akan dikurangi tiga kali lipat. Ini karena meskipun printer tidak mengetahui ketinggian platform saat ini secara tepat, ada bahaya layar rusak tanpa berhenti pada kecepatan tinggi (inersia, begitulah adanya) atau merusak penahan poros atas. Setelah memusatkan perhatian pada sumbu, printer sudah mengetahui dengan tepat posisi platform dan batas ketinggian perangkat lunak mulai berlaku, yang juga diatur dalam pengaturan.
  2. Pada ketinggian kurang dari 30 mm, kecepatan juga berkurang tiga kali lipat, terlepas dari apakah sumbu dikosongkan atau tidak. Ini untuk mencegah percikan photopolymer dari tong saat platform diturunkan terlalu cepat. Atau saat keluar terlalu cepat.




Tentu saja, ada parameter sumbu standar lainnya dalam pengaturan - jumlah langkah per 1 mm, arah gerakan, kerja sakelar batas, dll. Jika ada yang tertarik, maka di bawah spoiler terdapat file konfigurasi teks dengan semua parameter yang didukung. File dengan ekstensi .acfg seperti itu dimakan oleh firmware langsung dari daftar file, memuat parameter, menyimpannya ke EPROM dan segera menerapkannya, tanpa me-reboot:

Isi file konfigurasi
# Stepper motor Z axis settings

[ZMotor]



# .

# : 0 1. : 1.

# .

invert_dir = 1



# .

# : -1 1. : -1.

# -1,

# , . 1

# .

home_direction = -1



# Z . ,

# 0, - .

home_pos = 0.0



# .

# : -32000.0 32000.0.

# : -3.0

# .

# , .

min_pos = -3.0



# .

# : -32000.0 32000.0.

# : 180.0

# .

# , .

max_pos = 180.0



# .

# : 0 1. : 1.

# ,

# 1, - 0.

min_endstop_inverting = 1



# .

# : 0 1. : 1.

# ,

# 1, - 0.

max_endstop_inverting = 1



# 1 .

steps_per_mm = 1600



# ,

# , /. : 6.0.

homing_feedrate_fast = 6.0



# ,

# , /. : 1.0.

homing_feedrate_slow = 1.0



# , /2.

acceleration = 0.7



# , /.

feedrate = 5.0



# ( ,

# ..), /2.

travel_acceleration = 25.0



# ( ,

# ..), /. 30

# ,

# 5 /.

travel_feedrate = 25.0



# , .

current_vref = 800.0



# , .

current_hold_vref = 300.0



# ,

# . . 0

# .

hold_time = 30.0



# ,

# . .

# hold_time. 0 .

# , .

off_time = 10.0



# General settings

[General]



# (0.001 )

# .

# : 0 15000. : 700 (0.7 ).

buzzer_msg_duration = 700



# (0.001 )

# , .

# : 0 15000. : 70 (0.07 ).

buzzer_touch_duration = 70



# 180 .

# .

# : 0 1. : 0.

rotate_display = 0



# , .

# LCD-. -

# .

# : 0 15000. : 10. 0 .

screensaver_time = 10







Dan dengan itu saya akan menyelesaikan bagian ini, dan sudah ada terlalu banyak teks :)

Seperti sebelumnya - saya akan dengan senang hati menjawab pertanyaan dan menerima komentar.



- Bagian 1: 1. Antarmuka pengguna.

- Bagian 2: 2. Bekerja dengan sistem file pada USB-stick. 3. Kontrol motor stepper untuk gerakan platform.

- Bagian 3: 4. Menampilkan gambar lapisan pada tampilan lampu latar. 5. Setiap hal kecil, seperti mengontrol pencahayaan dan kipas, pengaturan pemuatan dan penyimpanan, dll. 6. Fitur tambahan untuk kenyamanan dan kemudahan.



Tautan



Kit MKS DLP di Aliexpress

Sumber firmware asli dari pabrikan di

Skema GitHub dari pabrikan dua versi papan di GitHub

Sumber saya di GitHub



All Articles