Membaca sejumlah besar sensor analog secara real time

17

Saya mencoba membangun pengontrol seperti MIDI yang memiliki leher seperti gitar. Di leher itu, ada matriks besar sensor tekanan. Pengontrol akan meniru 3 string.

Cara kerjanya adalah: Ada 3 strip panjang pita tembaga dua sisi (lebar 0,5 cm, sepanjang leher) yang terhubung ke daya (mungkin 3.3V atau 5V, tidak masalah untuk saat ini). Pada strip ini adalah lapisan Velostat, yang mengubah resistivitas berdasarkan tekanan. Di atas velostat akan ada lapisan lain dari baris atau sel-sel pita tembaga, terhubung ke sesuatu, yang memuntahkan pembacaan tegangan melalui lapisan velostat. Karena lehernya sekitar 40 cm, akan ada setidaknya 80 baris.

Jika Anda membayangkan 3 strip bawah pita tembaga sebagai kolom bagan di sepanjang leher, sensornya akan menjadi sel atau baris, tergantung pada metode pengukurannya (saya pikir orang mungkin dapat menggandakan kolom juga, lalu mungkin ada baris.) Ada beberapa kondisi khusus yang mungkin membuat ini lebih mudah: Karena ini adalah pengontrol seperti gitar tidak setiap interaksi perlu diukur! Hanya sentuhan yang paling dekat dengan badan pengontrol yang penting. Juga resolusi 8 bit harus cukup akurat. 255 level tekanan mungkin lebih dari yang dibutuhkan.

Sekarang bagian yang sulit:

Pengukuran harus real-time-y cukup untuk mendeteksi palu, dll. (Tidak tahu seberapa tinggi laju sampel perlu - diperkirakan beberapa kHz untuk ukuran dan pemutaran yang baik) dan output digital dari pengontrol harus MIDI (pada 3 saluran terpisah - satu per string) atau sinyal digital yang dapat diproses dengan Raspberry Pi.

Sekarang karena pengetahuan saya sangat terbatas, saya tidak bisa memikirkan alat yang tepat untuk pekerjaan itu. Yang saya tahu adalah: Itu mungkin. Ada pengontrol yang serupa tetapi berbeda yang menggunakan teknik yang sangat mirip (yang saya reka ulang direkayasa sampai saya perhatikan, bahwa mereka memiliki hak paten dan informasi tentang cara mereka melakukannya tidak seaneh yang saya kira), disebut ROLI Daerah pesisir.

TL; DR:

  • kira-kira 240 sensor

  • dapat dipisahkan menjadi kelompok-kelompok 80 yang didukung oleh garis yang sama

  • ini adalah aplikasi waktu nyata, saya perlu mendapatkan tekanan dari setiap sensor saat disentuh (beberapa kondisi berlaku, lihat di atas)

Terima kasih sebelumnya, saya tahu banyak membaca. Saya berterima kasih atas saran dan akan sangat senang jika Anda dapat membantu saya menyelesaikan kekacauan mengerikan yang saya rencanakan untuk diproduksi!

Hal-hal yang saya pikirkan sejauh ini:

Multiplexing baris dan kolom, membaca setiap sel dengan MCP3008 atau ADC lebih besar dan rantai (seperti rantai daisy atau pohon) ATmegas yang hanya mendorong interaksi posisi-bijaksana terendah ke sinyal akhir, tetapi dari perhitungan saya, yang mungkin bisa dihambat oleh overhead komunikasi. Juga model sebelumnya termasuk potensiometer pita, yang telah saya buang, karena desainnya buruk (beberapa upaya, tidak cukup keren).

EDIT / PEMBARUAN:

Terima kasih atas saran yang bagus sejauh ini! Terima kasih kepada mereka, saya sekarang dapat mengungkapkan masalah saya dengan lebih jelas:

Saya memiliki matriks 80 baris * 3 kolom sensor tekanan. Ketika seorang manusia berinteraksi dengan matriks sensor, beberapa sensor di dekatnya akan mengambil sentuhan, tetapi hanya di sepanjang kolom. Kolom dipisahkan secara mekanis. Sensor memiliki resistansi antara 100 Ohm dan 1 kOhm. Semua sensor ini perlu dibaca dengan kedalaman 8 bit, diproses dan hasilnya harus dikirim dengan kecepatan minimal 1 kHz. Jadi satu bacaan / pemrosesan perlu waktu kurang dari satu milidetik. Output akhir per kolom harus: 4 byte untuk float32 dan 1 byte untuk uint8. Float32 akan menunjukkan posisi rata-rata dari interaksi pertama sepanjang kolom. Interaksi didefinisikan sebagai sekelompok sensor yang berurutan dengan tekanan di atas ambang tertentu. Di sinilah pemrosesan masuk ke dalam campuran: kolom akan dilintasi ke bawah sampai pembacaan melampaui ambang batas. Ini kemudian akan dihitung sebagai awal interaksi. Tekanan dan posisi setiap sensor diingat hingga sensor pertama, yang jatuh di bawah ambang batas dengan maksimum (mungkin) 4 sensor berturut-turut. Dari semua sensor interaksi yang direkam, hanya dua sensor yang akan diproses - sensor yang membaca tekanan tertinggi (resistansi terendah) dan sensor tertinggi langsung di atas atau di bawahnya. Posisi titik mengambang dihitung dengan rata-rata dua posisi sensor yang dibebani oleh tekanannya. Tekanan keseluruhan interaksi adalah penambahan kedua tekanan yang dijepit antara 0 dan 255 (tambahkan kedua tekanan unit8 ke dalam uint16 dan bagi dengan 2 tanpa pembulatan, buang bit yang tidak dibutuhkan - ini harus cepat). Ini perlu terjadi untuk setiap kolom. Hasil ukuran 15 byte kemudian akan dikirim melalui SPI ke komputer kecil (Raspberry Pi B3) yang bertindak sebagai synthesizer. Saya tidak mengatur tentang metode transmisi. Jika SPI bukan alat yang tepat untuk pekerjaan itu, saya bersedia mengambil metode komunikasi apa pun yang dapat ditangani oleh Raspberry Pi. Karena ini adalah aplikasi interaktif musik, latensi sangat penting.

Pertanyaan persis saya adalah: Apakah ini dapat diselesaikan dengan mikrokontroler tunggal tanpa merusak bank? Saya tidak mampu membeli beberapa ratus dolar IC untuk proyek hobi. Perangkat keras apa yang akan Anda rekomendasikan? Apakah ada peringatan yang tidak jelas yang harus saya waspadai?

Pendekatan yang saya peroleh dari jawaban sampai sekarang adalah untuk memberi daya pada masing-masing kolom secara terpisah, kemudian membacakan baris dengan 5 ADC 16-saluran (ADS7961) yang terhubung ke Arduino melalui SPI. Saya khawatir ini mungkin bukan pendekatan termudah / termurah atau tidak cukup cepat untuk mencapai tingkat> 1 kHz.

Penafian: Saya biasanya seorang ahli kimia teoritis dan amatir yang buruk dalam hal teknik elektro, semua yang saya tahu adalah otodidak dan tanpa latar belakang profesional (yang pada gilirannya menjadi alasan saya mencari bantuan dari orang yang lebih berpengetahuan). Saya tahu jalan saya di sekitar perangkat lunak. Apapun tentang perangkat lunak, saya akan mencari tahu dengan waktu yang cukup. Juga, saya orang Jerman, jadi mohon maafkan kesalahan tata bahasa sesekali.

beri tahu
sumber
hanya sebuah ide .... mungkin ada peningkatan kecepatan jika muxes disisipkan .... mux0 akan memindai fret 0,8,16,24, dll ... mux1 - 1,9,17,25 ... hingga mux7 (atau lebih tinggi) ... dengan cara itu 8 fret pertama dibaca pada saat yang sama oleh 8 mux ... kemudian 8 fret berikutnya ... dll.
jsotola
2
Istilah 'waktu sebenarnya' mungkin tidak tepat. Ini berarti bahwa data meninggalkan sistem pada tingkat yang sama dengan yang dimasukinya (Satu sampel masuk, satu sampel keluar). Tapi itu tidak mengatakan apa-apa tentang latensi - waktu yang diperlukan untuk memprosesnya. Untuk penggunaan musik, Anda perlu latensi keseluruhan (termasuk waktu untuk mensintesis / memutar ulang suara akhir) menjadi kurang dari 10-15 ms, lebih disukai kurang dari 5.
Schizomorph
Apa variasi dalam tahanan antara ditekan dan tidak ditekan?
Trevor_G
antara 10 dan 1000 ohm (kurang-lebih)
d.oelert
Persyaratannya agak tercampur dengan implementasi yang diusulkan. Anda mungkin sudah menjawab pertanyaan-pertanyaan ini. Apakah pemain dapat melakukan slide, sehingga instrumen harus mampu mendeteksi berbagai posisi antara fret yang berdekatan? Apakah Anda perlu dapat mendukung instrumen tanpa fret, atau dapatkah fret menjadi bagian dari solusi?
Wayne Conrad

Jawaban:

7

Tergantung pada kisaran harga Anda, Anda mungkin ingin mempertimbangkan untuk menggunakan FPGA antara Raspberry Pi dan ADC Anda, seperti DE0-Nano Board , yang memiliki dukungan yang baik sebagai papan pengantar FPGA pengantar. Solusi ini memiliki keuntungan memungkinkan Anda untuk menulis kode yang akan mencatat banyak / banyak ADC pada saat yang sama dan memformat data Anda dengan cara yang dapat ditampilkan pada Raspberry Pi.

Anda menyebutkan bahwa Anda mempertimbangkan MCP3008. Chip ini adalah SPI, jadi Anda bisa menghubungkan beberapa perangkat bersamaan di bus yang sama dengan pin CS yang berbeda. Misalkan Anda menghubungkan tiga chip ke bus, sehingga memberi Anda 24 saluran ADC per 6 pin (tiga jalur data dan tiga jalur CS). Ini berarti 240 saluran untuk 60 pin, yang dengan mudah dalam kemampuan FPGA.

Jika Anda menjalankan garis jam MCP3008 pada frekuensi maksimum 2MHz, itu akan membutuhkan (15 jam / saluran) * (8 saluran / chip) * (3 chip / bus) * (1/2000000 detik / jam) = 0,18 ms untuk baca semua 240 sensor, sesuai dengan laju sampel 5,56 kHz.

Billy Kalfus
sumber
Kedengarannya seperti pendekatan yang sangat keren! Saya pasti akan melihatnya. saya tidak punya pengalaman dengan FPGA, jadi ini mungkin terlalu banyak bagi saya untuk ditangani ... di sisi lain saya selalu mencari-cari alasan untuk masuk ke FPGA ...
d.oelert
Anda dapat menggunakan chip ARM dengan beberapa saluran SPI. Dengan begitu Anda menghindari biaya FPGA dan mendapatkan tiga kali lipat laju sampel (jika Anda memiliki 3 pengontrol SPI). Ingatlah bahwa Anda harus mengelola penundaan karena pemrosesan internal (memindahkan bacaan di dalam MCU ke suatu tempat yang bisa didapatkan Pi) dan komunikasi MCU-> Pi.
Ronan Paixão
Omong-omong, PI juga memiliki pengontrol SPI.
Ronan Paixão
Gagasan di balik FPGA adalah bahwa Anda dapat membuat, katakanlah, 10 pengontrol SPI yang terpisah (menggunakan nomor dari contoh yang saya berikan) dan dengan mudah mengoperasikannya sejajar sempurna. Dan ya, Pi memiliki pengontrol SPI tetapi tidak ada yang dekat secepat atau sejajar dengan FPGA akan memungkinkan seseorang untuk membuat.
Billy Kalfus
Jika Anda dapat menemukan FPGA atau CPLD dengan input yang tidak dibuat-buat, Anda bahkan mungkin dapat membuat MUX analog 80: 1. Ini kemungkinan besar, tetapi mungkin berhasil.
Caleb Reister
10

Jawaban yang jelas adalah muxing, ini berarti Anda membuat jalur listrik secara dinamis. Jadi cukup lakukan iterasi melalui seluruh matriks, satu per satu, atau input ADC (Analog to Digital Converter) sebanyak yang Anda miliki.

Jika Anda mendapatkan 3 ADC maka Anda dapat membaca satu baris sekaligus, kemudian Anda mengubah input menjadi mux dan voilla, Anda sekarang membaca baris kedua, dan kemudian Anda melanjutkan. Masalah dengan pengaturan ini adalah Anda mendapat 80 baris, dan tidak ada 80: 1 (delapan puluh input ke satu input) mux yang saya ketahui. Tetapi ada 16: 1 muxes yang dapat Anda kumpulkan untuk mendapatkan 16 * 5 = 80 input.

Akan terlihat seperti ini:

row  0-15 [16:1 mux]____________ 5 inputs in [8:1 mux]-ADC
row 16-31 [16:1 mux]_| | | |
row 32-47 [16:1 mux]___| | |
row 48-63 [16:1 mux]_____| |
row 64-79 [16:1 mux]_______|

4 sinyal input ke muxes 16: 1 dapat dihubungkan bersama.

Jadi pada akhirnya Anda memiliki byte dengan sinyal kontrol dalam pola ini:

Grouped up:
0, 3 bits for the 8:1 mux, 4 bits for the 16:1 mux

Bit for bit:
0,8:1 MSB, 8:1 LSB+1, 8:1 LSB, 16:1 MSB, 16:1 LSB+3, 16:1 LSB+2, 16:1 LSB+1, 16:1 LSB

Ini berarti bahwa Anda akan membutuhkan 5 × 16: 1 muxes dan satu 8: 1 mux = 6 IC,

Lipat gandakan dengan 3 karena Anda mungkin ingin membaca satu baris sekaligus.

Ini berarti bahwa Anda akan memiliki 18 IC, 7 sinyal kontrol. Anda dapat mengurangi jumlah IC jika Anda ingin menambah jumlah input analog. Ini 18 dengan hanya 3 input analog.

Jika Anda menggunakan 240/16 = 15 IC's, maka Anda mendapatkan 15 output analog dari 15x16: 1 muxes. Maka Anda bisa mencairkannya dengan mux 16: 1, atau 16: 8 mux. Pada akhirnya itu akan menjadi 16 IC jika Anda akan "mengoptimalkannya" dengan muxes 16: 1. Tapi ini berarti bahwa solusi perangkat lunak Anda tidak akan ... elegan seperti di atas, itu akan merambah dan modulus dan hal-hal lain, tapi hei, Anda menghemat 2 IC.

10.8ms=1.25kHz

Itu mungkin, tapi itu bukan desain yang bagus.

Mari kita selesaikan ini dengan cara lain ... lebih banyak ruang dan uang efisien.

* 20 menit kemudian * Hmmm ... semua solusi yang saya buat terlalu sulit untuk diatur dan / atau memerlukan beberapa kalibrasi lanjutan ...

Oh well, kalau begitu saya berasumsi bahwa desain Anda sesuai untuk tugas Anda.

Semoga berhasil.


Saya ingin tahu apa solusi lain itu. Mau berbagi? - pandalion98

OP ingin mengukur posisi dan tekanan. Itu dua parameter. Ini berarti bahwa kita perlu mengemas informasi itu di dalam sinyal tegangan sehingga kita dapat membacanya dan menguraikannya. Atau kita perlu mengemasnya ke unit lain, seperti ohm, induktansi, kapasitansi.

Inilah beberapa ide saya, di mana saya hanya memikirkan satu kolom. Cukup gandakan ide dengan 3 dan Anda memiliki seluruh solusi untuk gitar 3 kolom.

Ide pertama:

Gunakan dua kabel paralel (resistansi rendah) dari bagian bawah gitar ke leher gitar. Hubungkan ground ke salah satu kabel di bagian bawah gitar. Buat sistem pengukur LR dan ukur induktansi dan resistansi dari kawat lain, juga di bagian bawah.

Saat Anda menyentuh kedua kabel dengan jari, Anda akan menghubungkan kedua kabel dan akan ada beberapa induktansi di sini. Semakin jauh gitar yang Anda sentuh, semakin lama rangkaiannya, dan semakin banyak induktansi yang akan Anda ukur. Semakin keras Anda menekan, semakin banyak area permukaan antara dua kabel dan semakin sedikit resistannya.

Itu tidak harus dua "kabel", bisa dua kaset konduktif, atau sesuatu yang lain.

Mengapa saya tidak membagikan ini sebelumnya: Agar ini dapat diandalkan, Anda perlu mengkalibrasi sensor untuk setiap individu karena setiap orang memiliki jumlah resistensi yang berbeda di kulit mereka. Setiap kali Anda bermain, Anda akan berkeringat dan karenanya mengurangi resistensi lebih lanjut, jadi Anda harus mengimbanginya. Semua orang berkeringat jauh berbeda, jadi ini juga harus dikalibrasi per orang.

Jadi induktansi => posisi jari. Resistance => seberapa keras Anda menekan.

Penyimpangan nilai-nilai yang akan Anda ukur adalah dalam nano Ω dan nano H, ini berarti Anda akan membutuhkan pengetahuan yang benar tentang CMRR dan SNR. Kalau tidak semua yang Anda lihat akan menjadi tegangan listrik, dengan asumsi ini akan dilakukan di dalam ruangan. Atau beberapa frekuensi lain dari wifi atau lampu atau sumber kebisingan lainnya. Jadi mungkin filter digital yang tepat akan dibutuhkan. Dan ... itu mungkin sudah di luar lingkup kemampuan OP dan upaya mental yang dapat diterima. Jadi ide ini dibuang.

Ide kedua:

Buat permukaan konduktif yang datar pada gitar yang terhubung ke tanah.

Gunakan satu kabel, atau selotip konduktif atau hanya konduktor rata. Letakkan beberapa cat non-konduktif di atasnya, atau beberapa pita non-konduktif biasa di atasnya.

Ikatkan tali itu di gitar dari bawah ke leher gitar. Hubungkan kabel di bagian bawah gitar ke frekuensi tinggi, dalam kisaran ratusan MHz. Sekarang Anda akan mulai mendapatkan refleksi yang nyata. Karena Anda secara teknis mendapat .... saluran transmisi buruk di mana hanya satu sisi yang terlindung.

Jadi, Anda akan mengirimkan beberapa gelombang pulsa persegi pendek dan mengukur berapa lama waktu yang diperlukan untuk kembali karena pantulan jari Anda berada di atas kabel berinsulasi. Dan kemudian Anda mengukur amplitudo lonjakan yang dipantulkan di bagian bawah gitar. Jadi waktu perjalanan => posisi jari. Amplitudo refleksi => seberapa keras Anda menekan.

Ini bukan hal termudah untuk diatur ... jika Anda tidak tahu apa yang Anda lakukan. Jadi sekali lagi, ini mungkin terlalu banyak upaya bagi OP untuk menangani. Jadi ide ini dibuang.


Akan terlihat seperti ini:

masukkan deskripsi gambar di sini

Saya mengasumsikan impedansi karakteristik 150 Ω, dengan kata lain saluran transmisi sangat buruk. Pada kenyataannya mungkin lebih buruk, saya tidak tahu saya belum pernah melakukan ini.

Inilah tautan jika seseorang ingin dipusingkan.

Salah satu bagian tersulit adalah mencocokkan titik akhir dengan beberapa hambatan, untuk ini Anda mungkin memerlukan osiloskop atau instrumen mahal lainnya.

Bagian sulit lainnya adalah untuk benar-benar mengukur TOF (Waktu penerbangan), ada beberapa IC di luar sana, tetapi mereka tidak murah .. tetapi Anda selalu dapat membuat sumber arus konstan dan mengisi kapasitor kecil dan kemudian hanya baca tegangannya.

Idenya di sini adalah bahwa ketika jari mendekati kawat, jari Anda akan menjadi bagian dari rangkaian dan bertindak sebagai kapasitor. Semakin dekat jari Anda, semakin kapasitif. Inilah sebabnya mengapa resistensi di titik jari akan turun.

https://en.wikipedia.org/wiki/Transmission_line gulirkan sedikit ke bawah dan Anda akan melihat bahwa parameter kapasitif adalah bagian dari penyebut.

Setiap kali titik pada kabel tidak cocok, maka akan ada refleksi, dan Anda dapat membaca ini di "output" di mana sinyal Anda berasal. Jika tidak ada pantulan di mana pun maka sinyal Anda akan berakhir di salah satu titik akhir.

Semakin keras Anda menekan ke bawah, semakin banyak area jari Anda akan mendatar => semakin banyak kapasitansi akibat area. Juga, bahan non-konduktif apa pun yang Anda dapatkan di antara kawat dan jari Anda akan ditekan sedikit untuk meningkatkan kapasitansi lebih lanjut.

Ide ketiga:

Tempelkan theremin di dalam gitar dan ukur frekuensi dan amplitudo. Saya tidak tahu persis apa yang akan dihasilkan oleh theremin, tetapi pasti sesuatu dapat digunakan.

Pada titik ini saya kehabisan ide dan mengatakan bahwa saya telah menghabiskan 20 menit. Padahal kenyataannya aku mungkin menghabiskan 10. Oh well. Sekarang saya pasti menghabiskan 10 menit untuk menulis ini, jadi semuanya bertambah.

Harry Svensson
sumber
1
Saya merasa seperti debugging yang terlibat dalam menghubungkan 15 IC hingga 3 set 80 sensor mungkin ... signifikan. Juga, pasti benda ini tidak akan pernah cukup kuat untuk digunakan, karena ratusan kabel tergantung dari sensor array.
BeB00
Saya pikir ini sebenarnya cukup layak, dan jika dilakukan dengan benar mengurangi jumlah kabel yang seharusnya diperlukan.
pjc50
Saya bertanya-tanya apa solusi lain itu. Mau berbagi?
PNDA
1
@ pandalion98 Hmmm ... mungkin ide kedua bukanlah ide yang buruk. Baiklah.
Harry Svensson
6

Tiga ide:

1. Lakukan multiplexing di sisi persediaan

Secara efektif, rangkaian yang telah Anda gambarkan adalah sejumlah besar hambatan variabel yang masing-masing memiliki satu ujung yang sama dengan tegangan pasokan. Anda ingin membaca semua nilai resistansi dan balasan lainnya sejauh ini sebagian besar telah menyarankan pendekatan untuk multiplexing sinyal di sisi analog.

Tetapi Anda juga bisa melakukan beberapa atau semua multiplexing ini di sisi pasokan , dengan membagi rel 'pasokan' menjadi n bagian. Hubungkan bersama set n bantalan sensor yang masing-masing memiliki rel pasokan yang berbeda. Sekarang berikan energi hanya satu rel pasokan pada satu waktu dan gunakan satu input ADC untuk membaca setiap set bantalan. (Beginilah cara sirkuit yang membaca papan ketik komputer biasanya bekerja, dan cara sakelar-sakelar kabel sering disebut sebagai 'crosspoint switch'.) Pada akhirnya Anda hanya bisa menggunakan satu ADC tunggal, terhubung ke semua 'rel', dan melakukan semua multiplexing dengan menghubungkan daya ke setiap pad secara bergantian.

Satu-satunya tangkapan adalah bahwa semua bantalan lain perlu diisolasi dari power rail, tidak terhubung ke ground yang akan terjadi jika Anda hanya menggunakan output digital untuk masing-masing. Ada beberapa cara Anda bisa menyelesaikan ini termasuk kabel setiap pad melalui dioda, transistor bipolar atau FET, atau - Saya tidak tahu seberapa cepat ini dapat dilakukan dalam prakteknya tetapi mungkin pada prinsipnya - menggunakan pin input-output dari sebuah mikrokontroler dan mengaturnya baik untuk output tinggi atau menjadi input, padahal seharusnya memiliki impedansi yang relatif tinggi.

Keakuratan mengukur sensor Anda dengan teknik ini mungkin tidak sempurna dibandingkan dengan menggunakan sumber tegangan tetap tunggal dan multiplexer analog berkualitas tinggi, tapi saya menduga itu akan cukup baik terutama karena saya yakin sensor tekanan akan memiliki beberapa toleransi pada resistensi mereka - Anda mungkin perlu mengkalibrasi ini untuk setiap sensor menggunakan kekuatan referensi.

2. Gunakan beberapa mikrokontroler dengan banyak input ADC

Misalnya, PICAXE 40X2 memiliki 27 pin yang dapat digunakan sebagai analog, sehingga Anda dapat memenuhi kebutuhan Anda dengan 9 pin. Ini diprogram dalam bahasa BASIC sederhana dan dapat bertindak sebagai budak i2c - sehingga Anda dapat membaca 9 chip dengan satu mikrokontroler lebih lanjut - atau Anda mungkin bisa mengirim output dari setiap chip sebagai data serial dan membacanya di komputer host melalui konverter serial-ke-USB. Saya tidak bisa menjanjikan dengan tepat seberapa cepat itu akan berjalan, tetapi saya pikir itu harus bekerja dengan baik jika Anda clock PICAXE pada kecepatan maksimum (64 MHz, menggunakan resonator eksternal 16 MHz). Tentu saja jika Anda senang dengan pemrograman mikrokontroler di C maka Anda dapat melakukan hal yang sama dengan PIC18F45K22 yang menjadi dasar PICAXE.

3. Gunakan unit input analog yang tidak tersedia

Akhirnya, jika Anda tidak keberatan menghabiskan uang untuk menghemat waktu, dan portabilitas bukanlah prioritas tinggi - misalnya, jika tidak apa-apa jika instrumen ditambatkan ke rak peralatan oleh beberapa kabel tebal - Anda bisa membeli cukup tinggi- saluran-menghitung perangkat input analog untuk mengukur semua sensor sekaligus. Misalnya Pengukuran Komputasi USB-2633 membaca 64 input analog dengan harga sedikit di atas US $ 1k.

tidak otomatis
sumber
4

Mungkin patut dipertimbangkan pengkondisian sinyal brute force (mungkin pasif) diikuti oleh ADC kecil atau MCU / ADC dengan masing-masing 16 atau lebih input ADC MUX. Itu hanya 40 chip. Salah satu contoh chip yang mungkin berfungsi adalah ADS7961QDBTRQ1 , yang memiliki mode saluran kenaikan otomatis dan 16 input.

Kecepatan data keseluruhan bahkan pada laju sampel 4kHz dan 240 bit per sampel adalah sekitar 1MB / s, yang tidak terlalu menakutkan. Mungkin master CPU dengan bus 10MHz atau 20MHz SPI berkomunikasi dengan para budak. Gunakan 2 bus SPI jika bandwidth tidak ada. Bagian yang disebutkan di atas bekerja pada 20MHz sehingga SPI tunggal akan dilakukan.

Atau mungkin Anda dapat menggunakan chip TI tunggal - DDC2256AZZF , yang memiliki 64-channel sampling simultan dan 256 input .. tapi itu tidak terlalu murah (sekitar $ 350 USD) dan datang dalam array LFBA 14x14mm 323-pin sehingga tidak akan bekerja dengan papan tempat memotong roti plugboard putih.

Spehro Pefhany
sumber
3

Untuk aplikasi antarmuka manusia waktu nyata, laju sampel keseluruhan multi-khz tampak tinggi. 50Hz mungkin cukup ( https://en.wikipedia.org/wiki/Input_lag#Typical_overall_response_times ). Ini berarti Anda harus mengambil sampel semua sensor dalam <20ms, jadi 80us per sensor. Ini tidak terlalu sulit, dan pada dasarnya dapat dikelola oleh semua mikrokontroler normal 8 bit (yaitu Atmega88 dapat melakukannya di <30us).

Anda mungkin juga mengukur semua interaksi dan kemudian membuang yang tidak Anda butuhkan, mengingat mengukur semuanya tidak secara teknologi sulit. Masalahnya berasal dari multiplexing. Saya agak bingung pada posting Anda, karena dikatakan bahwa sensor bertenaga 80 sekaligus? Hal yang biasa dilakukan adalah, seperti yang Anda katakan, kolom dan baris multipleks. Jika Anda tidak melakukan itu, Anda harus berurusan dengan> 80 kabel yang keluar dari perangkat Anda, yang sebenarnya bukan ide yang bagus. Anda perlu menemukan cara untuk membaginya menjadi sebuah matriks, sehingga Anda mendapatkan 30 kabel (yang masih banyak). Anda kemudian dapat multiplex mereka dll, tetapi jika saya jadi Anda saya hanya akan memiliki beberapa mikrokontroler dan meminta mereka terhubung ke master. Anda dapat menggunakan ADC khusus alih-alih MCU budak, tetapi saya pribadi akan tetap menggunakan MCU.

Anda telah mengidentifikasi dengan benar bahwa komunikasi mungkin menjadi masalah, tetapi ini bukan masalah besar, setidaknya di antara MCU. Atmega pada 8MHz dapat melakukan SPI pada 2MHz, jadi mengirim semua data sensor akan memakan waktu <1ms. Pertanyaannya kemudian adalah apa yang ingin Anda lakukan dengan data ini setelah MCU master memilikinya.

BeB00
sumber
2
Ketika bereaksi terhadap input tunggal 50 Hz biasanya dianggap "cukup" dalam istilah GUI umum, tetapi dari pengalaman saya sendiri dengan kartu suara, memainkan musik dengan latensi 200 ms bukanlah pengalaman yang menyenangkan sama sekali (pikirkan gangguan bicara). Saya membayangkan bahwa latensi 0-200 ms variabel akan membuat instrumen hampir tidak dapat dimainkan, karena setiap rasa ritme pasti akan mati terbunuh. Frekuensi polling sekitar satu kHz akan menjadi titik awal minimum yang baik, metode.
Dampmaskin
1
@Dampmaskin 50 Hz = 20 ms, bukan 200 ms. 20ms mungkin lebih masuk akal
Steven Waterman
1
Salahku. 20 ms mungkin dapat digunakan jika 20 ms konsinsen, tetapi latensi yang lebih rendah selalu lebih baik. Lagipula akan ada lebih banyak latensi dalam rantai sinyal.
Dampmaskin
@ Dampmaskin itulah masalah yang saya lihat dengan pendekatan yang dijelaskan. saya perlu "menyimpan" latensi sebanyak mungkin untuk komponen-komponen selanjutnya dalam rantai, karena saya mencoba untuk menghubungkan raspberry pi synth dan idealnya saya ingin tetap di bawah 15-20ms total latensi. Jika pengontrol sudah memakan waktu 20 ms, tidak ada ruang kepala tersisa.
d.oelert
@StevenLowes 20ms terlalu lama bagi kebanyakan musisi. Itu bahkan di luar jarak Haas untuk beberapa suara. Secara pribadi saya tidak bisa menangani latensi lebih dari 10 ms dan saya tahu seorang pianis yang tidak bisa mematuhi latensi 6 ms.
Todd Wilcox
3

Metode paling sederhana Anda mungkin adalah membangun semuanya di sirkuit-flex panjang dengan rantai 10 seri kolektor terbuka delapan-bit ke register paralel yang didistribusikan di bawah flex untuk memberi daya pada setiap kolom bantalan secara individual.

Anda dapat menggunakannya untuk menggerakkan setiap kolom di semua baris secara bersamaan dan mengalikan jalur pengembalian umum ke ADC Anda. Garis balik akan memerlukan pull-up yang sesuai sehingga Anda mendapatkan tegangan pembagi resistor dengan tombol resistensi.

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Mikro pengendali kemudian akan mengirim bit nol menghanguskan rantai register sehingga hanya satu kolom didukung sebagai waktu. Koneksi yang tersisa akan mengambang.

Trevor_G
sumber
1

cara yang jelas untuk melakukan ini (mengingat Anda hanya perlu melihat satu sentuhan pada setiap string) adalah menghubungkan fret ke pembagi tegangan dan kemudian mengukur tegangan pada setiap string

yang akan memberi tahu Anda menyentuh lokasi.

untuk mendapatkan tekanan sentuh, letakkan kapasitor dari ground ke setiap fret dan ukur hambatan AC pada setiap string.

sisi negatif dari pendekatan ini adalah senar akan merespons sentuhan yang lebih tinggi

Jasen
sumber
2
maaf jika Anda salah paham tetapi tidak ada leher gitar yang sebenarnya dan tidak ada dawai juga. itu hanya papan kayu dengan matriks sensor tekanan di bagian atas, yang mengemulasi gaya bermain yang akan Anda gunakan pada papan nyata fretted. Terima kasih atas masukannya, saya mungkin mengingatnya untuk proyek-proyek di masa depan!
d.oelert
dengan fret dan string di atas Maksudku strip tembaga yang Anda sebutkan dalam pertanyaan Anda,
Jasen
ah saya mengerti maksud Anda sekarang, maaf itu padat. pendekatan ini mungkin pecah, ketika not dimainkan dengan legato, karena dengan demikian akan ada beberapa sentuhan pada string yang sama. hanya yang terendah sekalipun
d.oelert
juga sementara saya benar-benar menyukai pendekatan Anda, ini tidak menjawab pertanyaan awal saya, yang bagaimana seseorang biasanya akan berurusan dengan sejumlah besar sensor analog, yang perlu diproses secara real-time.
d.oelert
kamera memiliki sejumlah besar sensor analog ...
Jasen
0

Jika Anda bisa mendapatkan kawat yang memiliki resistansi seragam yang cukup per inci yang berkisar antara 100 ohm dan 100K untuk panjang gitar, Anda mungkin dapat dengan mudah membuat leher dari bahan yang konduktif sedang, dengan resistansi permukaan yang menurun dengan tekanan, dan kemudian mengukur resistansi antara leher dan setiap ujung dari setiap string. Jumlah resistansi, dikurangi resistansi string, akan menunjukkan resistansi dua kali lipat dari titik kontak. Setelah mengurangi resistansi titik kontak dari setiap resistansi yang diukur, rasio resistansi yang tersisa akan menunjukkan titik kontak di leher.

Perhatikan bahwa pendekatan ini akan dapat mendeteksi penekanan simultan pada ketiga string, tetapi tidak akan berfungsi jika string dapat ditekan di beberapa tempat. Pada gitar, desain seperti itu akan menghalangi penggunaan tali batang - batasan yang cukup parah - tetapi instrumen lain mungkin tidak memerlukan senar sentuh di banyak titik.

supercat
sumber
" Jika Anda bisa mendapatkan beberapa kawat yang memiliki resistansi yang cukup seragam per inci yang berkisar antara 100 ohm dan 100K untuk panjang gitar " - Saya ragu bahwa ia dapat menemukan jenis kawat itu.
Harry Svensson
Saya tidak setuju; Saya memiliki kawat resistansi di kantor saya yaitu 1717 ohm / m, sehingga seharusnya tidak sulit ditemukan sama sekali. Saya tidak mengatakan itu mudah untuk dikerjakan, mengingat ini adalah kabel Ø50 µm, tetapi tidak sulit untuk didapatkan.
MrGerber
@ McGerber: Saya lupa bahwa resistansi kawat nichrome jauh lebih rendah pada suhu yang lebih dingin daripada suhu yang lebih hangat, jadi mungkin akan lebih baik untuk mengubah sirkuit untuk mengerjakan sesuatu yang mendekati 10 ohm, tetapi konsep dasarnya dapat digunakan. Atau, memiliki leher menjadi bahan yang konduktif lemah dan memiliki ikatan membuat sambungan ke yang juga bisa berfungsi.
supercat
Ini bukan NiCr, tetapi FeCrAl, dan resistansi tidak terlalu banyak berubah pada suhu. Tipe yang saya miliki berubah sekitar 8% dari 100 C menjadi 1300 C. Ref: Kanthal D (Dan tidak, saya tidak membuat E-cigs.)
MrGerber
@ Mr.Gerber: Oke, itu tidak buruk. Menanggapi komentar sebelumnya saya telah melihat beberapa tabel dan melihat resistensi yang meningkat dengan urutan besarnya dengan suhu.
supercat
0

Saya melihat posting ini dan saya berpikir, mungkin saja dengan satu chip. Saya akan menyarankan Anda mengambil semacam papan mikrokontroler, seperti papan bluepill murah. Ini memiliki ARM M3, dengan 10 saluran ADC gratis untuk digunakan. Jika Anda menempatkan kolom dalam 3 kelompok 3 string, sambungkan ke 9 saluran ADC gratis. Gunakan 21 pin lainnya untuk mengganti baris pin, dengan total 63 'fret'. koneksi matrix, resistor adalah sel-sel velostat, drive gpio di 3.3v atau dalam mode input, pin ADC mengukur penurunan tegangan melintasi sel velostat Mikrokontroler memiliki dua 1 Msps 12 bit ADC yang dapat digunakan dengan fase penundaan untuk mendukung 2Msps, yang harus banyak untuk tidak pernah melewatkan palu atau melihat modulasi apa pun. Saya pikir Anda dapat menggunakan koneksi USB dan menjadikannya berfungsi seperti pengontrol midi USB. Anda dapat menggunakan mikrokontroler yang lebih besar untuk input lebih banyak, tetapi saya tidak melihat bagaimana Anda akan mengatur spasi 'fret' dengan lebih dari 30 fret, atau apakah akan lebih seperti layar sentuh?

Saya tidak tahu persis bagaimana lembar-lembar velostat itu bekerja, tetapi tidak bisakah Anda menempatkan seperti titik-titik terminasi kecil di bagian bawah lembaran yang lebih besar dan menghubungkan lokasi dan tekanan jari dengan tegangan pada banyak titik? Maka Anda mungkin bisa pergi dengan jauh lebih sedikit merasakan, dan mendukung hal-hal seperti tikungan dan vibrato.

Getah ayam
sumber