Reverse Engineering Laser Scanner Leuze RS4
Sebelumnya, saya berbicara tentang rekayasa balik sensor jarak laser . Kali ini kita akan berbicara tentang perangkat yang lebih kompleks - pemindai laser Leuze RS4. Seperti sensor, pemindai ini datang kepada saya dalam keadaan rusak, jadi saya harus mulai memulihkan pekerjaannya, dan dalam proses meningkatkan beberapa karakteristiknya, dan, bahkan, membuat kembali ke perangkat lain.Apa pemindai laser ini?
Leuze RS4 adalah pemindai keamanan laser, yang dirancang untuk mencegah orang memasuki area berbahaya di pabrik, untuk mencegah tabrakan kendaraan produksi, dll. Ini memiliki karakteristik yang lumayan - jangkauan maksimum: 15 / 50m (tergantung pada mode operasi ), keakuratan mengukur jarak di seluruh rentang pengukuran adalah 5 mm, resolusi sudut 0,36 derajat, kecepatan pemindaian 25 rpm (25000 pengukuran / detik).Perlu dicatat bahwa pemindai ini diposisikan secara tepat sebagai alat pengaman - yaitu pemindai ini menyimpan lokasi zona peringatan dan alarm di dalam memori, dan ketika sebuah objek memasuki zona ini, salah satu kunci terbuka di pemindai. Untuk mengkonfigurasi lokasi zona, pemindai dapat dihubungkan ke komputer dan mengamati lokasi hambatan di layar. Bahkan ada paket ROS yang memungkinkan Anda menerima data dari pemindai ini.Saya dapat pemindai tanpa case, dibongkar menjadi komponen-komponennya. Pemindai jatuh karena pukulan keras ke tubuh; apa tepatnya berhenti bekerja, saya masih tidak mengerti - mungkin optik tidak selaras, kontak di salah satu konektor keluar, atau sensor encoder bergerak, atau yang lainnya. Saya mencoba merakit semua bagian bersama-sama, pemindai terlihat di perangkat lunak asli, tetapi pemindaian tidak dimulai. Jadi saya hanya punya satu cara untuk memulainya - mengembalikan sirkuit pemindai selengkap mungkin, dan menulis firmware mikrokontroler pemindai saya sendiri.Berikut adalah bagian-bagian yang saya tampak seperti: Di sini mereka harus berada dalam case (foto dari dokumentasi, dapat dilihat bahwa desain dan elektronik sedikit berbeda):
Juga bagian penting dari pemindai adalah cermin pemindaian (disorot dengan warna biru pada foto di atas) yang dipasang di tengahnya:
Diagram skematik pemindai:
Seperti dapat dilihat dari diagram, seluruh elektronik pemindai terdiri dari modul terpisah (papan) yang dihubungkan oleh konektor dan loop.Ada banyak modul - modul catu daya (DC-DC), modul antarmuka, modul prosesor, modul photodetector (APD), modul laser. Selain itu, ada juga modul encoder dan dua papan berbentuk tapal kuda, yang pada awalnya terasa aneh.Pertama-tama, ada baiknya memperhatikan mereka:
Jelas, salah satu papan berisi LED, dan yang kedua berisi fotodioda. Awalnya, saya pikir itu semacam encoder, atau semacam mekanisme untuk memeriksa radiasi laser. Namun, kemudian, setelah membaca dokumentasi untuk pemindai, dan setelah memeriksa foto-foto di dalamnya secara terperinci, saya menyadari bahwa ini adalah sistem untuk memantau keadaan permukaan kaca pelindung pemindai.Lubang untuk LED terlihat di foto:
Dengan mengukur tingkat sinyal dari fotodioda, Anda dapat memperkirakan tingkat transmisi kaca pelindung. Jelas, sistem ini tidak penting untuk pemindai, jadi saya tidak menggunakan papan ini di masa depan.Modul prosesor adalah bagian paling sulit dari pemindai. Beginilah tampilan elektronik modul dari dua sisi:
Untuk pertama kalinya saya melihat papan, saya segera menyadari bahwa pemindai menggunakan metode pengukuran jarak waktu penerbangan (TOF) - chip dengan tanda terbesar ternyata " ACAM TDC-GPX ", yang sudah saya dengar. TDC - "Time-to-Digital Converter", yaitu, chip khusus yang dirancang untuk mengukur interval waktu dengan akurasi sangat tinggi, itu adalah yang digunakan untuk mengukur waktu "penerbangan" dari pulsa laser.Juga ada mikrokontroler Infineon C167 dengan chip memori FLASH eksternal (yang senang) dan ASIC (yang sangat kesal). Lebih detail tentang modul ini saya akan ceritakan di bawah ini.Modul dayaberisi konverter DC-DC khusus yang diisolasi secara galvanis dengan beberapa tegangan output dan beberapa kapasitor:
Tegangan pasokan konverter adalah 24V. Fitur utamanya adalah menyediakan tegangan tinggi (~ 230V), yang diperlukan untuk pengoperasian laser dan fotodetektor, ke konektor kecil yang terpisah.Ini juga menampilkan tegangan berikut ke konektor utama: + 5V, -5V, ~ 15V, diisolasi secara galvanis dari yang lain + 5V untuk antarmuka RS232.Bagian optik pemindai
Pada pandangan pertama, tidak terlalu jelas di mana optik pemindai berada. Dalam hal ini, jendela kecil dengan cermin di tengah foto berfungsi untuk menghasilkan sinar laser, dan permukaan mengkilap besar di sekitarnya adalah permukaan filter cahaya interferensi yang dipasang di depan lensa fotodetektor. Filter ini hanya memancarkan radiasi yang panjang gelombangnya dekat dengan panjang gelombang laser.Ini adalah bagaimana hal itu ditunjukkan dalam dokumentasi pemindai:
Lensa itu sendiri dipasang di dalam wadah plastik hitam, sehingga bermasalah untuk melihatnya. Pada akhir casing ini, berlawanan dengan apa yang terlihat pada foto di atas, modul laser dan photodetector diperbaiki : Modul laser
Tampilan modul laser (beberapa detail ditandai oleh saya selama menggambar sirkuit): Seperti yang Anda lihat, sirkuit modul ini cukup sederhana, jadi saya dapat sepenuhnya memulihkan sirkuitnya: Bagian bundar yang besar pada papan adalah penghasil laser khusus. Sayangnya, tidak ada tanda di situ, jadi tidak ada dokumentasi yang bisa ditemukan. Dari uraian pada pemindai Anda dapat menemukan - “Panjang gelombang sinar laser - 905 nm”, “Kelas laser - 1”, “Durasi pulsa - 0,003 μs”, “Frekuensi pengulangan - 25 kHz”. Apa yang mungkin dipahami dengan mengembalikan sirkuit modul dan menganalisis operasinya:

- Pemancar laser secara konstan disuplai dengan tegangan suplai 143 V, dibatasi oleh dioda zener.
- , «3» . , , .
- , , . ( ) «» .
Semua kontrol laser dilakukan dalam satu baris - "LASER_PULSE". Sebagian besar waktu di telepon harus level "tinggi". Ketika pulsa negatif diterapkan, pemicu DD1 diatur ulang ke 0 pada tepi depan, dan pada tepi belakang, pemicu mulai "menunggu" untuk sinyal dari fotodioda dan laser mulai. Ketika sinyal dari fotodioda muncul, pelatuk beralih ke 1.Anda dapat melihat dua kabel koaksial menggunakan konektor yang terhubung ke modul. Mereka digunakan untuk mengirimkan sinyal diferensial dari pelatuk ke chip TDC.Juga pada modul ini ada lima LED. Modul prosesor mengontrolnya. ModulPhotodetectorModul itu sendiri terlihat seperti ini: Foto photodetector itu sendiri dekat:
Tanda tegangan tinggi di sudut papan jelas menunjukkan bahwa avalanche photodiode (APD) digunakan di sini - mereka memerlukan tegangan yang cukup tinggi untuk beroperasi.Sayangnya, tidak ada tanda yang terlihat pada badan fotodetektor. Dengan lambang pada fotodioda itu sendiri (di tengah), itu hanya mungkin untuk menentukan bahwa itu diproduksi oleh Pacific Silicon Sensor (Sensor Pertama)Namun, tidak ada informasi lebih lanjut tentang dia, mungkin dia dibuat khusus. Dapat dilihat dari foto bahwa photodetector ini adalah hybrid, mis. berisi penguat bawaan - terlihat jelas di atas fotodioda. Jelas, amplifier dan fotodioda membutuhkan daya - itu dimasukkan melalui terminal yang lebih rendah (kapasitor disolder ke mereka). Sebuah misteri besar adalah detail kecil di sebelah kiri fotodioda, di mana ada tiga konduktor. Penelitian lebih lanjut menunjukkan bahwa ini adalah sensor termal analog.Modul ini jauh lebih rumit daripada yang sebelumnya, ia menggunakan papan sirkuit tercetak berlapis-lapis - setidaknya 4 lapisan, dengan sebagian besar garis sinyal terletak di lapisan luar papan, yang sangat memudahkan analisisnya. Dalam modul ini, saya memulihkan sekitar 80% dari rangkaian, sisanya tidak terlalu diperlukan untuk saya.Sirkuit yang dihasilkan dari modul photodetector: Di bagian atas sirkuit adalah sumber tegangan tinggi linier yang dapat disesuaikan untuk fotodioda longsor. Itu dapat menghasilkan tegangan stabil setidaknya 150 V. Sumber ini dikendalikan oleh DA1 DAC (LTC1451).
Karena pemindai didasarkan pada pencari jangkauan pulsa, tugas utama modul photodetector adalah untuk dengan cepat mendeteksi sinyal laser yang cukup lemah yang tercermin dari penghalang. Karena tingkat sinyal cahaya sangat kecil, itu hanya dapat dideteksi menggunakan avalanche phototodiode, yang memiliki gain sendiri. Dalam hal ini, sinyal dari fotodioda juga diperkuat oleh amplifier terintegrasi yang terintegrasi dalam photodetector. Karena fakta bahwa amplifier dibangun ke dalam tubuh photodetector, pengaruh gangguan pada sinyal yang berguna berkurang. Sinyal yang dihasilkan oleh photodetector (OUT_B) ditransmisikan ke chip DA4 tertentu, yang tampaknya merupakan penguat frekuensi tinggi lainnya. Setelah itu, sinyal ditransmisikan ke input langsung komparator kecepatan tinggi D1 (MAX9601).Sinyal referensi dari pembagi resistor (sekitar 50 mV) diumpankan ke input kebalikan dari komparator ini.Sinyal pada keluaran komparator adalah diferensial, ditransmisikan melalui kabel koaksial langsung ke papan modul prosesor.Selain itu, sinyal dari output amplifier DA4 ditransmisikan ke beberapa jenis detektor puncak, yang "mengingat" tingkat maksimum pulsa yang diterima. Saya tidak mulai mengembalikan rangkaian simpul ini, dan menggambar pada rangkaian hanya tahap keluarannya (chip U1), sinyal yang darinya juga ditransmisikan ke modul prosesor.Salah satu bagian dari pemindai yang kurang jelas bagi saya adalah transistor Q3 yang dipasang pada output penguat RF. Dilihat oleh sirkuit, perlu untuk memungkinkan pelemahan sinyal pada output amplifier. Transistor ini dapat dikontrol menggunakan sinyal dari papan prosesor (line10 - “digi”).Anda mungkin memperhatikan bahwa board memiliki chip EEPROM. Semua output sinyal dari chip ini terhubung ke papan prosesor. Rupanya, dalam rangkaian mikro ini beberapa parameter disimpan, unik untuk setiap papan fotodetektor, dan dicatat di dalamnya saat menguji papan. Secara khusus, ini dapat berupa kurva dari ketergantungan APD gain pada tegangan suplai, ketergantungan tegangan pada output sensor suhu pada suhunya, dan karakteristik serupa lainnya.Anda dapat melihat bahwa kekuatan photodetector dapat dikontrol dengan mengatur level tertentu pada garis CLK, CS, CS2 yang terhubung ke DAC dan EEPROM.Papan berisi beberapa sirkuit yang dirancang untuk memantau kondisinya. Anda dapat mengontrol level tegangan APD, suhunya (line7) dan ambang pembanding. Tegangan ini dikonversi oleh amplifier operasional DA3-DA5 dan dikirim ke papan modul prosesor.Kembali ke
modul prosesor Modul ini adalah yang paling kompleks dari semuanya, ini berisi sejumlah besar sirkuit mikro multi-output, papan sirkuit tercetak lagi empat-lapisan, dan sebagian besar garis sinyal dipisahkan dalam lapisan dalam, yang secara signifikan mempersulit pemulihan sirkuit. Sangat sering ternyata trek beralih ke sisi lain papan. Untuk mencari dengan cepat di mana trek tertentu terhubung, saya harus menggunakan sikat seperti itu, terhubung ke multimeter (dalam mode panggilan):
Saya memulihkan sekitar 70% dari skema - sisanya saya tidak benar-benar membutuhkan. Block diagram dari modul prosesor:
Diagram yang dihasilkan dari modul prosesor: Terlepas dari kenyataan bahwa saya menyebut modul ini "modul prosesor" di mana-mana, pada kenyataannya itu didasarkan pada mikrokontroler Infineon SAK-C167CR-L33M . Ini memiliki 144 pin, dan dibangun di atas arsitektur C166 yang cukup lama. Mikrokontroler ini tidak memiliki memori non-volatile sendiri - perlu menghubungkan memori eksternal ke dalamnya melalui bus paralel. Untuk keperluan ini, pemindai memiliki chip memori Flash M29F400B (512K x 8 / 256K x 16). Juga, dua chip RAM terhubung ke mikrokontroler - IS61C6416AL-12 (64K x 16) dan K6R4016C1D (256K x 16).
Anda dapat melihat bahwa bus alamat terhubung ke semua sirkuit memori dengan pergeseran satu bit - jalur memori A0 terhubung ke jalur A1 dari mikrokontroler. Ini disebabkan oleh fakta bahwa alamat-alamat diatur pada bus alamat dalam byte, tetapi pengontrol dan memori 16-bit. Agar controller menulis byte tunggal ke RAM tanpa mempengaruhi byte tetangga dalam kata 16-bit, chip memori memiliki jalur khusus UBn, LBn. Solusi ini sangat umum pada perangkat dengan bus paralel dan dijelaskan secara rinci dalam dokumentasi untuk pengontrol.Tetapi solusi lain dalam modul prosesor tidak sepenuhnya jelas bagi saya. Jika Anda melihat chip memori Flash U1, Anda akan melihat bahwa garis A14 chip terhubung ke ground. Jalur bus alamat pengontrol A15 yang sesuai tidak terhubung ke chip sama sekali. Hasilnya adalah pengontrol hanya memiliki akses ke setengah dari memori Flash. Situasi yang sangat mirip dengan chip RAM2 (DD3).Dengan chip RAM1 (DD2), situasinya agak berbeda - garis pengontrol A15 juga tidak terhubung, tetapi pada saat yang sama semua input alamat dari chip ini terhubung ke bus alamat, sehingga controller memiliki akses ke seluruh memori chip.Dan sekarang Anda harus memperhatikan simpul pada elemen logis DX1, DX2, DD4. Microcircuits inilah yang menentukan microcircuits memori mana yang dipilih oleh mikrokontroler. Dapat dilihat bahwa mereka dikendalikan oleh sinyal berikut:- WRn - sinyal perekaman, level aktif - rendah. Pada baris ini, mikrokontroler menetapkan level rendah ketika Anda perlu menulis beberapa data ke memori RAM eksternal
- A15 adalah jalur bus data yang sama yang tidak terhubung langsung ke salah satu chip memori.
- CSn0 adalah sinyal pemilihan chip khusus, level aktif rendah. Baris ini terhubung ke decoder alamat yang terintegrasi dalam controller. Setelah reset, pengontrol rendah.
- RAM2_CE - terhubung ke GPIO controller dengan mengangkat ke tanah.
Logika pengoperasian simpul ini dijelaskan dengan baik oleh tabel:
Seperti yang Anda lihat, tergantung pada status garis RAM2_CE, mikrokontroler akan bekerja dengan memori Flash atau dengan mikrosirkuit RAM2 (DD3), dan ruang alamatnya bertepatan. Perlu dicatat bahwa kapasitas memori dari sirkuit mikro ini adalah sama. Mungkin ini dilakukan untuk mempermudah memperbarui firmware perangkat. Ada pilihan lain - RAM yang dipasang 3 kali lebih cepat dari memori Flash, jadi setelah memulai controller dapat menyalin isi FLASH ke RAM2, setelah itu program dijalankan darinya.Tetapi level tinggi pada jalur A15 dengan jelas menentukan bahwa pengontrol akan bekerja dengan chip RAM (DD2).Akibatnya, ternyata FLASH dan memori RAM1 bergantian di ruang alamat pengontrol:
Area RAM yang sudah dijumpai disorot dengan warna merah - saat mengaksesnya, pengontrol akan mendapatkan akses ke data yang terletak di alamat (0x8000-0xFFFF).Konfigurasi kompiler adalah non-sepele, dan, seperti yang saya sebutkan di atas, setengah dari Flash / RAM2 hilang. Mengapa pengembang pemindai tidak beralih antara FLASH dan chip RAM menggunakan jalur CSnX khusus dari pengontrol tidak jelas.Seperti yang telah saya sebutkan, controller yang digunakan tidak memiliki Flash-memory, dan karenanya, Fuse-bits. Untuk mengonfigurasi beberapa parameter controller: lebar dan alamat bus data, parameter PLL digunakan resistor pull-down yang terhubung ke bus data. Controller itu sendiri memiliki resistor Pull-Up resistensi tinggi (> 100 KOhm) yang terhubung ke seluruh bus. Jadi, karena resistor eksternal, kombinasi sinyal tertentu dibuat pada bus, yang dibaca pengontrol ketika dihidupkan. Ini menentukan pengaturan pengontrol yang diperlukan.Dalam hal ini, kita berbicara tentang resistor R3-R6. Konfigurasi resistor yang dipilih konsisten dengan koneksi sinyal bus yang dihasilkan dan memberikan kecepatan clock pengontrol 33 MHz.Sinyal pulsa dari mirror encoder diumpankan ke input timer "T2IN" dari mikrokontroler melalui elemen logika ATAU D6. Input kedua chip ini terhubung ke GPIO controller, yang memungkinkan Anda untuk menonaktifkan pasokan pulsa ke input timer. Mengapa solusi seperti itu diperlukan, dan mengapa tidak mungkin mematikan timer secara terprogram, saya masih tidak mengerti.Sekarang Anda harus memperhatikan chip TDC (DD1).Pemindai ini memiliki chip TDC-GPX - yang paling "canggih" dari semua yang ada dalam kisaran ACAM. Keakuratan yang diklaim untuk mengukur interval waktu hingga 10 ps RMS. Microcircuit memiliki 8 saluran input jalur LVTTL dan 2 saluran LVECL (diferensial).Dalam pemindai ini, untuk mendapatkan keakuratan maksimum pengukuran waktu, input LVECL yang digunakan untuk menerima sinyal dari modul laser dan modul photodetector menggunakan empat kabel koaksial. Sinyal dari modul laser dimasukkan ke input dari DStart / DStartN, dan mulai menghitung waktu. Sinyal dari modul photodetector dimasukkan ke input DStop1 / DStop1N, DStop2 / DStop2N, dan menghentikan penghitungan waktu. Seperti yang dapat dilihat dari diagram, sinyal stop diterapkan segera ke dua saluran TDC, dengan polaritas terbalik. Karena ini, dimungkinkan untuk mengukur tidak hanya durasi "penerbangan" dari pulsa cahaya, tetapi juga lebar dari pulsa yang diterima.TDC-GPX memiliki bus data 28-bit, tetapi dapat diubah ke mode 16-bit, yang digunakan pada pemindai. Bus alamat 4-bit, juga bergeser 1 bit, seperti halnya chip memori. Chip DD8, DD9, U2 digunakan untuk menghasilkan sinyal kontrol dari chip dan mencocokkan level - mikrokontroler bekerja dari 5V, dan TDC - dari 3.3V. Secara umum, sistem daya TDC cukup kompleks, bahkan ada penyesuaian otomatis dari tegangan suplai. Karena kerumitannya, saya tidak mulai menggambar diagram-nya - saya menduga itu tidak jauh berbeda dari datasheet.Pemrograman mikrokontroler dan TDC akan dibahas nanti.Seperti yang saya sebutkan sebelumnya, chip ASIC khusus dengan tulisan "LEUZE98" dan "WATCHDOG" dipasang di papan tulis. Apa itu tidak diketahui. Dapat dilihat bahwa osilator kristal 20 MHz terhubung ke sirkuit mikro ini. Setelah saya dapat memprogram mikrokontroler, saya memastikan bahwa ASIC tidak mengganggu operasinya, dan tidak mengembalikan diagram koneksi ASIC. Sejauh yang saya mengerti, chip ini berkomunikasi dengan controller melalui bus paralel. Ada kemungkinan bahwa ASIC yang menghasilkan RESETn sinyal reset, yang me-reset pengontrol dan TDC.Namun demikian, perlu untuk berurusan dengan beberapa rantai secara lebih rinci.Ternyata, sinyal kontrol laser "LASER_PULSE" dapat dihasilkan oleh mikrokontroler dan ASIC menggunakan simpul pada transistor T1, T2. Dalam hal ini, ketika dinyalakan, ASIC membuka transistor T1, sehingga pengontrol tidak dapat mengontrol laser. Karena itu, saya harus melepas resistor R24 - dan laser mulai dikontrol secara normal oleh pengontrol.Sinyal kontrol cermin motor line_motor1 juga berasal dari ASIC (via diode D2). Karena itu, saya harus memotong trek di papan tulis dan menghubungkan sinyal ini langsung ke output bebas dari pengendali GPIO - P3.15.Hal yang paling aneh adalah bahwa saluran CS2 yang terhubung ke DAC yang dipasang pada papan sirkuit modul photodetector juga ternyata terhubung ke ASIC. Karena itu, pengontrol tidak dapat secara independen mengatur tegangan pasokan APD, dan menyalakan amplifier APD. Mungkin ini dilakukan untuk meningkatkan keandalan pemindai - pengaturan DAC yang salah dapat menyebabkan kegagalan APD. Saya juga harus menghubungkan baris ini ke pin GPIO gratis dari kontroler P3.4.Diketahui bahwa ASIC yang mengontrol tiga LED yang terpasang pada modul laser. Dua LED lagi yang menampilkan status pemindai (adanya penghalang di area kerja) dikendalikan dari pengontrol - jalur LN1, LN2. Baris-baris ini juga menuju ke papan modul antarmuka.Karena pemindai dapat bekerja dalam sistem keamanan, papan prosesor memiliki sejumlah besar simpul untuk mendiagnosis kondisinya. Prosesor (dan mungkin ASIC) dapat mendeteksi masuknya laser (menggunakan chip U3), mengontrol level beberapa tegangan suplai, tegangan suplai APD, suhu APD, dan ambang komparator pada papan fotodetektor.Karena fakta bahwa tegangan referensi ADC controller adalah 4.1V, sebagian dari tegangan yang diukur dikurangi dengan bantuan pembagi resistor - mereka dapat dilihat pada diagram di sebelah kanan.Dan sekarang bermanfaat untuk melihat lebih dekat pada metode menghasilkan sinyal "digi" yang tidak biasa , yang saya sebutkan sebelumnya dalam deskripsi modul photodetector.Diagram di bawah ini menunjukkan node dari modul prosesor (bawah) dan modul photodetector (atas):
Panah menunjukkan koneksi modul menggunakan kabel. Di bawah ini saya akan menjelaskan operasi dari node ini, seperti yang saya mengerti. Dalam modul photodetector, sinyal dari output APD diperkuat oleh chip DA4, setelah itu ditransfer ke komparator D1. Jika level sinyal pada input komparator lebih dari 50 mV, maka level tinggi ditetapkan pada output komparator. Sinyal dari output komparator ditransmisikan ke modul prosesor. Pertama-tama, ia memasuki input TDC, yang menghitung waktu dari awal pulsa laser. Tetapi di samping itu, sinyal ini diumpankan ke input jam dari D-trigger DD1. Unit logis selalu dipasok ke input sinyal pemicu, dan pemicu itu sendiri dapat diatur ulang ke nol menggunakan garis GPIO dari pengontrol BASE5. Dengan demikian, pengoperasian komparator mengarah ke pemicu snap "1". Pemicu ini memiliki keluaran diferensial,sinyal yang diumpankan ke input chip D3, yang mengubahnya menjadi format LVTTL. Sinyal ini diumpankan ke input "digi" dari modul photodetector. Seperti yang saya sebutkan sebelumnya, menurut pendapat saya, tampilan sinyal ini mengarah pada melemahnya level sinyal pada input komparator.Pertanyaan utamanya adalah mengapa ini diperlukan dan mengapa begitu sulit untuk diterapkan? Mengapa tidak mungkin membuat kedua node di papan modul photodetector?Saya hanya bisa mengungkapkan asumsi saya. Mungkin sinyal perlu dilemahkan untuk menghindari transisi komparator atau detektor amplitudo ke saturasi. Mungkin - untuk mengurangi panjang pulsa yang diterima. Untuk kedua node, tidak mungkin ada tempat di papan photodetector. Pilihan lain juga mungkin - sinyal perlu dilemahkan hanya setelah memiliki waktu untuk mencapai TDC melalui kabel koaksial, yang membenarkan desain yang kompleks.Penelitian menunjukkan bahwa sebelum memulai laser pulsa baru, perlu untuk mengatur ulang pemicu, jika tidak, pulsa tidak diterima.Modul antarmukaSayangnya, saya tidak menemukan foto yang bagus dari modul ini. Hanya ada satu ini:
Pada modul ini hanya dua konektor yang diinstal, yang dapat Anda hubungkan di luar pemindai. Salah satunya adalah RS-232 / RS-422, menurut yang kedua, daya disuplai ke pemindai, sinyal kontrol disediakan, dan sirkuit keselamatan terhubung di sini.Modul ini berisi konverter UART-RS232 / RS485 dan optocoupler isolasi galvanik (mereka dipasang pada papan kecil terpisah yang ditunjukkan di sebelah kanan), tombol daya dari sirkuit pengaman, sirkuit input dari garis kendali range finder, sirkuit kontrol motor, konverter sinyal encoder.Modul daya dan modul prosesor, serta modul encoder dan motor cermin terhubung ke modul ini (menggunakan konektor di bagian bawah modul, mereka tidak terlihat di foto).Diagram parsial dari modul antarmuka: Saya hanya mengembalikan sebagian diagram rangkaian modul ini (sekitar 20%), karena saya tidak tertarik dengan kunci dan jalur input yang diperlukan untuk memastikan keamanan. Dan ada beberapa luka di sana, dokumentasi menyebutkan batas saat ini di sirkuit keselamatan, pemantauan hubung singkat, dan fungsi lainnya.
Agak anehnya mengendalikan kecepatan putaran motor cermin. Kontrol kecepatan diterapkan dengan mengubah tegangan motor - dengan ini, semuanya jelas. Tetapi penyesuaian tegangan ini sendiri dilakukan dengan bantuan rantai pengintegrasian tertentu pada penguat operasional. Untuk meningkatkan tegangan, pengontrol menetapkan 0 pada jalur line_mot1 untuk menurunkannya - 1. Jelas, tanpa umpan balik konstan dari pembuat enkode, motor berhenti atau berakselerasi ke kecepatan maksimum melalui pengontrol.Ternyata, chip konverter UART-RS232 LTC1387 cukup lambat - pada kecepatan 500 kbit / s, data terdistorsi. Karena itu, saya harus melepas papan kecil dengan chip ini, dan menghubungkan konverter USB-UART langsung ke papan modul antarmuka.Sekarang saya sudah bicara tentang desain semua modul, ada baiknya untuk menguraikan proses rekayasa balik itu sendiri.Ketika saya mulai berurusan dengan elektronik pemindai, saya paling takut bahwa laser atau fotodetektor dapat rusak akibat dampak. Pada saat yang sama, saya tidak yakin bahwa saya akan dapat meluncurkan modul prosesor - mikrokontroler yang tidak dikenal dan ASIC merasa malu. Karena itu, pertama-tama, saya mengembalikan sirkuit modul laser, dan kemudian modul photodetector. Setelah saya dapat memahami sirkuit dari modul-modul ini dan menentukan tujuan dari semua kontak pada konektor mereka, adalah mungkin untuk melanjutkan ke modul prosesor. Sebagai upaya terakhir, jika saya tidak bisa memulainya, saya punya ide untuk membuat analog dari modul ini pada STM32 + TDC-GP2 microcircuits.Jelas, untuk memeriksa modul, Anda perlu menjalankan program Anda sendiri pada mikrokontroler Infineon SAK-C167CR yang terpasang di dalamnya. Sekali lagi, perlu diingat bahwa pengontrol ini tidak memiliki memori Flash bawaan. Selain itu, ternyata, controller tidak memiliki antarmuka debugging khusus (termasuk JTAG). Dengan tingkat probabilitas tinggi, firmware ditulis ke Flash eksternal di pemrogram di pabrik. Namun, ternyata, semuanya tidak terlalu buruk - pengontrol memiliki bootloader ("Bootstrap Loader"), bekerja pada UART. Bootloader ini disimpan di boot-ROM bawaan controller, jadi pasti ada di controller saya. Dan itu bekerja sangat aneh - untuk mengaktifkannya saat startup, Anda perlu mengatur jalur data bus P0L.4 ke rendah,setelah itu controller mulai menunggu byte 0x00 dari host muncul. Setelah menerima byte ini, bootloader secara otomatis menentukan kecepatan transfer, dan mulai menunggu 32 byte data yang disalin ke RAM internal controller. Setelah data diterima, pengontrol memulai eksekusi program yang diterima (16 kata pengontrol).Bahkan, dalam 32 byte ini Anda perlu mendorong loader lain ("preloader"), yang akan menerima "loader eksternal" loader utama dari host, dan mulai pelaksanaannya.Di sini saya beruntung - untuk prosesor ini sudah ada program FLASHit yang sudah jadi yang dapat melakukan semua operasi yang disebutkan secara otomatis. Pemuat yang dibangun di dalamnya memiliki cukup banyak fungsi - dengan itu Anda dapat secara otomatis menentukan model memori Flash yang dipasang, mengedit dan melihat isi register pengontrol, Anda dapat melihat status saluran ADC.Saya tidak dapat menemukan bantalan uji di papan yang terhubung ke garis P0L.4 controller, jadi untuk memulai bootloader, saya harus menyolder pin khusus ke baris ini. Saya menempelkan pin ke kasing salah satu chip RAM. Untuk memulai bootloader, Anda harus menghubungkan pin ini melalui resistor 8 kΩ ke ground.Setelah saya menghubungkan papan ke komputer, dan menerapkan daya ke modul prosesor, mikrokontroler benar-benar muncul di FLASHit. Setelah itu, saya menulis sebuah program kecil di Keil yang mengganti salah satu pin pengontrol dan menulisnya di Flash. Program ini bekerja dengan baik, ASIC tidak ikut campur dengan cara apa pun (saya takut semacam mekanisme pengawas yang ada di dalamnya, atau konflik di bus), sehingga memungkinkan untuk melanjutkan.Setelah itu, saya memulihkan sirkuit modul prosesor, yang memungkinkan saya untuk memeriksa operasi semua modul dalam perakitan.Yang pertama saya memeriksa pengoperasian modul laser - seperti yang saya tulis sebelumnya, untuk memulai pulsa laser, perlu menerapkan hanya satu sinyal ke modul ini. Laser bekerja - kilatannya bisa dilihat menggunakan kamera ponsel. Juga, menggunakan osiloskop, saya memeriksa bahwa modul biasanya membentuk pulsa (referensi).Berikutnya adalah pemeriksaan modul photodetector. Di sini saya harus memeriksa operasi DAC, unit pembangkit tegangan fotodioda longsor, dan unit kontrol daya dari penguat fotodetektor. Semuanya didapat, yang memungkinkan untuk memeriksa operasi pencari jarak itu sendiri. Untuk melakukan ini, saya mengumpulkan modul-modulnya dalam bentuk yang dimaksudkan oleh para pengembang:
Dalam foto itu, kelima modul utama dirakit bersama di sekitar sistem optik. Di sini, alih-alih cermin berputar saya sendiri, saya memasang cermin biasa.Setelah itu, saya mengajukan program kontrol laser untuk UART, mengatur fotodioda. Sebagai hasilnya, ketika saya memulai laser pada input pembanding, saya benar-benar dapat mendeteksi pulsa dengan osiloskop yang amplitudo tergantung pada jenis penghalang di depan cermin! Komparator juga bekerja dengan baik. Bagian penting terakhir dari tes ini tetap - verifikasi kinerja TDC.Chip TDC-GPX yang dipasang pada pemindai memiliki desain yang agak rumit, dan dapat bekerja dalam sejumlah besar mode.Gambar di bawah ini menunjukkan diagram strukturalnya:
Seperti yang Anda lihat, chip berisi 8 saluran terpisah, yaitu, ia dapat menerima hingga 8 sinyal stop. Jika salurannya diferensial, maka hanya dua sinyal stop ditambah satu sinyal awal yang dapat dianalisis. Dalam hal ini, chip memungkinkan Anda untuk menggabungkan saluran pengukuran, sehingga meningkatkan akurasi interval waktu pengukuran:
Jujur, saya tidak suka dokumentasi untuk chip ini. Banyak hal di dalamnya dijelaskan secara dangkal, contoh kode tidak dapat dipahami. Bagian dari lembar data yang ditujukan untuk menyesuaikan resolusi waktu penuh dengan semacam "angka migrasi". Juga tidak ada "Catatan Aplikasi" yang normal pada chip. Selain itu, pada pemindai itu sendiri, saya tidak dapat mendeteksi koneksi jalur EF1 / EF1 ke controller. Dari garis-garis inilah maka dapat diketahui bahwa rangkaian mikro telah selesai mengukur waktu. Karena semua ini, memulai TDC membutuhkan waktu yang cukup lama, tetapi sebagai hasilnya semuanya bekerja sebagaimana mestinya - ketika laser mulai, TDC bekerja, dan hasil TDC jelas tergantung pada jarak ke rintangan. Dengan demikian, pencari jangkauan laser berdenyut mulai bekerja. Tetap mengubah seluruh struktur menjadi pemindai laser yang bisa diterapkan.Langkah pertama yang saya butuhkan untuk melakukan penyesuaian - pengintai yang berkumpul berhenti "melihat" hambatan setelah beberapa meter. Sistem optik terlihat utuh, tetapi saya harus melepaskan papan dari sistem optik, sehingga cahaya yang dipantulkan tidak secara tepat difokuskan oleh lensa pada photodetector.Sebelum penyelarasan, saya menulis sebuah program untuk controller, yang tidak hanya menentukan jarak, tetapi juga mengukur amplitudo sinyal yang dihasilkan oleh detektor puncak menggunakan ADC.Seluruh proses penyesuaian dikurangi untuk kelancaran pergerakan photodetector dan papan laser, dan untuk mencari posisi mereka di mana amplitudo sinyal maksimum. Sebagai hasil dari penyesuaian, amplitudo sinyal yang diterima meningkat secara signifikan.Selanjutnya, Anda harus memperhatikan beberapa fitur pemrosesan data yang melekat pada pengukur jangkauan pulsa.Sinyal yang dihasilkan oleh photodetector memiliki bentuk analog. Untuk mengubahnya menjadi bentuk digital, yang selanjutnya diproses oleh TDC, komparator digunakan yang dikonfigurasi untuk beralih jika sinyal input melebihi ambang tertentu. Akibatnya, karena bentuk kompleks sinyal input, ketika mengubah amplitudo sinyal, kesalahan terjadi ketika menentukan interval waktu:
Seperti yang dapat dilihat dari grafik, sinyal dengan amplitudo yang lebih rendah akan terdeteksi dengan penundaan. Untuk mengatasi masalah ini, ada beberapa metode, baik perangkat keras maupun perangkat lunak. Saya memutuskan untuk menggunakan opsi paling sederhana - koreksi hasil pengukuran tergantung pada amplitudo sinyal. Pada saat yang sama, saya harus mengumpulkan statistik tentang perubahan hasil pengukuran waktu dari perubahan amplitudo sinyal. Untuk mengubah amplitudo sinyal tanpa mengubah parameter lainnya, saya menggunakan pembalut kertas pada lensa, yang mengurangi insiden fluks cahaya pada fotodioda.Hasilnya adalah ketergantungan ini:
Berdasarkan ketergantungan ini, saya membentuk tabel koreksi, data yang digunakan oleh program pengontrol untuk menentukan jarak ke objek.Langkah selanjutnya adalah memulai mesin mirror dan encoder.Sebelumnya, saya sudah mengutip foto cermin:
Motor cermin itu tanpa sikat, sangat mirip dengan yang digunakan pada kipas pendingin. Tiga kabel keluar dari sana - 2 di antaranya adalah kekuatan, yang lain adalah sinyal kecepatan pulsa. Semua kabel ini terhubung ke modul antarmuka, sedangkan sinyal kecepatan yang dihasilkan oleh motor tidak digunakan - kontrol didasarkan pada data dari encoder.Seperti yang dapat Anda lihat dari foto, disk transparan dengan label untuk enkoder ditetapkan pada sumbu mesin. Anda mungkin memperhatikan bahwa ada tanda nol pada disk.Encoder dipasang di papan kecil dan sepenuhnya ditutupi dengan layar logam, sehingga penandaannya tidak dapat ditentukan. Namun, berdasarkan ukuran dan pinout, saya memutuskan bahwa itu adalah HEDS-9040 quadrature encoder:
Empat kabel pergi dari papan encoder ke modul antarmuka, tetapi ternyata, hanya tiga dari mereka yang digunakan - dua catu daya dan sinyal.Seperti yang saya pahami, pemicu Schmitt dan beberapa logika dipasang di papan tulis, menggabungkan data dari saluran A, B, dan indeks (sinyal tanda nol).Ini adalah bagaimana sinyal yang dihasilkan oleh papan encoder dan sinyal indeks diambil langsung dari encoder.
Seperti dapat dilihat, selama sinyal indeks, pulsa encoder ditekan. Ternyata, papan encoder menghasilkan 500 pulsa per revolusi, tetapi timer dari pengontrol T2, yang terhubung dengan garis encoder, dapat beroperasi secara bersamaan di kedua sisi pulsa, yang memberikan 1000 gangguan per putaran cermin. Nilai ini sesuai dengan resolusi sudut pemindai yang dinyatakan pada 0,36 derajat.Saya mengatur timer T2 ke "Capture mode", yang memungkinkan saya untuk mengukur waktu antara interupsi dari encoder. Waktu yang diperoleh digunakan untuk mendeteksi posisi "nol" dari cermin, dan untuk menstabilkan kecepatan putaran motor. Pada saat yang sama, jumlah gangguan dihitung, yang memungkinkan Anda untuk menentukan posisi cermin.Setelah encoder bekerja, dan saya berhasil memulai kontrol kecepatan mesin, dimungkinkan untuk merakit pemindai sepenuhnya. Karena bentuk papan dan optik yang rumit, desainnya ternyata agak rumit: Tidak mudah untuk merakit desain seperti itu - keakuratan pengaturan setiap bagian sangat penting bagi pemindai. Jika sumbu cermin tidak sesuai dengan sumbu optik bagian pengintai, ini dapat mengarah pada fakta bahwa bidang pemindaian akan sangat melengkung atau miring.
Ketika mengukur jarak yang tepat ke objek, penting untuk memiliki semacam "referensi" objek, jarak yang diketahui dengan tepat. Mengetahui "waktu penerbangan" untuk itu, Anda dapat secara akurat menentukan waktu yang sesuai dengan jarak nol. Karena perubahan suhu komponen pemindai, kali ini dapat berubah, jadi kali ini harus dipantau terus-menerus. Untuk mengatasi masalah ini, saya memasang pelat hitam yang dihitamkan di pemindai:
Piring itu menghitam sehingga cahaya yang dipantulkan darinya tidak "membutakan" photodetector. Dilihat oleh instruksinya, elemen pemantul gelap dan terang juga dipasang pada desain pemindai asli. Mereka digunakan untuk memantau operasi bagian pengintai pemindai, dan kemungkinan besar, mereka juga digunakan untuk kalibrasi.Pada foto di atas, encoder yang terpasang di papan juga terlihat jelas. Ternyata, encoder harus diposisikan sangat tepat relatif terhadap disk, dan ada banyak masalah dengan ini - bahkan pergeseran kecil encoder menyebabkan hilangnya pulsa, terutama yang indeks. Ada kemungkinan bahwa pemindai berhenti bekerja setelah mengenai tubuh justru karena masalah dengan enkoder.Hasilnya, dimungkinkan untuk mendapatkan kecepatan pemindaian hingga 20 putaran per detik. Dengan tegangan APD 135 V, jarak hingga 10-15 m biasanya terdeteksi. Pada tegangan 145 V dan dengan pemfilteran sinyal tambahan, dimungkinkan untuk mengukur jarak hingga 30 m (walaupun saya tidak yakin apakah ini aman untuk photodetector).Perlu dicatat bahwa kecepatan transmisi maksimum pada pemindai asli adalah 115200 bit / s, yang memungkinkan Anda untuk mentransfer semua data hanya dengan kecepatan sekitar 11 putaran per detik.Seperti yang saya sebutkan, dalam firmware saya, saya mentransfer data pada kecepatan 500 kbit / s, yang secara signifikan dapat meningkatkan jumlah pemindaian yang ditransmisikan per detik. Karena batas kecepatan UART, saya tidak meningkatkan kecepatan pemindaian ke 25 putaran asli per detik. Saya perhatikan bahwa dalam desain asli pemindai, data diproses dalam pemindai itu sendiri, sehingga kecepatan transfer data yang rendah tidak terlalu memengaruhi apa pun.Karena pemindai sekarang berfungsi tanpa perumahan, dimungkinkan untuk meningkatkan area pemindaian menjadi 208 derajat dibandingkan 190 dalam desain aslinya.Visualisasi data yang diterima dari pemindai:
Jelas, pemindai harus melakukan beberapa fungsi yang berguna, jadi saya memutuskan untuk memeriksa operasinya di ROS di SLAM, dan membandingkan hasilnya dengan hasil pemindai laser buatan sendiri . Untuk melakukan ini, saya menginstalnya di Roomba, di mana pemindai buatan rumah sebelumnya diinstal.Tampilan pemindai Leuze yang dipasang di Roomba (cermin berputar sehingga tampak buram): Sebagai hasil dari operasi hector_slam, kami berhasil mendapatkan peta apartemen seperti itu (dinding diperlihatkan dengan warna kuning): Karena penyedot debu bergerak di lantai, itu terutama “melihat” perabotan. Tetapi kartu semacam itu diperoleh jika penyedot debu hanya dilakukan di tangan setinggi sabuk: Dalam hal ini, dinding apartemen "lebih terlihat" lebih sering.

Jika kita membandingkan kualitas kartu, jelas bahwa garis-garis pemindai buatan sendiri lebih "berisik". Hal ini disebabkan oleh fakta bahwa dengan pemindai buatan sendiri yang menggunakan prinsip triangulasi operasi, akurasi meningkat secara signifikan dengan meningkatnya jarak.Sayangnya, meskipun kualitas pemindaiannya sangat bagus, pemindai ini tidak cocok untuk robot otonom - pemindai ini memiliki dimensi terlalu besar dan konsumsi daya (sekitar 7,2 W).Di mana lagi saya bisa menggunakan pemindai seperti itu? Sebelumnya, ketika membahas pemindai buatan sendiri, saya sering ditanya tentang kemungkinan membuat pemindai 3D, dan inilah saatnya membuatnya! Kecepatan pemindaian yang cukup tinggi berguna di sini. Tentu saja, dengan resolusi, pemindai seperti itu tidak dapat dibandingkan dengan pemindai yang menggunakan prinsip triangulasi pengukuran jarak (dengan garis laser atau proyektor (SLS)), tetapi mereka dapat memindai ruang besar - tempat, bagian jalan.Untuk membuat ulang pemindai 2D dalam 3D, Anda harus memberikannya kemampuan untuk memutar sepanjang sumbu lain. Saya memutuskan untuk membuat pemindai saya menggunakan prinsip pemindaian berkas yang sama dengan pemindai dari siniartikel. Untuk melakukan ini, saya menempatkan pemindai Leuze "berbaring" sehingga bidang pemindaiannya tegak lurus ke lantai. Selanjutnya, perlu untuk mewujudkan rotasi lambat yang lancar dari seluruh pemindai di sekitar sumbu. Kesulitan utama - pemindai harus berputar tanpa denyut dan distorsi, yang akan menyebabkan distorsi pemindaian. Ternyata, di rumah sulit untuk membuat rakitan bantalan yang dapat memberikan rotasi yang akurat. Oleh karena itu, saya memutuskan untuk menggunakan kepala VHS dari tape recorder sebagai unit bantalan - ini berisi dua bantalan, dibuat dengan akurasi yang sangat tinggi dan mampu menahan berat pemindai. Desain yang dihasilkan digerakkan oleh motor stepper.Pemindai 3D rakitan terlihat seperti ini: Tampilan pemindai yang terpasang pada tripod:
Di sebelah kiri adalah baterai 12 V, yang juga merupakan penyeimbang. Karena pemindai Leuze memerlukan 24 V untuk pengoperasian, saya harus menginstal konverter DC / DC step-up yang dirakit berdasarkan chip XL6009 pada pemindai. Motor stepper pemindai dikendalikan oleh modul pada A4988 dan Arduino, yang memberikan rotasi pada kecepatan tertentu. Baik pemindai Leuze (melalui adaptor USB-UART) dan Arduino terhubung melalui hub USB dengan kabel ke komputer yang menangkap data. Dalam bentuk saat ini, rotasi cermin pemindai dan rotasi seluruh pemindai tidak disinkronkan - kecepatan rotasi pemindai dipilih sehingga ketika diputar oleh 0,36 derajat, cermin punya waktu untuk membuat setidaknya tiga putaran. Karena tidak ada sinkronisasi kecepatan, saya harus mengirimkan informasi posisi sinkronisasi dari Arduino ke pemindai Leuze.Ini diterapkan cukup sederhana - ketika Arduino memutar pemindai untuk setiap 0,36 derajat, itu mengubah level sinyal di salah satu terminal. Sinyal ini dikirim ke modul prosesor pemindai (ke konektor yang tidak digunakan dari sensor status kaca pelindung). Informasi tentang keadaan sinyal ini ditransmisikan pada awal setiap pengiriman pemindai - dengan demikian program yang ditulis sendiri untuk PC yang mengontrol pemindai menerima informasi tentang pergerakan pemindai dan menentukan sudut putarannya.menerima informasi tentang pergerakan pemindai dan menentukan sudut rotasi.menerima informasi tentang pergerakan pemindai dan menentukan sudut rotasi.Pemindaian 3D tunggal yang dihasilkan oleh pemindai mengandung sekitar 350'000 poin. Tentu saja, ini secara signifikan kurang dari pemindai profesional, tetapi masih cukup bagus, terutama jika Anda merekatkan beberapa pemindaian bersama.Contohnya adalah pemindaian tunggal sebuah ruangan: Contohnya adalah pemindaian ruangan yang dilem dari beberapa: Bagian yang dipindai dari pintu masuk: Sebuah video yang menunjukkan hasil pemindai yang dihasilkan:

→ Kode sumber program pengontrol di GithubSource: https://habr.com/ru/post/id396357/
All Articles