Mesin gambar vektor # 3





Sebagai seorang insinyur, saya selalu terkesan dengan cara pragmatis Rusia dalam menamai produk baru. Sementara beberapa pemasar Barat mungkin menyebut perangkat game kecil berbasis CRT The Vectormatic Score-Master 3000, orang Rusia cenderung menggunakan nama yang lebih bermakna. Dan karena mereka sedang mempertimbangkan upaya ketiga untuk membuat sistem rendering vektor, mereka akan menyebutnya "Mesin Gambar Vektor # 3". Insinyur - skor pemasar (15: 0).



Bertahun-tahun yang lalu, saya terpesona dengan gagasan menggunakan tabung sinar katoda osiloskop kecil untuk menampilkan jam analog. Upaya ini, tentu saja, menjanjikan kesenangan estetika, tetapi pada saat yang sama tampak konyol. Gagasan untuk mengganti rantai koneksi mekanis dengan mikrokontroler yang menggerakkan dua amplifier diferensial tegangan tinggi dan catu daya tegangan tinggi independen hanya untuk memberi tahu waktu, secara kasar, tampak agak konyol.

Jika, pada saat yang sama, kami memperhitungkan semua pekerjaan pada implementasi setiap tahap proses, sebagai akibatnya perangkat yang tampak layak harus diperoleh, dan menambahkan studi terperinci tentang desain, maka seluruh proyek sudah mengisyaratkan monumentalitasnya.



Tak satu pun dari banyak tugas yang diusulkan menyajikan kesulitan tertentu dalam dirinya sendiri, tetapi jika kita menganggapnya secara keseluruhan, itu adalah tahap mengintegrasikan semuanya bersama-sama dalam proyek semacam itu yang mengungkapkan kompleksitas keterkaitan antar komponen individu.



Artikel ini membahas perakitan game luar angkasa sederhana berdasarkan CRT. Proyek ini menjelaskan arsitektur, memberikan catatan desain, komentar tentang peralatan yang digunakan, elektronik, implementasi catu daya tegangan tinggi, dan proses pemotongan laser pada penutup.



Informasi Umum



Bodinya dirakit dari dua bagian utama, terbuat dari papan MDF dengan menggunakan pemotongan laser. Bagian atas menampung layar CRT, catu daya tegangan tinggi, saluran defleksi, dan kalibrator yang sesuai. Di bagian bawah terdapat joystick, tombol, mikrokontroler, dan unit catu daya tegangan rendah. Di bagian belakang ada konektor daya dan soket USB mini B. Segmen atas kasing diletakkan di bagian bawah, dan seluruh struktur dipasang oleh panel kontrol datar, di mana terdapat joystick dan tombol.



CRT



CRT yang digunakan adalah D7-16G, yang berdiameter lebih dari 76mm, panjang 160mm dan menggunakan daya baterai. Saya membeli tiga CRT ini beberapa tahun yang lalu hanya untuk proyek serupa.









CRT D7-16G



Ini menggunakan konektor 11-pin tipe 30-232, yang sangat bermasalah untuk ditemukan. Setelah beberapa pertimbangan, saya mendapat ide untuk merakit sendiri dengan memotong blanko dengan laser dari selembar akrilik dan mengambil pin kontak yang sesuai dari alas panel lampu.









Assembly Connector 30-232



Untuk melakukan ini, saya merancang dua komposit kosong di Autocketch sehingga kontak CRT diposisikan di sepanjang kontur "D" di bagian kiri. Kemudian setiap bagian dipotong dari lembaran akrilik 3mm dan direkatkan. Saya melepas kontak dari panel lampu B9A baru, memasukkannya ke benda kerja yang direkatkan dan sedikit menekuk untuk memperbaikinya, lalu saya menyolder kabel ke terminalnya, mengisolasi koneksi dengan penyusutan panas.



Catu daya tegangan tinggi



Unit ini didasarkan pada regulator switching SG3525 yang menggerakkan tahap dorong-tarik N-FET diikuti oleh transformator ferit kecil dengan kumparan sekunder tegangan tinggi dan rendah. Sisi tegangan tinggi dilewatkan melalui penyearah setengah gelombang positif, menghasilkan sekitar 240VDC, dan kemudian dikurangi oleh regulator paralel menjadi 210V. Tegangan yang diperbaiki diumpankan ke penguat defleksi dan mengkonsumsi sekitar 7mA. Tegangan sekunder HV juga digandakan, menghasilkan sekitar -600V, 1mA untuk membiaskan berkas senjata elektron. Menyeimbangkan setiap belitan sekunder DC yang mampu menjenuhkan inti atau menyebabkan perpindahan magnet dilakukan dengan penyearah positif dan negatif.



Struktur transformator dimulai dengan belitan primer di tengah, setelah itu ada belitan sekunder HV yang diarde, diakhiri dengan terminal di bawah tegangan anoda. Terakhir, ada belitan tegangan rendah yang digunakan untuk memanaskan koil tabung sinar katoda. Urutan ini dipilih untuk menghindari kerusakan antara belitan tegangan tinggi dan rendah. Setelah mengatakan semua ini, saya memikirkan topologi ini dan, mungkin, akan menemukan waktu untuk memperbaikinya.









Unit HV dan perangkat defleksi



Saya sudah lama tidak menggunakan inti pelindung ferit sehingga saya benar-benar lupa tentang konduktivitas listriknya. Ini menciptakan busur elektronik antara bagian atas ferit sekunder dan yang diarde, menyebabkan beberapa pasang driver transistor sisi primer STN3NF06L gagal. Dalam proses mencari tahu alasannya, saya menggantinya dengan sepasang TO252 (100A / 8mΩ) yang lebih stabil, yang mampu menahan bahkan pasokan 12V, 1A dan memulai transformator dengan belokan hubung singkat.



Saya agak bingung menemukan bahwa SG3525 tersedia dalam paket SOIC wide dan narrow. Akibatnya, jejak PCB ditemukan tidak sesuai dan bagian yang sempit harus dipesan dari Inggris.



Penguat defleksi



Rancangan subsistem ini terbukti menjadi tugas yang menakutkan, dan butuh banyak waktu untuk bekerja dengan simulator SPICE, yang membantu untuk memahami semua nuansa.



Berikut spesifikasi singkatnya:



  • input 0..5V tidak seimbang
  • keluaran diferensial dengan ayunan> 80V per lengan
  • pada konsumsi arus 210V kurang dari 2mA
  • kemungkinan catu daya dari 12V
  • tidak ada ban negatif
  • bandwidth> 500 kHz dengan pergeseran fasa kurang dari 5 ° dalam kaitannya dengan yang dihitung


Selama beberapa hari, saya mempelajari beberapa topologi, dimulai dengan rangkaian dorong-tarik kaskode dengan sumber arus. Awalnya, hanya mode stasioner yang diuji dan dioptimalkan. Setelah mencapai nilai dasar DC, saya mengambil parameter AC. Kapasitor yang menghubungkan pemancar dari rangkaian dorong-tarik (tidak mengherankan) secara signifikan mempengaruhi penguatan AC, frekuensi, karakteristik fasa dan, tampaknya, sangat berinteraksi dengan resistor emitor, serta saluran pembuangan yang terkait dengannya.



Di sini, sebagai peningkatan, stabilisasi termal dapat diterapkan dengan ikatan termal dari perangkat keluaran (jika kita menganggapnya sekarang SOT-233, maka tugasnya tidak mudah). Atau, tentu saja, Anda dapat beralih ke rekan mereka yang dipasang di lubang, yang sangat menyederhanakan tugas.



Alangkah baiknya menggunakan sirkuit di mana pergeseran fasa dan penguatan kurang bergantung. Tetapi opsi sederhana saat ini, telah mengatasi banyak hambatan teknis yang sulit, sehingga persyaratan tambahan akan terlalu memberatkan.



Papan pengontrol dan DAC



Mengingat tugas utama mikrokontroler adalah menghitung berulang baris pasangan vektor setiap beberapa puluh milidetik, menurut saya masuk akal untuk menggunakan opsi yang murah dan sederhana untuk ini.



The ATmega328P dan ST mikro STM32F103C8T6 adalah kandidat yang jelas. Akibatnya, yang pertama dipilih semata-mata karena kemungkinannya yang lebih luas dan (sekali) popularitasnya. Dalam proses merakit papan, secara mengejutkan menemukan bahwa saya tidak sengaja membeli pengontrol versi "B", tetapi lebih dari itu nanti.



Secara keseluruhan, papannya sederhana dan mencakup konverter USB FT232RL, saluran ganda 8-bit DAC, joystick dan antarmuka tombol, antarmuka I2C opsional, dan regulator 5V. Arduino Nano dapat digunakan dengan motherboard, tetapi solusi saat ini sederhana dan mudah untuk dihubungkan.









Papan pengontrol dan



persyaratan Sistem DAC menyiratkan operasi dengan satu bus, yang membatasi pilihan DAC. Awalnya, saya mengambil TLC7528, yang tampaknya memiliki keluaran saat ini, tetapi pada pemeriksaan lebih dekat ternyata dapat dikonfigurasi untuk bekerja dalam mode keluaran tegangan. Dikombinasikan dengan amplifier operasional TSH82, ini ternyata menjadi pilihan yang buruk, karena distorsi bahkan pada level sinyal terendah adalah beberapa persen. Saya memecahkan masalah ini dengan mengganti DAC dengan AD7302, yang mengimplementasikan dua output tegangan dan waktu penyelesaian 2 μs.









Distorsi beberapa persen dapat mengacaukan.



Dengan melihat ke belakang, tampaknya distorsi dengan TLC7528 mungkin disebabkan oleh kisaran input mode-umum yang terbatas dari TSH82 yang terkait. Ini dapat dengan mudah diverifikasi dengan melepas op amp ini dan menggambar lingkaran Lissajous pada osiloskop secara langsung dengan probe.



Akibatnya, sejumlah kesalahan desain mendorong saya untuk membangun kembali papan yang tampaknya sederhana ini: memilih DAC, menggunakan FT232RL untuk pertama kalinya, dan tidak mengikat pin TST yang sesuai ke ground. Saya juga membuat kesalahan di sirkuit untuk menghubungkan konektor USB di papan (saya mencampur kabel sinyal), yang saya koreksi sementara menggunakan kabel buatan sendiri.



Mikrokontroler, kotak alat, dan bootloader baru



Seperti yang saya katakan, secara mengejutkan ternyata ATmega328P yang saya pesan sebelumnya ternyata adalah varian "B" yang kurang populer. Mereka sepenuhnya kompatibel biner dengan adik mereka, kecuali untuk tanda tangan chip. Namun, versi yang lebih baru memiliki sejumlah fungsi tambahan yang berguna, termasuk dukungan untuk USART kedua.



Arduino menyediakan toolkit terbaru yang anehnya tidak tersedia di situs Atmel. Alat-alat ini harus diekstraksi dan dirakit menjadi paket portabel, dan oleh karena itu tidak lagi bergantung pada kerangka Arduino. Kemudian saya memperbarui proyek makefile yang sesuai untuk referensi controller dan alat baru.



Mengingat kompatibilitas chip, bootloader Arduino standar diprogram pada yang lebih baru menggunakan AVR Studio 4 IDE yang relatif kecil, yang saya pilih karena kesederhanaan antarmuka. File XML untuk mendeskripsikan pengontrol baru harus dibuat dari versi lama. Akibatnya, perbedaan utamanya adalah jumlah dan tanda tangannya.



Utilitas make digunakan untuk mem-flash proyek dan, karenanya, makefile. Dengan pendekatan ini, seperangkat alat hanya membutuhkan sekitar 30MB, dan bukan ratusan, seperti halnya penggunaan IDE terintegrasi "modern".









Pemrogram sejati tidak menggunakan IDE



Firmware



Sistem ini dirancang untuk menggambar sekitar 10K pasangan vektor per detik. Dengan refresh rate 50Hz, ini berarti 200 vektor dapat digambar. Setelah setiap 200 vektor (20 md), latar depan menerima sinyal untuk memperbarui daftarnya sehingga game dapat berjalan dengan lancar.



Beberapa proses dalam sistem membutuhkan kemampuan untuk memutar vektor. Pada saat yang sama, meskipun penggunaan nilai desimal dalam kisaran 0..359 derajat sudah jelas, solusi seperti itu akan memerlukan penggunaan U16 dan akan menjadi tidak praktis. Setelah beberapa pemikiran, saya memutuskan bahwa akan lebih tepat untuk memproses data sebanyak mungkin dengan S8 (+127 hingga –128). Ini juga cocok untuk mewakili koordinat X / Y (dengan asumsi DAC 8-bit) untuk menyatakan sudut (kira-kira ± 180 derajat).



Penyegaran layar dilakukan melalui penghitung waktu dan merupakan satu-satunya cara untuk mengontrol DAC. Vektor dibaca dari buffer ping atau pong dan diulang sampai tugas latar depan mengalihkan buffer. Setiap buffer dimulai pada penghitung U8 dan berlanjut ke titik tulis berikutnya yang tersedia diikuti dengan titik baca. Setelah itu berisi daftar nilai X dan Y yang disimpan dalam format U8.



Arah pesawat ruang angkasa diubah dengan menggerakkan joystick ke kiri / kanan. Kapal itu sendiri ditampilkan dalam bentuk empat titik a la chevron dari seri Star Trek, berputar di sekitar pusatnya. Setiap vektor membutuhkan pencarian sin dan cos, 4 perkalian, dan dua penjumlahan. Secara total, diperoleh 37 kalkulasi per rotasi, yang totalnya sekitar 200 instruksi. Pesawat luar angkasa akan selalu digambar pertama, dan pasangan vektor pertama akan selalu menjadi haluannya, jadi dalam buffer keluaran, pasangan vektor ini akan menjadi titik awal untuk meluncurkan roket.



Rudal diluncurkan dengan menekan tombol yang sesuai. Mereka terbang keluar dari haluan kapal dan melanjutkan jalurnya saat ini. Penghancuran sebuah roket, yang tidak lebih dari 16 roket dapat diluncurkan secara bersamaan, terjadi ketika bertabrakan dengan asteroid atau ketika mencapai radius ruang yang terlihat. Model penerbangan ini didasarkan pada gambar garis antara haluan kapal dan tepi radius yang terlihat, di mana delta X dan delta Y dihitung saat peluncuran. Delta X / Y adalah titik tetap 8,8, seperti halnya kecepatan.









Kapal di tengah, asteroid di bawah



Benda asteroid bertelur di titik acak radius dan terbang di atasnya langsung pada sudut antara 80 dan 140 derajat. Ketika mereka muncul, posisi awal dan akhir acak dibuat, yang kemudian diubah menjadi koordinat Cartesian, dan pertanyaan tentang garis lurus diselesaikan dengan cara yang sama seperti dengan misil.



Ketika sebuah roket menghantam asteroid, kedua entitas tersebut hancur, dan penghitung skor saat ini meningkat. Objek tampilan numerik diambil dari tabel pencarian "7-segmen".



Semua gameplay "berat" dilakukan dengan fungsi "spin", yang digunakan untuk menambahkan objek masukan (asteroid, pesawat luar angkasa, nilai 7-segmen, dll.) Ke buffer keluaran. Selain itu, ini memungkinkan objek masukan untuk berputar, serta menerapkan offset di sepanjang sumbu X dan Y. Pada saat yang sama, tidak ada yang menghentikan Anda untuk menambahkan satu peleton kapal asing 2x2 ke buffer masukan, kemudian menjadikannya sebagai satu kelompok dan menerapkannya sebelum menggambar.



Bagian mekanis



Memberikan estetika perangkat luar angkasa ini sudah membutuhkan lebih banyak upaya, meskipun prosesnya sendiri ternyata jauh lebih menghibur daripada yang saya harapkan. Awalnya, kemiringan bodi CRT terasa lebih rendah dari yang direncanakan, dan pada akhirnya butuh beberapa jam untuk menemukan cara memotong segmen penahan geser sehingga bagian atas dan bawah dapat dihubungkan dengan cara yang sesuai.









Desain Utama



Betapa besar perbedaan yang bisa dibuat oleh beberapa derajat. Saya kagum pada betapa estetika telah berubah pada akhirnya, dan betapa bengkoknya versi pertama terlihat paling miring.









Set: Modul CRT, segmen bawah casing dan penutup panel depan



CRT dipasang dengan braket MDF bundar yang direkatkan ke bagian atas kompartemen. Dari dalam, braket ini dilapisi dengan karet busa elastis dengan bahan perekat.









Bagian depan CRT kosong dengan kunci rumah dan tanda untuk papan sirkuit tercetak



Sulit untuk melihat dari foto bahwa panel kontrol dengan joystick dan tombol-tombolnya dengan aman memperbaiki modul CRT, mencegahnya ditarik keluar ke belakang.



Paket yang digunakan untuk desain lambung kapal



Untuk desain awal segmen tubuh atas dan bawah, editor Inkscape dengan ekstensi “Kotak Potong Laser” digunakan. Hanya takik bergerigi yang berfungsi sebagai bundel segmen ini. Saya baru saja menyalin dan menempelkan template terakhir dari Inkscape ke Autosketch, di mana saya melakukan semua perbaikan yang diperlukan.



Saya menggunakan pemotong laser 70W untuk memotong MDF kosong. Siklus kerja ternyata cukup cepat, yang memungkinkan untuk secara bersamaan mencoba ide-ide desain alternatif.



Kesimpulan



Seperti yang saya harapkan, pada proyek ini saya berhasil belajar banyak, karena semuanya, kecuali mungkin mikrokontroler bawaan, ternyata di luar pengalaman saya yang biasa.



Jelas, banyak permainan dan aplikasi berbeda dapat dikembangkan berdasarkan perangkat rendering vektor ini. Sejauh ini, saya pasti ingin menambahkan modul sinkronisasi ke papan (melalui I2C), setelah menyadari ide lama saya untuk menampilkan jam analog. Perbaikan lainnya yang memungkinkan akan diperkenalkan secara bertahap.



Kesalahan yang tidak senonoh, tentu saja, adalah dengan rangkaian USB mini B dan upaya pertama yang gagal untuk menggunakan DAC dengan keluaran arus dalam mode keluaran tegangan. Tetapi sebaliknya, saya bahkan tidak tahu apa lagi yang akan saya perbaiki jika perlu memasang kembali unit seperti itu.



Dalam proyek kali ini, semua tujuan tercapai, termasuk memperluas cakrawala, di mana, seperti yang sering terjadi, ada beberapa kejutan.



Hubungi penulis Mark Atherton melalui surat markaren1@xtra.co.nz










All Articles